00001
00002
00003
00004 import sys
00005 import libxml2
00006 import libxslt
00007 from docbook import adjustColumnWidths
00008
00009
00010 usage = "Usage: %s xmlfile.xml xslfile.xsl [outputfile] [param1=val [param2=val]...]" % sys.argv[0]
00011
00012 xmlfile = None
00013 xslfile = None
00014 outfile = "-"
00015 params = {}
00016
00017 try:
00018 xmlfile = sys.argv[1]
00019 xslfile = sys.argv[2]
00020 except IndexError:
00021 print usage
00022 sys.exit(1)
00023
00024 def quote(astring):
00025 if astring.find("'") < 0:
00026 return "'" + astring + "'"
00027 else:
00028 return '"' + astring + '"'
00029
00030 try:
00031 outfile = sys.argv[3]
00032 if outfile.find("=") > 0:
00033 name, value = outfile.split("=", 2)
00034 params[name] = quote(value)
00035 outfile = None
00036
00037 count = 4
00038 while (sys.argv[count]):
00039 try:
00040 name, value = sys.argv[count].split("=", 2)
00041 if params.has_key(name):
00042 print "Warning: '%s' re-specified; replacing value" % name
00043 params[name] = quote(value)
00044 except ValueError:
00045 print "Invalid parameter specification: '" + sys.argv[count] + "'"
00046 print usage
00047 sys.exit(1)
00048 count = count+1
00049 except IndexError:
00050 pass
00051
00052
00053
00054
00055
00056
00057 libxml2.lineNumbersDefault(1)
00058 libxml2.substituteEntitiesDefault(1)
00059 libxslt.registerExtModuleFunction("adjustColumnWidths",
00060 "http://nwalsh.com/xslt/ext/xsltproc/python/Table",
00061 adjustColumnWidths)
00062
00063
00064 styledoc = libxml2.parseFile(xslfile)
00065 style = libxslt.parseStylesheetDoc(styledoc)
00066 doc = libxml2.parseFile(xmlfile)
00067 result = style.applyStylesheet(doc, params)
00068
00069
00070 if outfile:
00071 style.saveResultToFilename(outfile, result, 0)
00072 else:
00073 print result
00074
00075
00076 style.freeStylesheet()
00077 doc.freeDoc()
00078 result.freeDoc()
00079
00080
00081
00082
00083
00084