summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '3rdParty/SCons/scons-2.4.0/engine/SCons/Tool/docbook/__init__.py')
-rw-r--r--3rdParty/SCons/scons-2.4.0/engine/SCons/Tool/docbook/__init__.py882
1 files changed, 0 insertions, 882 deletions
diff --git a/3rdParty/SCons/scons-2.4.0/engine/SCons/Tool/docbook/__init__.py b/3rdParty/SCons/scons-2.4.0/engine/SCons/Tool/docbook/__init__.py
deleted file mode 100644
index aead43c..0000000
--- a/3rdParty/SCons/scons-2.4.0/engine/SCons/Tool/docbook/__init__.py
+++ /dev/null
@@ -1,882 +0,0 @@
-
-"""SCons.Tool.docbook
-
-Tool-specific initialization for Docbook.
-
-There normally shouldn't be any need to import this module directly.
-It will usually be imported through the generic SCons.Tool.Tool()
-selection method.
-
-"""
-
-#
-# Copyright (c) 2001-7,2010 The SCons Foundation
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-import os
-import glob
-import re
-
-import SCons.Action
-import SCons.Builder
-import SCons.Defaults
-import SCons.Script
-import SCons.Tool
-import SCons.Util
-
-# Get full path to this script
-scriptpath = os.path.dirname(os.path.realpath(__file__))
-
-# Local folder for the collection of DocBook XSLs
-db_xsl_folder = 'docbook-xsl-1.76.1'
-
-# Do we have libxml2/libxslt/lxml?
-has_libxml2 = True
-has_lxml = True
-try:
- import libxml2
- import libxslt
-except:
- has_libxml2 = False
-try:
- import lxml
-except:
- has_lxml = False
-
-# Set this to True, to prefer xsltproc over libxml2 and lxml
-prefer_xsltproc = False
-
-# Regexs for parsing Docbook XML sources of MAN pages
-re_manvolnum = re.compile("<manvolnum>([^<]*)</manvolnum>")
-re_refname = re.compile("<refname>([^<]*)</refname>")
-
-#
-# Helper functions
-#
-def __extend_targets_sources(target, source):
- """ Prepare the lists of target and source files. """
- if not SCons.Util.is_List(target):
- target = [target]
- if not source:
- source = target[:]
- elif not SCons.Util.is_List(source):
- source = [source]
- if len(target) < len(source):
- target.extend(source[len(target):])
-
- return target, source
-
-def __init_xsl_stylesheet(kw, env, user_xsl_var, default_path):
- if kw.get('DOCBOOK_XSL','') == '':
- xsl_style = kw.get('xsl', env.subst(user_xsl_var))
- if xsl_style == '':
- path_args = [scriptpath, db_xsl_folder] + default_path
- xsl_style = os.path.join(*path_args)
- kw['DOCBOOK_XSL'] = xsl_style
-
-def __select_builder(lxml_builder, libxml2_builder, cmdline_builder):
- """ Selects a builder, based on which Python modules are present. """
- if prefer_xsltproc:
- return cmdline_builder
-
- if not has_libxml2:
- # At the moment we prefer libxml2 over lxml, the latter can lead
- # to conflicts when installed together with libxml2.
- if has_lxml:
- return lxml_builder
- else:
- return cmdline_builder
-
- return libxml2_builder
-
-def __ensure_suffix(t, suffix):
- """ Ensure that the target t has the given suffix. """
- tpath = str(t)
- if not tpath.endswith(suffix):
- return tpath+suffix
-
- return t
-
-def __ensure_suffix_stem(t, suffix):
- """ Ensure that the target t has the given suffix, and return the file's stem. """
- tpath = str(t)
- if not tpath.endswith(suffix):
- stem = tpath
- tpath += suffix
-
- return tpath, stem
- else:
- stem, ext = os.path.splitext(tpath)
-
- return t, stem
-
-def __get_xml_text(root):
- """ Return the text for the given root node (xml.dom.minidom). """
- txt = ""
- for e in root.childNodes:
- if (e.nodeType == e.TEXT_NODE):
- txt += e.data
- return txt
-
-def __create_output_dir(base_dir):
- """ Ensure that the output directory base_dir exists. """
- root, tail = os.path.split(base_dir)
- dir = None
- if tail:
- if base_dir.endswith('/'):
- dir = base_dir
- else:
- dir = root
- else:
- if base_dir.endswith('/'):
- dir = base_dir
-
- if dir and not os.path.isdir(dir):
- os.makedirs(dir)
-
-
-#
-# Supported command line tools and their call "signature"
-#
-xsltproc_com = {'xsltproc' : '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -o $TARGET $DOCBOOK_XSL $SOURCE',
- 'saxon' : '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -o $TARGET $DOCBOOK_XSL $SOURCE $DOCBOOK_XSLTPROCPARAMS',
- 'saxon-xslt' : '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -o $TARGET $DOCBOOK_XSL $SOURCE $DOCBOOK_XSLTPROCPARAMS',
- 'xalan' : '$DOCBOOK_XSLTPROC $DOCBOOK_XSLTPROCFLAGS -q -out $TARGET -xsl $DOCBOOK_XSL -in $SOURCE'}
-xmllint_com = {'xmllint' : '$DOCBOOK_XMLLINT $DOCBOOK_XMLLINTFLAGS --xinclude $SOURCE > $TARGET'}
-fop_com = {'fop' : '$DOCBOOK_FOP $DOCBOOK_FOPFLAGS -fo $SOURCE -pdf $TARGET',
- 'xep' : '$DOCBOOK_FOP $DOCBOOK_FOPFLAGS -valid -fo $SOURCE -pdf $TARGET',
- 'jw' : '$DOCBOOK_FOP $DOCBOOK_FOPFLAGS -f docbook -b pdf $SOURCE -o $TARGET'}
-
-def __detect_cl_tool(env, chainkey, cdict):
- """
- Helper function, picks a command line tool from the list
- and initializes its environment variables.
- """
- if env.get(chainkey,'') == '':
- clpath = ''
- for cltool in cdict:
- clpath = env.WhereIs(cltool)
- if clpath:
- env[chainkey] = clpath
- if not env[chainkey + 'COM']:
- env[chainkey + 'COM'] = cdict[cltool]
-
-def _detect(env):
- """
- Detect all the command line tools that we might need for creating
- the requested output formats.
- """
- global prefer_xsltproc
-
- if env.get('DOCBOOK_PREFER_XSLTPROC',''):
- prefer_xsltproc = True
-
- if ((not has_libxml2 and not has_lxml) or (prefer_xsltproc)):
- # Try to find the XSLT processors
- __detect_cl_tool(env, 'DOCBOOK_XSLTPROC', xsltproc_com)
- __detect_cl_tool(env, 'DOCBOOK_XMLLINT', xmllint_com)
-
- __detect_cl_tool(env, 'DOCBOOK_FOP', fop_com)
-
-#
-# Scanners
-#
-include_re = re.compile('fileref\\s*=\\s*["|\']([^\\n]*)["|\']')
-sentity_re = re.compile('<!ENTITY\\s+%*\\s*[^\\s]+\\s+SYSTEM\\s+["|\']([^\\n]*)["|\']>')
-
-def __xml_scan(node, env, path, arg):
- """ Simple XML file scanner, detecting local images and XIncludes as implicit dependencies. """
- # Does the node exist yet?
- if not os.path.isfile(str(node)):
- return []
-
- if env.get('DOCBOOK_SCANENT',''):
- # Use simple pattern matching for system entities..., no support
- # for recursion yet.
- contents = node.get_text_contents()
- return sentity_re.findall(contents)
-
- xsl_file = os.path.join(scriptpath,'utils','xmldepend.xsl')
- if not has_libxml2 or prefer_xsltproc:
- if has_lxml and not prefer_xsltproc:
-
- from lxml import etree
-
- xsl_tree = etree.parse(xsl_file)
- doc = etree.parse(str(node))
- result = doc.xslt(xsl_tree)
-
- depfiles = [x.strip() for x in str(result).splitlines() if x.strip() != "" and not x.startswith("<?xml ")]
- return depfiles
- else:
- # Try to call xsltproc
- xsltproc = env.subst("$DOCBOOK_XSLTPROC")
- if xsltproc and xsltproc.endswith('xsltproc'):
- result = env.backtick(' '.join([xsltproc, xsl_file, str(node)]))
- depfiles = [x.strip() for x in str(result).splitlines() if x.strip() != "" and not x.startswith("<?xml ")]
- return depfiles
- else:
- # Use simple pattern matching, there is currently no support
- # for xi:includes...
- contents = node.get_text_contents()
- return include_re.findall(contents)
-
- styledoc = libxml2.parseFile(xsl_file)
- style = libxslt.parseStylesheetDoc(styledoc)
- doc = libxml2.readFile(str(node), None, libxml2.XML_PARSE_NOENT)
- result = style.applyStylesheet(doc, None)
-
- depfiles = []
- for x in str(result).splitlines():
- if x.strip() != "" and not x.startswith("<?xml "):
- depfiles.extend(x.strip().split())
-
- style.freeStylesheet()
- doc.freeDoc()
- result.freeDoc()
-
- return depfiles
-
-# Creating the instance of our XML dependency scanner
-docbook_xml_scanner = SCons.Script.Scanner(function = __xml_scan,
- argument = None)
-
-
-#
-# Action generators
-#
-def __generate_xsltproc_action(source, target, env, for_signature):
- cmd = env['DOCBOOK_XSLTPROCCOM']
- # Does the environment have a base_dir defined?
- base_dir = env.subst('$base_dir')
- if base_dir:
- # Yes, so replace target path by its filename
- return cmd.replace('$TARGET','${TARGET.file}')
- return cmd
-
-
-#
-# Emitters
-#
-def __emit_xsl_basedir(target, source, env):
- # Does the environment have a base_dir defined?
- base_dir = env.subst('$base_dir')
- if base_dir:
- # Yes, so prepend it to each target
- return [os.path.join(base_dir, str(t)) for t in target], source
-
- # No, so simply pass target and source names through
- return target, source
-
-
-#
-# Builders
-#
-def __build_libxml2(target, source, env):
- """
- General XSLT builder (HTML/FO), using the libxml2 module.
- """
- xsl_style = env.subst('$DOCBOOK_XSL')
- styledoc = libxml2.parseFile(xsl_style)
- style = libxslt.parseStylesheetDoc(styledoc)
- doc = libxml2.readFile(str(source[0]),None,libxml2.XML_PARSE_NOENT)
- # Support for additional parameters
- parampass = {}
- if parampass:
- result = style.applyStylesheet(doc, parampass)
- else:
- result = style.applyStylesheet(doc, None)
- style.saveResultToFilename(str(target[0]), result, 0)
- style.freeStylesheet()
- doc.freeDoc()
- result.freeDoc()
-
- return None
-
-def __build_lxml(target, source, env):
- """
- General XSLT builder (HTML/FO), using the lxml module.
- """
- from lxml import etree
-
- xslt_ac = etree.XSLTAccessControl(read_file=True,
- write_file=True,
- create_dir=True,
- read_network=False,
- write_network=False)
- xsl_style = env.subst('$DOCBOOK_XSL')
- xsl_tree = etree.parse(xsl_style)
- transform = etree.XSLT(xsl_tree, access_control=xslt_ac)
- doc = etree.parse(str(source[0]))
- # Support for additional parameters
- parampass = {}
- if parampass:
- result = transform(doc, **parampass)
- else:
- result = transform(doc)
-
- try:
- of = open(str(target[0]), "w")
- of.write(of.write(etree.tostring(result, pretty_print=True)))
- of.close()
- except:
- pass
-
- return None
-
-def __xinclude_libxml2(target, source, env):
- """
- Resolving XIncludes, using the libxml2 module.
- """
- doc = libxml2.readFile(str(source[0]), None, libxml2.XML_PARSE_NOENT)
- doc.xincludeProcessFlags(libxml2.XML_PARSE_NOENT)
- doc.saveFile(str(target[0]))
- doc.freeDoc()
-
- return None
-
-def __xinclude_lxml(target, source, env):
- """
- Resolving XIncludes, using the lxml module.
- """
- from lxml import etree
-
- doc = etree.parse(str(source[0]))
- doc.xinclude()
- try:
- doc.write(str(target[0]), xml_declaration=True,
- encoding="UTF-8", pretty_print=True)
- except:
- pass
-
- return None
-
-__libxml2_builder = SCons.Builder.Builder(
- action = __build_libxml2,
- src_suffix = '.xml',
- source_scanner = docbook_xml_scanner,
- emitter = __emit_xsl_basedir)
-__lxml_builder = SCons.Builder.Builder(
- action = __build_lxml,
- src_suffix = '.xml',
- source_scanner = docbook_xml_scanner,
- emitter = __emit_xsl_basedir)
-
-__xinclude_libxml2_builder = SCons.Builder.Builder(
- action = __xinclude_libxml2,
- suffix = '.xml',
- src_suffix = '.xml',
- source_scanner = docbook_xml_scanner)
-__xinclude_lxml_builder = SCons.Builder.Builder(
- action = __xinclude_lxml,
- suffix = '.xml',
- src_suffix = '.xml',
- source_scanner = docbook_xml_scanner)
-
-__xsltproc_builder = SCons.Builder.Builder(
- action = SCons.Action.CommandGeneratorAction(__generate_xsltproc_action,
- {'cmdstr' : '$DOCBOOK_XSLTPROCCOMSTR'}),
- src_suffix = '.xml',
- source_scanner = docbook_xml_scanner,
- emitter = __emit_xsl_basedir)
-__xmllint_builder = SCons.Builder.Builder(
- action = SCons.Action.Action('$DOCBOOK_XMLLINTCOM','$DOCBOOK_XMLLINTCOMSTR'),
- suffix = '.xml',
- src_suffix = '.xml',
- source_scanner = docbook_xml_scanner)
-__fop_builder = SCons.Builder.Builder(
- action = SCons.Action.Action('$DOCBOOK_FOPCOM','$DOCBOOK_FOPCOMSTR'),
- suffix = '.pdf',
- src_suffix = '.fo',
- ensure_suffix=1)
-
-def DocbookEpub(env, target, source=None, *args, **kw):
- """
- A pseudo-Builder, providing a Docbook toolchain for ePub output.
- """
- import zipfile
- import shutil
-
- def build_open_container(target, source, env):
- """Generate the *.epub file from intermediate outputs
-
- Constructs the epub file according to the Open Container Format. This
- function could be replaced by a call to the SCons Zip builder if support
- was added for different compression formats for separate source nodes.
- """
- zf = zipfile.ZipFile(str(target[0]), 'w')
- mime_file = open('mimetype', 'w')
- mime_file.write('application/epub+zip')
- mime_file.close()
- zf.write(mime_file.name, compress_type = zipfile.ZIP_STORED)
- for s in source:
- if os.path.isfile(str(s)):
- head, tail = os.path.split(str(s))
- if not head:
- continue
- s = head
- for dirpath, dirnames, filenames in os.walk(str(s)):
- for fname in filenames:
- path = os.path.join(dirpath, fname)
- if os.path.isfile(path):
- zf.write(path, os.path.relpath(path, str(env.get('ZIPROOT', ''))),
- zipfile.ZIP_DEFLATED)
- zf.close()
-
- def add_resources(target, source, env):
- """Add missing resources to the OEBPS directory
-
- Ensure all the resources in the manifest are present in the OEBPS directory.
- """
- hrefs = []
- content_file = os.path.join(source[0].get_abspath(), 'content.opf')
- if not os.path.isfile(content_file):
- return
-
- hrefs = []
- if has_libxml2:
- nsmap = {'opf' : 'http://www.idpf.org/2007/opf'}
- # Read file and resolve entities
- doc = libxml2.readFile(content_file, None, 0)
- opf = doc.getRootElement()
- # Create xpath context
- xpath_context = doc.xpathNewContext()
- # Register namespaces
- for key, val in nsmap.iteritems():
- xpath_context.xpathRegisterNs(key, val)
-
- if hasattr(opf, 'xpathEval') and xpath_context:
- # Use the xpath context
- xpath_context.setContextNode(opf)
- items = xpath_context.xpathEval(".//opf:item")
- else:
- items = opf.findall(".//{'http://www.idpf.org/2007/opf'}item")
-
- for item in items:
- if hasattr(item, 'prop'):
- hrefs.append(item.prop('href'))
- else:
- hrefs.append(item.attrib['href'])
-
- doc.freeDoc()
- xpath_context.xpathFreeContext()
- elif has_lxml:
- from lxml import etree
-
- opf = etree.parse(content_file)
- # All the opf:item elements are resources
- for item in opf.xpath('//opf:item',
- namespaces= { 'opf': 'http://www.idpf.org/2007/opf' }):
- hrefs.append(item.attrib['href'])
-
- for href in hrefs:
- # If the resource was not already created by DocBook XSL itself,
- # copy it into the OEBPS folder
- referenced_file = os.path.join(source[0].get_abspath(), href)
- if not os.path.exists(referenced_file):
- shutil.copy(href, os.path.join(source[0].get_abspath(), href))
-
- # Init list of targets/sources
- target, source = __extend_targets_sources(target, source)
-
- # Init XSL stylesheet
- __init_xsl_stylesheet(kw, env, '$DOCBOOK_DEFAULT_XSL_EPUB', ['epub','docbook.xsl'])
-
- # Setup builder
- __builder = __select_builder(__lxml_builder, __libxml2_builder, __xsltproc_builder)
-
- # Create targets
- result = []
- if not env.GetOption('clean'):
- # Ensure that the folders OEBPS and META-INF exist
- __create_output_dir('OEBPS/')
- __create_output_dir('META-INF/')
- dirs = env.Dir(['OEBPS', 'META-INF'])
-
- # Set the fixed base_dir
- kw['base_dir'] = 'OEBPS/'
- tocncx = __builder.__call__(env, 'toc.ncx', source[0], **kw)
- cxml = env.File('META-INF/container.xml')
- env.SideEffect(cxml, tocncx)
-
- env.Depends(tocncx, kw['DOCBOOK_XSL'])
- result.extend(tocncx+[cxml])
-
- container = env.Command(__ensure_suffix(str(target[0]), '.epub'),
- tocncx+[cxml], [add_resources, build_open_container])
- mimetype = env.File('mimetype')
- env.SideEffect(mimetype, container)
-
- result.extend(container)
- # Add supporting files for cleanup
- env.Clean(tocncx, dirs)
-
- return result
-
-def DocbookHtml(env, target, source=None, *args, **kw):
- """
- A pseudo-Builder, providing a Docbook toolchain for HTML output.
- """
- # Init list of targets/sources
- target, source = __extend_targets_sources(target, source)
-
- # Init XSL stylesheet
- __init_xsl_stylesheet(kw, env, '$DOCBOOK_DEFAULT_XSL_HTML', ['html','docbook.xsl'])
-
- # Setup builder
- __builder = __select_builder(__lxml_builder, __libxml2_builder, __xsltproc_builder)
-
- # Create targets
- result = []
- for t,s in zip(target,source):
- r = __builder.__call__(env, __ensure_suffix(t,'.html'), s, **kw)
- env.Depends(r, kw['DOCBOOK_XSL'])
- result.extend(r)
-
- return result
-
-def DocbookHtmlChunked(env, target, source=None, *args, **kw):
- """
- A pseudo-Builder, providing a Docbook toolchain for chunked HTML output.
- """
- # Init target/source
- if not SCons.Util.is_List(target):
- target = [target]
- if not source:
- source = target
- target = ['index.html']
- elif not SCons.Util.is_List(source):
- source = [source]
-
- # Init XSL stylesheet
- __init_xsl_stylesheet(kw, env, '$DOCBOOK_DEFAULT_XSL_HTMLCHUNKED', ['html','chunkfast.xsl'])
-
- # Setup builder
- __builder = __select_builder(__lxml_builder, __libxml2_builder, __xsltproc_builder)
-
- # Detect base dir
- base_dir = kw.get('base_dir', '')
- if base_dir:
- __create_output_dir(base_dir)
-
- # Create targets
- result = []
- r = __builder.__call__(env, __ensure_suffix(str(target[0]), '.html'), source[0], **kw)
- env.Depends(r, kw['DOCBOOK_XSL'])
- result.extend(r)
- # Add supporting files for cleanup
- env.Clean(r, glob.glob(os.path.join(base_dir, '*.html')))
-
- return result
-
-
-def DocbookHtmlhelp(env, target, source=None, *args, **kw):
- """
- A pseudo-Builder, providing a Docbook toolchain for HTMLHELP output.
- """
- # Init target/source
- if not SCons.Util.is_List(target):
- target = [target]
- if not source:
- source = target
- target = ['index.html']
- elif not SCons.Util.is_List(source):
- source = [source]
-
- # Init XSL stylesheet
- __init_xsl_stylesheet(kw, env, '$DOCBOOK_DEFAULT_XSL_HTMLHELP', ['htmlhelp','htmlhelp.xsl'])
-
- # Setup builder
- __builder = __select_builder(__lxml_builder, __libxml2_builder, __xsltproc_builder)
-
- # Detect base dir
- base_dir = kw.get('base_dir', '')
- if base_dir:
- __create_output_dir(base_dir)
-
- # Create targets
- result = []
- r = __builder.__call__(env, __ensure_suffix(str(target[0]), '.html'), source[0], **kw)
- env.Depends(r, kw['DOCBOOK_XSL'])
- result.extend(r)
- # Add supporting files for cleanup
- env.Clean(r, ['toc.hhc', 'htmlhelp.hhp', 'index.hhk'] +
- glob.glob(os.path.join(base_dir, '[ar|bk|ch]*.html')))
-
- return result
-
-def DocbookPdf(env, target, source=None, *args, **kw):
- """
- A pseudo-Builder, providing a Docbook toolchain for PDF output.
- """
- # Init list of targets/sources
- target, source = __extend_targets_sources(target, source)
-
- # Init XSL stylesheet
- __init_xsl_stylesheet(kw, env, '$DOCBOOK_DEFAULT_XSL_PDF', ['fo','docbook.xsl'])
-
- # Setup builder
- __builder = __select_builder(__lxml_builder, __libxml2_builder, __xsltproc_builder)
-
- # Create targets
- result = []
- for t,s in zip(target,source):
- t, stem = __ensure_suffix_stem(t, '.pdf')
- xsl = __builder.__call__(env, stem+'.fo', s, **kw)
- result.extend(xsl)
- env.Depends(xsl, kw['DOCBOOK_XSL'])
- result.extend(__fop_builder.__call__(env, t, xsl, **kw))
-
- return result
-
-def DocbookMan(env, target, source=None, *args, **kw):
- """
- A pseudo-Builder, providing a Docbook toolchain for Man page output.
- """
- # Init list of targets/sources
- target, source = __extend_targets_sources(target, source)
-
- # Init XSL stylesheet
- __init_xsl_stylesheet(kw, env, '$DOCBOOK_DEFAULT_XSL_MAN', ['manpages','docbook.xsl'])
-
- # Setup builder
- __builder = __select_builder(__lxml_builder, __libxml2_builder, __xsltproc_builder)
-
- # Create targets
- result = []
- for t,s in zip(target,source):
- volnum = "1"
- outfiles = []
- srcfile = __ensure_suffix(str(s),'.xml')
- if os.path.isfile(srcfile):
- try:
- import xml.dom.minidom
-
- dom = xml.dom.minidom.parse(__ensure_suffix(str(s),'.xml'))
- # Extract volume number, default is 1
- for node in dom.getElementsByTagName('refmeta'):
- for vol in node.getElementsByTagName('manvolnum'):
- volnum = __get_xml_text(vol)
-
- # Extract output filenames
- for node in dom.getElementsByTagName('refnamediv'):
- for ref in node.getElementsByTagName('refname'):
- outfiles.append(__get_xml_text(ref)+'.'+volnum)
-
- except:
- # Use simple regex parsing
- f = open(__ensure_suffix(str(s),'.xml'), 'r')
- content = f.read()
- f.close()
-
- for m in re_manvolnum.finditer(content):
- volnum = m.group(1)
-
- for m in re_refname.finditer(content):
- outfiles.append(m.group(1)+'.'+volnum)
-
- if not outfiles:
- # Use stem of the source file
- spath = str(s)
- if not spath.endswith('.xml'):
- outfiles.append(spath+'.'+volnum)
- else:
- stem, ext = os.path.splitext(spath)
- outfiles.append(stem+'.'+volnum)
- else:
- # We have to completely rely on the given target name
- outfiles.append(t)
-
- __builder.__call__(env, outfiles[0], s, **kw)
- env.Depends(outfiles[0], kw['DOCBOOK_XSL'])
- result.append(outfiles[0])
- if len(outfiles) > 1:
- env.Clean(outfiles[0], outfiles[1:])
-
-
- return result
-
-def DocbookSlidesPdf(env, target, source=None, *args, **kw):
- """
- A pseudo-Builder, providing a Docbook toolchain for PDF slides output.
- """
- # Init list of targets/sources
- target, source = __extend_targets_sources(target, source)
-
- # Init XSL stylesheet
- __init_xsl_stylesheet(kw, env, '$DOCBOOK_DEFAULT_XSL_SLIDESPDF', ['slides','fo','plain.xsl'])
-
- # Setup builder
- __builder = __select_builder(__lxml_builder, __libxml2_builder, __xsltproc_builder)
-
- # Create targets
- result = []
- for t,s in zip(target,source):
- t, stem = __ensure_suffix_stem(t, '.pdf')
- xsl = __builder.__call__(env, stem+'.fo', s, **kw)
- env.Depends(xsl, kw['DOCBOOK_XSL'])
- result.extend(xsl)
- result.extend(__fop_builder.__call__(env, t, xsl, **kw))
-
- return result
-
-def DocbookSlidesHtml(env, target, source=None, *args, **kw):
- """
- A pseudo-Builder, providing a Docbook toolchain for HTML slides output.
- """
- # Init list of targets/sources
- if not SCons.Util.is_List(target):
- target = [target]
- if not source:
- source = target
- target = ['index.html']
- elif not SCons.Util.is_List(source):
- source = [source]
-
- # Init XSL stylesheet
- __init_xsl_stylesheet(kw, env, '$DOCBOOK_DEFAULT_XSL_SLIDESHTML', ['slides','html','plain.xsl'])
-
- # Setup builder
- __builder = __select_builder(__lxml_builder, __libxml2_builder, __xsltproc_builder)
-
- # Detect base dir
- base_dir = kw.get('base_dir', '')
- if base_dir:
- __create_output_dir(base_dir)
-
- # Create targets
- result = []
- r = __builder.__call__(env, __ensure_suffix(str(target[0]), '.html'), source[0], **kw)
- env.Depends(r, kw['DOCBOOK_XSL'])
- result.extend(r)
- # Add supporting files for cleanup
- env.Clean(r, [os.path.join(base_dir, 'toc.html')] +
- glob.glob(os.path.join(base_dir, 'foil*.html')))
-
- return result
-
-def DocbookXInclude(env, target, source, *args, **kw):
- """
- A pseudo-Builder, for resolving XIncludes in a separate processing step.
- """
- # Init list of targets/sources
- target, source = __extend_targets_sources(target, source)
-
- # Setup builder
- __builder = __select_builder(__xinclude_lxml_builder,__xinclude_libxml2_builder,__xmllint_builder)
-
- # Create targets
- result = []
- for t,s in zip(target,source):
- result.extend(__builder.__call__(env, t, s, **kw))
-
- return result
-
-def DocbookXslt(env, target, source=None, *args, **kw):
- """
- A pseudo-Builder, applying a simple XSL transformation to the input file.
- """
- # Init list of targets/sources
- target, source = __extend_targets_sources(target, source)
-
- # Init XSL stylesheet
- kw['DOCBOOK_XSL'] = kw.get('xsl', 'transform.xsl')
-
- # Setup builder
- __builder = __select_builder(__lxml_builder, __libxml2_builder, __xsltproc_builder)
-
- # Create targets
- result = []
- for t,s in zip(target,source):
- r = __builder.__call__(env, t, s, **kw)
- env.Depends(r, kw['DOCBOOK_XSL'])
- result.extend(r)
-
- return result
-
-
-def generate(env):
- """Add Builders and construction variables for docbook to an Environment."""
-
- env.SetDefault(
- # Default names for customized XSL stylesheets
- DOCBOOK_DEFAULT_XSL_EPUB = '',
- DOCBOOK_DEFAULT_XSL_HTML = '',
- DOCBOOK_DEFAULT_XSL_HTMLCHUNKED = '',
- DOCBOOK_DEFAULT_XSL_HTMLHELP = '',
- DOCBOOK_DEFAULT_XSL_PDF = '',
- DOCBOOK_DEFAULT_XSL_MAN = '',
- DOCBOOK_DEFAULT_XSL_SLIDESPDF = '',
- DOCBOOK_DEFAULT_XSL_SLIDESHTML = '',
-
- # Paths to the detected executables
- DOCBOOK_XSLTPROC = '',
- DOCBOOK_XMLLINT = '',
- DOCBOOK_FOP = '',
-
- # Additional flags for the text processors
- DOCBOOK_XSLTPROCFLAGS = SCons.Util.CLVar(''),
- DOCBOOK_XMLLINTFLAGS = SCons.Util.CLVar(''),
- DOCBOOK_FOPFLAGS = SCons.Util.CLVar(''),
- DOCBOOK_XSLTPROCPARAMS = SCons.Util.CLVar(''),
-
- # Default command lines for the detected executables
- DOCBOOK_XSLTPROCCOM = xsltproc_com['xsltproc'],
- DOCBOOK_XMLLINTCOM = xmllint_com['xmllint'],
- DOCBOOK_FOPCOM = fop_com['fop'],
-
- # Screen output for the text processors
- DOCBOOK_XSLTPROCCOMSTR = None,
- DOCBOOK_XMLLINTCOMSTR = None,
- DOCBOOK_FOPCOMSTR = None,
-
- )
- _detect(env)
-
- try:
- env.AddMethod(DocbookEpub, "DocbookEpub")
- env.AddMethod(DocbookHtml, "DocbookHtml")
- env.AddMethod(DocbookHtmlChunked, "DocbookHtmlChunked")
- env.AddMethod(DocbookHtmlhelp, "DocbookHtmlhelp")
- env.AddMethod(DocbookPdf, "DocbookPdf")
- env.AddMethod(DocbookMan, "DocbookMan")
- env.AddMethod(DocbookSlidesPdf, "DocbookSlidesPdf")
- env.AddMethod(DocbookSlidesHtml, "DocbookSlidesHtml")
- env.AddMethod(DocbookXInclude, "DocbookXInclude")
- env.AddMethod(DocbookXslt, "DocbookXslt")
- except AttributeError:
- # Looks like we use a pre-0.98 version of SCons...
- from SCons.Script.SConscript import SConsEnvironment
- SConsEnvironment.DocbookEpub = DocbookEpub
- SConsEnvironment.DocbookHtml = DocbookHtml
- SConsEnvironment.DocbookHtmlChunked = DocbookHtmlChunked
- SConsEnvironment.DocbookHtmlhelp = DocbookHtmlhelp
- SConsEnvironment.DocbookPdf = DocbookPdf
- SConsEnvironment.DocbookMan = DocbookMan
- SConsEnvironment.DocbookSlidesPdf = DocbookSlidesPdf
- SConsEnvironment.DocbookSlidesHtml = DocbookSlidesHtml
- SConsEnvironment.DocbookXInclude = DocbookXInclude
- SConsEnvironment.DocbookXslt = DocbookXslt
-
-
-def exists(env):
- return 1