@@DC_NS_URL = 'http://purl.org/dc/elements/1.1/'
def initialize(fileName)
+ #puts 'InitBook(' + fileName + ')'
@author = nil
@cover = nil
@description = nil
return false
end
+ def author
+ return @author
+ end
+
def cover
return @cover
end
def inspect
data = []
if nil != @author
- data.push('author="' + @author.to_s + '"')
+ data.push('author="' + @author.inspect + '"')
end
if nil != @series
data.push('series="' + @series + '"')
@path
end
+ def series
+ @series
+ end
+
def to_s
return inspect()
end
+ def title
+ @title
+ end
+
+ def volume
+ @volume
+ end
+
protected
def isUpper?(c)
return /[[:upper:]]/.match(c)
end
protected
- def massageAuthor(input)
+ def massage_author(input)
if nil == input
return nil
end
- result = ""
+ reading_order = ""
input.each_char do |c|
- if isUpper?(c) and (result.length > 0)
- result += " "
- end
- result += c
+ if isUpper?(c) and (reading_order.length > 0)
+ reading_order += " "
+ end
+ reading_order += c
end
-
- return result
+
+ return reading_order
end
# Returns (series, volumeNo, titleText)
parts = fileName.split('/')
(@series, @volume, @title) = processTitle(parts[-1])
if parts.length > 1
- @author = massageAuthor(parts[-2])
+ grouping = parts[-2]
+ reading_order = massage_author(grouping)
+ sort_order = nil
+ @author = Author.new(grouping, reading_order, sort_order)
end
if fileName.downcase.end_with?(".epub")
Zip::File.open(fileName) do |zipfile|
entry = zipfile.find_entry('META-INF/container.xml')
if nil == entry
+ puts 'No META-INF/container.xml, skipping book ' + fileName
return
end
contXml = zipfile.read('META-INF/container.xml')
#-------
# Author
+ grouping = @author.grouping
+ reading_order = @author.reading_order
+ sort_order = @author.sort_order
+
creators = opfDoc.css('dc|creator', 'dc' => @@DC_NS_URL)
if (creators.length > 0)
creator = creators[0]
if nil != creator
role = creator['opf:role']
if 'aut' == role
- name = creator.content
- parts = name.split(' ')
- if parts.length > 1
- surname = parts[-1]
- givenNames = parts[0..-2].join(' ')
- @author = Author.new(surname, givenNames)
- else
- @author = Author.new(name, '')
+ reading_order = creator.content
+
+ file_as = creator['opf:file-as']
+ if nil != file_as
+ sort_order = file_as
end
end
+
+ @author = Author.new(grouping, reading_order, sort_order)
end
end
@volume = content
elsif 'cover' == name
coverId = content
+ #puts 'File ' + @path + ' coverId ' + coverId
end
end