Added the CSC Ontological Webalizer
[www/www.git] / cow / main.c
1 #include <stdio.h>
2 #include <libxml/xmlmemory.h>
3 #include <libxml/debugXML.h>
4 #include <libxml/HTMLtree.h>
5 #include <libxml/xmlIO.h>
6 #include <libxml/DOCBparser.h>
7 #include <libxml/xinclude.h>
8 #include <libxml/catalog.h>
9 #include <libxslt/xslt.h>
10 #include <libxslt/xsltInternals.h>
11 #include <libxslt/transform.h>
12 #include <libxslt/xsltutils.h>
13
14 extern int xmlLoadExtDtdDefaultValue;
15
16 // output usage message. progname is the name of the executable.
17 static void usage(const char* progname)
18 {
19   printf("Usage: %s [options] stylesheet input\n", progname);
20   printf("      --param name value : pass a parameter to the stylesheet\n");
21 }
22
23 int main(int argc, char** argv)
24 {
25   int argNum;
26   const char **params = 0;
27   int maxparams = 0;
28   int nbparams = 0;
29   xsltStylesheetPtr cur = NULL;
30   xmlDocPtr doc, res;
31   
32   maxparams = 16;
33   params = (const char**)malloc(sizeof(char*) * maxparams * 2);
34   
35   if (argc <= 1) {
36     usage(argv[0]);
37     return 1;
38   }
39
40   for (argNum = 1; argNum < argc; argNum++) {
41     if (argv[argNum][0] != '-')
42       break;
43     if ((!strcmp(argv[argNum], "-param")) ||
44         (!strcmp(argv[argNum], "--param"))) {
45       argNum++;
46       params[nbparams++] = argv[argNum++];
47       params[nbparams++] = argv[argNum];
48       if (nbparams >= maxparams * 2) {
49         maxparams *= 2;
50         params = realloc(params, sizeof(char*) * maxparams * 2);
51       }
52     }  else {
53       fprintf(stderr, "Unknown option %s\n", argv[argNum]);
54       usage(argv[0]);
55       return 1;
56     }
57   }
58   if (argNum == argc) {
59     usage(argv[0]);
60     return 1;
61   }
62   
63   params[nbparams] = NULL;
64   xmlSubstituteEntitiesDefault(1);
65   xmlLoadExtDtdDefaultValue = 1;
66   cur = xsltParseStylesheetFile((const xmlChar *)argv[argNum]);
67   argNum++;
68   doc = xmlParseFile(argv[argNum]);
69   res = xsltApplyStylesheet(cur, doc, params);
70   xsltSaveResultToFile(stdout, res, cur);
71   
72   xsltFreeStylesheet(cur);
73   xmlFreeDoc(res);
74   xmlFreeDoc(doc);
75   
76   xsltCleanupGlobals();
77   xmlCleanupParser();
78   return 0;
79 }