From: Norman Walsh Date: Wed, 26 Jun 2002 11:01:47 +0000 (+0000) Subject: First primitive attempts at Python extensions for xsltproc X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ee5aab7443b437a71d6f0faf9854cbfb56666a73;p=docbook-dsssl First primitive attempts at Python extensions for xsltproc --- diff --git a/xsl/extensions/xsltproc/python/xslt.py b/xsl/extensions/xsltproc/python/xslt.py new file mode 100644 index 000000000..5fb1ef4c8 --- /dev/null +++ b/xsl/extensions/xsltproc/python/xslt.py @@ -0,0 +1,100 @@ +#!/usr/bin/python -u + +# THIS IS PRE-ALPHA CODE AND DOES NOT WORK! + +import sys +import string +import libxml2 +import libxslt + +# Check the arguments + +usage = "Usage: %s xmlfile.xml xslfile.xsl [outputfile] [param1=val [param2=val]...]" % sys.argv[0] + +xmlfile = None +xslfile = None +outfile = None +params = {} + +try: + xmlfile = sys.argv[1] + xslfile = sys.argv[2] +except IndexError: + print usage; + sys.exit(1) + +try: + outfile = sys.argv[3] + if string.find(outfile, "=") > 0: + name, value = string.split(outfile, "=", 2); + params[name] = value + + count = 4; + while (sys.argv[count]): + try: + name, value = string.split(sys.argv[count], "=", 2); + if params.has_key(name): + print "Warning: '%s' re-specified; replacing value" % name + params[name] = 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) + +nodeName = None + +# ====================================================================== + +def adjustColumnWidths(ctx, nodeset): + global nodeName + + # + # Small check to verify the context is correcly accessed + # + try: + pctxt = libxslt.xpathParserContext(_obj=ctx) + ctxt = pctxt.context() + tctxt = ctxt.transformContext() + nodeName = tctxt.insertNode().name + except: + pass + + node = libxml2.xmlCore(nodeset[0]) + print "called with nodeset: " + print nodeset[0].name + print node + print "---" + + return "" + +# ====================================================================== + +libxml2.lineNumbersDefault(1) +libxml2.substituteEntitiesDefault(1) +libxslt.registerExtModuleFunction("adjustColumnWidths", + "http://nwalsh.com/xslt/ext/xsltproc/python/Table", + adjustColumnWidths) + + +styledoc = libxml2.parseFile(xslfile) +style = libxslt.parseStylesheetDoc(styledoc) + +doc = libxml2.parseFile(xmlfile) + +result = style.applyStylesheet(doc, params) + +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()