83 lines
1.9 KiB
Python
83 lines
1.9 KiB
Python
|
#!/usr/bin/python2.4
|
||
|
import os, sys, re, urllib, libxml2, libxslt
|
||
|
|
||
|
#
|
||
|
# globals
|
||
|
#
|
||
|
cscUri = "http://csclub.uwaterloo.ca/xsltproc"
|
||
|
|
||
|
#
|
||
|
# csc:encode-for-uri
|
||
|
#
|
||
|
def cscEncodeForUri(ctx, str):
|
||
|
if type(str) == type([]):
|
||
|
str = libxml2.xmlNode(str[0]).getContent()
|
||
|
print urllib.quote(str)
|
||
|
return urllib.quote(str)
|
||
|
|
||
|
#
|
||
|
# csc:term
|
||
|
#
|
||
|
def cscTerm(ctx, str):
|
||
|
if type(str) == type([]):
|
||
|
str = libxml2.xmlNode(str[0]).getContent()
|
||
|
|
||
|
try:
|
||
|
# YYYY-MM-DD
|
||
|
(year, month, day) = re.findall("^([0-9]+)-([0-9]+)-([0-9]+)$", str)[0]
|
||
|
month = int(month)
|
||
|
if month >= 1 and month <= 4:
|
||
|
return "Winter " + year
|
||
|
elif month >= 5 and month <= 8:
|
||
|
return "Spring " + year
|
||
|
elif month >= 9 and month <= 12:
|
||
|
return "Fall " + year
|
||
|
else:
|
||
|
print "Invalid month '" + month + "'"
|
||
|
except:
|
||
|
print "Invalid term '" + str + "'"
|
||
|
|
||
|
#
|
||
|
# csc:email
|
||
|
#
|
||
|
def cscEmail(ctx, str):
|
||
|
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:
|
||
|
p = p.split("=")
|
||
|
if len(p) == 1:
|
||
|
print "Missing value for parameter " + p[0]
|
||
|
sys.exit(1)
|
||
|
params[p[0]] = "'" + p[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:
|
||
|
print "Unexpected error:", sys.exc_info()[0]
|
||
|
sys.exit(1)
|