2002-04-15 13:37:12 -04:00
|
|
|
#include "debug.h"
|
|
|
|
#include <libxslt/extensions.h>
|
|
|
|
#include <libxml/xpath.h>
|
|
|
|
#include <libxml/xpathInternals.h>
|
|
|
|
|
|
|
|
#define COW_URI ((const xmlChar *)"http://www.csclub.uwaterloo.ca/cow")
|
|
|
|
|
|
|
|
/* return the term ({Winter,Summer,Fall} YYYY) for a date in
|
|
|
|
* YYYY-MM-DD format.
|
|
|
|
*/
|
|
|
|
void extension_cow_term(xmlXPathParserContextPtr ctxt,
|
|
|
|
int nargs)
|
|
|
|
{
|
|
|
|
xmlChar *str, *ret;
|
2002-04-15 17:21:45 -04:00
|
|
|
int month;
|
2002-04-15 13:37:12 -04:00
|
|
|
|
|
|
|
if (nargs != 1) {
|
|
|
|
xmlXPathSetArityError(ctxt);
|
|
|
|
}
|
|
|
|
str = xmlXPathPopString(ctxt);
|
|
|
|
|
|
|
|
month = (str[5] - '0')*10 + (str[6] - '0');
|
|
|
|
|
2002-04-15 20:12:13 -04:00
|
|
|
ret = xmlUTF8Strndup((const xmlChar*)(month < 9 ? (month < 5 ? "Winter " : "Spring ") : "Fall "), 7);
|
2002-04-15 13:37:12 -04:00
|
|
|
ret = xmlStrcat(ret, xmlUTF8Strsub(str, 0, 4));
|
|
|
|
|
|
|
|
xmlXPathReturnString(ctxt, ret);
|
|
|
|
xmlFree(str);
|
|
|
|
}
|
|
|
|
|
|
|
|
void *extension_init_func(xsltTransformContextPtr ctxt,
|
|
|
|
const xmlChar *URI)
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void extension_shutdown_func(xsltTransformContextPtr ctxt,
|
|
|
|
const xmlChar *URI,
|
|
|
|
void *data)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void init_extensions()
|
|
|
|
{
|
|
|
|
xsltRegisterExtModule(COW_URI,
|
|
|
|
extension_init_func, extension_shutdown_func);
|
|
|
|
xsltRegisterExtModuleFunction((const xmlChar*)"term", COW_URI,
|
|
|
|
extension_cow_term);
|
|
|
|
}
|