1 #include "RS_XML.h"
2 #include "Utils.h"
3
4 #ifdef FROM_GNOME_XML_DIR
5 #include <gnome-xml/parser.h>
6 #else
7 #include <libxml/parser.h>
8 #endif
9
10 SEXP
R_getXMLFeatures()11 R_getXMLFeatures()
12 {
13
14 #ifdef HAVE_XML_HAS_FEATURE
15
16 int features[] = {
17 XML_WITH_THREAD,
18 XML_WITH_TREE,
19 XML_WITH_OUTPUT,
20 XML_WITH_PUSH,
21 XML_WITH_READER,
22 XML_WITH_PATTERN,
23 XML_WITH_WRITER,
24 XML_WITH_SAX1,
25 XML_WITH_FTP,
26 XML_WITH_HTTP,
27 XML_WITH_VALID,
28 XML_WITH_HTML,
29 XML_WITH_LEGACY,
30 XML_WITH_C14N,
31 XML_WITH_CATALOG,
32 XML_WITH_XPATH,
33 XML_WITH_XPTR,
34 XML_WITH_XINCLUDE,
35 XML_WITH_ICONV,
36 XML_WITH_ISO8859X,
37 XML_WITH_UNICODE,
38 XML_WITH_REGEXP,
39 XML_WITH_AUTOMATA,
40 XML_WITH_EXPR,
41 XML_WITH_SCHEMAS,
42 XML_WITH_SCHEMATRON,
43 XML_WITH_MODULES,
44 XML_WITH_DEBUG,
45 XML_WITH_DEBUG_MEM,
46 XML_WITH_DEBUG_RUN,
47 #ifdef HAVE_XML_WITH_ZLIB
48 XML_WITH_ZLIB
49 #else
50 -1
51 #endif
52 };
53
54 const char * const names[] = {
55 "THREAD",
56 "TREE",
57 "OUTPUT",
58 "PUSH",
59 "READER",
60 "PATTERN",
61 "WRITER",
62 "SAX1",
63 "FTP",
64 "HTTP",
65 "VALID",
66 "HTML",
67 "LEGACY",
68 "C14N",
69 "CATALOG",
70 "XPATH",
71 "XPTR",
72 "XINCLUDE",
73 "ICONV",
74 "ISO8859X",
75 "UNICODE",
76 "REGEXP",
77 "AUTOMATA",
78 "EXPR",
79 "SCHEMAS",
80 "SCHEMATRON",
81 "MODULES",
82 "DEBUG",
83 "DEBUG_MEM",
84 "DEBUG_RUN",
85 "ZLIB"
86 };
87
88 SEXP ans, rnames;
89 int n = sizeof(features)/sizeof(features[0]), i;
90
91 PROTECT(ans = allocVector(LGLSXP, n));
92 PROTECT(rnames = allocVector(STRSXP, n));
93 for(i = 0; i < n; i++) {
94 if(features[i] > -1)
95 LOGICAL(ans)[i] = xmlHasFeature(features[i]);
96 else
97 LOGICAL(ans)[i] = NA_LOGICAL;
98 SET_STRING_ELT(rnames, i, mkChar(names[i]));
99 }
100 SET_NAMES(ans, rnames);
101 UNPROTECT(2);
102
103 return(ans);
104 #else
105 return(allocVector(STRSXP, 0));
106 #endif
107 }
108