From 6e24f03c2e2a9916d36c1bc761293152f3debd39 Mon Sep 17 00:00:00 2001 From: Keith Fahlgren Date: Thu, 7 May 2009 01:03:07 +0000 Subject: [PATCH] Slightly more nuanced handling of imageobject alternatives and better support in dbtoepub for XIncludes and ENTITYs to resolve Issue #2750442 --- xsl/epub/bin/lib/docbook.rb | 25 ++++++++++--- xsl/epub/bin/spec/epub_regressions_spec.rb | 11 ++++++ xsl/epub/bin/spec/files/onegraphic.entity.xml | 30 +++++++++++++++ .../bin/spec/files/onegraphic.xinclude.xml | 29 +++++++++++++++ xsl/epub/bin/spec/files/orm.book.001.xml | 6 +-- xsl/epub/bin/spec/files/xincludeents.xml | 10 +++++ xsl/epub/docbook.xsl | 37 +++++++++++++++---- 7 files changed, 132 insertions(+), 16 deletions(-) create mode 100644 xsl/epub/bin/spec/files/onegraphic.entity.xml create mode 100644 xsl/epub/bin/spec/files/onegraphic.xinclude.xml create mode 100644 xsl/epub/bin/spec/files/xincludeents.xml diff --git a/xsl/epub/bin/lib/docbook.rb b/xsl/epub/bin/lib/docbook.rb index d4d06aca6..a5006f6db 100755 --- a/xsl/epub/bin/lib/docbook.rb +++ b/xsl/epub/bin/lib/docbook.rb @@ -61,6 +61,8 @@ module DocBook private def render_to_epub(output_file, verbose) + @collapsed_docbook_file = collapse_docbook() + chunk_quietly = "--stringparam chunk.quietly " + (verbose ? '0' : '1') callout_path = "--stringparam callout.graphics.path #{CALLOUT_PATH}/" callout_limit = "--stringparam callout.graphics.number.limit #{CALLOUT_LIMIT}" @@ -72,8 +74,7 @@ module DocBook end meta = "--stringparam epub.metainf.dir #{@meta_dir}/" oebps = "--stringparam epub.oebps.dir #{@oebps_dir}/" - options = ["--xinclude", - chunk_quietly, + options = [chunk_quietly, callout_path, callout_limit, callout_ext, @@ -84,7 +85,7 @@ module DocBook html_stylesheet, ].join(" ") # Double-quote stylesheet & file to help Windows cmd.exe - db2epub_cmd = "#{XSLT_PROCESSOR} #{options} \"#{@stylesheet}\" \"#{@docbook_file}\"" + db2epub_cmd = "#{XSLT_PROCESSOR} #{options} \"#{@stylesheet}\" \"#{@collapsed_docbook_file}\"" STDERR.puts db2epub_cmd if $DEBUG success = system(db2epub_cmd) raise "Could not render as .epub to #{output_file} (#{db2epub_cmd})" unless success @@ -93,6 +94,7 @@ module DocBook end def bundle_epub(output_file, verbose) + quiet = verbose ? "" : "-q" mimetype_filename = write_mimetype() meta = File.basename(@meta_dir) @@ -109,6 +111,19 @@ module DocBook raise "Could not bundle into .epub file to #{output_file}" unless success end + # Input must be collapsed because REXML couldn't find figures in files that + # were XIncluded or added by ENTITY + # http://sourceforge.net/tracker/?func=detail&aid=2750442&group_id=21935&atid=373747 + def collapse_docbook + collapsed_file = File.join(File.dirname(@docbook_file), + '.collapsed.' + File.basename(@docbook_file)) + collapse_command = "xmllint --noent --xinclude -o '#{collapsed_file}' '#{@docbook_file}'" + success = system(collapse_command) + raise "Could not collapse XIncludes and/or entites in #{@docbook_file}" unless success + @to_delete << collapsed_file + return collapsed_file + end + def copy_callouts new_callout_images = [] if has_callouts? @@ -180,7 +195,7 @@ module DocBook # Returns an Array of all of the (image) @filerefs in a document def get_image_refs - parser = REXML::Parsers::PullParser.new(File.new(@docbook_file)) + parser = REXML::Parsers::PullParser.new(File.new(@collapsed_docbook_file)) image_refs = [] while parser.has_next? el = parser.pull @@ -193,7 +208,7 @@ module DocBook # Returns true if the document has code callouts def has_callouts? - parser = REXML::Parsers::PullParser.new(File.new(@docbook_file)) + parser = REXML::Parsers::PullParser.new(File.new(@collapsed_docbook_file)) while parser.has_next? el = parser.pull if el.start_element? and (el[0] == "calloutlist" or el[0] == "co") diff --git a/xsl/epub/bin/spec/epub_regressions_spec.rb b/xsl/epub/bin/spec/epub_regressions_spec.rb index aa98497c3..113650e5e 100755 --- a/xsl/epub/bin/spec/epub_regressions_spec.rb +++ b/xsl/epub/bin/spec/epub_regressions_spec.rb @@ -133,6 +133,17 @@ describe DocBook::Epub do opf_lns.to_s.should =~ /language[^>]*>de true) diff --git a/xsl/epub/bin/spec/files/onegraphic.entity.xml b/xsl/epub/bin/spec/files/onegraphic.entity.xml new file mode 100644 index 000000000..8b83101dd --- /dev/null +++ b/xsl/epub/bin/spec/files/onegraphic.entity.xml @@ -0,0 +1,30 @@ + + +Unit Test: stamp.001 +$Id: stamp.001.xml 4056 2004-11-23 13:28:50Z nwalsh $ +NormanWalsh +
ndw@nwalsh.com
+
+
+ + Chapter One + + The stamp image + +The stamp image has a natural size of 200x128 pixels. + +The stamp image. + + + + + + + The DocBook Stamp + + + + +
+ diff --git a/xsl/epub/bin/spec/files/onegraphic.xinclude.xml b/xsl/epub/bin/spec/files/onegraphic.xinclude.xml new file mode 100644 index 000000000..72d712ce7 --- /dev/null +++ b/xsl/epub/bin/spec/files/onegraphic.xinclude.xml @@ -0,0 +1,29 @@ + + + +Small Duck + + Chapter One + +Fowl + +The small duck. + + + + + + + + + + + + + + + + + + diff --git a/xsl/epub/bin/spec/files/orm.book.001.xml b/xsl/epub/bin/spec/files/orm.book.001.xml index 484051b5a..75e9f230e 100644 --- a/xsl/epub/bin/spec/files/orm.book.001.xml +++ b/xsl/epub/bin/spec/files/orm.book.001.xml @@ -101,6 +101,9 @@ Mxxx xx xxx xxxxxxxxxxxx xxxx xx xxxxxxxxxxxxx xxx xxxxxxx xx xxxxxxxxxxx xx xxx xxxxxxx xxxxxxxxx xxxx xxx xxx xx xxx xxxxxxxxxxx xxxxxxxxx xxxxxx. + + + @@ -110,9 +113,6 @@ Mxxx xx xxx xxxxxxxxxxxx xxxx xx xxxxxxxxxxxxx xxx xxxxxxx xx xxxxxxxxxxx - - - 2008-04-15 diff --git a/xsl/epub/bin/spec/files/xincludeents.xml b/xsl/epub/bin/spec/files/xincludeents.xml new file mode 100644 index 000000000..188bc078a --- /dev/null +++ b/xsl/epub/bin/spec/files/xincludeents.xml @@ -0,0 +1,10 @@ + +]> + + XIncludes and Entities & Figures + +&onegraphic; + + + diff --git a/xsl/epub/docbook.xsl b/xsl/epub/docbook.xsl index 98e262cdb..a2076cf7d 100644 --- a/xsl/epub/docbook.xsl +++ b/xsl/epub/docbook.xsl @@ -843,8 +843,8 @@ font/opentype - - ERROR: Only OpenType fonts are supported in .epub! ( + + WARNING: OpenType fonts should be supplied! ( ) @@ -966,13 +966,33 @@ mediaobjectco| inlinemediaobject" mode="opf.manifest"> - + + + + + + + + - Warning: mediaobjectco almost certainly will not render as expected in .epub! + WARNING: mediaobjectco almost certainly will not render as expected in .epub! @@ -1036,9 +1056,10 @@ - + -- 2.40.0