old-website/cow/functions.c

50 lines
1.3 KiB
C
Executable File

#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;
int month;
if (nargs != 1) {
xmlXPathSetArityError(ctxt);
}
str = xmlXPathPopString(ctxt);
month = (str[5] - '0')*10 + (str[6] - '0');
ret = xmlUTF8Strndup((const xmlChar*)(month < 9 ? (month < 5 ? "Winter " : "Spring ") : "Fall "), 7);
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);
}