rsvg2 1.2.1-x86-mingw32 → 1.2.2-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. data/lib/1.9/rsvg2.so +0 -0
  2. data/lib/2.0/rsvg2.so +0 -0
  3. metadata +332 -508
  4. data/lib/1.8/rsvg2.so +0 -0
  5. data/vendor/local/manifest/libxml2-dev_2.7.7-1_win32.mft +0 -267
  6. data/vendor/local/manifest/libxml2_2.7.7-1_win32.mft +0 -2
  7. data/vendor/local/share/doc/libxml2-2.7.7/Copyright +0 -27
  8. data/vendor/local/share/doc/libxml2-2.7.7/examples/testHTML.c +0 -880
  9. data/vendor/local/share/doc/libxml2-2.7.7/examples/testSAX.c +0 -1198
  10. data/vendor/local/share/doc/libxml2-2.7.7/examples/testXPath.c +0 -227
  11. data/vendor/local/share/doc/libxml2-2.7.7/examples/xmllint.c +0 -3722
  12. data/vendor/local/share/doc/libxml2-2.7.7/html/DOM.gif +0 -0
  13. data/vendor/local/share/doc/libxml2-2.7.7/html/FAQ.html +0 -282
  14. data/vendor/local/share/doc/libxml2-2.7.7/html/Libxml2-Logo-180x168.gif +0 -0
  15. data/vendor/local/share/doc/libxml2-2.7.7/html/Libxml2-Logo-90x34.gif +0 -0
  16. data/vendor/local/share/doc/libxml2-2.7.7/html/encoding.html +0 -206
  17. data/vendor/local/share/doc/libxml2-2.7.7/html/examples.xml +0 -751
  18. data/vendor/local/share/doc/libxml2-2.7.7/html/examples.xsl +0 -174
  19. data/vendor/local/share/doc/libxml2-2.7.7/html/html/book1.html +0 -13
  20. data/vendor/local/share/doc/libxml2-2.7.7/html/html/home.png +0 -0
  21. data/vendor/local/share/doc/libxml2-2.7.7/html/html/index.html +0 -13
  22. data/vendor/local/share/doc/libxml2-2.7.7/html/html/left.png +0 -0
  23. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-DOCBparser.html +0 -51
  24. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-HTMLparser.html +0 -182
  25. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-HTMLtree.html +0 -73
  26. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-SAX.html +0 -125
  27. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-SAX2.html +0 -128
  28. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-c14n.html +0 -38
  29. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-catalog.html +0 -142
  30. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-chvalid.html +0 -72
  31. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-debugXML.html +0 -120
  32. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-dict.html +0 -49
  33. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-encoding.html +0 -118
  34. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-entities.html +0 -79
  35. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-globals.html +0 -152
  36. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-hash.html +0 -116
  37. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-lib.html +0 -13
  38. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-list.html +0 -120
  39. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-nanoftp.html +0 -92
  40. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-nanohttp.html +0 -65
  41. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-parser.html +0 -555
  42. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-parserInternals.html +0 -319
  43. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-pattern.html +0 -76
  44. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-relaxng.html +0 -162
  45. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-schemasInternals.html +0 -373
  46. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-schematron.html +0 -81
  47. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-threads.html +0 -72
  48. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-tree.html +0 -958
  49. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-uri.html +0 -73
  50. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-valid.html +0 -289
  51. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xinclude.html +0 -59
  52. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xlink.html +0 -82
  53. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlIO.html +0 -206
  54. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlautomata.html +0 -85
  55. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlerror.html +0 -862
  56. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlexports.html +0 -20
  57. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlmemory.html +0 -107
  58. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlmodule.html +0 -38
  59. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlreader.html +0 -327
  60. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlregexp.html +0 -143
  61. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlsave.html +0 -59
  62. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlschemas.html +0 -173
  63. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlschemastypes.html +0 -123
  64. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlstring.html +0 -108
  65. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlunicode.html +0 -512
  66. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlversion.html +0 -60
  67. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xmlwriter.html +0 -258
  68. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xpath.html +0 -307
  69. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xpathInternals.html +0 -394
  70. data/vendor/local/share/doc/libxml2-2.7.7/html/html/libxml-xpointer.html +0 -83
  71. data/vendor/local/share/doc/libxml2-2.7.7/html/html/right.png +0 -0
  72. data/vendor/local/share/doc/libxml2-2.7.7/html/html/up.png +0 -0
  73. data/vendor/local/share/doc/libxml2-2.7.7/html/io1.c +0 -166
  74. data/vendor/local/share/doc/libxml2-2.7.7/html/io1.res +0 -5
  75. data/vendor/local/share/doc/libxml2-2.7.7/html/io2.c +0 -58
  76. data/vendor/local/share/doc/libxml2-2.7.7/html/io2.res +0 -2
  77. data/vendor/local/share/doc/libxml2-2.7.7/html/libxml.gif +0 -0
  78. data/vendor/local/share/doc/libxml2-2.7.7/html/parse1.c +0 -56
  79. data/vendor/local/share/doc/libxml2-2.7.7/html/parse2.c +0 -72
  80. data/vendor/local/share/doc/libxml2-2.7.7/html/parse3.c +0 -60
  81. data/vendor/local/share/doc/libxml2-2.7.7/html/parse4.c +0 -143
  82. data/vendor/local/share/doc/libxml2-2.7.7/html/reader1.c +0 -107
  83. data/vendor/local/share/doc/libxml2-2.7.7/html/reader1.res +0 -14
  84. data/vendor/local/share/doc/libxml2-2.7.7/html/reader2.c +0 -122
  85. data/vendor/local/share/doc/libxml2-2.7.7/html/reader3.c +0 -120
  86. data/vendor/local/share/doc/libxml2-2.7.7/html/reader3.res +0 -13
  87. data/vendor/local/share/doc/libxml2-2.7.7/html/reader4.c +0 -122
  88. data/vendor/local/share/doc/libxml2-2.7.7/html/reader4.res +0 -3
  89. data/vendor/local/share/doc/libxml2-2.7.7/html/redhat.gif +0 -0
  90. data/vendor/local/share/doc/libxml2-2.7.7/html/smallfootonly.gif +0 -0
  91. data/vendor/local/share/doc/libxml2-2.7.7/html/structure.gif +0 -0
  92. data/vendor/local/share/doc/libxml2-2.7.7/html/test1.xml +0 -1
  93. data/vendor/local/share/doc/libxml2-2.7.7/html/test2.xml +0 -13
  94. data/vendor/local/share/doc/libxml2-2.7.7/html/test3.xml +0 -39
  95. data/vendor/local/share/doc/libxml2-2.7.7/html/testWriter.c +0 -1198
  96. data/vendor/local/share/doc/libxml2-2.7.7/html/tree1.c +0 -94
  97. data/vendor/local/share/doc/libxml2-2.7.7/html/tree1.res +0 -4
  98. data/vendor/local/share/doc/libxml2-2.7.7/html/tree2.c +0 -118
  99. data/vendor/local/share/doc/libxml2-2.7.7/html/tree2.res +0 -18
  100. data/vendor/local/share/doc/libxml2-2.7.7/html/tst.xml +0 -7
  101. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/apa.html +0 -8
  102. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/apb.html +0 -14
  103. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/apc.html +0 -82
  104. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/apd.html +0 -76
  105. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/ape.html +0 -78
  106. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/apf.html +0 -67
  107. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/apg.html +0 -75
  108. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/aph.html +0 -76
  109. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/api.html +0 -4
  110. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/ar01s02.html +0 -14
  111. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/ar01s03.html +0 -47
  112. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/ar01s04.html +0 -54
  113. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/ar01s05.html +0 -55
  114. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/ar01s06.html +0 -35
  115. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/ar01s07.html +0 -30
  116. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/ar01s08.html +0 -38
  117. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/ar01s09.html +0 -63
  118. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/blank.png +0 -0
  119. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/callouts/1.png +0 -0
  120. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/callouts/10.png +0 -0
  121. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/callouts/2.png +0 -0
  122. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/callouts/3.png +0 -0
  123. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/callouts/4.png +0 -0
  124. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/callouts/5.png +0 -0
  125. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/callouts/6.png +0 -0
  126. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/callouts/7.png +0 -0
  127. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/callouts/8.png +0 -0
  128. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/callouts/9.png +0 -0
  129. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/caution.png +0 -0
  130. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/draft.png +0 -0
  131. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/home.png +0 -0
  132. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/important.png +0 -0
  133. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/next.png +0 -0
  134. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/note.png +0 -0
  135. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/prev.png +0 -0
  136. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/tip.png +0 -0
  137. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/toc-blank.png +0 -0
  138. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/toc-minus.png +0 -0
  139. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/toc-plus.png +0 -0
  140. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/up.png +0 -0
  141. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/images/warning.png +0 -0
  142. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/includeaddattribute.c +0 -64
  143. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/includeaddkeyword.c +0 -75
  144. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/includeconvert.c +0 -73
  145. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/includegetattribute.c +0 -72
  146. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/includekeyword.c +0 -79
  147. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/includexpath.c +0 -74
  148. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/index.html +0 -14
  149. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/ix01.html +0 -1
  150. data/vendor/local/share/doc/libxml2-2.7.7/html/tutorial/xmltutorial.pdf +0 -1336
  151. data/vendor/local/share/doc/libxml2-2.7.7/html/w3c.png +0 -0
  152. data/vendor/local/share/doc/libxml2-2.7.7/html/writer.xml +0 -2
  153. data/vendor/local/share/doc/libxml2-2.7.7/html/xml.html +0 -5344
  154. data/vendor/local/share/doc/libxml2-2.7.7/html/xpath1.c +0 -250
  155. data/vendor/local/share/doc/libxml2-2.7.7/html/xpath1.res +0 -5
  156. data/vendor/local/share/doc/libxml2-2.7.7/html/xpath2.c +0 -190
  157. data/vendor/local/share/doc/libxml2-2.7.7/html/xpath2.res +0 -30
  158. data/vendor/local/src/tml/packaging/libxml2_2.7.7-1_win32.log +0 -1244
  159. data/vendor/local/src/tml/packaging/libxml2_2.7.7-1_win32.sh +0 -66
