X-Git-Url: http://jaekl.net/gitweb/?p=quanlib.git;a=blobdiff_plain;f=book.rb;h=d7a2a26e24d27d6d99cc3df50acb1d75818b6397;hp=3cf513957c0a2cc4173266857c95952b8cc0bb14;hb=291671015d4e88cbb7e7f3995109a88ee993aac6;hpb=b0ed11b1a03aab548e3c274dfd89732e8e11892f diff --git a/book.rb b/book.rb index 3cf5139..d7a2a26 100644 --- a/book.rb +++ b/book.rb @@ -9,6 +9,7 @@ class Book @@DC_NS_URL = 'http://purl.org/dc/elements/1.1/' def initialize(fileName) + #puts 'InitBook(' + fileName + ')' @author = nil @cover = nil @description = nil @@ -35,6 +36,10 @@ class Book return false end + def author + return @author + end + def cover return @cover end @@ -72,7 +77,7 @@ class Book 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 + '"') @@ -96,30 +101,42 @@ class Book @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) @@ -158,7 +175,10 @@ class Book 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") @@ -173,6 +193,7 @@ class Book 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') @@ -198,22 +219,25 @@ class Book #------- # 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 @@ -253,6 +277,7 @@ class Book @volume = content elsif 'cover' == name coverId = content + #puts 'File ' + @path + ' coverId ' + coverId end end