Acknowledge the KDE team for their Crystal SVG icons.
[mspang/www.git] / cow / functions.c
1 #include "debug.h"
2 #include <libxslt/extensions.h>
3 #include <libxml/xpath.h>
4 #include <libxml/xpathInternals.h>
5
6 #define COW_URI ((const xmlChar *)"http://www.csclub.uwaterloo.ca/cow")
7
8 /* return the term ({Winter,Summer,Fall} YYYY) for a date in
9  * YYYY-MM-DD format.
10  */
11 void extension_cow_term(xmlXPathParserContextPtr ctxt,
12                            int nargs)
13 {
14   xmlChar *str, *ret;
15   int month;
16   
17   if (nargs != 1) {
18     xmlXPathSetArityError(ctxt);
19   }
20   str = xmlXPathPopString(ctxt);
21
22   month = (str[5] - '0')*10 + (str[6] - '0');
23
24   ret = xmlUTF8Strndup((const xmlChar*)(month < 9 ? (month < 5 ? "Winter " : "Spring ") : "Fall "), 7);
25   ret = xmlStrcat(ret, xmlUTF8Strsub(str, 0, 4));
26   
27   xmlXPathReturnString(ctxt, ret);
28   xmlFree(str);
29 }
30
31 void *extension_init_func(xsltTransformContextPtr ctxt,
32                           const xmlChar *URI)
33 {
34   return 0;
35 }
36
37 void extension_shutdown_func(xsltTransformContextPtr ctxt,
38                                     const xmlChar *URI,
39                                     void *data)
40 {
41 }
42
43 void init_extensions()
44 {
45   xsltRegisterExtModule(COW_URI,
46                         extension_init_func, extension_shutdown_func);
47   xsltRegisterExtModuleFunction((const xmlChar*)"term", COW_URI,
48                           extension_cow_term);
49 }