@@ -1,227 +0,0 @@
1
- /*
2
- * testXPath.c : a small tester program for XPath.
3
- *
4
- * See Copyright for the status of this software.
5
- *
6
- * daniel@veillard.com
7
- */
8
-
9
- #include "libxml.h"
10
- #if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED)
11
-
12
- #include <string.h>
13
-
14
- #ifdef HAVE_SYS_TYPES_H
15
- #include <sys/types.h>
16
- #endif
17
- #ifdef HAVE_SYS_STAT_H
18
- #include <sys/stat.h>
19
- #endif
20
- #ifdef HAVE_FCNTL_H
21
- #include <fcntl.h>
22
- #endif
23
- #ifdef HAVE_UNISTD_H
24
- #include <unistd.h>
25
- #endif
26
- #ifdef HAVE_STDLIB_H
27
- #include <stdlib.h>
28
- #endif
29
-
30
-
31
- #include <libxml/xpath.h>
32
- #include <libxml/tree.h>
33
- #include <libxml/parser.h>
34
- #include <libxml/debugXML.h>
35
- #include <libxml/xmlmemory.h>
36
- #include <libxml/parserInternals.h>
37
- #include <libxml/xpathInternals.h>
38
- #include <libxml/xmlerror.h>
39
- #include <libxml/globals.h>
40
- #if defined(LIBXML_XPTR_ENABLED)
41
- #include <libxml/xpointer.h>
42
- static int xptr = 0;
43
- #endif
44
- static int debug = 0;
45
- static int valid = 0;
46
- static int expr = 0;
47
- static int tree = 0;
48
- static int nocdata = 0;
49
- static xmlDocPtr document = NULL;
50
-
51
- /*
52
- * Default document
53
- */
54
- static xmlChar buffer[] =
55
- "<?xml version=\"1.0\"?>\n\
56
- <EXAMPLE prop1=\"gnome is great\" prop2=\"&amp; linux too\">\n\
57
- <head>\n\
58
- <title>Welcome to Gnome</title>\n\
59
- </head>\n\
60
- <chapter>\n\
61
- <title>The Linux adventure</title>\n\
62
- <p>bla bla bla ...</p>\n\
63
- <image href=\"linus.gif\"/>\n\
64
- <p>...</p>\n\
65
- </chapter>\n\
66
- <chapter>\n\
67
- <title>Chapter 2</title>\n\
68
- <p>this is chapter 2 ...</p>\n\
69
- </chapter>\n\
70
- <chapter>\n\
71
- <title>Chapter 3</title>\n\
72
- <p>this is chapter 3 ...</p>\n\
73
- </chapter>\n\
74
- </EXAMPLE>\n\
75
- ";
76
-
77
-
78
- static void
79
- testXPath(const char *str) {
80
- xmlXPathObjectPtr res;
81
- xmlXPathContextPtr ctxt;
82
-
83
- #if defined(LIBXML_XPTR_ENABLED)
84
- if (xptr) {
85
- ctxt = xmlXPtrNewContext(document, NULL, NULL);
86
- res = xmlXPtrEval(BAD_CAST str, ctxt);
87
- } else {
88
- #endif
89
- ctxt = xmlXPathNewContext(document);
90
- ctxt->node = xmlDocGetRootElement(document);
91
- if (expr)
92
- res = xmlXPathEvalExpression(BAD_CAST str, ctxt);
93
- else {
94
- /* res = xmlXPathEval(BAD_CAST str, ctxt); */
95
- xmlXPathCompExprPtr comp;
96
-
97
- comp = xmlXPathCompile(BAD_CAST str);
98
- if (comp != NULL) {
99
- if (tree)
100
- xmlXPathDebugDumpCompExpr(stdout, comp, 0);
101
-
102
- res = xmlXPathCompiledEval(comp, ctxt);
103
- xmlXPathFreeCompExpr(comp);
104
- } else
105
- res = NULL;
106
- }
107
- #if defined(LIBXML_XPTR_ENABLED)
108
- }
109
- #endif
110
- xmlXPathDebugDumpObject(stdout, res, 0);
111
- xmlXPathFreeObject(res);
112
- xmlXPathFreeContext(ctxt);
113
- }
114
-
115
- static void
116
- testXPathFile(const char *filename) {
117
- FILE *input;
118
- char expression[5000];
119
- int len;
120
-
121
- input = fopen(filename, "r");
122
- if (input == NULL) {
123
- xmlGenericError(xmlGenericErrorContext,
124
- "Cannot open %s for reading\n", filename);
125
- return;
126
- }
127
- while (fgets(expression, 4500, input) != NULL) {
128
- len = strlen(expression);
129
- len--;
130
- while ((len >= 0) &&
131
- ((expression[len] == '\n') || (expression[len] == '\t') ||
132
- (expression[len] == '\r') || (expression[len] == ' '))) len--;
133
- expression[len + 1] = 0;
134
- if (len >= 0) {
135
- printf("\n========================\nExpression: %s\n", expression) ;
136
- testXPath(expression);
137
- }
138
- }
139
-
140
- fclose(input);
141
- }
142
-
143
- int main(int argc, char **argv) {
144
- int i;
145
- int strings = 0;
146
- int usefile = 0;
147
- char *filename = NULL;
148
-
149
- for (i = 1; i < argc ; i++) {
150
- #if defined(LIBXML_XPTR_ENABLED)
151
- if ((!strcmp(argv[i], "-xptr")) || (!strcmp(argv[i], "--xptr")))
152
- xptr++;
153
- else
154
- #endif
155
- if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
156
- debug++;
157
- else if ((!strcmp(argv[i], "-valid")) || (!strcmp(argv[i], "--valid")))
158
- valid++;
159
- else if ((!strcmp(argv[i], "-expr")) || (!strcmp(argv[i], "--expr")))
160
- expr++;
161
- else if ((!strcmp(argv[i], "-tree")) || (!strcmp(argv[i], "--tree")))
162
- tree++;
163
- else if ((!strcmp(argv[i], "-nocdata")) ||
164
- (!strcmp(argv[i], "--nocdata")))
165
- nocdata++;
166
- else if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "--input")))
167
- filename = argv[++i];
168
- else if ((!strcmp(argv[i], "-f")) || (!strcmp(argv[i], "--file")))
169
- usefile++;
170
- }
171
- if (valid != 0) xmlDoValidityCheckingDefaultValue = 1;
172
- xmlLoadExtDtdDefaultValue |= XML_DETECT_IDS;
173
- xmlLoadExtDtdDefaultValue |= XML_COMPLETE_ATTRS;
174
- xmlSubstituteEntitiesDefaultValue = 1;
175
- if (nocdata != 0) {
176
- xmlDefaultSAXHandlerInit();
177
- xmlDefaultSAXHandler.cdataBlock = NULL;
178
- }
179
- if (document == NULL) {
180
- if (filename == NULL)
181
- document = xmlReadDoc(buffer,NULL,NULL,XML_PARSE_COMPACT);
182
- else
183
- document = xmlReadFile(filename,NULL,XML_PARSE_COMPACT);
184
- }
185
- for (i = 1; i < argc ; i++) {
186
- if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "--input"))) {
187
- i++; continue;
188
- }
189
- if (argv[i][0] != '-') {
190
- if (usefile)
191
- testXPathFile(argv[i]);
192
- else
193
- testXPath(argv[i]);
194
- strings ++;
195
- }
196
- }
197
- if (strings == 0) {
198
- printf("Usage : %s [--debug] [--copy] stringsorfiles ...\n",
199
- argv[0]);
200
- printf("\tParse the XPath strings and output the result of the parsing\n");
201
- printf("\t--debug : dump a debug version of the result\n");
202
- printf("\t--valid : switch on DTD support in the parser\n");
203
- #if defined(LIBXML_XPTR_ENABLED)
204
- printf("\t--xptr : expressions are XPointer expressions\n");
205
- #endif
206
- printf("\t--expr : debug XPath expressions only\n");
207
- printf("\t--tree : show the compiled XPath tree\n");
208
- printf("\t--nocdata : do not generate CDATA nodes\n");
209
- printf("\t--input filename : or\n");
210
- printf("\t-i filename : read the document from filename\n");
211
- printf("\t--file : or\n");
212
- printf("\t-f : read queries from files, args\n");
213
- }
214
- if (document != NULL)
215
- xmlFreeDoc(document);
216
- xmlCleanupParser();
217
- xmlMemoryDump();
218
-
219
- return(0);
220
- }
221
- #else
222
- #include <stdio.h>
223
- int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
224
- printf("%s : XPath/Debug support not compiled in\n", argv[0]);
225
- return(0);
226
- }
227
- #endif /* LIBXML_XPATH_ENABLED */
@@ -1,3722 +0,0 @@
1
- /*
2
- * xmllint.c : a small tester program for XML input.
3
- *
4
- * See Copyright for the status of this software.
5
- *
6
- * daniel@veillard.com
7
- */
8
-
9
- #include "libxml.h"
10
-
11
- #include <string.h>
12
- #include <stdarg.h>
13
- #include <assert.h>
14
-
15
- #if defined (_WIN32) && !defined(__CYGWIN__)
16
- #if defined (_MSC_VER) || defined(__BORLANDC__)
17
- #include <winsock2.h>
18
- #pragma comment(lib, "ws2_32.lib")
19
- #define gettimeofday(p1,p2)
20
- #endif /* _MSC_VER */
21
- #endif /* _WIN32 */
22
-
23
- #ifdef HAVE_SYS_TIME_H
24
- #include <sys/time.h>
25
- #endif
26
- #ifdef HAVE_TIME_H
27
- #include <time.h>
28
- #endif
29
-
30
- #ifdef __MINGW32__
31
- #define _WINSOCKAPI_
32
- #include <wsockcompat.h>
33
- #include <winsock2.h>
34
- #undef XML_SOCKLEN_T
35
- #define XML_SOCKLEN_T unsigned int
36
- #endif
37
-
38
- #ifdef HAVE_SYS_TIMEB_H
39
- #include <sys/timeb.h>
40
- #endif
41
-
42
- #ifdef HAVE_SYS_TYPES_H
43
- #include <sys/types.h>
44
- #endif
45
- #ifdef HAVE_SYS_STAT_H
46
- #include <sys/stat.h>
47
- #endif
48
- #ifdef HAVE_FCNTL_H
49
- #include <fcntl.h>
50
- #endif
51
- #ifdef HAVE_UNISTD_H
52
- #include <unistd.h>
53
- #endif
54
- #ifdef HAVE_SYS_MMAN_H
55
- #include <sys/mman.h>
56
- /* seems needed for Solaris */
57
- #ifndef MAP_FAILED
58
- #define MAP_FAILED ((void *) -1)
59
- #endif
60
- #endif
61
- #ifdef HAVE_STDLIB_H
62
- #include <stdlib.h>
63
- #endif
64
- #ifdef HAVE_LIBREADLINE
65
- #include <readline/readline.h>
66
- #ifdef HAVE_LIBHISTORY
67
- #include <readline/history.h>
68
- #endif
69
- #endif
70
-
71
- #include <libxml/xmlmemory.h>
72
- #include <libxml/parser.h>
73
- #include <libxml/parserInternals.h>
74
- #include <libxml/HTMLparser.h>
75
- #include <libxml/HTMLtree.h>
76
- #include <libxml/tree.h>
77
- #include <libxml/xpath.h>
78
- #include <libxml/debugXML.h>
79
- #include <libxml/xmlerror.h>
80
- #ifdef LIBXML_XINCLUDE_ENABLED
81
- #include <libxml/xinclude.h>
82
- #endif
83
- #ifdef LIBXML_CATALOG_ENABLED
84
- #include <libxml/catalog.h>
85
- #endif
86
- #include <libxml/globals.h>
87
- #include <libxml/xmlreader.h>
88
- #ifdef LIBXML_SCHEMATRON_ENABLED
89
- #include <libxml/schematron.h>
90
- #endif
91
- #ifdef LIBXML_SCHEMAS_ENABLED
92
- #include <libxml/relaxng.h>
93
- #include <libxml/xmlschemas.h>
94
- #endif
95
- #ifdef LIBXML_PATTERN_ENABLED
96
- #include <libxml/pattern.h>
97
- #endif
98
- #ifdef LIBXML_C14N_ENABLED
99
- #include <libxml/c14n.h>
100
- #endif
101
- #ifdef LIBXML_OUTPUT_ENABLED
102
- #include <libxml/xmlsave.h>
103
- #endif
104
-
105
- #ifndef XML_XML_DEFAULT_CATALOG
106
- #define XML_XML_DEFAULT_CATALOG "file:///etc/xml/catalog"
107
- #endif
108
-
109
- typedef enum {
110
- XMLLINT_RETURN_OK = 0, /* No error */
111
- XMLLINT_ERR_UNCLASS = 1, /* Unclassified */
112
- XMLLINT_ERR_DTD = 2, /* Error in DTD */
113
- XMLLINT_ERR_VALID = 3, /* Validation error */
114
- XMLLINT_ERR_RDFILE = 4, /* CtxtReadFile error */
115
- XMLLINT_ERR_SCHEMACOMP = 5, /* Schema compilation */
116
- XMLLINT_ERR_OUT = 6, /* Error writing output */
117
- XMLLINT_ERR_SCHEMAPAT = 7, /* Error in schema pattern */
118
- XMLLINT_ERR_RDREGIS = 8, /* Error in Reader registration */
119
- XMLLINT_ERR_MEM = 9, /* Out of memory error */
120
- XMLLINT_ERR_XPATH = 10 /* XPath evaluation error */
121
- } xmllintReturnCode;
122
- #ifdef LIBXML_DEBUG_ENABLED
123
- static int shell = 0;
124
- static int debugent = 0;
125
- #endif
126
- static int debug = 0;
127
- static int maxmem = 0;
128
- #ifdef LIBXML_TREE_ENABLED
129
- static int copy = 0;
130
- #endif /* LIBXML_TREE_ENABLED */
131
- static int recovery = 0;
132
- static int noent = 0;
133
- static int noblanks = 0;
134
- static int noout = 0;
135
- static int nowrap = 0;
136
- #ifdef LIBXML_OUTPUT_ENABLED
137
- static int format = 0;
138
- static const char *output = NULL;
139
- static int compress = 0;
140
- static int oldout = 0;
141
- #endif /* LIBXML_OUTPUT_ENABLED */
142
- #ifdef LIBXML_VALID_ENABLED
143
- static int valid = 0;
144
- static int postvalid = 0;
145
- static char * dtdvalid = NULL;
146
- static char * dtdvalidfpi = NULL;
147
- #endif
148
- #ifdef LIBXML_SCHEMAS_ENABLED
149
- static char * relaxng = NULL;
150
- static xmlRelaxNGPtr relaxngschemas = NULL;
151
- static char * schema = NULL;
152
- static xmlSchemaPtr wxschemas = NULL;
153
- #endif
154
- #ifdef LIBXML_SCHEMATRON_ENABLED
155
- static char * schematron = NULL;
156
- static xmlSchematronPtr wxschematron = NULL;
157
- #endif
158
- static int repeat = 0;
159
- static int insert = 0;
160
- #if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED)
161
- static int html = 0;
162
- static int xmlout = 0;
163
- #endif
164
- static int htmlout = 0;
165
- #ifdef LIBXML_PUSH_ENABLED
166
- static int push = 0;
167
- #endif /* LIBXML_PUSH_ENABLED */
168
- #ifdef HAVE_SYS_MMAN_H
169
- static int memory = 0;
170
- #endif
171
- static int testIO = 0;
172
- static char *encoding = NULL;
173
- #ifdef LIBXML_XINCLUDE_ENABLED
174
- static int xinclude = 0;
175
- #endif
176
- static int dtdattrs = 0;
177
- static int loaddtd = 0;
178
- static xmllintReturnCode progresult = XMLLINT_RETURN_OK;
179
- static int timing = 0;
180
- static int generate = 0;
181
- static int dropdtd = 0;
182
- #ifdef LIBXML_CATALOG_ENABLED
183
- static int catalogs = 0;
184
- static int nocatalogs = 0;
185
- #endif
186
- #ifdef LIBXML_C14N_ENABLED
187
- static int canonical = 0;
188
- static int canonical_11 = 0;
189
- static int exc_canonical = 0;
190
- #endif
191
- #ifdef LIBXML_READER_ENABLED
192
- static int stream = 0;
193
- static int walker = 0;
194
- #endif /* LIBXML_READER_ENABLED */
195
- static int chkregister = 0;
196
- static int nbregister = 0;
197
- #ifdef LIBXML_SAX1_ENABLED
198
- static int sax1 = 0;
199
- #endif /* LIBXML_SAX1_ENABLED */
200
- #ifdef LIBXML_PATTERN_ENABLED
201
- static const char *pattern = NULL;
202
- static xmlPatternPtr patternc = NULL;
203
- static xmlStreamCtxtPtr patstream = NULL;
204
- #endif
205
- #ifdef LIBXML_XPATH_ENABLED
206
- static const char *xpathquery = NULL;
207
- #endif
208
- static int options = XML_PARSE_COMPACT;
209
- static int sax = 0;
210
- static int oldxml10 = 0;
211
-
212
- /************************************************************************
213
- * *
214
- * Entity loading control and customization. *
215
- * *
216
- ************************************************************************/
217
- #define MAX_PATHS 64
218
- #ifdef _WIN32
219
- # define PATH_SEPARATOR ';'
220
- #else
221
- # define PATH_SEPARATOR ':'
222
- #endif
223
- static xmlChar *paths[MAX_PATHS + 1];
224
- static int nbpaths = 0;
225
- static int load_trace = 0;
226
-
227
- static
228
- void parsePath(const xmlChar *path) {
229
- const xmlChar *cur;
230
-
231
- if (path == NULL)
232
- return;
233
- while (*path != 0) {
234
- if (nbpaths >= MAX_PATHS) {
235
- fprintf(stderr, "MAX_PATHS reached: too many paths\n");
236
- return;
237
- }
238
- cur = path;
239
- while ((*cur == ' ') || (*cur == PATH_SEPARATOR))
240
- cur++;
241
- path = cur;
242
- while ((*cur != 0) && (*cur != ' ') && (*cur != PATH_SEPARATOR))
243
- cur++;
244
- if (cur != path) {
245
- paths[nbpaths] = xmlStrndup(path, cur - path);
246
- if (paths[nbpaths] != NULL)
247
- nbpaths++;
248
- path = cur;
249
- }
250
- }
251
- }
252
-
253
- static xmlExternalEntityLoader defaultEntityLoader = NULL;
254
-
255
- static xmlParserInputPtr
256
- xmllintExternalEntityLoader(const char *URL, const char *ID,
257
- xmlParserCtxtPtr ctxt) {
258
- xmlParserInputPtr ret;
259
- warningSAXFunc warning = NULL;
260
- errorSAXFunc err = NULL;
261
-
262
- int i;
263
- const char *lastsegment = URL;
264
- const char *iter = URL;
265
-
266
- if ((nbpaths > 0) && (iter != NULL)) {
267
- while (*iter != 0) {
268
- if (*iter == '/')
269
- lastsegment = iter + 1;
270
- iter++;
271
- }
272
- }
273
-
274
- if ((ctxt != NULL) && (ctxt->sax != NULL)) {
275
- warning = ctxt->sax->warning;
276
- err = ctxt->sax->error;
277
- ctxt->sax->warning = NULL;
278
- ctxt->sax->error = NULL;
279
- }
280
-
281
- if (defaultEntityLoader != NULL) {
282
- ret = defaultEntityLoader(URL, ID, ctxt);
283
- if (ret != NULL) {
284
- if (warning != NULL)
285
- ctxt->sax->warning = warning;
286
- if (err != NULL)
287
- ctxt->sax->error = err;
288
- if (load_trace) {
289
- fprintf \
290
- (stderr,
291
- "Loaded URL=\"%s\" ID=\"%s\"\n",
292
- URL ? URL : "(null)",
293
- ID ? ID : "(null)");
294
- }
295
- return(ret);
296
- }
297
- }
298
- for (i = 0;i < nbpaths;i++) {
299
- xmlChar *newURL;
300
-
301
- newURL = xmlStrdup((const xmlChar *) paths[i]);
302
- newURL = xmlStrcat(newURL, (const xmlChar *) "/");
303
- newURL = xmlStrcat(newURL, (const xmlChar *) lastsegment);
304
- if (newURL != NULL) {
305
- ret = defaultEntityLoader((const char *)newURL, ID, ctxt);
306
- if (ret != NULL) {
307
- if (warning != NULL)
308
- ctxt->sax->warning = warning;
309
- if (err != NULL)
310
- ctxt->sax->error = err;
311
- if (load_trace) {
312
- fprintf \
313
- (stderr,
314
- "Loaded URL=\"%s\" ID=\"%s\"\n",
315
- newURL,
316
- ID ? ID : "(null)");
317
- }
318
- xmlFree(newURL);
319
- return(ret);
320
- }
321
- xmlFree(newURL);
322
- }
323
- }
324
- if (err != NULL)
325
- ctxt->sax->error = err;
326
- if (warning != NULL) {
327
- ctxt->sax->warning = warning;
328
- if (URL != NULL)
329
- warning(ctxt, "failed to load external entity \"%s\"\n", URL);
330
- else if (ID != NULL)
331
- warning(ctxt, "failed to load external entity \"%s\"\n", ID);
332
- }
333
- return(NULL);
334
- }
335
- /************************************************************************
336
- * *
337
- * Memory allocation consumption debugging *
338
- * *
339
- ************************************************************************/
340
-
341
- static void
342
- OOM(void)
343
- {
344
- fprintf(stderr, "Ran out of memory needs > %d bytes\n", maxmem);
345
- progresult = XMLLINT_ERR_MEM;
346
- }
347
-
348
- static void
349
- myFreeFunc(void *mem)
350
- {
351
- xmlMemFree(mem);
352
- }
353
- static void *
354
- myMallocFunc(size_t size)
355
- {
356
- void *ret;
357
-
358
- ret = xmlMemMalloc(size);
359
- if (ret != NULL) {
360
- if (xmlMemUsed() > maxmem) {
361
- OOM();
362
- xmlMemFree(ret);
363
- return (NULL);
364
- }
365
- }
366
- return (ret);
367
- }
368
- static void *
369
- myReallocFunc(void *mem, size_t size)
370
- {
371
- void *ret;
372
-
373
- ret = xmlMemRealloc(mem, size);
374
- if (ret != NULL) {
375
- if (xmlMemUsed() > maxmem) {
376
- OOM();
377
- xmlMemFree(ret);
378
- return (NULL);
379
- }
380
- }
381
- return (ret);
382
- }
383
- static char *
384
- myStrdupFunc(const char *str)
385
- {
386
- char *ret;
387
-
388
- ret = xmlMemoryStrdup(str);
389
- if (ret != NULL) {
390
- if (xmlMemUsed() > maxmem) {
391
- OOM();
392
- xmlFree(ret);
393
- return (NULL);
394
- }
395
- }
396
- return (ret);
397
- }
398
- /************************************************************************
399
- * *
400
- * Internal timing routines to remove the necessity to have *
401
- * unix-specific function calls. *
402
- * *
403
- ************************************************************************/
404
-
405
- #ifndef HAVE_GETTIMEOFDAY
406
- #ifdef HAVE_SYS_TIMEB_H
407
- #ifdef HAVE_SYS_TIME_H
408
- #ifdef HAVE_FTIME
409
-
410
- static int
411
- my_gettimeofday(struct timeval *tvp, void *tzp)
412
- {
413
- struct timeb timebuffer;
414
-
415
- ftime(&timebuffer);
416
- if (tvp) {
417
- tvp->tv_sec = timebuffer.time;
418
- tvp->tv_usec = timebuffer.millitm * 1000L;
419
- }
420
- return (0);
421
- }
422
- #define HAVE_GETTIMEOFDAY 1
423
- #define gettimeofday my_gettimeofday
424
-
425
- #endif /* HAVE_FTIME */
426
- #endif /* HAVE_SYS_TIME_H */
427
- #endif /* HAVE_SYS_TIMEB_H */
428
- #endif /* !HAVE_GETTIMEOFDAY */
429
-
430
- #if defined(HAVE_GETTIMEOFDAY)
431
- static struct timeval begin, end;
432
-
433
- /*
434
- * startTimer: call where you want to start timing
435
- */
436
- static void
437
- startTimer(void)
438
- {
439
- gettimeofday(&begin, NULL);
440
- }
441
-
442
- /*
443
- * endTimer: call where you want to stop timing and to print out a
444
- * message about the timing performed; format is a printf
445
- * type argument
446
- */
447
- static void XMLCDECL
448
- endTimer(const char *fmt, ...)
449
- {
450
- long msec;
451
- va_list ap;
452
-
453
- gettimeofday(&end, NULL);
454
- msec = end.tv_sec - begin.tv_sec;
455
- msec *= 1000;
456
- msec += (end.tv_usec - begin.tv_usec) / 1000;
457
-
458
- #ifndef HAVE_STDARG_H
459
- #error "endTimer required stdarg functions"
460
- #endif
461
- va_start(ap, fmt);
462
- vfprintf(stderr, fmt, ap);
463
- va_end(ap);
464
-
465
- fprintf(stderr, " took %ld ms\n", msec);
466
- }
467
- #elif defined(HAVE_TIME_H)
468
- /*
469
- * No gettimeofday function, so we have to make do with calling clock.
470
- * This is obviously less accurate, but there's little we can do about
471
- * that.
472
- */
473
- #ifndef CLOCKS_PER_SEC
474
- #define CLOCKS_PER_SEC 100
475
- #endif
476
-
477
- static clock_t begin, end;
478
- static void
479
- startTimer(void)
480
- {
481
- begin = clock();
482
- }
483
- static void XMLCDECL
484
- endTimer(const char *fmt, ...)
485
- {
486
- long msec;
487
- va_list ap;
488
-
489
- end = clock();
490
- msec = ((end - begin) * 1000) / CLOCKS_PER_SEC;
491
-
492
- #ifndef HAVE_STDARG_H
493
- #error "endTimer required stdarg functions"
494
- #endif
495
- va_start(ap, fmt);
496
- vfprintf(stderr, fmt, ap);
497
- va_end(ap);
498
- fprintf(stderr, " took %ld ms\n", msec);
499
- }
500
- #else
501
-
502
- /*
503
- * We don't have a gettimeofday or time.h, so we just don't do timing
504
- */
505
- static void
506
- startTimer(void)
507
- {
508
- /*
509
- * Do nothing
510
- */
511
- }
512
- static void XMLCDECL
513
- endTimer(char *format, ...)
514
- {
515
- /*
516
- * We cannot do anything because we don't have a timing function
517
- */
518
- #ifdef HAVE_STDARG_H
519
- va_start(ap, format);
520
- vfprintf(stderr, format, ap);
521
- va_end(ap);
522
- fprintf(stderr, " was not timed\n", msec);
523
- #else
524
- /* We don't have gettimeofday, time or stdarg.h, what crazy world is
525
- * this ?!
526
- */
527
- #endif
528
- }
529
- #endif
530
- /************************************************************************
531
- * *
532
- * HTML ouput *
533
- * *
534
- ************************************************************************/
535
- static char buffer[50000];
536
-
537
- static void
538
- xmlHTMLEncodeSend(void) {
539
- char *result;
540
-
541
- result = (char *) xmlEncodeEntitiesReentrant(NULL, BAD_CAST buffer);
542
- if (result) {
543
- xmlGenericError(xmlGenericErrorContext, "%s", result);
544
- xmlFree(result);
545
- }
546
- buffer[0] = 0;
547
- }
548
-
549
- /**
550
- * xmlHTMLPrintFileInfo:
551
- * @input: an xmlParserInputPtr input
552
- *
553
- * Displays the associated file and line informations for the current input
554
- */
555
-
556
- static void
557
- xmlHTMLPrintFileInfo(xmlParserInputPtr input) {
558
- int len;
559
- xmlGenericError(xmlGenericErrorContext, "<p>");
560
-
561
- len = strlen(buffer);
562
- if (input != NULL) {
563
- if (input->filename) {
564
- snprintf(&buffer[len], sizeof(buffer) - len, "%s:%d: ", input->filename,
565
- input->line);
566
- } else {
567
- snprintf(&buffer[len], sizeof(buffer) - len, "Entity: line %d: ", input->line);
568
- }
569
- }
570
- xmlHTMLEncodeSend();
571
- }
572
-
573
- /**
574
- * xmlHTMLPrintFileContext:
575
- * @input: an xmlParserInputPtr input
576
- *
577
- * Displays current context within the input content for error tracking
578
- */
579
-
580
- static void
581
- xmlHTMLPrintFileContext(xmlParserInputPtr input) {
582
- const xmlChar *cur, *base;
583
- int len;
584
- int n;
585
-
586
- if (input == NULL) return;
587
- xmlGenericError(xmlGenericErrorContext, "<pre>\n");
588
- cur = input->cur;
589
- base = input->base;
590
- while ((cur > base) && ((*cur == '\n') || (*cur == '\r'))) {
591
- cur--;
592
- }
593
- n = 0;
594
- while ((n++ < 80) && (cur > base) && (*cur != '\n') && (*cur != '\r'))
595
- cur--;
596
- if ((*cur == '\n') || (*cur == '\r')) cur++;
597
- base = cur;
598
- n = 0;
599
- while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {
600
- len = strlen(buffer);
601
- snprintf(&buffer[len], sizeof(buffer) - len, "%c",
602
- (unsigned char) *cur++);
603
- n++;
604
- }
605
- len = strlen(buffer);
606
- snprintf(&buffer[len], sizeof(buffer) - len, "\n");
607
- cur = input->cur;
608
- while ((*cur == '\n') || (*cur == '\r'))
609
- cur--;
610
- n = 0;
611
- while ((cur != base) && (n++ < 80)) {
612
- len = strlen(buffer);
613
- snprintf(&buffer[len], sizeof(buffer) - len, " ");
614
- base++;
615
- }
616
- len = strlen(buffer);
617
- snprintf(&buffer[len], sizeof(buffer) - len, "^\n");
618
- xmlHTMLEncodeSend();
619
- xmlGenericError(xmlGenericErrorContext, "</pre>");
620
- }
621
-
622
- /**
623
- * xmlHTMLError:
624
- * @ctx: an XML parser context
625
- * @msg: the message to display/transmit
626
- * @...: extra parameters for the message display
627
- *
628
- * Display and format an error messages, gives file, line, position and
629
- * extra parameters.
630
- */
631
- static void XMLCDECL
632
- xmlHTMLError(void *ctx, const char *msg, ...)
633
- {
634
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
635
- xmlParserInputPtr input;
636
- va_list args;
637
- int len;
638
-
639
- buffer[0] = 0;
640
- input = ctxt->input;
641
- if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) {
642
- input = ctxt->inputTab[ctxt->inputNr - 2];
643
- }
644
-
645
- xmlHTMLPrintFileInfo(input);
646
-
647
- xmlGenericError(xmlGenericErrorContext, "<b>error</b>: ");
648
- va_start(args, msg);
649
- len = strlen(buffer);
650
- vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args);
651
- va_end(args);
652
- xmlHTMLEncodeSend();
653
- xmlGenericError(xmlGenericErrorContext, "</p>\n");
654
-
655
- xmlHTMLPrintFileContext(input);
656
- xmlHTMLEncodeSend();
657
- }
658
-
659
- /**
660
- * xmlHTMLWarning:
661
- * @ctx: an XML parser context
662
- * @msg: the message to display/transmit
663
- * @...: extra parameters for the message display
664
- *
665
- * Display and format a warning messages, gives file, line, position and
666
- * extra parameters.
667
- */
668
- static void XMLCDECL
669
- xmlHTMLWarning(void *ctx, const char *msg, ...)
670
- {
671
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
672
- xmlParserInputPtr input;
673
- va_list args;
674
- int len;
675
-
676
- buffer[0] = 0;
677
- input = ctxt->input;
678
- if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) {
679
- input = ctxt->inputTab[ctxt->inputNr - 2];
680
- }
681
-
682
-
683
- xmlHTMLPrintFileInfo(input);
684
-
685
- xmlGenericError(xmlGenericErrorContext, "<b>warning</b>: ");
686
- va_start(args, msg);
687
- len = strlen(buffer);
688
- vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args);
689
- va_end(args);
690
- xmlHTMLEncodeSend();
691
- xmlGenericError(xmlGenericErrorContext, "</p>\n");
692
-
693
- xmlHTMLPrintFileContext(input);
694
- xmlHTMLEncodeSend();
695
- }
696
-
697
- /**
698
- * xmlHTMLValidityError:
699
- * @ctx: an XML parser context
700
- * @msg: the message to display/transmit
701
- * @...: extra parameters for the message display
702
- *
703
- * Display and format an validity error messages, gives file,
704
- * line, position and extra parameters.
705
- */
706
- static void XMLCDECL
707
- xmlHTMLValidityError(void *ctx, const char *msg, ...)
708
- {
709
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
710
- xmlParserInputPtr input;
711
- va_list args;
712
- int len;
713
-
714
- buffer[0] = 0;
715
- input = ctxt->input;
716
- if ((input->filename == NULL) && (ctxt->inputNr > 1))
717
- input = ctxt->inputTab[ctxt->inputNr - 2];
718
-
719
- xmlHTMLPrintFileInfo(input);
720
-
721
- xmlGenericError(xmlGenericErrorContext, "<b>validity error</b>: ");
722
- len = strlen(buffer);
723
- va_start(args, msg);
724
- vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args);
725
- va_end(args);
726
- xmlHTMLEncodeSend();
727
- xmlGenericError(xmlGenericErrorContext, "</p>\n");
728
-
729
- xmlHTMLPrintFileContext(input);
730
- xmlHTMLEncodeSend();
731
- progresult = XMLLINT_ERR_VALID;
732
- }
733
-
734
- /**
735
- * xmlHTMLValidityWarning:
736
- * @ctx: an XML parser context
737
- * @msg: the message to display/transmit
738
- * @...: extra parameters for the message display
739
- *
740
- * Display and format a validity warning messages, gives file, line,
741
- * position and extra parameters.
742
- */
743
- static void XMLCDECL
744
- xmlHTMLValidityWarning(void *ctx, const char *msg, ...)
745
- {
746
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
747
- xmlParserInputPtr input;
748
- va_list args;
749
- int len;
750
-
751
- buffer[0] = 0;
752
- input = ctxt->input;
753
- if ((input->filename == NULL) && (ctxt->inputNr > 1))
754
- input = ctxt->inputTab[ctxt->inputNr - 2];
755
-
756
- xmlHTMLPrintFileInfo(input);
757
-
758
- xmlGenericError(xmlGenericErrorContext, "<b>validity warning</b>: ");
759
- va_start(args, msg);
760
- len = strlen(buffer);
761
- vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args);
762
- va_end(args);
763
- xmlHTMLEncodeSend();
764
- xmlGenericError(xmlGenericErrorContext, "</p>\n");
765
-
766
- xmlHTMLPrintFileContext(input);
767
- xmlHTMLEncodeSend();
768
- }
769
-
770
- /************************************************************************
771
- * *
772
- * Shell Interface *
773
- * *
774
- ************************************************************************/
775
- #ifdef LIBXML_DEBUG_ENABLED
776
- #ifdef LIBXML_XPATH_ENABLED
777
- /**
778
- * xmlShellReadline:
779
- * @prompt: the prompt value
780
- *
781
- * Read a string
782
- *
783
- * Returns a pointer to it or NULL on EOF the caller is expected to
784
- * free the returned string.
785
- */
786
- static char *
787
- xmlShellReadline(char *prompt) {
788
- #ifdef HAVE_LIBREADLINE
789
- char *line_read;
790
-
791
- /* Get a line from the user. */
792
- line_read = readline (prompt);
793
-
794
- /* If the line has any text in it, save it on the history. */
795
- if (line_read && *line_read)
796
- add_history (line_read);
797
-
798
- return (line_read);
799
- #else
800
- char line_read[501];
801
- char *ret;
802
- int len;
803
-
804
- if (prompt != NULL)
805
- fprintf(stdout, "%s", prompt);
806
- if (!fgets(line_read, 500, stdin))
807
- return(NULL);
808
- line_read[500] = 0;
809
- len = strlen(line_read);
810
- ret = (char *) malloc(len + 1);
811
- if (ret != NULL) {
812
- memcpy (ret, line_read, len + 1);
813
- }
814
- return(ret);
815
- #endif
816
- }
817
- #endif /* LIBXML_XPATH_ENABLED */
818
- #endif /* LIBXML_DEBUG_ENABLED */
819
-
820
- /************************************************************************
821
- * *
822
- * I/O Interfaces *
823
- * *
824
- ************************************************************************/
825
-
826
- static int myRead(FILE *f, char * buf, int len) {
827
- return(fread(buf, 1, len, f));
828
- }
829
- static void myClose(FILE *f) {
830
- if (f != stdin) {
831
- fclose(f);
832
- }
833
- }
834
-
835
- /************************************************************************
836
- * *
837
- * SAX based tests *
838
- * *
839
- ************************************************************************/
840
-
841
- /*
842
- * empty SAX block
843
- */
844
- static xmlSAXHandler emptySAXHandlerStruct = {
845
- NULL, /* internalSubset */
846
- NULL, /* isStandalone */
847
- NULL, /* hasInternalSubset */
848
- NULL, /* hasExternalSubset */
849
- NULL, /* resolveEntity */
850
- NULL, /* getEntity */
851
- NULL, /* entityDecl */
852
- NULL, /* notationDecl */
853
- NULL, /* attributeDecl */
854
- NULL, /* elementDecl */
855
- NULL, /* unparsedEntityDecl */
856
- NULL, /* setDocumentLocator */
857
- NULL, /* startDocument */
858
- NULL, /* endDocument */
859
- NULL, /* startElement */
860
- NULL, /* endElement */
861
- NULL, /* reference */
862
- NULL, /* characters */
863
- NULL, /* ignorableWhitespace */
864
- NULL, /* processingInstruction */
865
- NULL, /* comment */
866
- NULL, /* xmlParserWarning */
867
- NULL, /* xmlParserError */
868
- NULL, /* xmlParserError */
869
- NULL, /* getParameterEntity */
870
- NULL, /* cdataBlock; */
871
- NULL, /* externalSubset; */
872
- XML_SAX2_MAGIC,
873
- NULL,
874
- NULL, /* startElementNs */
875
- NULL, /* endElementNs */
876
- NULL /* xmlStructuredErrorFunc */
877
- };
878
-
879
- static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
880
- extern xmlSAXHandlerPtr debugSAXHandler;
881
- static int callbacks;
882
-
883
- /**
884
- * isStandaloneDebug:
885
- * @ctxt: An XML parser context
886
- *
887
- * Is this document tagged standalone ?
888
- *
889
- * Returns 1 if true
890
- */
891
- static int
892
- isStandaloneDebug(void *ctx ATTRIBUTE_UNUSED)
893
- {
894
- callbacks++;
895
- if (noout)
896
- return(0);
897
- fprintf(stdout, "SAX.isStandalone()\n");
898
- return(0);
899
- }
900
-
901
- /**
902
- * hasInternalSubsetDebug:
903
- * @ctxt: An XML parser context
904
- *
905
- * Does this document has an internal subset
906
- *
907
- * Returns 1 if true
908
- */
909
- static int
910
- hasInternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
911
- {
912
- callbacks++;
913
- if (noout)
914
- return(0);
915
- fprintf(stdout, "SAX.hasInternalSubset()\n");
916
- return(0);
917
- }
918
-
919
- /**
920
- * hasExternalSubsetDebug:
921
- * @ctxt: An XML parser context
922
- *
923
- * Does this document has an external subset
924
- *
925
- * Returns 1 if true
926
- */
927
- static int
928
- hasExternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
929
- {
930
- callbacks++;
931
- if (noout)
932
- return(0);
933
- fprintf(stdout, "SAX.hasExternalSubset()\n");
934
- return(0);
935
- }
936
-
937
- /**
938
- * internalSubsetDebug:
939
- * @ctxt: An XML parser context
940
- *
941
- * Does this document has an internal subset
942
- */
943
- static void
944
- internalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
945
- const xmlChar *ExternalID, const xmlChar *SystemID)
946
- {
947
- callbacks++;
948
- if (noout)
949
- return;
950
- fprintf(stdout, "SAX.internalSubset(%s,", name);
951
- if (ExternalID == NULL)
952
- fprintf(stdout, " ,");
953
- else
954
- fprintf(stdout, " %s,", ExternalID);
955
- if (SystemID == NULL)
956
- fprintf(stdout, " )\n");
957
- else
958
- fprintf(stdout, " %s)\n", SystemID);
959
- }
960
-
961
- /**
962
- * externalSubsetDebug:
963
- * @ctxt: An XML parser context
964
- *
965
- * Does this document has an external subset
966
- */
967
- static void
968
- externalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
969
- const xmlChar *ExternalID, const xmlChar *SystemID)
970
- {
971
- callbacks++;
972
- if (noout)
973
- return;
974
- fprintf(stdout, "SAX.externalSubset(%s,", name);
975
- if (ExternalID == NULL)
976
- fprintf(stdout, " ,");
977
- else
978
- fprintf(stdout, " %s,", ExternalID);
979
- if (SystemID == NULL)
980
- fprintf(stdout, " )\n");
981
- else
982
- fprintf(stdout, " %s)\n", SystemID);
983
- }
984
-
985
- /**
986
- * resolveEntityDebug:
987
- * @ctxt: An XML parser context
988
- * @publicId: The public ID of the entity
989
- * @systemId: The system ID of the entity
990
- *
991
- * Special entity resolver, better left to the parser, it has
992
- * more context than the application layer.
993
- * The default behaviour is to NOT resolve the entities, in that case
994
- * the ENTITY_REF nodes are built in the structure (and the parameter
995
- * values).
996
- *
997
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
998
- */
999
- static xmlParserInputPtr
1000
- resolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xmlChar *systemId)
1001
- {
1002
- callbacks++;
1003
- if (noout)
1004
- return(NULL);
1005
- /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
1006
-
1007
-
1008
- fprintf(stdout, "SAX.resolveEntity(");
1009
- if (publicId != NULL)
1010
- fprintf(stdout, "%s", (char *)publicId);
1011
- else
1012
- fprintf(stdout, " ");
1013
- if (systemId != NULL)
1014
- fprintf(stdout, ", %s)\n", (char *)systemId);
1015
- else
1016
- fprintf(stdout, ", )\n");
1017
- return(NULL);
1018
- }
1019
-
1020
- /**
1021
- * getEntityDebug:
1022
- * @ctxt: An XML parser context
1023
- * @name: The entity name
1024
- *
1025
- * Get an entity by name
1026
- *
1027
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
1028
- */
1029
- static xmlEntityPtr
1030
- getEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
1031
- {
1032
- callbacks++;
1033
- if (noout)
1034
- return(NULL);
1035
- fprintf(stdout, "SAX.getEntity(%s)\n", name);
1036
- return(NULL);
1037
- }
1038
-
1039
- /**
1040
- * getParameterEntityDebug:
1041
- * @ctxt: An XML parser context
1042
- * @name: The entity name
1043
- *
1044
- * Get a parameter entity by name
1045
- *
1046
- * Returns the xmlParserInputPtr
1047
- */
1048
- static xmlEntityPtr
1049
- getParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
1050
- {
1051
- callbacks++;
1052
- if (noout)
1053
- return(NULL);
1054
- fprintf(stdout, "SAX.getParameterEntity(%s)\n", name);
1055
- return(NULL);
1056
- }
1057
-
1058
-
1059
- /**
1060
- * entityDeclDebug:
1061
- * @ctxt: An XML parser context
1062
- * @name: the entity name
1063
- * @type: the entity type
1064
- * @publicId: The public ID of the entity
1065
- * @systemId: The system ID of the entity
1066
- * @content: the entity value (without processing).
1067
- *
1068
- * An entity definition has been parsed
1069
- */
1070
- static void
1071
- entityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
1072
- const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
1073
- {
1074
- const xmlChar *nullstr = BAD_CAST "(null)";
1075
- /* not all libraries handle printing null pointers nicely */
1076
- if (publicId == NULL)
1077
- publicId = nullstr;
1078
- if (systemId == NULL)
1079
- systemId = nullstr;
1080
- if (content == NULL)
1081
- content = (xmlChar *)nullstr;
1082
- callbacks++;
1083
- if (noout)
1084
- return;
1085
- fprintf(stdout, "SAX.entityDecl(%s, %d, %s, %s, %s)\n",
1086
- name, type, publicId, systemId, content);
1087
- }
1088
-
1089
- /**
1090
- * attributeDeclDebug:
1091
- * @ctxt: An XML parser context
1092
- * @name: the attribute name
1093
- * @type: the attribute type
1094
- *
1095
- * An attribute definition has been parsed
1096
- */
1097
- static void
1098
- attributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar * elem,
1099
- const xmlChar * name, int type, int def,
1100
- const xmlChar * defaultValue, xmlEnumerationPtr tree)
1101
- {
1102
- callbacks++;
1103
- if (noout)
1104
- return;
1105
- if (defaultValue == NULL)
1106
- fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, NULL, ...)\n",
1107
- elem, name, type, def);
1108
- else
1109
- fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, %s, ...)\n",
1110
- elem, name, type, def, defaultValue);
1111
- xmlFreeEnumeration(tree);
1112
- }
1113
-
1114
- /**
1115
- * elementDeclDebug:
1116
- * @ctxt: An XML parser context
1117
- * @name: the element name
1118
- * @type: the element type
1119
- * @content: the element value (without processing).
1120
- *
1121
- * An element definition has been parsed
1122
- */
1123
- static void
1124
- elementDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
1125
- xmlElementContentPtr content ATTRIBUTE_UNUSED)
1126
- {
1127
- callbacks++;
1128
- if (noout)
1129
- return;
1130
- fprintf(stdout, "SAX.elementDecl(%s, %d, ...)\n",
1131
- name, type);
1132
- }
1133
-
1134
- /**
1135
- * notationDeclDebug:
1136
- * @ctxt: An XML parser context
1137
- * @name: The name of the notation
1138
- * @publicId: The public ID of the entity
1139
- * @systemId: The system ID of the entity
1140
- *
1141
- * What to do when a notation declaration has been parsed.
1142
- */
1143
- static void
1144
- notationDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
1145
- const xmlChar *publicId, const xmlChar *systemId)
1146
- {
1147
- callbacks++;
1148
- if (noout)
1149
- return;
1150
- fprintf(stdout, "SAX.notationDecl(%s, %s, %s)\n",
1151
- (char *) name, (char *) publicId, (char *) systemId);
1152
- }
1153
-
1154
- /**
1155
- * unparsedEntityDeclDebug:
1156
- * @ctxt: An XML parser context
1157
- * @name: The name of the entity
1158
- * @publicId: The public ID of the entity
1159
- * @systemId: The system ID of the entity
1160
- * @notationName: the name of the notation
1161
- *
1162
- * What to do when an unparsed entity declaration is parsed
1163
- */
1164
- static void
1165
- unparsedEntityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
1166
- const xmlChar *publicId, const xmlChar *systemId,
1167
- const xmlChar *notationName)
1168
- {
1169
- const xmlChar *nullstr = BAD_CAST "(null)";
1170
-
1171
- if (publicId == NULL)
1172
- publicId = nullstr;
1173
- if (systemId == NULL)
1174
- systemId = nullstr;
1175
- if (notationName == NULL)
1176
- notationName = nullstr;
1177
- callbacks++;
1178
- if (noout)
1179
- return;
1180
- fprintf(stdout, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n",
1181
- (char *) name, (char *) publicId, (char *) systemId,
1182
- (char *) notationName);
1183
- }
1184
-
1185
- /**
1186
- * setDocumentLocatorDebug:
1187
- * @ctxt: An XML parser context
1188
- * @loc: A SAX Locator
1189
- *
1190
- * Receive the document locator at startup, actually xmlDefaultSAXLocator
1191
- * Everything is available on the context, so this is useless in our case.
1192
- */
1193
- static void
1194
- setDocumentLocatorDebug(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
1195
- {
1196
- callbacks++;
1197
- if (noout)
1198
- return;
1199
- fprintf(stdout, "SAX.setDocumentLocator()\n");
1200
- }
1201
-
1202
- /**
1203
- * startDocumentDebug:
1204
- * @ctxt: An XML parser context
1205
- *
1206
- * called when the document start being processed.
1207
- */
1208
- static void
1209
- startDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
1210
- {
1211
- callbacks++;
1212
- if (noout)
1213
- return;
1214
- fprintf(stdout, "SAX.startDocument()\n");
1215
- }
1216
-
1217
- /**
1218
- * endDocumentDebug:
1219
- * @ctxt: An XML parser context
1220
- *
1221
- * called when the document end has been detected.
1222
- */
1223
- static void
1224
- endDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
1225
- {
1226
- callbacks++;
1227
- if (noout)
1228
- return;
1229
- fprintf(stdout, "SAX.endDocument()\n");
1230
- }
1231
-
1232
- /**
1233
- * startElementDebug:
1234
- * @ctxt: An XML parser context
1235
- * @name: The element name
1236
- *
1237
- * called when an opening tag has been processed.
1238
- */
1239
- static void
1240
- startElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts)
1241
- {
1242
- int i;
1243
-
1244
- callbacks++;
1245
- if (noout)
1246
- return;
1247
- fprintf(stdout, "SAX.startElement(%s", (char *) name);
1248
- if (atts != NULL) {
1249
- for (i = 0;(atts[i] != NULL);i++) {
1250
- fprintf(stdout, ", %s='", atts[i++]);
1251
- if (atts[i] != NULL)
1252
- fprintf(stdout, "%s'", atts[i]);
1253
- }
1254
- }
1255
- fprintf(stdout, ")\n");
1256
- }
1257
-
1258
- /**
1259
- * endElementDebug:
1260
- * @ctxt: An XML parser context
1261
- * @name: The element name
1262
- *
1263
- * called when the end of an element has been detected.
1264
- */
1265
- static void
1266
- endElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
1267
- {
1268
- callbacks++;
1269
- if (noout)
1270
- return;
1271
- fprintf(stdout, "SAX.endElement(%s)\n", (char *) name);
1272
- }
1273
-
1274
- /**
1275
- * charactersDebug:
1276
- * @ctxt: An XML parser context
1277
- * @ch: a xmlChar string
1278
- * @len: the number of xmlChar
1279
- *
1280
- * receiving some chars from the parser.
1281
- * Question: how much at a time ???
1282
- */
1283
- static void
1284
- charactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
1285
- {
1286
- char out[40];
1287
- int i;
1288
-
1289
- callbacks++;
1290
- if (noout)
1291
- return;
1292
- for (i = 0;(i<len) && (i < 30);i++)
1293
- out[i] = ch[i];
1294
- out[i] = 0;
1295
-
1296
- fprintf(stdout, "SAX.characters(%s, %d)\n", out, len);
1297
- }
1298
-
1299
- /**
1300
- * referenceDebug:
1301
- * @ctxt: An XML parser context
1302
- * @name: The entity name
1303
- *
1304
- * called when an entity reference is detected.
1305
- */
1306
- static void
1307
- referenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
1308
- {
1309
- callbacks++;
1310
- if (noout)
1311
- return;
1312
- fprintf(stdout, "SAX.reference(%s)\n", name);
1313
- }
1314
-
1315
- /**
1316
- * ignorableWhitespaceDebug:
1317
- * @ctxt: An XML parser context
1318
- * @ch: a xmlChar string
1319
- * @start: the first char in the string
1320
- * @len: the number of xmlChar
1321
- *
1322
- * receiving some ignorable whitespaces from the parser.
1323
- * Question: how much at a time ???
1324
- */
1325
- static void
1326
- ignorableWhitespaceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
1327
- {
1328
- char out[40];
1329
- int i;
1330
-
1331
- callbacks++;
1332
- if (noout)
1333
- return;
1334
- for (i = 0;(i<len) && (i < 30);i++)
1335
- out[i] = ch[i];
1336
- out[i] = 0;
1337
- fprintf(stdout, "SAX.ignorableWhitespace(%s, %d)\n", out, len);
1338
- }
1339
-
1340
- /**
1341
- * processingInstructionDebug:
1342
- * @ctxt: An XML parser context
1343
- * @target: the target name
1344
- * @data: the PI data's
1345
- * @len: the number of xmlChar
1346
- *
1347
- * A processing instruction has been parsed.
1348
- */
1349
- static void
1350
- processingInstructionDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *target,
1351
- const xmlChar *data)
1352
- {
1353
- callbacks++;
1354
- if (noout)
1355
- return;
1356
- if (data != NULL)
1357
- fprintf(stdout, "SAX.processingInstruction(%s, %s)\n",
1358
- (char *) target, (char *) data);
1359
- else
1360
- fprintf(stdout, "SAX.processingInstruction(%s, NULL)\n",
1361
- (char *) target);
1362
- }
1363
-
1364
- /**
1365
- * cdataBlockDebug:
1366
- * @ctx: the user data (XML parser context)
1367
- * @value: The pcdata content
1368
- * @len: the block length
1369
- *
1370
- * called when a pcdata block has been parsed
1371
- */
1372
- static void
1373
- cdataBlockDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value, int len)
1374
- {
1375
- callbacks++;
1376
- if (noout)
1377
- return;
1378
- fprintf(stdout, "SAX.pcdata(%.20s, %d)\n",
1379
- (char *) value, len);
1380
- }
1381
-
1382
- /**
1383
- * commentDebug:
1384
- * @ctxt: An XML parser context
1385
- * @value: the comment content
1386
- *
1387
- * A comment has been parsed.
1388
- */
1389
- static void
1390
- commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
1391
- {
1392
- callbacks++;
1393
- if (noout)
1394
- return;
1395
- fprintf(stdout, "SAX.comment(%s)\n", value);
1396
- }
1397
-
1398
- /**
1399
- * warningDebug:
1400
- * @ctxt: An XML parser context
1401
- * @msg: the message to display/transmit
1402
- * @...: extra parameters for the message display
1403
- *
1404
- * Display and format a warning messages, gives file, line, position and
1405
- * extra parameters.
1406
- */
1407
- static void XMLCDECL
1408
- warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
1409
- {
1410
- va_list args;
1411
-
1412
- callbacks++;
1413
- if (noout)
1414
- return;
1415
- va_start(args, msg);
1416
- fprintf(stdout, "SAX.warning: ");
1417
- vfprintf(stdout, msg, args);
1418
- va_end(args);
1419
- }
1420
-
1421
- /**
1422
- * errorDebug:
1423
- * @ctxt: An XML parser context
1424
- * @msg: the message to display/transmit
1425
- * @...: extra parameters for the message display
1426
- *
1427
- * Display and format a error messages, gives file, line, position and
1428
- * extra parameters.
1429
- */
1430
- static void XMLCDECL
1431
- errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
1432
- {
1433
- va_list args;
1434
-
1435
- callbacks++;
1436
- if (noout)
1437
- return;
1438
- va_start(args, msg);
1439
- fprintf(stdout, "SAX.error: ");
1440
- vfprintf(stdout, msg, args);
1441
- va_end(args);
1442
- }
1443
-
1444
- /**
1445
- * fatalErrorDebug:
1446
- * @ctxt: An XML parser context
1447
- * @msg: the message to display/transmit
1448
- * @...: extra parameters for the message display
1449
- *
1450
- * Display and format a fatalError messages, gives file, line, position and
1451
- * extra parameters.
1452
- */
1453
- static void XMLCDECL
1454
- fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
1455
- {
1456
- va_list args;
1457
-
1458
- callbacks++;
1459
- if (noout)
1460
- return;
1461
- va_start(args, msg);
1462
- fprintf(stdout, "SAX.fatalError: ");
1463
- vfprintf(stdout, msg, args);
1464
- va_end(args);
1465
- }
1466
-
1467
- static xmlSAXHandler debugSAXHandlerStruct = {
1468
- internalSubsetDebug,
1469
- isStandaloneDebug,
1470
- hasInternalSubsetDebug,
1471
- hasExternalSubsetDebug,
1472
- resolveEntityDebug,
1473
- getEntityDebug,
1474
- entityDeclDebug,
1475
- notationDeclDebug,
1476
- attributeDeclDebug,
1477
- elementDeclDebug,
1478
- unparsedEntityDeclDebug,
1479
- setDocumentLocatorDebug,
1480
- startDocumentDebug,
1481
- endDocumentDebug,
1482
- startElementDebug,
1483
- endElementDebug,
1484
- referenceDebug,
1485
- charactersDebug,
1486
- ignorableWhitespaceDebug,
1487
- processingInstructionDebug,
1488
- commentDebug,
1489
- warningDebug,
1490
- errorDebug,
1491
- fatalErrorDebug,
1492
- getParameterEntityDebug,
1493
- cdataBlockDebug,
1494
- externalSubsetDebug,
1495
- 1,
1496
- NULL,
1497
- NULL,
1498
- NULL,
1499
- NULL
1500
- };
1501
-
1502
- xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
1503
-
1504
- /*
1505
- * SAX2 specific callbacks
1506
- */
1507
- /**
1508
- * startElementNsDebug:
1509
- * @ctxt: An XML parser context
1510
- * @name: The element name
1511
- *
1512
- * called when an opening tag has been processed.
1513
- */
1514
- static void
1515
- startElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
1516
- const xmlChar *localname,
1517
- const xmlChar *prefix,
1518
- const xmlChar *URI,
1519
- int nb_namespaces,
1520
- const xmlChar **namespaces,
1521
- int nb_attributes,
1522
- int nb_defaulted,
1523
- const xmlChar **attributes)
1524
- {
1525
- int i;
1526
-
1527
- callbacks++;
1528
- if (noout)
1529
- return;
1530
- fprintf(stdout, "SAX.startElementNs(%s", (char *) localname);
1531
- if (prefix == NULL)
1532
- fprintf(stdout, ", NULL");
1533
- else
1534
- fprintf(stdout, ", %s", (char *) prefix);
1535
- if (URI == NULL)
1536
- fprintf(stdout, ", NULL");
1537
- else
1538
- fprintf(stdout, ", '%s'", (char *) URI);
1539
- fprintf(stdout, ", %d", nb_namespaces);
1540
-
1541
- if (namespaces != NULL) {
1542
- for (i = 0;i < nb_namespaces * 2;i++) {
1543
- fprintf(stdout, ", xmlns");
1544
- if (namespaces[i] != NULL)
1545
- fprintf(stdout, ":%s", namespaces[i]);
1546
- i++;
1547
- fprintf(stdout, "='%s'", namespaces[i]);
1548
- }
1549
- }
1550
- fprintf(stdout, ", %d, %d", nb_attributes, nb_defaulted);
1551
- if (attributes != NULL) {
1552
- for (i = 0;i < nb_attributes * 5;i += 5) {
1553
- if (attributes[i + 1] != NULL)
1554
- fprintf(stdout, ", %s:%s='", attributes[i + 1], attributes[i]);
1555
- else
1556
- fprintf(stdout, ", %s='", attributes[i]);
1557
- fprintf(stdout, "%.4s...', %d", attributes[i + 3],
1558
- (int)(attributes[i + 4] - attributes[i + 3]));
1559
- }
1560
- }
1561
- fprintf(stdout, ")\n");
1562
- }
1563
-
1564
- /**
1565
- * endElementDebug:
1566
- * @ctxt: An XML parser context
1567
- * @name: The element name
1568
- *
1569
- * called when the end of an element has been detected.
1570
- */
1571
- static void
1572
- endElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
1573
- const xmlChar *localname,
1574
- const xmlChar *prefix,
1575
- const xmlChar *URI)
1576
- {
1577
- callbacks++;
1578
- if (noout)
1579
- return;
1580
- fprintf(stdout, "SAX.endElementNs(%s", (char *) localname);
1581
- if (prefix == NULL)
1582
- fprintf(stdout, ", NULL");
1583
- else
1584
- fprintf(stdout, ", %s", (char *) prefix);
1585
- if (URI == NULL)
1586
- fprintf(stdout, ", NULL)\n");
1587
- else
1588
- fprintf(stdout, ", '%s')\n", (char *) URI);
1589
- }
1590
-
1591
- static xmlSAXHandler debugSAX2HandlerStruct = {
1592
- internalSubsetDebug,
1593
- isStandaloneDebug,
1594
- hasInternalSubsetDebug,
1595
- hasExternalSubsetDebug,
1596
- resolveEntityDebug,
1597
- getEntityDebug,
1598
- entityDeclDebug,
1599
- notationDeclDebug,
1600
- attributeDeclDebug,
1601
- elementDeclDebug,
1602
- unparsedEntityDeclDebug,
1603
- setDocumentLocatorDebug,
1604
- startDocumentDebug,
1605
- endDocumentDebug,
1606
- NULL,
1607
- NULL,
1608
- referenceDebug,
1609
- charactersDebug,
1610
- ignorableWhitespaceDebug,
1611
- processingInstructionDebug,
1612
- commentDebug,
1613
- warningDebug,
1614
- errorDebug,
1615
- fatalErrorDebug,
1616
- getParameterEntityDebug,
1617
- cdataBlockDebug,
1618
- externalSubsetDebug,
1619
- XML_SAX2_MAGIC,
1620
- NULL,
1621
- startElementNsDebug,
1622
- endElementNsDebug,
1623
- NULL
1624
- };
1625
-
1626
- static xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
1627
-
1628
- static void
1629
- testSAX(const char *filename) {
1630
- xmlSAXHandlerPtr handler;
1631
- const char *user_data = "user_data"; /* mostly for debugging */
1632
- xmlParserInputBufferPtr buf = NULL;
1633
- xmlParserInputPtr inputStream;
1634
- xmlParserCtxtPtr ctxt = NULL;
1635
- xmlSAXHandlerPtr old_sax = NULL;
1636
-
1637
- callbacks = 0;
1638
-
1639
- if (noout) {
1640
- handler = emptySAXHandler;
1641
- #ifdef LIBXML_SAX1_ENABLED
1642
- } else if (sax1) {
1643
- handler = debugSAXHandler;
1644
- #endif
1645
- } else {
1646
- handler = debugSAX2Handler;
1647
- }
1648
-
1649
- /*
1650
- * it's not the simplest code but the most generic in term of I/O
1651
- */
1652
- buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
1653
- if (buf == NULL) {
1654
- goto error;
1655
- }
1656
-
1657
- #ifdef LIBXML_SCHEMAS_ENABLED
1658
- if (wxschemas != NULL) {
1659
- int ret;
1660
- xmlSchemaValidCtxtPtr vctxt;
1661
-
1662
- vctxt = xmlSchemaNewValidCtxt(wxschemas);
1663
- xmlSchemaSetValidErrors(vctxt,
1664
- (xmlSchemaValidityErrorFunc) fprintf,
1665
- (xmlSchemaValidityWarningFunc) fprintf,
1666
- stderr);
1667
-
1668
- ret = xmlSchemaValidateStream(vctxt, buf, 0, handler,
1669
- (void *)user_data);
1670
- if (repeat == 0) {
1671
- if (ret == 0) {
1672
- fprintf(stderr, "%s validates\n", filename);
1673
- } else if (ret > 0) {
1674
- fprintf(stderr, "%s fails to validate\n", filename);
1675
- progresult = XMLLINT_ERR_VALID;
1676
- } else {
1677
- fprintf(stderr, "%s validation generated an internal error\n",
1678
- filename);
1679
- progresult = XMLLINT_ERR_VALID;
1680
- }
1681
- }
1682
- xmlSchemaFreeValidCtxt(vctxt);
1683
- } else
1684
- #endif
1685
- {
1686
- /*
1687
- * Create the parser context amd hook the input
1688
- */
1689
- ctxt = xmlNewParserCtxt();
1690
- if (ctxt == NULL) {
1691
- xmlFreeParserInputBuffer(buf);
1692
- goto error;
1693
- }
1694
- old_sax = ctxt->sax;
1695
- ctxt->sax = handler;
1696
- ctxt->userData = (void *) user_data;
1697
- inputStream = xmlNewIOInputStream(ctxt, buf, XML_CHAR_ENCODING_NONE);
1698
- if (inputStream == NULL) {
1699
- xmlFreeParserInputBuffer(buf);
1700
- goto error;
1701
- }
1702
- inputPush(ctxt, inputStream);
1703
-
1704
- /* do the parsing */
1705
- xmlParseDocument(ctxt);
1706
-
1707
- if (ctxt->myDoc != NULL) {
1708
- fprintf(stderr, "SAX generated a doc !\n");
1709
- xmlFreeDoc(ctxt->myDoc);
1710
- ctxt->myDoc = NULL;
1711
- }
1712
- }
1713
-
1714
- error:
1715
- if (ctxt != NULL) {
1716
- ctxt->sax = old_sax;
1717
- xmlFreeParserCtxt(ctxt);
1718
- }
1719
- }
1720
-
1721
- /************************************************************************
1722
- * *
1723
- * Stream Test processing *
1724
- * *
1725
- ************************************************************************/
1726
- #ifdef LIBXML_READER_ENABLED
1727
- static void processNode(xmlTextReaderPtr reader) {
1728
- const xmlChar *name, *value;
1729
- int type, empty;
1730
-
1731
- type = xmlTextReaderNodeType(reader);
1732
- empty = xmlTextReaderIsEmptyElement(reader);
1733
-
1734
- if (debug) {
1735
- name = xmlTextReaderConstName(reader);
1736
- if (name == NULL)
1737
- name = BAD_CAST "--";
1738
-
1739
- value = xmlTextReaderConstValue(reader);
1740
-
1741
-
1742
- printf("%d %d %s %d %d",
1743
- xmlTextReaderDepth(reader),
1744
- type,
1745
- name,
1746
- empty,
1747
- xmlTextReaderHasValue(reader));
1748
- if (value == NULL)
1749
- printf("\n");
1750
- else {
1751
- printf(" %s\n", value);
1752
- }
1753
- }
1754
- #ifdef LIBXML_PATTERN_ENABLED
1755
- if (patternc) {
1756
- xmlChar *path = NULL;
1757
- int match = -1;
1758
-
1759
- if (type == XML_READER_TYPE_ELEMENT) {
1760
- /* do the check only on element start */
1761
- match = xmlPatternMatch(patternc, xmlTextReaderCurrentNode(reader));
1762
-
1763
- if (match) {
1764
- #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
1765
- path = xmlGetNodePath(xmlTextReaderCurrentNode(reader));
1766
- printf("Node %s matches pattern %s\n", path, pattern);
1767
- #else
1768
- printf("Node %s matches pattern %s\n",
1769
- xmlTextReaderConstName(reader), pattern);
1770
- #endif
1771
- }
1772
- }
1773
- if (patstream != NULL) {
1774
- int ret;
1775
-
1776
- if (type == XML_READER_TYPE_ELEMENT) {
1777
- ret = xmlStreamPush(patstream,
1778
- xmlTextReaderConstLocalName(reader),
1779
- xmlTextReaderConstNamespaceUri(reader));
1780
- if (ret < 0) {
1781
- fprintf(stderr, "xmlStreamPush() failure\n");
1782
- xmlFreeStreamCtxt(patstream);
1783
- patstream = NULL;
1784
- } else if (ret != match) {
1785
- #if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
1786
- if (path == NULL) {
1787
- path = xmlGetNodePath(
1788
- xmlTextReaderCurrentNode(reader));
1789
- }
1790
- #endif
1791
- fprintf(stderr,
1792
- "xmlPatternMatch and xmlStreamPush disagree\n");
1793
- if (path != NULL)
1794
- fprintf(stderr, " pattern %s node %s\n",
1795
- pattern, path);
1796
- else
1797
- fprintf(stderr, " pattern %s node %s\n",
1798
- pattern, xmlTextReaderConstName(reader));
1799
- }
1800
-
1801
- }
1802
- if ((type == XML_READER_TYPE_END_ELEMENT) ||
1803
- ((type == XML_READER_TYPE_ELEMENT) && (empty))) {
1804
- ret = xmlStreamPop(patstream);
1805
- if (ret < 0) {
1806
- fprintf(stderr, "xmlStreamPop() failure\n");
1807
- xmlFreeStreamCtxt(patstream);
1808
- patstream = NULL;
1809
- }
1810
- }
1811
- }
1812
- if (path != NULL)
1813
- xmlFree(path);
1814
- }
1815
- #endif
1816
- }
1817
-
1818
- static void streamFile(char *filename) {
1819
- xmlTextReaderPtr reader;
1820
- int ret;
1821
- #ifdef HAVE_SYS_MMAN_H
1822
- int fd = -1;
1823
- struct stat info;
1824
- const char *base = NULL;
1825
- xmlParserInputBufferPtr input = NULL;
1826
-
1827
- if (memory) {
1828
- if (stat(filename, &info) < 0)
1829
- return;
1830
- if ((fd = open(filename, O_RDONLY)) < 0)
1831
- return;
1832
- base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
1833
- if (base == (void *) MAP_FAILED)
1834
- return;
1835
-
1836
- reader = xmlReaderForMemory(base, info.st_size, filename,
1837
- NULL, options);
1838
- } else
1839
- #endif
1840
- reader = xmlReaderForFile(filename, NULL, options);
1841
- #ifdef LIBXML_PATTERN_ENABLED
1842
- if (pattern != NULL) {
1843
- patternc = xmlPatterncompile((const xmlChar *) pattern, NULL, 0, NULL);
1844
- if (patternc == NULL) {
1845
- xmlGenericError(xmlGenericErrorContext,
1846
- "Pattern %s failed to compile\n", pattern);
1847
- progresult = XMLLINT_ERR_SCHEMAPAT;
1848
- pattern = NULL;
1849
- }
1850
- }
1851
- if (patternc != NULL) {
1852
- patstream = xmlPatternGetStreamCtxt(patternc);
1853
- if (patstream != NULL) {
1854
- ret = xmlStreamPush(patstream, NULL, NULL);
1855
- if (ret < 0) {
1856
- fprintf(stderr, "xmlStreamPush() failure\n");
1857
- xmlFreeStreamCtxt(patstream);
1858
- patstream = NULL;
1859
- }
1860
- }
1861
- }
1862
- #endif
1863
-
1864
-
1865
- if (reader != NULL) {
1866
- #ifdef LIBXML_VALID_ENABLED
1867
- if (valid)
1868
- xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1);
1869
- else
1870
- #endif /* LIBXML_VALID_ENABLED */
1871
- xmlTextReaderSetParserProp(reader, XML_PARSER_LOADDTD, 1);
1872
- #ifdef LIBXML_SCHEMAS_ENABLED
1873
- if (relaxng != NULL) {
1874
- if ((timing) && (!repeat)) {
1875
- startTimer();
1876
- }
1877
- ret = xmlTextReaderRelaxNGValidate(reader, relaxng);
1878
- if (ret < 0) {
1879
- xmlGenericError(xmlGenericErrorContext,
1880
- "Relax-NG schema %s failed to compile\n", relaxng);
1881
- progresult = XMLLINT_ERR_SCHEMACOMP;
1882
- relaxng = NULL;
1883
- }
1884
- if ((timing) && (!repeat)) {
1885
- endTimer("Compiling the schemas");
1886
- }
1887
- }
1888
- if (schema != NULL) {
1889
- if ((timing) && (!repeat)) {
1890
- startTimer();
1891
- }
1892
- ret = xmlTextReaderSchemaValidate(reader, schema);
1893
- if (ret < 0) {
1894
- xmlGenericError(xmlGenericErrorContext,
1895
- "XSD schema %s failed to compile\n", schema);
1896
- progresult = XMLLINT_ERR_SCHEMACOMP;
1897
- schema = NULL;
1898
- }
1899
- if ((timing) && (!repeat)) {
1900
- endTimer("Compiling the schemas");
1901
- }
1902
- }
1903
- #endif
1904
-
1905
- /*
1906
- * Process all nodes in sequence
1907
- */
1908
- if ((timing) && (!repeat)) {
1909
- startTimer();
1910
- }
1911
- ret = xmlTextReaderRead(reader);
1912
- while (ret == 1) {
1913
- if ((debug)
1914
- #ifdef LIBXML_PATTERN_ENABLED
1915
- || (patternc)
1916
- #endif
1917
- )
1918
- processNode(reader);
1919
- ret = xmlTextReaderRead(reader);
1920
- }
1921
- if ((timing) && (!repeat)) {
1922
- #ifdef LIBXML_SCHEMAS_ENABLED
1923
- if (relaxng != NULL)
1924
- endTimer("Parsing and validating");
1925
- else
1926
- #endif
1927
- #ifdef LIBXML_VALID_ENABLED
1928
- if (valid)
1929
- endTimer("Parsing and validating");
1930
- else
1931
- #endif
1932
- endTimer("Parsing");
1933
- }
1934
-
1935
- #ifdef LIBXML_VALID_ENABLED
1936
- if (valid) {
1937
- if (xmlTextReaderIsValid(reader) != 1) {
1938
- xmlGenericError(xmlGenericErrorContext,
1939
- "Document %s does not validate\n", filename);
1940
- progresult = XMLLINT_ERR_VALID;
1941
- }
1942
- }
1943
- #endif /* LIBXML_VALID_ENABLED */
1944
- #ifdef LIBXML_SCHEMAS_ENABLED
1945
- if ((relaxng != NULL) || (schema != NULL)) {
1946
- if (xmlTextReaderIsValid(reader) != 1) {
1947
- fprintf(stderr, "%s fails to validate\n", filename);
1948
- progresult = XMLLINT_ERR_VALID;
1949
- } else {
1950
- fprintf(stderr, "%s validates\n", filename);
1951
- }
1952
- }
1953
- #endif
1954
- /*
1955
- * Done, cleanup and status
1956
- */
1957
- xmlFreeTextReader(reader);
1958
- if (ret != 0) {
1959
- fprintf(stderr, "%s : failed to parse\n", filename);
1960
- progresult = XMLLINT_ERR_UNCLASS;
1961
- }
1962
- } else {
1963
- fprintf(stderr, "Unable to open %s\n", filename);
1964
- progresult = XMLLINT_ERR_UNCLASS;
1965
- }
1966
- #ifdef LIBXML_PATTERN_ENABLED
1967
- if (patstream != NULL) {
1968
- xmlFreeStreamCtxt(patstream);
1969
- patstream = NULL;
1970
- }
1971
- #endif
1972
- #ifdef HAVE_SYS_MMAN_H
1973
- if (memory) {
1974
- xmlFreeParserInputBuffer(input);
1975
- munmap((char *) base, info.st_size);
1976
- close(fd);
1977
- }
1978
- #endif
1979
- }
1980
-
1981
- static void walkDoc(xmlDocPtr doc) {
1982
- xmlTextReaderPtr reader;
1983
- int ret;
1984
-
1985
- #ifdef LIBXML_PATTERN_ENABLED
1986
- xmlNodePtr root;
1987
- const xmlChar *namespaces[22];
1988
- int i;
1989
- xmlNsPtr ns;
1990
-
1991
- root = xmlDocGetRootElement(doc);
1992
- for (ns = root->nsDef, i = 0;ns != NULL && i < 20;ns=ns->next) {
1993
- namespaces[i++] = ns->href;
1994
- namespaces[i++] = ns->prefix;
1995
- }
1996
- namespaces[i++] = NULL;
1997
- namespaces[i] = NULL;
1998
-
1999
- if (pattern != NULL) {
2000
- patternc = xmlPatterncompile((const xmlChar *) pattern, doc->dict,
2001
- 0, &namespaces[0]);
2002
- if (patternc == NULL) {
2003
- xmlGenericError(xmlGenericErrorContext,
2004
- "Pattern %s failed to compile\n", pattern);
2005
- progresult = XMLLINT_ERR_SCHEMAPAT;
2006
- pattern = NULL;
2007
- }
2008
- }
2009
- if (patternc != NULL) {
2010
- patstream = xmlPatternGetStreamCtxt(patternc);
2011
- if (patstream != NULL) {
2012
- ret = xmlStreamPush(patstream, NULL, NULL);
2013
- if (ret < 0) {
2014
- fprintf(stderr, "xmlStreamPush() failure\n");
2015
- xmlFreeStreamCtxt(patstream);
2016
- patstream = NULL;
2017
- }
2018
- }
2019
- }
2020
- #endif /* LIBXML_PATTERN_ENABLED */
2021
- reader = xmlReaderWalker(doc);
2022
- if (reader != NULL) {
2023
- if ((timing) && (!repeat)) {
2024
- startTimer();
2025
- }
2026
- ret = xmlTextReaderRead(reader);
2027
- while (ret == 1) {
2028
- if ((debug)
2029
- #ifdef LIBXML_PATTERN_ENABLED
2030
- || (patternc)
2031
- #endif
2032
- )
2033
- processNode(reader);
2034
- ret = xmlTextReaderRead(reader);
2035
- }
2036
- if ((timing) && (!repeat)) {
2037
- endTimer("walking through the doc");
2038
- }
2039
- xmlFreeTextReader(reader);
2040
- if (ret != 0) {
2041
- fprintf(stderr, "failed to walk through the doc\n");
2042
- progresult = XMLLINT_ERR_UNCLASS;
2043
- }
2044
- } else {
2045
- fprintf(stderr, "Failed to crate a reader from the document\n");
2046
- progresult = XMLLINT_ERR_UNCLASS;
2047
- }
2048
- #ifdef LIBXML_PATTERN_ENABLED
2049
- if (patstream != NULL) {
2050
- xmlFreeStreamCtxt(patstream);
2051
- patstream = NULL;
2052
- }
2053
- #endif
2054
- }
2055
- #endif /* LIBXML_READER_ENABLED */
2056
-
2057
- #ifdef LIBXML_XPATH_ENABLED
2058
- /************************************************************************
2059
- * *
2060
- * XPath Query *
2061
- * *
2062
- ************************************************************************/
2063
-
2064
- static void doXPathDump(xmlXPathObjectPtr cur) {
2065
- switch(cur->type) {
2066
- case XPATH_NODESET: {
2067
- int i;
2068
- xmlNodePtr node;
2069
- #ifdef LIBXML_OUTPUT_ENABLED
2070
- xmlSaveCtxtPtr ctxt;
2071
-
2072
- if (cur->nodesetval->nodeNr <= 0) {
2073
- fprintf(stderr, "XPath set is empty\n");
2074
- progresult = XMLLINT_ERR_XPATH;
2075
- break;
2076
- }
2077
- ctxt = xmlSaveToFd(1, NULL, 0);
2078
- if (ctxt == NULL) {
2079
- fprintf(stderr, "Out of memory for XPath\n");
2080
- progresult = XMLLINT_ERR_MEM;
2081
- return;
2082
- }
2083
- for (i = 0;i < cur->nodesetval->nodeNr;i++) {
2084
- node = cur->nodesetval->nodeTab[i];
2085
- xmlSaveTree(ctxt, node);
2086
- }
2087
- xmlSaveClose(ctxt);
2088
- #else
2089
- printf("xpath returned %d nodes\n", cur->nodesetval->nodeNr);
2090
- #endif
2091
- break;
2092
- }
2093
- case XPATH_BOOLEAN:
2094
- if (cur->boolval) printf("true");
2095
- else printf("false");
2096
- break;
2097
- case XPATH_NUMBER:
2098
- switch (xmlXPathIsInf(cur->floatval)) {
2099
- case 1:
2100
- printf("Infinity");
2101
- break;
2102
- case -1:
2103
- printf("-Infinity");
2104
- break;
2105
- default:
2106
- if (xmlXPathIsNaN(cur->floatval)) {
2107
- printf("NaN");
2108
- } else {
2109
- printf("%0g", cur->floatval);
2110
- }
2111
- }
2112
- break;
2113
- case XPATH_STRING:
2114
- printf("%s", (const char *) cur->stringval);
2115
- break;
2116
- case XPATH_UNDEFINED:
2117
- fprintf(stderr, "XPath Object is uninitialized\n");
2118
- progresult = XMLLINT_ERR_XPATH;
2119
- break;
2120
- default:
2121
- fprintf(stderr, "XPath object of unexpected type\n");
2122
- progresult = XMLLINT_ERR_XPATH;
2123
- break;
2124
- }
2125
- }
2126
-
2127
- static void doXPathQuery(xmlDocPtr doc, const char *query) {
2128
- xmlXPathContextPtr ctxt;
2129
- xmlXPathObjectPtr res;
2130
-
2131
- ctxt = xmlXPathNewContext(doc);
2132
- if (ctxt == NULL) {
2133
- fprintf(stderr, "Out of memory for XPath\n");
2134
- progresult = XMLLINT_ERR_MEM;
2135
- return;
2136
- }
2137
- ctxt->node = xmlDocGetRootElement(doc);
2138
- res = xmlXPathEval(BAD_CAST query, ctxt);
2139
- xmlXPathFreeContext(ctxt);
2140
-
2141
- if (res == NULL) {
2142
- fprintf(stderr, "XPath evaluation failure\n");
2143
- progresult = XMLLINT_ERR_XPATH;
2144
- return;
2145
- }
2146
- doXPathDump(res);
2147
- xmlXPathFreeObject(res);
2148
- }
2149
- #endif /* LIBXML_XPATH_ENABLED */
2150
-
2151
- /************************************************************************
2152
- * *
2153
- * Tree Test processing *
2154
- * *
2155
- ************************************************************************/
2156
- static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
2157
- xmlDocPtr doc = NULL;
2158
- #ifdef LIBXML_TREE_ENABLED
2159
- xmlDocPtr tmp;
2160
- #endif /* LIBXML_TREE_ENABLED */
2161
-
2162
- if ((timing) && (!repeat))
2163
- startTimer();
2164
-
2165
-
2166
- #ifdef LIBXML_TREE_ENABLED
2167
- if (filename == NULL) {
2168
- if (generate) {
2169
- xmlNodePtr n;
2170
-
2171
- doc = xmlNewDoc(BAD_CAST "1.0");
2172
- n = xmlNewDocNode(doc, NULL, BAD_CAST "info", NULL);
2173
- xmlNodeSetContent(n, BAD_CAST "abc");
2174
- xmlDocSetRootElement(doc, n);
2175
- }
2176
- }
2177
- #endif /* LIBXML_TREE_ENABLED */
2178
- #ifdef LIBXML_HTML_ENABLED
2179
- #ifdef LIBXML_PUSH_ENABLED
2180
- else if ((html) && (push)) {
2181
- FILE *f;
2182
-
2183
- #if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
2184
- f = fopen(filename, "rb");
2185
- #else
2186
- f = fopen(filename, "r");
2187
- #endif
2188
- if (f != NULL) {
2189
- int res, size = 3;
2190
- char chars[4096];
2191
- htmlParserCtxtPtr ctxt;
2192
-
2193
- /* if (repeat) */
2194
- size = 4096;
2195
- res = fread(chars, 1, 4, f);
2196
- if (res > 0) {
2197
- ctxt = htmlCreatePushParserCtxt(NULL, NULL,
2198
- chars, res, filename, XML_CHAR_ENCODING_NONE);
2199
- while ((res = fread(chars, 1, size, f)) > 0) {
2200
- htmlParseChunk(ctxt, chars, res, 0);
2201
- }
2202
- htmlParseChunk(ctxt, chars, 0, 1);
2203
- doc = ctxt->myDoc;
2204
- htmlFreeParserCtxt(ctxt);
2205
- }
2206
- fclose(f);
2207
- }
2208
- }
2209
- #endif /* LIBXML_PUSH_ENABLED */
2210
- #ifdef HAVE_SYS_MMAN_H
2211
- else if ((html) && (memory)) {
2212
- int fd;
2213
- struct stat info;
2214
- const char *base;
2215
- if (stat(filename, &info) < 0)
2216
- return;
2217
- if ((fd = open(filename, O_RDONLY)) < 0)
2218
- return;
2219
- base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
2220
- if (base == (void *) MAP_FAILED)
2221
- return;
2222
-
2223
- doc = htmlReadMemory((char *) base, info.st_size, filename,
2224
- NULL, options);
2225
-
2226
- munmap((char *) base, info.st_size);
2227
- close(fd);
2228
- }
2229
- #endif
2230
- else if (html) {
2231
- doc = htmlReadFile(filename, NULL, options);
2232
- }
2233
- #endif /* LIBXML_HTML_ENABLED */
2234
- else {
2235
- #ifdef LIBXML_PUSH_ENABLED
2236
- /*
2237
- * build an XML tree from a string;
2238
- */
2239
- if (push) {
2240
- FILE *f;
2241
-
2242
- /* '-' Usually means stdin -<sven@zen.org> */
2243
- if ((filename[0] == '-') && (filename[1] == 0)) {
2244
- f = stdin;
2245
- } else {
2246
- #if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
2247
- f = fopen(filename, "rb");
2248
- #else
2249
- f = fopen(filename, "r");
2250
- #endif
2251
- }
2252
- if (f != NULL) {
2253
- int ret;
2254
- int res, size = 1024;
2255
- char chars[1024];
2256
- xmlParserCtxtPtr ctxt;
2257
-
2258
- /* if (repeat) size = 1024; */
2259
- res = fread(chars, 1, 4, f);
2260
- if (res > 0) {
2261
- ctxt = xmlCreatePushParserCtxt(NULL, NULL,
2262
- chars, res, filename);
2263
- xmlCtxtUseOptions(ctxt, options);
2264
- while ((res = fread(chars, 1, size, f)) > 0) {
2265
- xmlParseChunk(ctxt, chars, res, 0);
2266
- }
2267
- xmlParseChunk(ctxt, chars, 0, 1);
2268
- doc = ctxt->myDoc;
2269
- ret = ctxt->wellFormed;
2270
- xmlFreeParserCtxt(ctxt);
2271
- if (!ret) {
2272
- xmlFreeDoc(doc);
2273
- doc = NULL;
2274
- }
2275
- }
2276
- if (f != stdin)
2277
- fclose(f);
2278
- }
2279
- } else
2280
- #endif /* LIBXML_PUSH_ENABLED */
2281
- if (testIO) {
2282
- if ((filename[0] == '-') && (filename[1] == 0)) {
2283
- doc = xmlReadFd(0, NULL, NULL, options);
2284
- } else {
2285
- FILE *f;
2286
-
2287
- #if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
2288
- f = fopen(filename, "rb");
2289
- #else
2290
- f = fopen(filename, "r");
2291
- #endif
2292
- if (f != NULL) {
2293
- if (rectxt == NULL)
2294
- doc = xmlReadIO((xmlInputReadCallback) myRead,
2295
- (xmlInputCloseCallback) myClose, f,
2296
- filename, NULL, options);
2297
- else
2298
- doc = xmlCtxtReadIO(rectxt,
2299
- (xmlInputReadCallback) myRead,
2300
- (xmlInputCloseCallback) myClose, f,
2301
- filename, NULL, options);
2302
- } else
2303
- doc = NULL;
2304
- }
2305
- } else if (htmlout) {
2306
- xmlParserCtxtPtr ctxt;
2307
-
2308
- if (rectxt == NULL)
2309
- ctxt = xmlNewParserCtxt();
2310
- else
2311
- ctxt = rectxt;
2312
- if (ctxt == NULL) {
2313
- doc = NULL;
2314
- } else {
2315
- ctxt->sax->error = xmlHTMLError;
2316
- ctxt->sax->warning = xmlHTMLWarning;
2317
- ctxt->vctxt.error = xmlHTMLValidityError;
2318
- ctxt->vctxt.warning = xmlHTMLValidityWarning;
2319
-
2320
- doc = xmlCtxtReadFile(ctxt, filename, NULL, options);
2321
-
2322
- if (rectxt == NULL)
2323
- xmlFreeParserCtxt(ctxt);
2324
- }
2325
- #ifdef HAVE_SYS_MMAN_H
2326
- } else if (memory) {
2327
- int fd;
2328
- struct stat info;
2329
- const char *base;
2330
- if (stat(filename, &info) < 0)
2331
- return;
2332
- if ((fd = open(filename, O_RDONLY)) < 0)
2333
- return;
2334
- base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
2335
- if (base == (void *) MAP_FAILED)
2336
- return;
2337
-
2338
- if (rectxt == NULL)
2339
- doc = xmlReadMemory((char *) base, info.st_size,
2340
- filename, NULL, options);
2341
- else
2342
- doc = xmlCtxtReadMemory(rectxt, (char *) base, info.st_size,
2343
- filename, NULL, options);
2344
-
2345
- munmap((char *) base, info.st_size);
2346
- close(fd);
2347
- #endif
2348
- #ifdef LIBXML_VALID_ENABLED
2349
- } else if (valid) {
2350
- xmlParserCtxtPtr ctxt = NULL;
2351
-
2352
- if (rectxt == NULL)
2353
- ctxt = xmlNewParserCtxt();
2354
- else
2355
- ctxt = rectxt;
2356
- if (ctxt == NULL) {
2357
- doc = NULL;
2358
- } else {
2359
- doc = xmlCtxtReadFile(ctxt, filename, NULL, options);
2360
-
2361
- if (ctxt->valid == 0)
2362
- progresult = XMLLINT_ERR_RDFILE;
2363
- if (rectxt == NULL)
2364
- xmlFreeParserCtxt(ctxt);
2365
- }
2366
- #endif /* LIBXML_VALID_ENABLED */
2367
- } else {
2368
- if (rectxt != NULL)
2369
- doc = xmlCtxtReadFile(rectxt, filename, NULL, options);
2370
- else {
2371
- #ifdef LIBXML_SAX1_ENABLED
2372
- if (sax1)
2373
- doc = xmlParseFile(filename);
2374
- else
2375
- #endif /* LIBXML_SAX1_ENABLED */
2376
- doc = xmlReadFile(filename, NULL, options);
2377
- }
2378
- }
2379
- }
2380
-
2381
- /*
2382
- * If we don't have a document we might as well give up. Do we
2383
- * want an error message here? <sven@zen.org> */
2384
- if (doc == NULL) {
2385
- progresult = XMLLINT_ERR_UNCLASS;
2386
- return;
2387
- }
2388
-
2389
- if ((timing) && (!repeat)) {
2390
- endTimer("Parsing");
2391
- }
2392
-
2393
- /*
2394
- * Remove DOCTYPE nodes
2395
- */
2396
- if (dropdtd) {
2397
- xmlDtdPtr dtd;
2398
-
2399
- dtd = xmlGetIntSubset(doc);
2400
- if (dtd != NULL) {
2401
- xmlUnlinkNode((xmlNodePtr)dtd);
2402
- xmlFreeDtd(dtd);
2403
- }
2404
- }
2405
-
2406
- #ifdef LIBXML_XINCLUDE_ENABLED
2407
- if (xinclude) {
2408
- if ((timing) && (!repeat)) {
2409
- startTimer();
2410
- }
2411
- if (xmlXIncludeProcessFlags(doc, options) < 0)
2412
- progresult = XMLLINT_ERR_UNCLASS;
2413
- if ((timing) && (!repeat)) {
2414
- endTimer("Xinclude processing");
2415
- }
2416
- }
2417
- #endif
2418
-
2419
- #ifdef LIBXML_XPATH_ENABLED
2420
- if (xpathquery != NULL) {
2421
- doXPathQuery(doc, xpathquery);
2422
- }
2423
- #endif
2424
-
2425
- #ifdef LIBXML_DEBUG_ENABLED
2426
- #ifdef LIBXML_XPATH_ENABLED
2427
- /*
2428
- * shell interaction
2429
- */
2430
- if (shell) {
2431
- xmlXPathOrderDocElems(doc);
2432
- xmlShell(doc, filename, xmlShellReadline, stdout);
2433
- }
2434
- #endif
2435
- #endif
2436
-
2437
- #ifdef LIBXML_TREE_ENABLED
2438
- /*
2439
- * test intermediate copy if needed.
2440
- */
2441
- if (copy) {
2442
- tmp = doc;
2443
- if (timing) {
2444
- startTimer();
2445
- }
2446
- doc = xmlCopyDoc(doc, 1);
2447
- if (timing) {
2448
- endTimer("Copying");
2449
- }
2450
- if (timing) {
2451
- startTimer();
2452
- }
2453
- xmlFreeDoc(tmp);
2454
- if (timing) {
2455
- endTimer("Freeing original");
2456
- }
2457
- }
2458
- #endif /* LIBXML_TREE_ENABLED */
2459
-
2460
- #ifdef LIBXML_VALID_ENABLED
2461
- if ((insert) && (!html)) {
2462
- const xmlChar* list[256];
2463
- int nb, i;
2464
- xmlNodePtr node;
2465
-
2466
- if (doc->children != NULL) {
2467
- node = doc->children;
2468
- while ((node != NULL) && (node->last == NULL)) node = node->next;
2469
- if (node != NULL) {
2470
- nb = xmlValidGetValidElements(node->last, NULL, list, 256);
2471
- if (nb < 0) {
2472
- fprintf(stderr, "could not get valid list of elements\n");
2473
- } else if (nb == 0) {
2474
- fprintf(stderr, "No element can be inserted under root\n");
2475
- } else {
2476
- fprintf(stderr, "%d element types can be inserted under root:\n",
2477
- nb);
2478
- for (i = 0;i < nb;i++) {
2479
- fprintf(stderr, "%s\n", (char *) list[i]);
2480
- }
2481
- }
2482
- }
2483
- }
2484
- }else
2485
- #endif /* LIBXML_VALID_ENABLED */
2486
- #ifdef LIBXML_READER_ENABLED
2487
- if (walker) {
2488
- walkDoc(doc);
2489
- }
2490
- #endif /* LIBXML_READER_ENABLED */
2491
- #ifdef LIBXML_OUTPUT_ENABLED
2492
- if (noout == 0) {
2493
- int ret;
2494
-
2495
- /*
2496
- * print it.
2497
- */
2498
- #ifdef LIBXML_DEBUG_ENABLED
2499
- if (!debug) {
2500
- #endif
2501
- if ((timing) && (!repeat)) {
2502
- startTimer();
2503
- }
2504
- #ifdef LIBXML_HTML_ENABLED
2505
- if ((html) && (!xmlout)) {
2506
- if (compress) {
2507
- htmlSaveFile(output ? output : "-", doc);
2508
- }
2509
- else if (encoding != NULL) {
2510
- if ( format ) {
2511
- htmlSaveFileFormat(output ? output : "-", doc, encoding, 1);
2512
- }
2513
- else {
2514
- htmlSaveFileFormat(output ? output : "-", doc, encoding, 0);
2515
- }
2516
- }
2517
- else if (format) {
2518
- htmlSaveFileFormat(output ? output : "-", doc, NULL, 1);
2519
- }
2520
- else {
2521
- FILE *out;
2522
- if (output == NULL)
2523
- out = stdout;
2524
- else {
2525
- out = fopen(output,"wb");
2526
- }
2527
- if (out != NULL) {
2528
- if (htmlDocDump(out, doc) < 0)
2529
- progresult = XMLLINT_ERR_OUT;
2530
-
2531
- if (output != NULL)
2532
- fclose(out);
2533
- } else {
2534
- fprintf(stderr, "failed to open %s\n", output);
2535
- progresult = XMLLINT_ERR_OUT;
2536
- }
2537
- }
2538
- if ((timing) && (!repeat)) {
2539
- endTimer("Saving");
2540
- }
2541
- } else
2542
- #endif
2543
- #ifdef LIBXML_C14N_ENABLED
2544
- if (canonical) {
2545
- xmlChar *result = NULL;
2546
- int size;
2547
-
2548
- size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_1_0, NULL, 1, &result);
2549
- if (size >= 0) {
2550
- write(1, result, size);
2551
- xmlFree(result);
2552
- } else {
2553
- fprintf(stderr, "Failed to canonicalize\n");
2554
- progresult = XMLLINT_ERR_OUT;
2555
- }
2556
- } else if (canonical) {
2557
- xmlChar *result = NULL;
2558
- int size;
2559
-
2560
- size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_1_1, NULL, 1, &result);
2561
- if (size >= 0) {
2562
- write(1, result, size);
2563
- xmlFree(result);
2564
- } else {
2565
- fprintf(stderr, "Failed to canonicalize\n");
2566
- progresult = XMLLINT_ERR_OUT;
2567
- }
2568
- } else
2569
- if (exc_canonical) {
2570
- xmlChar *result = NULL;
2571
- int size;
2572
-
2573
- size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_EXCLUSIVE_1_0, NULL, 1, &result);
2574
- if (size >= 0) {
2575
- write(1, result, size);
2576
- xmlFree(result);
2577
- } else {
2578
- fprintf(stderr, "Failed to canonicalize\n");
2579
- progresult = XMLLINT_ERR_OUT;
2580
- }
2581
- } else
2582
- #endif
2583
- #ifdef HAVE_SYS_MMAN_H
2584
- if (memory) {
2585
- xmlChar *result;
2586
- int len;
2587
-
2588
- if (encoding != NULL) {
2589
- if ( format ) {
2590
- xmlDocDumpFormatMemoryEnc(doc, &result, &len, encoding, 1);
2591
- } else {
2592
- xmlDocDumpMemoryEnc(doc, &result, &len, encoding);
2593
- }
2594
- } else {
2595
- if (format)
2596
- xmlDocDumpFormatMemory(doc, &result, &len, 1);
2597
- else
2598
- xmlDocDumpMemory(doc, &result, &len);
2599
- }
2600
- if (result == NULL) {
2601
- fprintf(stderr, "Failed to save\n");
2602
- progresult = XMLLINT_ERR_OUT;
2603
- } else {
2604
- write(1, result, len);
2605
- xmlFree(result);
2606
- }
2607
-
2608
- } else
2609
- #endif /* HAVE_SYS_MMAN_H */
2610
- if (compress) {
2611
- xmlSaveFile(output ? output : "-", doc);
2612
- } else if (oldout) {
2613
- if (encoding != NULL) {
2614
- if ( format ) {
2615
- ret = xmlSaveFormatFileEnc(output ? output : "-", doc,
2616
- encoding, 1);
2617
- }
2618
- else {
2619
- ret = xmlSaveFileEnc(output ? output : "-", doc,
2620
- encoding);
2621
- }
2622
- if (ret < 0) {
2623
- fprintf(stderr, "failed save to %s\n",
2624
- output ? output : "-");
2625
- progresult = XMLLINT_ERR_OUT;
2626
- }
2627
- } else if (format) {
2628
- ret = xmlSaveFormatFile(output ? output : "-", doc, 1);
2629
- if (ret < 0) {
2630
- fprintf(stderr, "failed save to %s\n",
2631
- output ? output : "-");
2632
- progresult = XMLLINT_ERR_OUT;
2633
- }
2634
- } else {
2635
- FILE *out;
2636
- if (output == NULL)
2637
- out = stdout;
2638
- else {
2639
- out = fopen(output,"wb");
2640
- }
2641
- if (out != NULL) {
2642
- if (xmlDocDump(out, doc) < 0)
2643
- progresult = XMLLINT_ERR_OUT;
2644
-
2645
- if (output != NULL)
2646
- fclose(out);
2647
- } else {
2648
- fprintf(stderr, "failed to open %s\n", output);
2649
- progresult = XMLLINT_ERR_OUT;
2650
- }
2651
- }
2652
- } else {
2653
- xmlSaveCtxtPtr ctxt;
2654
- int saveOpts = 0;
2655
-
2656
- if (format)
2657
- saveOpts |= XML_SAVE_FORMAT;
2658
-
2659
- #if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED)
2660
- if (xmlout)
2661
- saveOpts |= XML_SAVE_AS_XML;
2662
- #endif
2663
-
2664
- if (output == NULL)
2665
- ctxt = xmlSaveToFd(1, encoding, saveOpts);
2666
- else
2667
- ctxt = xmlSaveToFilename(output, encoding, saveOpts);
2668
-
2669
- if (ctxt != NULL) {
2670
- if (xmlSaveDoc(ctxt, doc) < 0) {
2671
- fprintf(stderr, "failed save to %s\n",
2672
- output ? output : "-");
2673
- progresult = XMLLINT_ERR_OUT;
2674
- }
2675
- xmlSaveClose(ctxt);
2676
- } else {
2677
- progresult = XMLLINT_ERR_OUT;
2678
- }
2679
- }
2680
- if ((timing) && (!repeat)) {
2681
- endTimer("Saving");
2682
- }
2683
- #ifdef LIBXML_DEBUG_ENABLED
2684
- } else {
2685
- FILE *out;
2686
- if (output == NULL)
2687
- out = stdout;
2688
- else {
2689
- out = fopen(output,"wb");
2690
- }
2691
- if (out != NULL) {
2692
- xmlDebugDumpDocument(out, doc);
2693
-
2694
- if (output != NULL)
2695
- fclose(out);
2696
- } else {
2697
- fprintf(stderr, "failed to open %s\n", output);
2698
- progresult = XMLLINT_ERR_OUT;
2699
- }
2700
- }
2701
- #endif
2702
- }
2703
- #endif /* LIBXML_OUTPUT_ENABLED */
2704
-
2705
- #ifdef LIBXML_VALID_ENABLED
2706
- /*
2707
- * A posteriori validation test
2708
- */
2709
- if ((dtdvalid != NULL) || (dtdvalidfpi != NULL)) {
2710
- xmlDtdPtr dtd;
2711
-
2712
- if ((timing) && (!repeat)) {
2713
- startTimer();
2714
- }
2715
- if (dtdvalid != NULL)
2716
- dtd = xmlParseDTD(NULL, (const xmlChar *)dtdvalid);
2717
- else
2718
- dtd = xmlParseDTD((const xmlChar *)dtdvalidfpi, NULL);
2719
- if ((timing) && (!repeat)) {
2720
- endTimer("Parsing DTD");
2721
- }
2722
- if (dtd == NULL) {
2723
- if (dtdvalid != NULL)
2724
- xmlGenericError(xmlGenericErrorContext,
2725
- "Could not parse DTD %s\n", dtdvalid);
2726
- else
2727
- xmlGenericError(xmlGenericErrorContext,
2728
- "Could not parse DTD %s\n", dtdvalidfpi);
2729
- progresult = XMLLINT_ERR_DTD;
2730
- } else {
2731
- xmlValidCtxtPtr cvp;
2732
-
2733
- if ((cvp = xmlNewValidCtxt()) == NULL) {
2734
- xmlGenericError(xmlGenericErrorContext,
2735
- "Couldn't allocate validation context\n");
2736
- exit(-1);
2737
- }
2738
- cvp->userData = (void *) stderr;
2739
- cvp->error = (xmlValidityErrorFunc) fprintf;
2740
- cvp->warning = (xmlValidityWarningFunc) fprintf;
2741
-
2742
- if ((timing) && (!repeat)) {
2743
- startTimer();
2744
- }
2745
- if (!xmlValidateDtd(cvp, doc, dtd)) {
2746
- if (dtdvalid != NULL)
2747
- xmlGenericError(xmlGenericErrorContext,
2748
- "Document %s does not validate against %s\n",
2749
- filename, dtdvalid);
2750
- else
2751
- xmlGenericError(xmlGenericErrorContext,
2752
- "Document %s does not validate against %s\n",
2753
- filename, dtdvalidfpi);
2754
- progresult = XMLLINT_ERR_VALID;
2755
- }
2756
- if ((timing) && (!repeat)) {
2757
- endTimer("Validating against DTD");
2758
- }
2759
- xmlFreeValidCtxt(cvp);
2760
- xmlFreeDtd(dtd);
2761
- }
2762
- } else if (postvalid) {
2763
- xmlValidCtxtPtr cvp;
2764
-
2765
- if ((cvp = xmlNewValidCtxt()) == NULL) {
2766
- xmlGenericError(xmlGenericErrorContext,
2767
- "Couldn't allocate validation context\n");
2768
- exit(-1);
2769
- }
2770
-
2771
- if ((timing) && (!repeat)) {
2772
- startTimer();
2773
- }
2774
- cvp->userData = (void *) stderr;
2775
- cvp->error = (xmlValidityErrorFunc) fprintf;
2776
- cvp->warning = (xmlValidityWarningFunc) fprintf;
2777
- if (!xmlValidateDocument(cvp, doc)) {
2778
- xmlGenericError(xmlGenericErrorContext,
2779
- "Document %s does not validate\n", filename);
2780
- progresult = XMLLINT_ERR_VALID;
2781
- }
2782
- if ((timing) && (!repeat)) {
2783
- endTimer("Validating");
2784
- }
2785
- xmlFreeValidCtxt(cvp);
2786
- }
2787
- #endif /* LIBXML_VALID_ENABLED */
2788
- #ifdef LIBXML_SCHEMATRON_ENABLED
2789
- if (wxschematron != NULL) {
2790
- xmlSchematronValidCtxtPtr ctxt;
2791
- int ret;
2792
- int flag;
2793
-
2794
- if ((timing) && (!repeat)) {
2795
- startTimer();
2796
- }
2797
-
2798
- if (debug)
2799
- flag = XML_SCHEMATRON_OUT_XML;
2800
- else
2801
- flag = XML_SCHEMATRON_OUT_TEXT;
2802
- if (noout)
2803
- flag |= XML_SCHEMATRON_OUT_QUIET;
2804
- ctxt = xmlSchematronNewValidCtxt(wxschematron, flag);
2805
- #if 0
2806
- xmlSchematronSetValidErrors(ctxt,
2807
- (xmlSchematronValidityErrorFunc) fprintf,
2808
- (xmlSchematronValidityWarningFunc) fprintf,
2809
- stderr);
2810
- #endif
2811
- ret = xmlSchematronValidateDoc(ctxt, doc);
2812
- if (ret == 0) {
2813
- fprintf(stderr, "%s validates\n", filename);
2814
- } else if (ret > 0) {
2815
- fprintf(stderr, "%s fails to validate\n", filename);
2816
- progresult = XMLLINT_ERR_VALID;
2817
- } else {
2818
- fprintf(stderr, "%s validation generated an internal error\n",
2819
- filename);
2820
- progresult = XMLLINT_ERR_VALID;
2821
- }
2822
- xmlSchematronFreeValidCtxt(ctxt);
2823
- if ((timing) && (!repeat)) {
2824
- endTimer("Validating");
2825
- }
2826
- }
2827
- #endif
2828
- #ifdef LIBXML_SCHEMAS_ENABLED
2829
- if (relaxngschemas != NULL) {
2830
- xmlRelaxNGValidCtxtPtr ctxt;
2831
- int ret;
2832
-
2833
- if ((timing) && (!repeat)) {
2834
- startTimer();
2835
- }
2836
-
2837
- ctxt = xmlRelaxNGNewValidCtxt(relaxngschemas);
2838
- xmlRelaxNGSetValidErrors(ctxt,
2839
- (xmlRelaxNGValidityErrorFunc) fprintf,
2840
- (xmlRelaxNGValidityWarningFunc) fprintf,
2841
- stderr);
2842
- ret = xmlRelaxNGValidateDoc(ctxt, doc);
2843
- if (ret == 0) {
2844
- fprintf(stderr, "%s validates\n", filename);
2845
- } else if (ret > 0) {
2846
- fprintf(stderr, "%s fails to validate\n", filename);
2847
- progresult = XMLLINT_ERR_VALID;
2848
- } else {
2849
- fprintf(stderr, "%s validation generated an internal error\n",
2850
- filename);
2851
- progresult = XMLLINT_ERR_VALID;
2852
- }
2853
- xmlRelaxNGFreeValidCtxt(ctxt);
2854
- if ((timing) && (!repeat)) {
2855
- endTimer("Validating");
2856
- }
2857
- } else if (wxschemas != NULL) {
2858
- xmlSchemaValidCtxtPtr ctxt;
2859
- int ret;
2860
-
2861
- if ((timing) && (!repeat)) {
2862
- startTimer();
2863
- }
2864
-
2865
- ctxt = xmlSchemaNewValidCtxt(wxschemas);
2866
- xmlSchemaSetValidErrors(ctxt,
2867
- (xmlSchemaValidityErrorFunc) fprintf,
2868
- (xmlSchemaValidityWarningFunc) fprintf,
2869
- stderr);
2870
- ret = xmlSchemaValidateDoc(ctxt, doc);
2871
- if (ret == 0) {
2872
- fprintf(stderr, "%s validates\n", filename);
2873
- } else if (ret > 0) {
2874
- fprintf(stderr, "%s fails to validate\n", filename);
2875
- progresult = XMLLINT_ERR_VALID;
2876
- } else {
2877
- fprintf(stderr, "%s validation generated an internal error\n",
2878
- filename);
2879
- progresult = XMLLINT_ERR_VALID;
2880
- }
2881
- xmlSchemaFreeValidCtxt(ctxt);
2882
- if ((timing) && (!repeat)) {
2883
- endTimer("Validating");
2884
- }
2885
- }
2886
- #endif
2887
-
2888
- #ifdef LIBXML_DEBUG_ENABLED
2889
- #if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED)
2890
- if ((debugent) && (!html))
2891
- xmlDebugDumpEntities(stderr, doc);
2892
- #endif
2893
- #endif
2894
-
2895
- /*
2896
- * free it.
2897
- */
2898
- if ((timing) && (!repeat)) {
2899
- startTimer();
2900
- }
2901
- xmlFreeDoc(doc);
2902
- if ((timing) && (!repeat)) {
2903
- endTimer("Freeing");
2904
- }
2905
- }
2906
-
2907
- /************************************************************************
2908
- * *
2909
- * Usage and Main *
2910
- * *
2911
- ************************************************************************/
2912
-
2913
- static void showVersion(const char *name) {
2914
- fprintf(stderr, "%s: using libxml version %s\n", name, xmlParserVersion);
2915
- fprintf(stderr, " compiled with: ");
2916
- if (xmlHasFeature(XML_WITH_THREAD)) fprintf(stderr, "Threads ");
2917
- if (xmlHasFeature(XML_WITH_TREE)) fprintf(stderr, "Tree ");
2918
- if (xmlHasFeature(XML_WITH_OUTPUT)) fprintf(stderr, "Output ");
2919
- if (xmlHasFeature(XML_WITH_PUSH)) fprintf(stderr, "Push ");
2920
- if (xmlHasFeature(XML_WITH_READER)) fprintf(stderr, "Reader ");
2921
- if (xmlHasFeature(XML_WITH_PATTERN)) fprintf(stderr, "Patterns ");
2922
- if (xmlHasFeature(XML_WITH_WRITER)) fprintf(stderr, "Writer ");
2923
- if (xmlHasFeature(XML_WITH_SAX1)) fprintf(stderr, "SAXv1 ");
2924
- if (xmlHasFeature(XML_WITH_FTP)) fprintf(stderr, "FTP ");
2925
- if (xmlHasFeature(XML_WITH_HTTP)) fprintf(stderr, "HTTP ");
2926
- if (xmlHasFeature(XML_WITH_VALID)) fprintf(stderr, "DTDValid ");
2927
- if (xmlHasFeature(XML_WITH_HTML)) fprintf(stderr, "HTML ");
2928
- if (xmlHasFeature(XML_WITH_LEGACY)) fprintf(stderr, "Legacy ");
2929
- if (xmlHasFeature(XML_WITH_C14N)) fprintf(stderr, "C14N ");
2930
- if (xmlHasFeature(XML_WITH_CATALOG)) fprintf(stderr, "Catalog ");
2931
- if (xmlHasFeature(XML_WITH_XPATH)) fprintf(stderr, "XPath ");
2932
- if (xmlHasFeature(XML_WITH_XPTR)) fprintf(stderr, "XPointer ");
2933
- if (xmlHasFeature(XML_WITH_XINCLUDE)) fprintf(stderr, "XInclude ");
2934
- if (xmlHasFeature(XML_WITH_ICONV)) fprintf(stderr, "Iconv ");
2935
- if (xmlHasFeature(XML_WITH_ISO8859X)) fprintf(stderr, "ISO8859X ");
2936
- if (xmlHasFeature(XML_WITH_UNICODE)) fprintf(stderr, "Unicode ");
2937
- if (xmlHasFeature(XML_WITH_REGEXP)) fprintf(stderr, "Regexps ");
2938
- if (xmlHasFeature(XML_WITH_AUTOMATA)) fprintf(stderr, "Automata ");
2939
- if (xmlHasFeature(XML_WITH_EXPR)) fprintf(stderr, "Expr ");
2940
- if (xmlHasFeature(XML_WITH_SCHEMAS)) fprintf(stderr, "Schemas ");
2941
- if (xmlHasFeature(XML_WITH_SCHEMATRON)) fprintf(stderr, "Schematron ");
2942
- if (xmlHasFeature(XML_WITH_MODULES)) fprintf(stderr, "Modules ");
2943
- if (xmlHasFeature(XML_WITH_DEBUG)) fprintf(stderr, "Debug ");
2944
- if (xmlHasFeature(XML_WITH_DEBUG_MEM)) fprintf(stderr, "MemDebug ");
2945
- if (xmlHasFeature(XML_WITH_DEBUG_RUN)) fprintf(stderr, "RunDebug ");
2946
- if (xmlHasFeature(XML_WITH_ZLIB)) fprintf(stderr, "Zlib ");
2947
- fprintf(stderr, "\n");
2948
- }
2949
-
2950
- static void usage(const char *name) {
2951
- printf("Usage : %s [options] XMLfiles ...\n", name);
2952
- #ifdef LIBXML_OUTPUT_ENABLED
2953
- printf("\tParse the XML files and output the result of the parsing\n");
2954
- #else
2955
- printf("\tParse the XML files\n");
2956
- #endif /* LIBXML_OUTPUT_ENABLED */
2957
- printf("\t--version : display the version of the XML library used\n");
2958
- #ifdef LIBXML_DEBUG_ENABLED
2959
- printf("\t--debug : dump a debug tree of the in-memory document\n");
2960
- printf("\t--shell : run a navigating shell\n");
2961
- printf("\t--debugent : debug the entities defined in the document\n");
2962
- #else
2963
- #ifdef LIBXML_READER_ENABLED
2964
- printf("\t--debug : dump the nodes content when using --stream\n");
2965
- #endif /* LIBXML_READER_ENABLED */
2966
- #endif
2967
- #ifdef LIBXML_TREE_ENABLED
2968
- printf("\t--copy : used to test the internal copy implementation\n");
2969
- #endif /* LIBXML_TREE_ENABLED */
2970
- printf("\t--recover : output what was parsable on broken XML documents\n");
2971
- printf("\t--huge : remove any internal arbitrary parser limits\n");
2972
- printf("\t--noent : substitute entity references by their value\n");
2973
- printf("\t--noout : don't output the result tree\n");
2974
- printf("\t--path 'paths': provide a set of paths for resources\n");
2975
- printf("\t--load-trace : print trace of all external entites loaded\n");
2976
- printf("\t--nonet : refuse to fetch DTDs or entities over network\n");
2977
- printf("\t--nocompact : do not generate compact text nodes\n");
2978
- printf("\t--htmlout : output results as HTML\n");
2979
- printf("\t--nowrap : do not put HTML doc wrapper\n");
2980
- #ifdef LIBXML_VALID_ENABLED
2981
- printf("\t--valid : validate the document in addition to std well-formed check\n");
2982
- printf("\t--postvalid : do a posteriori validation, i.e after parsing\n");
2983
- printf("\t--dtdvalid URL : do a posteriori validation against a given DTD\n");
2984
- printf("\t--dtdvalidfpi FPI : same but name the DTD with a Public Identifier\n");
2985
- #endif /* LIBXML_VALID_ENABLED */
2986
- printf("\t--timing : print some timings\n");
2987
- printf("\t--output file or -o file: save to a given file\n");
2988
- printf("\t--repeat : repeat 100 times, for timing or profiling\n");
2989
- printf("\t--insert : ad-hoc test for valid insertions\n");
2990
- #ifdef LIBXML_OUTPUT_ENABLED
2991
- #ifdef HAVE_ZLIB_H
2992
- printf("\t--compress : turn on gzip compression of output\n");
2993
- #endif
2994
- #endif /* LIBXML_OUTPUT_ENABLED */
2995
- #ifdef LIBXML_HTML_ENABLED
2996
- printf("\t--html : use the HTML parser\n");
2997
- printf("\t--xmlout : force to use the XML serializer when using --html\n");
2998
- #endif
2999
- #ifdef LIBXML_PUSH_ENABLED
3000
- printf("\t--push : use the push mode of the parser\n");
3001
- #endif /* LIBXML_PUSH_ENABLED */
3002
- #ifdef HAVE_SYS_MMAN_H
3003
- printf("\t--memory : parse from memory\n");
3004
- #endif
3005
- printf("\t--maxmem nbbytes : limits memory allocation to nbbytes bytes\n");
3006
- printf("\t--nowarning : do not emit warnings from parser/validator\n");
3007
- printf("\t--noblanks : drop (ignorable?) blanks spaces\n");
3008
- printf("\t--nocdata : replace cdata section with text nodes\n");
3009
- #ifdef LIBXML_OUTPUT_ENABLED
3010
- printf("\t--format : reformat/reindent the input\n");
3011
- printf("\t--encode encoding : output in the given encoding\n");
3012
- printf("\t--dropdtd : remove the DOCTYPE of the input docs\n");
3013
- #endif /* LIBXML_OUTPUT_ENABLED */
3014
- printf("\t--c14n : save in W3C canonical format v1.0 (with comments)\n");
3015
- printf("\t--c14n11 : save in W3C canonical format v1.1 (with comments)\n");
3016
- printf("\t--exc-c14n : save in W3C exclusive canonical format (with comments)\n");
3017
- #ifdef LIBXML_C14N_ENABLED
3018
- #endif /* LIBXML_C14N_ENABLED */
3019
- printf("\t--nsclean : remove redundant namespace declarations\n");
3020
- printf("\t--testIO : test user I/O support\n");
3021
- #ifdef LIBXML_CATALOG_ENABLED
3022
- printf("\t--catalogs : use SGML catalogs from $SGML_CATALOG_FILES\n");
3023
- printf("\t otherwise XML Catalogs starting from \n");
3024
- printf("\t %s are activated by default\n", XML_XML_DEFAULT_CATALOG);
3025
- printf("\t--nocatalogs: deactivate all catalogs\n");
3026
- #endif
3027
- printf("\t--auto : generate a small doc on the fly\n");
3028
- #ifdef LIBXML_XINCLUDE_ENABLED
3029
- printf("\t--xinclude : do XInclude processing\n");
3030
- printf("\t--noxincludenode : same but do not generate XInclude nodes\n");
3031
- printf("\t--nofixup-base-uris : do not fixup xml:base uris\n");
3032
- #endif
3033
- printf("\t--loaddtd : fetch external DTD\n");
3034
- printf("\t--dtdattr : loaddtd + populate the tree with inherited attributes \n");
3035
- #ifdef LIBXML_READER_ENABLED
3036
- printf("\t--stream : use the streaming interface to process very large files\n");
3037
- printf("\t--walker : create a reader and walk though the resulting doc\n");
3038
- #endif /* LIBXML_READER_ENABLED */
3039
- #ifdef LIBXML_PATTERN_ENABLED
3040
- printf("\t--pattern pattern_value : test the pattern support\n");
3041
- #endif
3042
- printf("\t--chkregister : verify the node registration code\n");
3043
- #ifdef LIBXML_SCHEMAS_ENABLED
3044
- printf("\t--relaxng schema : do RelaxNG validation against the schema\n");
3045
- printf("\t--schema schema : do validation against the WXS schema\n");
3046
- #endif
3047
- #ifdef LIBXML_SCHEMATRON_ENABLED
3048
- printf("\t--schematron schema : do validation against a schematron\n");
3049
- #endif
3050
- #ifdef LIBXML_SAX1_ENABLED
3051
- printf("\t--sax1: use the old SAX1 interfaces for processing\n");
3052
- #endif
3053
- printf("\t--sax: do not build a tree but work just at the SAX level\n");
3054
- printf("\t--oldxml10: use XML-1.0 parsing rules before the 5th edition\n");
3055
- #ifdef LIBXML_XPATH_ENABLED
3056
- printf("\t--xpath expr: evaluate the XPath expression, inply --noout\n");
3057
- #endif
3058
-
3059
- printf("\nLibxml project home page: http://xmlsoft.org/\n");
3060
- printf("To report bugs or get some help check: http://xmlsoft.org/bugs.html\n");
3061
- }
3062
-
3063
- static void registerNode(xmlNodePtr node)
3064
- {
3065
- node->_private = malloc(sizeof(long));
3066
- *(long*)node->_private = (long) 0x81726354;
3067
- nbregister++;
3068
- }
3069
-
3070
- static void deregisterNode(xmlNodePtr node)
3071
- {
3072
- assert(node->_private != NULL);
3073
- assert(*(long*)node->_private == (long) 0x81726354);
3074
- free(node->_private);
3075
- nbregister--;
3076
- }
3077
-
3078
- int
3079
- main(int argc, char **argv) {
3080
- int i, acount;
3081
- int files = 0;
3082
- int version = 0;
3083
- const char* indent;
3084
-
3085
- if (argc <= 1) {
3086
- usage(argv[0]);
3087
- return(1);
3088
- }
3089
- LIBXML_TEST_VERSION
3090
- for (i = 1; i < argc ; i++) {
3091
- if (!strcmp(argv[i], "-"))
3092
- break;
3093
-
3094
- if (argv[i][0] != '-')
3095
- continue;
3096
- if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
3097
- debug++;
3098
- else
3099
- #ifdef LIBXML_DEBUG_ENABLED
3100
- if ((!strcmp(argv[i], "-shell")) ||
3101
- (!strcmp(argv[i], "--shell"))) {
3102
- shell++;
3103
- noout = 1;
3104
- } else
3105
- #endif
3106
- #ifdef LIBXML_TREE_ENABLED
3107
- if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy")))
3108
- copy++;
3109
- else
3110
- #endif /* LIBXML_TREE_ENABLED */
3111
- if ((!strcmp(argv[i], "-recover")) ||
3112
- (!strcmp(argv[i], "--recover"))) {
3113
- recovery++;
3114
- options |= XML_PARSE_RECOVER;
3115
- } else if ((!strcmp(argv[i], "-huge")) ||
3116
- (!strcmp(argv[i], "--huge"))) {
3117
- options |= XML_PARSE_HUGE;
3118
- } else if ((!strcmp(argv[i], "-noent")) ||
3119
- (!strcmp(argv[i], "--noent"))) {
3120
- noent++;
3121
- options |= XML_PARSE_NOENT;
3122
- } else if ((!strcmp(argv[i], "-nsclean")) ||
3123
- (!strcmp(argv[i], "--nsclean"))) {
3124
- options |= XML_PARSE_NSCLEAN;
3125
- } else if ((!strcmp(argv[i], "-nocdata")) ||
3126
- (!strcmp(argv[i], "--nocdata"))) {
3127
- options |= XML_PARSE_NOCDATA;
3128
- } else if ((!strcmp(argv[i], "-nodict")) ||
3129
- (!strcmp(argv[i], "--nodict"))) {
3130
- options |= XML_PARSE_NODICT;
3131
- } else if ((!strcmp(argv[i], "-version")) ||
3132
- (!strcmp(argv[i], "--version"))) {
3133
- showVersion(argv[0]);
3134
- version = 1;
3135
- } else if ((!strcmp(argv[i], "-noout")) ||
3136
- (!strcmp(argv[i], "--noout")))
3137
- noout++;
3138
- #ifdef LIBXML_OUTPUT_ENABLED
3139
- else if ((!strcmp(argv[i], "-o")) ||
3140
- (!strcmp(argv[i], "-output")) ||
3141
- (!strcmp(argv[i], "--output"))) {
3142
- i++;
3143
- output = argv[i];
3144
- }
3145
- #endif /* LIBXML_OUTPUT_ENABLED */
3146
- else if ((!strcmp(argv[i], "-htmlout")) ||
3147
- (!strcmp(argv[i], "--htmlout")))
3148
- htmlout++;
3149
- else if ((!strcmp(argv[i], "-nowrap")) ||
3150
- (!strcmp(argv[i], "--nowrap")))
3151
- nowrap++;
3152
- #ifdef LIBXML_HTML_ENABLED
3153
- else if ((!strcmp(argv[i], "-html")) ||
3154
- (!strcmp(argv[i], "--html"))) {
3155
- html++;
3156
- }
3157
- else if ((!strcmp(argv[i], "-xmlout")) ||
3158
- (!strcmp(argv[i], "--xmlout"))) {
3159
- xmlout++;
3160
- }
3161
- #endif /* LIBXML_HTML_ENABLED */
3162
- else if ((!strcmp(argv[i], "-loaddtd")) ||
3163
- (!strcmp(argv[i], "--loaddtd"))) {
3164
- loaddtd++;
3165
- options |= XML_PARSE_DTDLOAD;
3166
- } else if ((!strcmp(argv[i], "-dtdattr")) ||
3167
- (!strcmp(argv[i], "--dtdattr"))) {
3168
- loaddtd++;
3169
- dtdattrs++;
3170
- options |= XML_PARSE_DTDATTR;
3171
- }
3172
- #ifdef LIBXML_VALID_ENABLED
3173
- else if ((!strcmp(argv[i], "-valid")) ||
3174
- (!strcmp(argv[i], "--valid"))) {
3175
- valid++;
3176
- options |= XML_PARSE_DTDVALID;
3177
- } else if ((!strcmp(argv[i], "-postvalid")) ||
3178
- (!strcmp(argv[i], "--postvalid"))) {
3179
- postvalid++;
3180
- loaddtd++;
3181
- options |= XML_PARSE_DTDLOAD;
3182
- } else if ((!strcmp(argv[i], "-dtdvalid")) ||
3183
- (!strcmp(argv[i], "--dtdvalid"))) {
3184
- i++;
3185
- dtdvalid = argv[i];
3186
- loaddtd++;
3187
- options |= XML_PARSE_DTDLOAD;
3188
- } else if ((!strcmp(argv[i], "-dtdvalidfpi")) ||
3189
- (!strcmp(argv[i], "--dtdvalidfpi"))) {
3190
- i++;
3191
- dtdvalidfpi = argv[i];
3192
- loaddtd++;
3193
- options |= XML_PARSE_DTDLOAD;
3194
- }
3195
- #endif /* LIBXML_VALID_ENABLED */
3196
- else if ((!strcmp(argv[i], "-dropdtd")) ||
3197
- (!strcmp(argv[i], "--dropdtd")))
3198
- dropdtd++;
3199
- else if ((!strcmp(argv[i], "-insert")) ||
3200
- (!strcmp(argv[i], "--insert")))
3201
- insert++;
3202
- else if ((!strcmp(argv[i], "-timing")) ||
3203
- (!strcmp(argv[i], "--timing")))
3204
- timing++;
3205
- else if ((!strcmp(argv[i], "-auto")) ||
3206
- (!strcmp(argv[i], "--auto")))
3207
- generate++;
3208
- else if ((!strcmp(argv[i], "-repeat")) ||
3209
- (!strcmp(argv[i], "--repeat"))) {
3210
- if (repeat)
3211
- repeat *= 10;
3212
- else
3213
- repeat = 100;
3214
- }
3215
- #ifdef LIBXML_PUSH_ENABLED
3216
- else if ((!strcmp(argv[i], "-push")) ||
3217
- (!strcmp(argv[i], "--push")))
3218
- push++;
3219
- #endif /* LIBXML_PUSH_ENABLED */
3220
- #ifdef HAVE_SYS_MMAN_H
3221
- else if ((!strcmp(argv[i], "-memory")) ||
3222
- (!strcmp(argv[i], "--memory")))
3223
- memory++;
3224
- #endif
3225
- else if ((!strcmp(argv[i], "-testIO")) ||
3226
- (!strcmp(argv[i], "--testIO")))
3227
- testIO++;
3228
- #ifdef LIBXML_XINCLUDE_ENABLED
3229
- else if ((!strcmp(argv[i], "-xinclude")) ||
3230
- (!strcmp(argv[i], "--xinclude"))) {
3231
- xinclude++;
3232
- options |= XML_PARSE_XINCLUDE;
3233
- }
3234
- else if ((!strcmp(argv[i], "-noxincludenode")) ||
3235
- (!strcmp(argv[i], "--noxincludenode"))) {
3236
- xinclude++;
3237
- options |= XML_PARSE_XINCLUDE;
3238
- options |= XML_PARSE_NOXINCNODE;
3239
- }
3240
- else if ((!strcmp(argv[i], "-nofixup-base-uris")) ||
3241
- (!strcmp(argv[i], "--nofixup-base-uris"))) {
3242
- xinclude++;
3243
- options |= XML_PARSE_XINCLUDE;
3244
- options |= XML_PARSE_NOBASEFIX;
3245
- }
3246
- #endif
3247
- #ifdef LIBXML_OUTPUT_ENABLED
3248
- #ifdef HAVE_ZLIB_H
3249
- else if ((!strcmp(argv[i], "-compress")) ||
3250
- (!strcmp(argv[i], "--compress"))) {
3251
- compress++;
3252
- xmlSetCompressMode(9);
3253
- }
3254
- #endif
3255
- #endif /* LIBXML_OUTPUT_ENABLED */
3256
- else if ((!strcmp(argv[i], "-nowarning")) ||
3257
- (!strcmp(argv[i], "--nowarning"))) {
3258
- xmlGetWarningsDefaultValue = 0;
3259
- xmlPedanticParserDefault(0);
3260
- options |= XML_PARSE_NOWARNING;
3261
- }
3262
- else if ((!strcmp(argv[i], "-pedantic")) ||
3263
- (!strcmp(argv[i], "--pedantic"))) {
3264
- xmlGetWarningsDefaultValue = 1;
3265
- xmlPedanticParserDefault(1);
3266
- options |= XML_PARSE_PEDANTIC;
3267
- }
3268
- #ifdef LIBXML_DEBUG_ENABLED
3269
- else if ((!strcmp(argv[i], "-debugent")) ||
3270
- (!strcmp(argv[i], "--debugent"))) {
3271
- debugent++;
3272
- xmlParserDebugEntities = 1;
3273
- }
3274
- #endif
3275
- #ifdef LIBXML_C14N_ENABLED
3276
- else if ((!strcmp(argv[i], "-c14n")) ||
3277
- (!strcmp(argv[i], "--c14n"))) {
3278
- canonical++;
3279
- options |= XML_PARSE_NOENT | XML_PARSE_DTDATTR | XML_PARSE_DTDLOAD;
3280
- }
3281
- else if ((!strcmp(argv[i], "-c14n11")) ||
3282
- (!strcmp(argv[i], "--c14n11"))) {
3283
- canonical_11++;
3284
- options |= XML_PARSE_NOENT | XML_PARSE_DTDATTR | XML_PARSE_DTDLOAD;
3285
- }
3286
- else if ((!strcmp(argv[i], "-exc-c14n")) ||
3287
- (!strcmp(argv[i], "--exc-c14n"))) {
3288
- exc_canonical++;
3289
- options |= XML_PARSE_NOENT | XML_PARSE_DTDATTR | XML_PARSE_DTDLOAD;
3290
- }
3291
- #endif
3292
- #ifdef LIBXML_CATALOG_ENABLED
3293
- else if ((!strcmp(argv[i], "-catalogs")) ||
3294
- (!strcmp(argv[i], "--catalogs"))) {
3295
- catalogs++;
3296
- } else if ((!strcmp(argv[i], "-nocatalogs")) ||
3297
- (!strcmp(argv[i], "--nocatalogs"))) {
3298
- nocatalogs++;
3299
- }
3300
- #endif
3301
- else if ((!strcmp(argv[i], "-encode")) ||
3302
- (!strcmp(argv[i], "--encode"))) {
3303
- i++;
3304
- encoding = argv[i];
3305
- /*
3306
- * OK it's for testing purposes
3307
- */
3308
- xmlAddEncodingAlias("UTF-8", "DVEnc");
3309
- }
3310
- else if ((!strcmp(argv[i], "-noblanks")) ||
3311
- (!strcmp(argv[i], "--noblanks"))) {
3312
- noblanks++;
3313
- xmlKeepBlanksDefault(0);
3314
- }
3315
- else if ((!strcmp(argv[i], "-maxmem")) ||
3316
- (!strcmp(argv[i], "--maxmem"))) {
3317
- i++;
3318
- if (sscanf(argv[i], "%d", &maxmem) == 1) {
3319
- xmlMemSetup(myFreeFunc, myMallocFunc, myReallocFunc,
3320
- myStrdupFunc);
3321
- } else {
3322
- maxmem = 0;
3323
- }
3324
- }
3325
- else if ((!strcmp(argv[i], "-format")) ||
3326
- (!strcmp(argv[i], "--format"))) {
3327
- noblanks++;
3328
- #ifdef LIBXML_OUTPUT_ENABLED
3329
- format++;
3330
- #endif /* LIBXML_OUTPUT_ENABLED */
3331
- xmlKeepBlanksDefault(0);
3332
- }
3333
- #ifdef LIBXML_READER_ENABLED
3334
- else if ((!strcmp(argv[i], "-stream")) ||
3335
- (!strcmp(argv[i], "--stream"))) {
3336
- stream++;
3337
- }
3338
- else if ((!strcmp(argv[i], "-walker")) ||
3339
- (!strcmp(argv[i], "--walker"))) {
3340
- walker++;
3341
- noout++;
3342
- }
3343
- #endif /* LIBXML_READER_ENABLED */
3344
- #ifdef LIBXML_SAX1_ENABLED
3345
- else if ((!strcmp(argv[i], "-sax1")) ||
3346
- (!strcmp(argv[i], "--sax1"))) {
3347
- sax1++;
3348
- options |= XML_PARSE_SAX1;
3349
- }
3350
- #endif /* LIBXML_SAX1_ENABLED */
3351
- else if ((!strcmp(argv[i], "-sax")) ||
3352
- (!strcmp(argv[i], "--sax"))) {
3353
- sax++;
3354
- }
3355
- else if ((!strcmp(argv[i], "-chkregister")) ||
3356
- (!strcmp(argv[i], "--chkregister"))) {
3357
- chkregister++;
3358
- #ifdef LIBXML_SCHEMAS_ENABLED
3359
- } else if ((!strcmp(argv[i], "-relaxng")) ||
3360
- (!strcmp(argv[i], "--relaxng"))) {
3361
- i++;
3362
- relaxng = argv[i];
3363
- noent++;
3364
- options |= XML_PARSE_NOENT;
3365
- } else if ((!strcmp(argv[i], "-schema")) ||
3366
- (!strcmp(argv[i], "--schema"))) {
3367
- i++;
3368
- schema = argv[i];
3369
- noent++;
3370
- #endif
3371
- #ifdef LIBXML_SCHEMATRON_ENABLED
3372
- } else if ((!strcmp(argv[i], "-schematron")) ||
3373
- (!strcmp(argv[i], "--schematron"))) {
3374
- i++;
3375
- schematron = argv[i];
3376
- noent++;
3377
- #endif
3378
- } else if ((!strcmp(argv[i], "-nonet")) ||
3379
- (!strcmp(argv[i], "--nonet"))) {
3380
- options |= XML_PARSE_NONET;
3381
- xmlSetExternalEntityLoader(xmlNoNetExternalEntityLoader);
3382
- } else if ((!strcmp(argv[i], "-nocompact")) ||
3383
- (!strcmp(argv[i], "--nocompact"))) {
3384
- options &= ~XML_PARSE_COMPACT;
3385
- } else if ((!strcmp(argv[i], "-load-trace")) ||
3386
- (!strcmp(argv[i], "--load-trace"))) {
3387
- load_trace++;
3388
- } else if ((!strcmp(argv[i], "-path")) ||
3389
- (!strcmp(argv[i], "--path"))) {
3390
- i++;
3391
- parsePath(BAD_CAST argv[i]);
3392
- #ifdef LIBXML_PATTERN_ENABLED
3393
- } else if ((!strcmp(argv[i], "-pattern")) ||
3394
- (!strcmp(argv[i], "--pattern"))) {
3395
- i++;
3396
- pattern = argv[i];
3397
- #endif
3398
- #ifdef LIBXML_XPATH_ENABLED
3399
- } else if ((!strcmp(argv[i], "-xpath")) ||
3400
- (!strcmp(argv[i], "--xpath"))) {
3401
- i++;
3402
- noout++;
3403
- xpathquery = argv[i];
3404
- #endif
3405
- } else if ((!strcmp(argv[i], "-oldxml10")) ||
3406
- (!strcmp(argv[i], "--oldxml10"))) {
3407
- oldxml10++;
3408
- options |= XML_PARSE_OLD10;
3409
- } else {
3410
- fprintf(stderr, "Unknown option %s\n", argv[i]);
3411
- usage(argv[0]);
3412
- return(1);
3413
- }
3414
- }
3415
-
3416
- #ifdef LIBXML_CATALOG_ENABLED
3417
- if (nocatalogs == 0) {
3418
- if (catalogs) {
3419
- const char *catal;
3420
-
3421
- catal = getenv("SGML_CATALOG_FILES");
3422
- if (catal != NULL) {
3423
- xmlLoadCatalogs(catal);
3424
- } else {
3425
- fprintf(stderr, "Variable $SGML_CATALOG_FILES not set\n");
3426
- }
3427
- }
3428
- }
3429
- #endif
3430
-
3431
- #ifdef LIBXML_SAX1_ENABLED
3432
- if (sax1)
3433
- xmlSAXDefaultVersion(1);
3434
- else
3435
- xmlSAXDefaultVersion(2);
3436
- #endif /* LIBXML_SAX1_ENABLED */
3437
-
3438
- if (chkregister) {
3439
- xmlRegisterNodeDefault(registerNode);
3440
- xmlDeregisterNodeDefault(deregisterNode);
3441
- }
3442
-
3443
- indent = getenv("XMLLINT_INDENT");
3444
- if(indent != NULL) {
3445
- xmlTreeIndentString = indent;
3446
- }
3447
-
3448
-
3449
- defaultEntityLoader = xmlGetExternalEntityLoader();
3450
- xmlSetExternalEntityLoader(xmllintExternalEntityLoader);
3451
-
3452
- xmlLineNumbersDefault(1);
3453
- if (loaddtd != 0)
3454
- xmlLoadExtDtdDefaultValue |= XML_DETECT_IDS;
3455
- if (dtdattrs)
3456
- xmlLoadExtDtdDefaultValue |= XML_COMPLETE_ATTRS;
3457
- if (noent != 0) xmlSubstituteEntitiesDefault(1);
3458
- #ifdef LIBXML_VALID_ENABLED
3459
- if (valid != 0) xmlDoValidityCheckingDefaultValue = 1;
3460
- #endif /* LIBXML_VALID_ENABLED */
3461
- if ((htmlout) && (!nowrap)) {
3462
- xmlGenericError(xmlGenericErrorContext,
3463
- "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\n");
3464
- xmlGenericError(xmlGenericErrorContext,
3465
- "\t\"http://www.w3.org/TR/REC-html40/loose.dtd\">\n");
3466
- xmlGenericError(xmlGenericErrorContext,
3467
- "<html><head><title>%s output</title></head>\n",
3468
- argv[0]);
3469
- xmlGenericError(xmlGenericErrorContext,
3470
- "<body bgcolor=\"#ffffff\"><h1 align=\"center\">%s output</h1>\n",
3471
- argv[0]);
3472
- }
3473
-
3474
- #ifdef LIBXML_SCHEMATRON_ENABLED
3475
- if ((schematron != NULL) && (sax == 0)
3476
- #ifdef LIBXML_READER_ENABLED
3477
- && (stream == 0)
3478
- #endif /* LIBXML_READER_ENABLED */
3479
- ) {
3480
- xmlSchematronParserCtxtPtr ctxt;
3481
-
3482
- /* forces loading the DTDs */
3483
- xmlLoadExtDtdDefaultValue |= 1;
3484
- options |= XML_PARSE_DTDLOAD;
3485
- if (timing) {
3486
- startTimer();
3487
- }
3488
- ctxt = xmlSchematronNewParserCtxt(schematron);
3489
- #if 0
3490
- xmlSchematronSetParserErrors(ctxt,
3491
- (xmlSchematronValidityErrorFunc) fprintf,
3492
- (xmlSchematronValidityWarningFunc) fprintf,
3493
- stderr);
3494
- #endif
3495
- wxschematron = xmlSchematronParse(ctxt);
3496
- if (wxschematron == NULL) {
3497
- xmlGenericError(xmlGenericErrorContext,
3498
- "Schematron schema %s failed to compile\n", schematron);
3499
- progresult = XMLLINT_ERR_SCHEMACOMP;
3500
- schematron = NULL;
3501
- }
3502
- xmlSchematronFreeParserCtxt(ctxt);
3503
- if (timing) {
3504
- endTimer("Compiling the schemas");
3505
- }
3506
- }
3507
- #endif
3508
- #ifdef LIBXML_SCHEMAS_ENABLED
3509
- if ((relaxng != NULL) && (sax == 0)
3510
- #ifdef LIBXML_READER_ENABLED
3511
- && (stream == 0)
3512
- #endif /* LIBXML_READER_ENABLED */
3513
- ) {
3514
- xmlRelaxNGParserCtxtPtr ctxt;
3515
-
3516
- /* forces loading the DTDs */
3517
- xmlLoadExtDtdDefaultValue |= 1;
3518
- options |= XML_PARSE_DTDLOAD;
3519
- if (timing) {
3520
- startTimer();
3521
- }
3522
- ctxt = xmlRelaxNGNewParserCtxt(relaxng);
3523
- xmlRelaxNGSetParserErrors(ctxt,
3524
- (xmlRelaxNGValidityErrorFunc) fprintf,
3525
- (xmlRelaxNGValidityWarningFunc) fprintf,
3526
- stderr);
3527
- relaxngschemas = xmlRelaxNGParse(ctxt);
3528
- if (relaxngschemas == NULL) {
3529
- xmlGenericError(xmlGenericErrorContext,
3530
- "Relax-NG schema %s failed to compile\n", relaxng);
3531
- progresult = XMLLINT_ERR_SCHEMACOMP;
3532
- relaxng = NULL;
3533
- }
3534
- xmlRelaxNGFreeParserCtxt(ctxt);
3535
- if (timing) {
3536
- endTimer("Compiling the schemas");
3537
- }
3538
- } else if ((schema != NULL)
3539
- #ifdef LIBXML_READER_ENABLED
3540
- && (stream == 0)
3541
- #endif
3542
- ) {
3543
- xmlSchemaParserCtxtPtr ctxt;
3544
-
3545
- if (timing) {
3546
- startTimer();
3547
- }
3548
- ctxt = xmlSchemaNewParserCtxt(schema);
3549
- xmlSchemaSetParserErrors(ctxt,
3550
- (xmlSchemaValidityErrorFunc) fprintf,
3551
- (xmlSchemaValidityWarningFunc) fprintf,
3552
- stderr);
3553
- wxschemas = xmlSchemaParse(ctxt);
3554
- if (wxschemas == NULL) {
3555
- xmlGenericError(xmlGenericErrorContext,
3556
- "WXS schema %s failed to compile\n", schema);
3557
- progresult = XMLLINT_ERR_SCHEMACOMP;
3558
- schema = NULL;
3559
- }
3560
- xmlSchemaFreeParserCtxt(ctxt);
3561
- if (timing) {
3562
- endTimer("Compiling the schemas");
3563
- }
3564
- }
3565
- #endif /* LIBXML_SCHEMAS_ENABLED */
3566
- #ifdef LIBXML_PATTERN_ENABLED
3567
- if ((pattern != NULL)
3568
- #ifdef LIBXML_READER_ENABLED
3569
- && (walker == 0)
3570
- #endif
3571
- ) {
3572
- patternc = xmlPatterncompile((const xmlChar *) pattern, NULL, 0, NULL);
3573
- if (patternc == NULL) {
3574
- xmlGenericError(xmlGenericErrorContext,
3575
- "Pattern %s failed to compile\n", pattern);
3576
- progresult = XMLLINT_ERR_SCHEMAPAT;
3577
- pattern = NULL;
3578
- }
3579
- }
3580
- #endif /* LIBXML_PATTERN_ENABLED */
3581
- for (i = 1; i < argc ; i++) {
3582
- if ((!strcmp(argv[i], "-encode")) ||
3583
- (!strcmp(argv[i], "--encode"))) {
3584
- i++;
3585
- continue;
3586
- } else if ((!strcmp(argv[i], "-o")) ||
3587
- (!strcmp(argv[i], "-output")) ||
3588
- (!strcmp(argv[i], "--output"))) {
3589
- i++;
3590
- continue;
3591
- }
3592
- #ifdef LIBXML_VALID_ENABLED
3593
- if ((!strcmp(argv[i], "-dtdvalid")) ||
3594
- (!strcmp(argv[i], "--dtdvalid"))) {
3595
- i++;
3596
- continue;
3597
- }
3598
- if ((!strcmp(argv[i], "-path")) ||
3599
- (!strcmp(argv[i], "--path"))) {
3600
- i++;
3601
- continue;
3602
- }
3603
- if ((!strcmp(argv[i], "-dtdvalidfpi")) ||
3604
- (!strcmp(argv[i], "--dtdvalidfpi"))) {
3605
- i++;
3606
- continue;
3607
- }
3608
- #endif /* LIBXML_VALID_ENABLED */
3609
- if ((!strcmp(argv[i], "-relaxng")) ||
3610
- (!strcmp(argv[i], "--relaxng"))) {
3611
- i++;
3612
- continue;
3613
- }
3614
- if ((!strcmp(argv[i], "-maxmem")) ||
3615
- (!strcmp(argv[i], "--maxmem"))) {
3616
- i++;
3617
- continue;
3618
- }
3619
- if ((!strcmp(argv[i], "-schema")) ||
3620
- (!strcmp(argv[i], "--schema"))) {
3621
- i++;
3622
- continue;
3623
- }
3624
- if ((!strcmp(argv[i], "-schematron")) ||
3625
- (!strcmp(argv[i], "--schematron"))) {
3626
- i++;
3627
- continue;
3628
- }
3629
- #ifdef LIBXML_PATTERN_ENABLED
3630
- if ((!strcmp(argv[i], "-pattern")) ||
3631
- (!strcmp(argv[i], "--pattern"))) {
3632
- i++;
3633
- continue;
3634
- }
3635
- #endif
3636
- #ifdef LIBXML_XPATH_ENABLED
3637
- if ((!strcmp(argv[i], "-xpath")) ||
3638
- (!strcmp(argv[i], "--xpath"))) {
3639
- i++;
3640
- continue;
3641
- }
3642
- #endif
3643
- if ((timing) && (repeat))
3644
- startTimer();
3645
- /* Remember file names. "-" means stdin. <sven@zen.org> */
3646
- if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0)) {
3647
- if (repeat) {
3648
- xmlParserCtxtPtr ctxt = NULL;
3649
-
3650
- for (acount = 0;acount < repeat;acount++) {
3651
- #ifdef LIBXML_READER_ENABLED
3652
- if (stream != 0) {
3653
- streamFile(argv[i]);
3654
- } else {
3655
- #endif /* LIBXML_READER_ENABLED */
3656
- if (sax) {
3657
- testSAX(argv[i]);
3658
- } else {
3659
- if (ctxt == NULL)
3660
- ctxt = xmlNewParserCtxt();
3661
- parseAndPrintFile(argv[i], ctxt);
3662
- }
3663
- #ifdef LIBXML_READER_ENABLED
3664
- }
3665
- #endif /* LIBXML_READER_ENABLED */
3666
- }
3667
- if (ctxt != NULL)
3668
- xmlFreeParserCtxt(ctxt);
3669
- } else {
3670
- nbregister = 0;
3671
-
3672
- #ifdef LIBXML_READER_ENABLED
3673
- if (stream != 0)
3674
- streamFile(argv[i]);
3675
- else
3676
- #endif /* LIBXML_READER_ENABLED */
3677
- if (sax) {
3678
- testSAX(argv[i]);
3679
- } else {
3680
- parseAndPrintFile(argv[i], NULL);
3681
- }
3682
-
3683
- if ((chkregister) && (nbregister != 0)) {
3684
- fprintf(stderr, "Registration count off: %d\n", nbregister);
3685
- progresult = XMLLINT_ERR_RDREGIS;
3686
- }
3687
- }
3688
- files ++;
3689
- if ((timing) && (repeat)) {
3690
- endTimer("%d iterations", repeat);
3691
- }
3692
- }
3693
- }
3694
- if (generate)
3695
- parseAndPrintFile(NULL, NULL);
3696
- if ((htmlout) && (!nowrap)) {
3697
- xmlGenericError(xmlGenericErrorContext, "</body></html>\n");
3698
- }
3699
- if ((files == 0) && (!generate) && (version == 0)) {
3700
- usage(argv[0]);
3701
- }
3702
- #ifdef LIBXML_SCHEMATRON_ENABLED
3703
- if (wxschematron != NULL)
3704
- xmlSchematronFree(wxschematron);
3705
- #endif
3706
- #ifdef LIBXML_SCHEMAS_ENABLED
3707
- if (relaxngschemas != NULL)
3708
- xmlRelaxNGFree(relaxngschemas);
3709
- if (wxschemas != NULL)
3710
- xmlSchemaFree(wxschemas);
3711
- xmlRelaxNGCleanupTypes();
3712
- #endif
3713
- #ifdef LIBXML_PATTERN_ENABLED
3714
- if (patternc != NULL)
3715
- xmlFreePattern(patternc);
3716
- #endif
3717
- xmlCleanupParser();
3718
- xmlMemoryDump();
3719
-
3720
- return(progresult);
3721
- }
3722
-