]> granicus.if.org Git - docbook-dsssl/commitdiff
First primitive attempts at Python extensions for xsltproc
authorNorman Walsh <ndw@nwalsh.com>
Wed, 26 Jun 2002 11:01:47 +0000 (11:01 +0000)
committerNorman Walsh <ndw@nwalsh.com>
Wed, 26 Jun 2002 11:01:47 +0000 (11:01 +0000)
xsl/extensions/xsltproc/python/xslt.py [new file with mode: 0644]

diff --git a/xsl/extensions/xsltproc/python/xslt.py b/xsl/extensions/xsltproc/python/xslt.py
new file mode 100644 (file)
index 0000000..5fb1ef4
--- /dev/null
@@ -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()