projects
/
quanlib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Stores book metadata to PostgreSQL database.
[quanlib.git]
/
book.rb
diff --git
a/book.rb
b/book.rb
index 3cf513957c0a2cc4173266857c95952b8cc0bb14..d7a2a26e24d27d6d99cc3df50acb1d75818b6397 100644
(file)
--- 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)
@@DC_NS_URL = 'http://purl.org/dc/elements/1.1/'
def initialize(fileName)
+ #puts 'InitBook(' + fileName + ')'
@author = nil
@cover = nil
@description = nil
@author = nil
@cover = nil
@description = nil
@@
-35,6
+36,10
@@
class Book
return false
end
return false
end
+ def author
+ return @author
+ end
+
def cover
return @cover
end
def cover
return @cover
end
@@
-72,7
+77,7
@@
class Book
def inspect
data = []
if nil != @author
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 + '"')
end
if nil != @series
data.push('series="' + @series + '"')
@@
-96,30
+101,42
@@
class Book
@path
end
@path
end
+ def series
+ @series
+ end
+
def to_s
return inspect()
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
protected
def isUpper?(c)
return /[[:upper:]]/.match(c)
end
protected
- def massage
A
uthor(input)
+ def massage
_a
uthor(input)
if nil == input
return nil
end
if nil == input
return nil
end
- re
sult
= ""
+ re
ading_order
= ""
input.each_char do |c|
input.each_char do |c|
- if isUpper?(c) and (re
sult
.length > 0)
- re
sult
+= " "
-
end
- re
sult
+= c
+ if isUpper?(c) and (re
ading_order
.length > 0)
+ re
ading_order
+= " "
+ end
+ re
ading_order
+= c
end
end
-
- return re
sult
+
+ return re
ading_order
end
# Returns (series, volumeNo, titleText)
end
# Returns (series, volumeNo, titleText)
@@
-158,7
+175,10
@@
class Book
parts = fileName.split('/')
(@series, @volume, @title) = processTitle(parts[-1])
if parts.length > 1
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")
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
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')
return
end
contXml = zipfile.read('META-INF/container.xml')
@@
-198,22
+219,25
@@
class Book
#-------
# Author
#-------
# 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
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
end
end
+
+ @author = Author.new(grouping, reading_order, sort_order)
end
end
end
end
@@
-253,6
+277,7
@@
class Book
@volume = content
elsif 'cover' == name
coverId = content
@volume = content
elsif 'cover' == name
coverId = content
+ #puts 'File ' + @path + ' coverId ' + coverId
end
end
end
end