]> git.stg.codes - stg.git/blobdiff - doc/help/xslt/extensions/xslt.py
DocBook documentation stub added
[stg.git] / doc / help / xslt / extensions / xslt.py
diff --git a/doc/help/xslt/extensions/xslt.py b/doc/help/xslt/extensions/xslt.py
new file mode 100644 (file)
index 0000000..c712f65
--- /dev/null
@@ -0,0 +1,84 @@
+#!/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 params.has_key(name):
+                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()