From a44bbf20b1f06c938ae0579a7771005995273c0c Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Tue, 26 Jul 2011 20:12:52 -0400 Subject: v3: epub, opf fixes --- data/doc/sisu/CHANGELOG_v3 | 2 + lib/sisu/v3/epub_format.rb | 90 +++++++++++++++++++++++++++++++++++++++----- lib/sisu/v3/epub_segments.rb | 6 ++- 3 files changed, 87 insertions(+), 11 deletions(-) diff --git a/data/doc/sisu/CHANGELOG_v3 b/data/doc/sisu/CHANGELOG_v3 index e873047e..00f62e6a 100644 --- a/data/doc/sisu/CHANGELOG_v3 +++ b/data/doc/sisu/CHANGELOG_v3 @@ -20,6 +20,8 @@ http://www.jus.uio.no/sisu/pkg/src/sisu_3.0.14.orig.tar.gz sisu_3.0.14-1.dsc sisu_3.0.14-1.debian.tar.gz + * epub, opf fixes + * sysenv, avoid creation of spurious directories in output tree (an image copy section removed, re-implement correctly later) diff --git a/lib/sisu/v3/epub_format.rb b/lib/sisu/v3/epub_format.rb index e75ad112..9f169f5e 100644 --- a/lib/sisu/v3/epub_format.rb +++ b/lib/sisu/v3/epub_format.rb @@ -1037,16 +1037,90 @@ WOK def metadata #metadata dc author=if defined? @md.creator.author \ and @md.creator.author =~/\S+/ - x=@md.creator.author.gsub!(//,'>') - @md.creator.author.gsub!(/<br(?: \/)?>/,'
') - %{\n #{x}} + m='' + @md.creator.author_detail.each do |x| + surname=x[:the] \ + ? x[:the] \ + : '' + other_names=x[:others] \ + ? ', ' + x[:others] \ + : '' + m=(m.empty?) \ + ? (surname + other_names) \ + : (m + '; ' + surname + ', ' + other_names) + m.gsub!(//,'>') + m.gsub!(/<br(?: \/)?>/,';') + end + x=@md.creator.author.dup + x.gsub!(//,'>') + x.gsub!(/<br(?: \/)?>/,'
') + %{\n #{x}} + else '' + end + translator=if defined? @md.creator.translator \ + and @md.creator.translator =~/\S+/ + m='' + @md.creator.translator_detail.each do |x| + surname=x[:the] \ + ? x[:the] \ + : '' + other_names=x[:others] \ + ? ', ' + x[:others] \ + : '' + m=(m.empty?) \ + ? (surname + other_names) \ + : (m + '; ' + surname + ', ' + other_names) + m.gsub!(//,'>') + m.gsub!(/<br(?: \/)?>/,';') + end + x=@md.creator.translator.dup + x.gsub!(//,'>') + x.gsub!(/<br(?: \/)?>/,'
') + %{\n #{x}} else '' end illustrator=if defined? @md.creator.illustrator \ and @md.creator.illustrator =~/\S+/ - x=@md.creator.illustrator.gsub!(//,'>') - @md.creator.illustrator.gsub!(/<br(?: \/)?>/,'
') - %{\n #{x}} + m='' + @md.creator.illustrator_detail.each do |x| + surname=x[:the] \ + ? x[:the] \ + : '' + other_names=x[:others] \ + ? ', ' + x[:others] \ + : '' + m=(m.empty?) \ + ? (surname + other_names) \ + : (m + '; ' + surname + ', ' + other_names) + m.gsub!(//,'>') + m.gsub!(/<br(?: \/)?>/,';') + end + x=@md.creator.illustrator.dup + x.gsub!(//,'>') + x.gsub!(/<br(?: \/)?>/,'
') + %{\n #{x}} + else '' + end + date_published=if defined? @md.date.published \ + and @md.date.published =~/\S+/ + x=@md.date.published.dup + x.gsub!(//,'>') + x.gsub!(/<br(?: \/)?>/,'
') + %{\n #{x}} + else '' + end + subject=if defined? @md.classify.subject \ + and @md.classify.subject =~/\S+/ + x=@md.classify.subject.dup + x.gsub!(//,'>') + x.gsub!(/<br(?: \/)?>/,'
') + %{\n #{x}} + else '' + end + language=if defined? @md.opt.lng \ + and @md.opt.lng =~/\S+/ + language=@md.opt.lng.gsub(/
/,'
') + %{\n #{language}} else '' end rights=if defined? @md.rights.all \ @@ -1058,10 +1132,8 @@ WOK < #{@md.title.full} - #{author}#{illustrator} - en-US + #{author}#{translator}#{illustrator}#{language}#{date_published}#{subject}#{rights} ... - #{rights} urn:uuid:#{@md.dgst[1]} WOK diff --git a/lib/sisu/v3/epub_segments.rb b/lib/sisu/v3/epub_segments.rb index ed8c8d39..7bddf917 100644 --- a/lib/sisu/v3/epub_segments.rb +++ b/lib/sisu/v3/epub_segments.rb @@ -395,7 +395,8 @@ WOK if @md.flag_separate_endnotes # may need to revisit, check dob.obj.gsub!(/"\s+href="#note_ref(\d+)">/,%{" href=\"endnotes#{Sfx[:epub_xhtml]}#note_ref\\1">}) #endnote- twice #removed file type end - if dob.is =~/heading|para/ and (not dob.ocn or dob.ocn.to_s.empty?) + if dob.is =~/heading|para/ \ + and (not dob.ocn or dob.ocn.to_s.empty?) format_seg=SiSU_EPUB_Format::Format_seg.new(@md,dob) end if (dob.is=='heading' or dob.is=='heading_insert' or dob.is=='para') \ @@ -414,7 +415,8 @@ WOK end def tail format_head_seg=SiSU_EPUB_Format::Head_seg.new(@md) - if @md.flag_auto_endnotes and @@seg_endnotes[@@get_hash_fn] + if @md.flag_auto_endnotes \ + and @@seg_endnotes[@@get_hash_fn] @@seg[:tail] << %{\n
\n
\n} if @@seg_endnotes[@@get_hash_fn].flatten.length > 0 @@seg[:tail] << format_head_seg.endnote_mark -- cgit v1.2.3