mapnik/scons/scons-local-4.1.0/SCons/Tool/docbook/docbook-xsl-1.76.1/extensions/xslt.py
2021-03-05 10:18:26 +00:00

83 lines
2.1 KiB
Python

#!/usr/bin/python -u
# $Id: xslt.py 8353 2009-03-17 16:57:50Z mzjn $
import sys
import libxml2
import libxslt
from docbook import adjustColumnWidths
# Check the arguments
usage = "Usage: %s xmlfile.xml xslfile.xsl [outputfile] [param1=val [param2=val]...]" % sys.argv[0]
xmlfile = None
xslfile = None
outfile = "-"
params = {}
try:
xmlfile = sys.argv[1]
xslfile = sys.argv[2]
except IndexError:
print(usage)
sys.exit(1)
def quote(astring):
if astring.find("'") < 0:
return "'" + astring + "'"
else:
return '"' + astring + '"'
try:
outfile = sys.argv[3]
if outfile.find("=") > 0:
name, value = outfile.split("=", 2)
params[name] = quote(value)
outfile = None
count = 4
while sys.argv[count]:
try:
name, value = sys.argv[count].split("=", 2)
if name in params:
print("Warning: '%s' re-specified; replacing value" % name)
params[name] = quote(value)
except ValueError:
print("Invalid parameter specification: '" + sys.argv[count] + "'")
print(usage)
sys.exit(1)
count = count+1
except IndexError:
pass
# ======================================================================
# Memory debug specific
# libxml2.debugMemory(1)
# Setup environment
libxml2.lineNumbersDefault(1)
libxml2.substituteEntitiesDefault(1)
libxslt.registerExtModuleFunction("adjustColumnWidths",
"http://nwalsh.com/xslt/ext/xsltproc/python/Table",
adjustColumnWidths)
# Initialize and run
styledoc = libxml2.parseFile(xslfile)
style = libxslt.parseStylesheetDoc(styledoc)
doc = libxml2.parseFile(xmlfile)
result = style.applyStylesheet(doc, params)
# Save the result
if outfile:
style.saveResultToFilename(outfile, result, 0)
else:
print(result)
# Free things up
style.freeStylesheet()
doc.freeDoc()
result.freeDoc()
# Memory debug specific
#libxslt.cleanup()
#if libxml2.debugMemory(1) != 0:
# print "Memory leak %d bytes" % (libxml2.debugMemory(1))
# libxml2.dumpMemory()