old-website/scripts/xsltproc.py

77 lines
1.7 KiB
Python
Raw Normal View History

#!/usr/bin/python2.4
2007-11-10 03:58:28 -05:00
import os, sys, urllib, libxml2, libxslt
#
# globals
#
cscUri = "http://csclub.uwaterloo.ca/xsltproc"
2007-11-10 03:58:28 -05:00
terms = ["Winter", "Spring", "Fall"]
#
# 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
except:
2007-11-10 03:58:28 -05:00
print "Invalid term '%s'" % str
#
# csc:email
#
def cscEmail(ctx, str):
2007-11-10 03:58:28 -05:00
if type(str) == type([]):
str = libxml2.xmlNode(str[0]).getContent()
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
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]
sys.exit(1)