From deaee034fc540f84bf3d15110c9c91c4fb83a229 Mon Sep 17 00:00:00 2001 From: "Martin A. Brown" Date: Sun, 27 Mar 2016 00:44:00 -0700 Subject: [PATCH] make an end run around the XSL/fop problem teach the DocBook4 XML utility itself to set fop.extensions = 0 and fop1.extensions = 1 until such time as the upstream ldp-docbook-xsl packages can be repaired and/or adjusted --- tldp/doctypes/docbook4xml.py | 15 +++++++++++---- tldp/doctypes/docbook5xml.py | 2 ++ tldp/utils.py | 11 +++++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/tldp/doctypes/docbook4xml.py b/tldp/doctypes/docbook4xml.py index da6a1ad..1742606 100644 --- a/tldp/doctypes/docbook4xml.py +++ b/tldp/doctypes/docbook4xml.py @@ -9,6 +9,7 @@ import logging from tldp.utils import which, firstfoundfile from tldp.utils import arg_isexecutable, isexecutable from tldp.utils import arg_isreadablefile, isreadablefile +from tldp.utils import arg_isstr, isstr from tldp.doctypes.common import BaseDoctype, SignatureChecker, depends @@ -17,20 +18,24 @@ logger = logging.getLogger(__name__) def xslchunk_finder(): l = ['/usr/share/xml/docbook/stylesheet/ldp/html/tldp-sections.xsl', + 'http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl', ] return firstfoundfile(l) def xslsingle_finder(): l = ['/usr/share/xml/docbook/stylesheet/ldp/html/tldp-one-page.xsl', + 'http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl', ] return firstfoundfile(l) def xslprint_finder(): - l = ['/usr/share/xml/docbook/stylesheet/ldp/fo/tldp-print.xsl', + l = ['http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl', + #'/usr/share/xml/docbook/stylesheet/ldp/fo/tldp-print.xsl', ] - return firstfoundfile(l) + return l[0] + #return firstfoundfile(l) class Docbook4XML(BaseDoctype, SignatureChecker): @@ -48,7 +53,7 @@ class Docbook4XML(BaseDoctype, SignatureChecker): 'docbook4xml_xmllint': isexecutable, 'docbook4xml_xslchunk': isreadablefile, 'docbook4xml_xslsingle': isreadablefile, - 'docbook4xml_xslprint': isreadablefile, + 'docbook4xml_xslprint': isstr, } def make_validated_source(self, **kwargs): @@ -84,6 +89,8 @@ class Docbook4XML(BaseDoctype, SignatureChecker): def make_fo(self, **kwargs): '''generate the Formatting Objects intermediate output''' s = '''"{config.docbook4xml_xsltproc}" > "{output.name_fo}" \\ + --stringparam fop.extensions 0 \\ + --stringparam fop1.extensions 1 \\ "{config.docbook4xml_xslprint}" \\ "{output.validsource}"''' if not self.config.script: @@ -164,7 +171,7 @@ class Docbook4XML(BaseDoctype, SignatureChecker): gadd('--docbook4xml-xslsingle', type=arg_isreadablefile, default=xslsingle_finder(), help='full path to LDP HTML single-page XSL [%(default)s]') - gadd('--docbook4xml-xslprint', type=arg_isreadablefile, + gadd('--docbook4xml-xslprint', type=arg_isstr, default=xslprint_finder(), help='full path to LDP FO print XSL [%(default)s]') gadd('--docbook4xml-xmllint', type=arg_isexecutable, diff --git a/tldp/doctypes/docbook5xml.py b/tldp/doctypes/docbook5xml.py index c51a7cc..2705107 100644 --- a/tldp/doctypes/docbook5xml.py +++ b/tldp/doctypes/docbook5xml.py @@ -103,6 +103,8 @@ class Docbook5XML(BaseDoctype, SignatureChecker): def make_fo(self, **kwargs): '''generate the Formatting Objects intermediate output''' s = '''"{config.docbook5xml_xsltproc}" > "{output.name_fo}" \\ + --stringparam fop.extensions 0 \\ + --stringparam fop1.extensions 1 \\ "{config.docbook5xml_xslprint}" \\ "{output.validsource}"''' if not self.config.script: diff --git a/tldp/utils.py b/tldp/utils.py index 7ccd4b7..35def09 100644 --- a/tldp/utils.py +++ b/tldp/utils.py @@ -59,6 +59,12 @@ def arg_isloglevel(l): return level +def arg_isstr(s): + if isstr(s): + return s + return None + + def arg_isreadablefile(f): if isreadablefile(f): return f @@ -217,6 +223,11 @@ def isreadablefile(f): return os.path.isfile(f) and os.access(f, os.R_OK) +def isstr(s): + '''True if argument is stringy (unicode or string)''' + return isinstance(s, basestring) + + def which(program): '''return None or the full path to an executable (respecting $PATH) http://stackoverflow.com/questions/377017/test-if-executable-exists-in-python/377028#377028