Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(441)

Unified Diff: third_party/libxslt/python/tests/pyxsltproc.py

Issue 1193533007: Upgrade to libxml 2.9.2 and libxslt 1.1.28 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove suppressions, have landed in blink now Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/libxslt/python/tests/pyxsltproc.py
diff --git a/third_party/libxslt/python/tests/pyxsltproc.py b/third_party/libxslt/python/tests/pyxsltproc.py
new file mode 100755
index 0000000000000000000000000000000000000000..238fa5b4ab6e2f120ea3527af282493ee542b347
--- /dev/null
+++ b/third_party/libxslt/python/tests/pyxsltproc.py
@@ -0,0 +1,298 @@
+#!/usr/bin/python -u
+#
+# The exercise of rewriting xsltproc on top of the python
+# bindings, not complete yet and shows up the things missing
+# from the existing python interfaces
+#
+import sys
+import time
+import os
+import string
+import libxml2
+# Memory debug specific
+libxml2.debugMemory(1)
+import libxslt
+
+debug = 0
+repeat = 0
+timing = 0
+novalid = 0
+noout = 0
+docbook = 0
+html = 0
+xinclude = 0
+profile = 0
+params = {}
+output = None
+errorno = 0
+
+#
+# timing
+#
+begin = 0
+endtime = 0
+def startTimer():
+ global begin
+
+ begin = time.time()
+
+def endTimer(msg):
+ global begin
+ global endtime
+
+ endtime = time.time()
+ print "%s took %d ms" % (msg, (endtime - begin) * 1000)
+
+def xsltProcess(doc, cur, filename):
+ global timing
+ global xinclude
+ global params
+ global html
+
+ if xinclude:
+ if timing:
+ startTimer()
+ doc.XIncludeProcess()
+ if timing:
+ endTimer("XInclude processing %s" % (filename))
+
+ if timing:
+ startTimer()
+ if output == None:
+ if repeat != 0:
+ for j in range(1, repeat):
+ res = cur.applyStylesheet(doc, params)
+ res.freeDoc()
+ doc.freeDoc()
+ if html == 1:
+ doc = libxml2.htmlParseFile(filename, None)
+ else:
+ doc = libxml2.parseFile(filename, None)
+# ctxt = libxslt.newTransformContext(doc)
+# if ctxt == None:
+# return
+ if profile:
+ print "TODO: Profiling not yet supported"
+ else:
+ res = cur.applyStylesheet(doc, params)
+ if timing:
+ if repeat != 0:
+ endTimer("Applying stylesheet %d times" % (repeat))
+ else:
+ endTimer("Applying stylesheet")
+ doc.freeDoc()
+ if res == None:
+ print "no result for %s" % (filename)
+ return
+ if noout != 0:
+ res.freeDoc()
+ return
+ if debug == 1:
+ res.debugDumpDocument(None)
+ else:
+ if timing:
+ startTimer()
+ cur.saveResultToFilename("-", res, 0)
+ if timing:
+ endTimer("Saving result")
+ res.freeDoc()
+ else:
+ print "TODO: xsltRunStylesheet not yet mapped"
+
+def usage(name = 'pyxsltproc'):
+ print "Usage: %s [options] stylesheet file [file ...]" % (name)
+ print "a reimplementation of xsltproc(1) on top of libxslt-python"
+ print " Options:"
+ print "\t--version or -V: show the version of libxml and libxslt used"
+ print "\t--verbose or -v: show logs of what's happening"
+ print "\t--output file or -o file: save to a given file"
+ print "\t--timing: display the time used"
+ print "\t--repeat: run the transformation 20 times"
+ print "\t--debug: dump the tree of the result instead"
+ print "\t--novalid skip the Dtd loading phase"
+ print "\t--noout: do not dump the result"
+ print "\t--maxdepth val : increase the maximum depth"
+ print "\t--html: the input document is(are) an HTML file(s)"
+ print "\t--param name value : pass a (parameter,value) pair"
+ print "\t value is an XPath expression."
+ print "\t string values must be quoted like \"'string'\""
+ print "\t or use stringparam to avoid it"
+ print "\t--stringparam name value : pass a (parameter,string value) pair"
+ print "\t--nonet refuse to fetch DTDs or entities over network"
+ print "\t--catalogs : use SGML catalogs from $SGML_CATALOG_FILES"
+ print "\t otherwise XML Catalogs starting from "
+ print "\t file:///etc/xml/catalog are activated by default"
+ print "\t--xinclude : do XInclude processing on document input"
+ print "\t--profile or --norman : dump profiling informations "
+ print "\nProject libxslt home page: http://xmlsoft.org/XSLT/"
+ print "To report bugs and get help: http://xmlsoft.org/XSLT/bugs.html"
+
+def main(args = None):
+ global debug
+ global repeat
+ global timing
+ global novalid
+ global noout
+ global docbook
+ global html
+ global xinclude
+ global profile
+ global params
+ global output
+ global errorno
+
+ done = 0
+ cur = None
+
+ if not args:
+ args = sys.argv[1:]
+ if len(args) <= 0:
+ usage(sys.argv[0])
+
+
+ i = 0
+ while i < len(args):
+ if args[i] == "-":
+ break
+ if args[i][0] != '-':
+ i = i + 1
+ continue
+ if args[i] == "-timing" or args[i] == "--timing":
+ timing = 1
+ elif args[i] == "-debug" or args[i] == "--debug":
+ debug = 1
+ elif args[i] == "-verbose" or args[i] == "--verbose" or \
+ args[i] == "-v":
+ print "TODO: xsltSetGenericDebugFunc() mapping missing"
+ elif args[i] == "-version" or args[i] == "--version" or \
+ args[i] == "-V":
+ print "TODO: version informations mapping missing"
+ elif args[i] == "-verbose" or args[i] == "--verbose" or \
+ args[i] == "-v":
+ if repeat == 0:
+ repeat = 20
+ else:
+ repeat = 100
+ elif args[i] == "-novalid" or args[i] == "--novalid":
+ print "TODO: xmlLoadExtDtdDefaultValue mapping missing"
+ novalid = 1
+ elif args[i] == "-noout" or args[i] == "--noout":
+ noout = 1
+ elif args[i] == "-html" or args[i] == "--html":
+ html = 1
+ elif args[i] == "-nonet" or args[i] == "--nonet":
+ print "TODO: xmlSetExternalEntityLoader mapping missing"
+ nonet = 1
+ elif args[i] == "-catalogs" or args[i] == "--catalogs":
+ try:
+ catalogs = os.environ['SGML_CATALOG_FILES']
+ except:
+ catalogs = None
+ if catalogs != none:
+ libxml2.xmlLoadCatalogs(catalogs)
+ else:
+ print "Variable $SGML_CATALOG_FILES not set"
+ elif args[i] == "-xinclude" or args[i] == "--xinclude":
+ xinclude = 1
+ libxslt.setXIncludeDefault(1)
+ elif args[i] == "-param" or args[i] == "--param":
+ i = i + 1
+ params[args[i]] = args[i + 1]
+ i = i + 1
+ elif args[i] == "-stringparam" or args[i] == "--stringparam":
+ i = i + 1
+ params[args[i]] = "'%s'" % (args[i + 1])
+ i = i + 1
+ elif args[i] == "-maxdepth" or args[i] == "--maxdepth":
+ print "TODO: xsltMaxDepth mapping missing"
+ else:
+ print "Unknown option %s" % (args[i])
+ usage()
+ return(3)
+
+
+
+
+ i = i + 1
+
+ libxml2.lineNumbersDefault(1)
+ libxml2.substituteEntitiesDefault(1)
+ # TODO: xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS
+ # if novalid:
+ # TODO: xmlLoadExtDtdDefaultValue = 0
+
+ # TODO libxslt.exsltRegisterAll();
+ libxslt.registerTestModule()
+
+ i = 0
+ while i < len(args) and done == 0:
+ if args[i] == "-maxdepth" or args[i] == "--maxdepth":
+ i = i + 2
+ continue
+ if args[i] == "-o" or args[i] == "-output" or args[i] == "--output":
+ i = i + 2
+ continue
+ if args[i] == "-param" or args[i] == "--param":
+ i = i + 3
+ continue
+ if args[i] == "-stringparam" or args[i] == "--stringparam":
+ i = i + 3
+ continue
+ if args[i] != "-" and args[i][0] == '-':
+ i = i + 1
+ continue
+ if timing:
+ startTimer()
+ style = libxml2.parseFile(args[i])
+ if timing:
+ endTimer("Parsing stylesheet %s" % (args[i]))
+ if style == None:
+ print "cannot parse %s" % (args[i])
+ cur = None
+ errorno = 4
+ done = 1
+ else:
+ cur = libxslt.loadStylesheetPI(style)
+ if cur != None:
+ xsltProcess(style, cur, args[i])
+ cur = None
+ else:
+ cur = libxslt.parseStylesheetDoc(style)
+ if cur == None:
+ style.freeDoc()
+ errorno = 5
+ done = 1
+ i = i + 1
+ break
+
+ while i < len(args) and done == 0 and cur != None:
+ if timing:
+ startTimer()
+ if html:
+ doc = libxml2.htmlParseFile(args[i], None)
+ else:
+ doc = libxml2.parseFile(args[i])
+ if doc == None:
+ print "unable to parse %s" % (args[i])
+ errorno = 6
+ i = i + 1
+ continue
+ if timing:
+ endTimer("Parsing document %s" % (args[i]))
+ xsltProcess(doc, cur, args[i])
+ i = i + 1
+
+ if cur != None:
+ cur.freeStylesheet()
+ params = None
+
+if __name__ == "__main__":
+ main()
+
+# Memory debug specific
+libxslt.cleanup()
+if libxml2.debugMemory(1) != 0:
+ print "Memory leak %d bytes" % (libxml2.debugMemory(1))
+ libxml2.dumpMemory()
+
+sys.exit(errorno)

Powered by Google App Engine
This is Rietveld 408576698