call xmllint before doing any other work

important to validate the document before processing it;
Note!  Adding this feature flushed out a number of sketchy corners of a few of
our documents, but almost everything validated already.
This commit is contained in:
Martin A. Brown 2016-03-02 23:50:19 -08:00
parent a7e9b1102d
commit 17772e948c
1 changed files with 25 additions and 5 deletions

View File

@ -46,6 +46,7 @@ class Docbook4XML(BaseDoctype, SignatureChecker):
'docbook4xml_html2text': isexecutable, 'docbook4xml_html2text': isexecutable,
'docbook4xml_dblatex': isexecutable, 'docbook4xml_dblatex': isexecutable,
'docbook4xml_fop': isexecutable, 'docbook4xml_fop': isexecutable,
'docbook4xml_xmllint': isexecutable,
'docbook4xml_xslchunk': isreadablefile, 'docbook4xml_xslchunk': isreadablefile,
'docbook4xml_xslsingle': isreadablefile, 'docbook4xml_xslsingle': isreadablefile,
'docbook4xml_xslprint': isreadablefile, 'docbook4xml_xslprint': isreadablefile,
@ -60,6 +61,16 @@ class Docbook4XML(BaseDoctype, SignatureChecker):
return True return True
@depends(graph, chdir_output) @depends(graph, chdir_output)
def make_validated_source(self):
s = '''"{config.docbook4xml_xmllint}" > "{output.validsource}" \\
--nonet \\
--noent \\
--xinclude \\
--postvalid \\
"{source.filename}"'''
return self.shellscript(s)
@depends(graph, make_validated_source)
def copy_static_resources(self): def copy_static_resources(self):
source = list() source = list()
for d in ('images', 'resources'): for d in ('images', 'resources'):
@ -82,7 +93,7 @@ class Docbook4XML(BaseDoctype, SignatureChecker):
--stringparam admon.graphics.path images/ \\ --stringparam admon.graphics.path images/ \\
--stringparam base.dir . \\ --stringparam base.dir . \\
"{config.docbook4xml_xslsingle}" \\ "{config.docbook4xml_xslsingle}" \\
"{source.filename}"''' "{output.validsource}"'''
return self.shellscript(s) return self.shellscript(s)
@depends(graph, make_name_htmls) @depends(graph, make_name_htmls)
@ -94,12 +105,12 @@ class Docbook4XML(BaseDoctype, SignatureChecker):
"{output.name_htmls}"''' "{output.name_htmls}"'''
return self.shellscript(s) return self.shellscript(s)
@depends(graph, chdir_output) @depends(graph, copy_static_resources)
def make_fo(self): def make_fo(self):
'''generate the Formatting Objects intermediate output''' '''generate the Formatting Objects intermediate output'''
s = '''"{config.docbook4xml_xsltproc}" > "{output.name_fo}" \\ s = '''"{config.docbook4xml_xsltproc}" > "{output.name_fo}" \\
"{config.docbook4xml_xslprint}" \\ "{config.docbook4xml_xslprint}" \\
"{source.filename}"''' "{output.validsource}"'''
self.removals.append(self.output.name_fo) self.removals.append(self.output.name_fo)
return self.shellscript(s) return self.shellscript(s)
@ -120,7 +131,7 @@ class Docbook4XML(BaseDoctype, SignatureChecker):
-F xml \\ -F xml \\
-t pdf \\ -t pdf \\
-o "{output.name_pdf}" \\ -o "{output.name_pdf}" \\
"{source.filename}"''' "{output.validsource}"'''
return self.shellscript(s) return self.shellscript(s)
@depends(graph, make_fo) @depends(graph, make_fo)
@ -145,7 +156,7 @@ class Docbook4XML(BaseDoctype, SignatureChecker):
--stringparam admon.graphics.path images/ \\ --stringparam admon.graphics.path images/ \\
--stringparam base.dir . \\ --stringparam base.dir . \\
"{config.docbook4xml_xslchunk}" \\ "{config.docbook4xml_xslchunk}" \\
"{source.filename}"''' "{output.validsource}"'''
return self.shellscript(s) return self.shellscript(s)
@depends(graph, make_html) @depends(graph, make_html)
@ -160,6 +171,12 @@ class Docbook4XML(BaseDoctype, SignatureChecker):
s = 'ln -svr -- "{output.name_html}" "{output.name_indexhtml}"' s = 'ln -svr -- "{output.name_html}" "{output.name_indexhtml}"'
return self.shellscript(s) return self.shellscript(s)
@depends(graph, make_name_html)
def remove_validated_source(self):
'''create final index.html symlink'''
s = 'rm --verbose -- "{output.validsource}"'
return self.shellscript(s)
@classmethod @classmethod
def argparse(cls, p): def argparse(cls, p):
descrip = 'executables and data files for %s' % (cls.formatname,) descrip = 'executables and data files for %s' % (cls.formatname,)
@ -173,6 +190,9 @@ class Docbook4XML(BaseDoctype, SignatureChecker):
g.add_argument('--docbook4xml-xslprint', type=arg_isreadablefile, g.add_argument('--docbook4xml-xslprint', type=arg_isreadablefile,
default=xslprint_finder(), default=xslprint_finder(),
help='full path to LDP FO print XSL [%(default)s]') help='full path to LDP FO print XSL [%(default)s]')
g.add_argument('--docbook4xml-xmllint', type=arg_isexecutable,
default=which('xmllint'),
help='full path to xmllint [%(default)s]')
g.add_argument('--docbook4xml-xsltproc', type=arg_isexecutable, g.add_argument('--docbook4xml-xsltproc', type=arg_isexecutable,
default=which('xsltproc'), default=which('xsltproc'),
help='full path to xsltproc [%(default)s]') help='full path to xsltproc [%(default)s]')