2007-11-10 00:55:15 -05:00
|
|
|
#!/usr/bin/python2.4
|
2007-11-10 03:58:28 -05:00
|
|
|
import os, sys, urllib, libxml2, libxslt
|
2007-11-10 00:55:15 -05:00
|
|
|
|
|
|
|
#
|
|
|
|
# globals
|
|
|
|
#
|
|
|
|
cscUri = "http://csclub.uwaterloo.ca/xsltproc"
|
2007-11-10 03:58:28 -05:00
|
|
|
terms = ["Winter", "Spring", "Fall"]
|
2007-11-10 00:55:15 -05:00
|
|
|
|
|
|
|
#
|
|
|
|
# csc:encode-for-uri
|
|
|
|
#
|
|
|
|
def cscEncodeForUri(ctx, str):
|
|
|
|
if type(str) == type([]):
|
|
|
|
str = libxml2.xmlNode(str[0]).getContent()
|
|
|
|
return urllib.quote(str)
|
|
|
|
|
|
|
|
#
|
|
|
|
# csc:term
|
|
|
|
#
|
|
|
|
def cscTerm(ctx, str):
|
|
|
|
if type(str) == type([]):
|
|
|
|
str = libxml2.xmlNode(str[0]).getContent()
|
|
|
|
try:
|
2007-11-10 03:58:28 -05:00
|
|
|
[year, month, day] = str.split("-")
|
|
|
|
term = (int(month) - 1) / 4
|
|
|
|
return terms[term] + " " + year
|
2007-11-10 00:55:15 -05:00
|
|
|
except:
|
2007-11-10 03:58:28 -05:00
|
|
|
print "Invalid term '%s'" % str
|
2007-11-10 00:55:15 -05:00
|
|
|
|
|
|
|
#
|
|
|
|
# csc:email
|
|
|
|
#
|
|
|
|
def cscEmail(ctx, str):
|
2007-11-10 03:58:28 -05:00
|
|
|
if type(str) == type([]):
|
|
|
|
str = libxml2.xmlNode(str[0]).getContent()
|
2007-11-10 00:55:15 -05:00
|
|
|
return "_EMAIL_TODO_"
|
|
|
|
|
|
|
|
#
|
|
|
|
# main
|
|
|
|
#
|
|
|
|
|
|
|
|
# check argv
|
|
|
|
if len(sys.argv) < 4:
|
|
|
|
print "Usage: xsltproc.py input-file style-sheet output-file [params...]"
|
|
|
|
sys.exit(1)
|
|
|
|
inFile = sys.argv[1]
|
|
|
|
xsltFile = sys.argv[2]
|
|
|
|
outFile = sys.argv[3]
|
|
|
|
rawParams = sys.argv[4:]
|
|
|
|
|
|
|
|
# check params
|
|
|
|
params = {}
|
|
|
|
for p in rawParams:
|
2007-11-10 03:58:28 -05:00
|
|
|
try:
|
|
|
|
[key, val] = p.split("=")
|
|
|
|
params[key] = "'" + val + "'"
|
|
|
|
except:
|
|
|
|
print "Missing value for parameter '%s'" % p
|
2007-11-10 00:55:15 -05:00
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
try:
|
|
|
|
# register extensions
|
|
|
|
libxslt.registerExtModuleFunction("encode-for-uri", cscUri, cscEncodeForUri)
|
|
|
|
libxslt.registerExtModuleFunction("term", cscUri, cscTerm)
|
|
|
|
libxslt.registerExtModuleFunction("email", cscUri, cscEmail)
|
|
|
|
|
|
|
|
# parse xml/xslt and apply style-sheet
|
|
|
|
style = libxslt.parseStylesheetFile(xsltFile)
|
|
|
|
doc = libxml2.parseFile(inFile)
|
|
|
|
res = style.applyStylesheet(doc, params)
|
|
|
|
style.saveResultToFilename(outFile, res, 0)
|
|
|
|
|
|
|
|
except:
|
2007-11-10 03:58:28 -05:00
|
|
|
print "Unexpected error: '%s'" % sys.exc_info()[0]
|
2007-11-10 00:55:15 -05:00
|
|
|
sys.exit(1)
|