nokogiri 1.18.0-aarch64-linux-musl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (203) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +39 -0
  3. data/LICENSE-DEPENDENCIES.md +2224 -0
  4. data/LICENSE.md +9 -0
  5. data/README.md +293 -0
  6. data/bin/nokogiri +131 -0
  7. data/dependencies.yml +42 -0
  8. data/ext/nokogiri/depend +38 -0
  9. data/ext/nokogiri/extconf.rb +1173 -0
  10. data/ext/nokogiri/gumbo.c +610 -0
  11. data/ext/nokogiri/html4_document.c +171 -0
  12. data/ext/nokogiri/html4_element_description.c +299 -0
  13. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  14. data/ext/nokogiri/html4_sax_parser.c +40 -0
  15. data/ext/nokogiri/html4_sax_parser_context.c +98 -0
  16. data/ext/nokogiri/html4_sax_push_parser.c +96 -0
  17. data/ext/nokogiri/include/libexslt/exslt.h +108 -0
  18. data/ext/nokogiri/include/libexslt/exsltconfig.h +70 -0
  19. data/ext/nokogiri/include/libexslt/exsltexports.h +63 -0
  20. data/ext/nokogiri/include/libxml2/libxml/HTMLparser.h +336 -0
  21. data/ext/nokogiri/include/libxml2/libxml/HTMLtree.h +147 -0
  22. data/ext/nokogiri/include/libxml2/libxml/SAX.h +202 -0
  23. data/ext/nokogiri/include/libxml2/libxml/SAX2.h +171 -0
  24. data/ext/nokogiri/include/libxml2/libxml/c14n.h +115 -0
  25. data/ext/nokogiri/include/libxml2/libxml/catalog.h +182 -0
  26. data/ext/nokogiri/include/libxml2/libxml/chvalid.h +230 -0
  27. data/ext/nokogiri/include/libxml2/libxml/debugXML.h +217 -0
  28. data/ext/nokogiri/include/libxml2/libxml/dict.h +82 -0
  29. data/ext/nokogiri/include/libxml2/libxml/encoding.h +244 -0
  30. data/ext/nokogiri/include/libxml2/libxml/entities.h +166 -0
  31. data/ext/nokogiri/include/libxml2/libxml/globals.h +41 -0
  32. data/ext/nokogiri/include/libxml2/libxml/hash.h +251 -0
  33. data/ext/nokogiri/include/libxml2/libxml/list.h +137 -0
  34. data/ext/nokogiri/include/libxml2/libxml/nanoftp.h +186 -0
  35. data/ext/nokogiri/include/libxml2/libxml/nanohttp.h +98 -0
  36. data/ext/nokogiri/include/libxml2/libxml/parser.h +1390 -0
  37. data/ext/nokogiri/include/libxml2/libxml/parserInternals.h +671 -0
  38. data/ext/nokogiri/include/libxml2/libxml/pattern.h +106 -0
  39. data/ext/nokogiri/include/libxml2/libxml/relaxng.h +219 -0
  40. data/ext/nokogiri/include/libxml2/libxml/schemasInternals.h +959 -0
  41. data/ext/nokogiri/include/libxml2/libxml/schematron.h +143 -0
  42. data/ext/nokogiri/include/libxml2/libxml/threads.h +87 -0
  43. data/ext/nokogiri/include/libxml2/libxml/tree.h +1382 -0
  44. data/ext/nokogiri/include/libxml2/libxml/uri.h +106 -0
  45. data/ext/nokogiri/include/libxml2/libxml/valid.h +477 -0
  46. data/ext/nokogiri/include/libxml2/libxml/xinclude.h +136 -0
  47. data/ext/nokogiri/include/libxml2/libxml/xlink.h +189 -0
  48. data/ext/nokogiri/include/libxml2/libxml/xmlIO.h +438 -0
  49. data/ext/nokogiri/include/libxml2/libxml/xmlautomata.h +146 -0
  50. data/ext/nokogiri/include/libxml2/libxml/xmlerror.h +962 -0
  51. data/ext/nokogiri/include/libxml2/libxml/xmlexports.h +146 -0
  52. data/ext/nokogiri/include/libxml2/libxml/xmlmemory.h +188 -0
  53. data/ext/nokogiri/include/libxml2/libxml/xmlmodule.h +57 -0
  54. data/ext/nokogiri/include/libxml2/libxml/xmlreader.h +436 -0
  55. data/ext/nokogiri/include/libxml2/libxml/xmlregexp.h +215 -0
  56. data/ext/nokogiri/include/libxml2/libxml/xmlsave.h +102 -0
  57. data/ext/nokogiri/include/libxml2/libxml/xmlschemas.h +249 -0
  58. data/ext/nokogiri/include/libxml2/libxml/xmlschemastypes.h +152 -0
  59. data/ext/nokogiri/include/libxml2/libxml/xmlstring.h +140 -0
  60. data/ext/nokogiri/include/libxml2/libxml/xmlunicode.h +366 -0
  61. data/ext/nokogiri/include/libxml2/libxml/xmlversion.h +347 -0
  62. data/ext/nokogiri/include/libxml2/libxml/xmlwriter.h +489 -0
  63. data/ext/nokogiri/include/libxml2/libxml/xpath.h +579 -0
  64. data/ext/nokogiri/include/libxml2/libxml/xpathInternals.h +633 -0
  65. data/ext/nokogiri/include/libxml2/libxml/xpointer.h +138 -0
  66. data/ext/nokogiri/include/libxslt/attributes.h +39 -0
  67. data/ext/nokogiri/include/libxslt/documents.h +93 -0
  68. data/ext/nokogiri/include/libxslt/extensions.h +262 -0
  69. data/ext/nokogiri/include/libxslt/extra.h +72 -0
  70. data/ext/nokogiri/include/libxslt/functions.h +78 -0
  71. data/ext/nokogiri/include/libxslt/imports.h +75 -0
  72. data/ext/nokogiri/include/libxslt/keys.h +53 -0
  73. data/ext/nokogiri/include/libxslt/namespaces.h +68 -0
  74. data/ext/nokogiri/include/libxslt/numbersInternals.h +73 -0
  75. data/ext/nokogiri/include/libxslt/pattern.h +84 -0
  76. data/ext/nokogiri/include/libxslt/preproc.h +43 -0
  77. data/ext/nokogiri/include/libxslt/security.h +104 -0
  78. data/ext/nokogiri/include/libxslt/templates.h +77 -0
  79. data/ext/nokogiri/include/libxslt/transform.h +207 -0
  80. data/ext/nokogiri/include/libxslt/variables.h +118 -0
  81. data/ext/nokogiri/include/libxslt/xslt.h +110 -0
  82. data/ext/nokogiri/include/libxslt/xsltInternals.h +1995 -0
  83. data/ext/nokogiri/include/libxslt/xsltconfig.h +146 -0
  84. data/ext/nokogiri/include/libxslt/xsltexports.h +64 -0
  85. data/ext/nokogiri/include/libxslt/xsltlocale.h +44 -0
  86. data/ext/nokogiri/include/libxslt/xsltutils.h +343 -0
  87. data/ext/nokogiri/libxml2_polyfill.c +114 -0
  88. data/ext/nokogiri/nokogiri.c +294 -0
  89. data/ext/nokogiri/nokogiri.h +238 -0
  90. data/ext/nokogiri/test_global_handlers.c +40 -0
  91. data/ext/nokogiri/xml_attr.c +103 -0
  92. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  93. data/ext/nokogiri/xml_cdata.c +62 -0
  94. data/ext/nokogiri/xml_comment.c +57 -0
  95. data/ext/nokogiri/xml_document.c +784 -0
  96. data/ext/nokogiri/xml_document_fragment.c +29 -0
  97. data/ext/nokogiri/xml_dtd.c +208 -0
  98. data/ext/nokogiri/xml_element_content.c +131 -0
  99. data/ext/nokogiri/xml_element_decl.c +69 -0
  100. data/ext/nokogiri/xml_encoding_handler.c +112 -0
  101. data/ext/nokogiri/xml_entity_decl.c +112 -0
  102. data/ext/nokogiri/xml_entity_reference.c +50 -0
  103. data/ext/nokogiri/xml_namespace.c +181 -0
  104. data/ext/nokogiri/xml_node.c +2459 -0
  105. data/ext/nokogiri/xml_node_set.c +518 -0
  106. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  107. data/ext/nokogiri/xml_reader.c +777 -0
  108. data/ext/nokogiri/xml_relax_ng.c +149 -0
  109. data/ext/nokogiri/xml_sax_parser.c +403 -0
  110. data/ext/nokogiri/xml_sax_parser_context.c +390 -0
  111. data/ext/nokogiri/xml_sax_push_parser.c +206 -0
  112. data/ext/nokogiri/xml_schema.c +226 -0
  113. data/ext/nokogiri/xml_syntax_error.c +93 -0
  114. data/ext/nokogiri/xml_text.c +59 -0
  115. data/ext/nokogiri/xml_xpath_context.c +486 -0
  116. data/ext/nokogiri/xslt_stylesheet.c +421 -0
  117. data/gumbo-parser/CHANGES.md +63 -0
  118. data/gumbo-parser/Makefile +129 -0
  119. data/gumbo-parser/THANKS +27 -0
  120. data/lib/nokogiri/3.1/nokogiri.so +0 -0
  121. data/lib/nokogiri/3.2/nokogiri.so +0 -0
  122. data/lib/nokogiri/3.3/nokogiri.so +0 -0
  123. data/lib/nokogiri/3.4/nokogiri.so +0 -0
  124. data/lib/nokogiri/class_resolver.rb +67 -0
  125. data/lib/nokogiri/css/node.rb +58 -0
  126. data/lib/nokogiri/css/parser.rb +772 -0
  127. data/lib/nokogiri/css/parser.y +277 -0
  128. data/lib/nokogiri/css/parser_extras.rb +36 -0
  129. data/lib/nokogiri/css/selector_cache.rb +38 -0
  130. data/lib/nokogiri/css/syntax_error.rb +9 -0
  131. data/lib/nokogiri/css/tokenizer.rb +155 -0
  132. data/lib/nokogiri/css/tokenizer.rex +57 -0
  133. data/lib/nokogiri/css/xpath_visitor.rb +375 -0
  134. data/lib/nokogiri/css.rb +132 -0
  135. data/lib/nokogiri/decorators/slop.rb +42 -0
  136. data/lib/nokogiri/encoding_handler.rb +57 -0
  137. data/lib/nokogiri/extension.rb +32 -0
  138. data/lib/nokogiri/gumbo.rb +15 -0
  139. data/lib/nokogiri/html.rb +48 -0
  140. data/lib/nokogiri/html4/builder.rb +37 -0
  141. data/lib/nokogiri/html4/document.rb +235 -0
  142. data/lib/nokogiri/html4/document_fragment.rb +166 -0
  143. data/lib/nokogiri/html4/element_description.rb +25 -0
  144. data/lib/nokogiri/html4/element_description_defaults.rb +2040 -0
  145. data/lib/nokogiri/html4/encoding_reader.rb +121 -0
  146. data/lib/nokogiri/html4/entity_lookup.rb +15 -0
  147. data/lib/nokogiri/html4/sax/parser.rb +48 -0
  148. data/lib/nokogiri/html4/sax/parser_context.rb +15 -0
  149. data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
  150. data/lib/nokogiri/html4.rb +42 -0
  151. data/lib/nokogiri/html5/builder.rb +40 -0
  152. data/lib/nokogiri/html5/document.rb +199 -0
  153. data/lib/nokogiri/html5/document_fragment.rb +200 -0
  154. data/lib/nokogiri/html5/node.rb +103 -0
  155. data/lib/nokogiri/html5.rb +368 -0
  156. data/lib/nokogiri/jruby/dependencies.rb +3 -0
  157. data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
  158. data/lib/nokogiri/syntax_error.rb +6 -0
  159. data/lib/nokogiri/version/constant.rb +6 -0
  160. data/lib/nokogiri/version/info.rb +224 -0
  161. data/lib/nokogiri/version.rb +4 -0
  162. data/lib/nokogiri/xml/attr.rb +66 -0
  163. data/lib/nokogiri/xml/attribute_decl.rb +22 -0
  164. data/lib/nokogiri/xml/builder.rb +494 -0
  165. data/lib/nokogiri/xml/cdata.rb +13 -0
  166. data/lib/nokogiri/xml/character_data.rb +9 -0
  167. data/lib/nokogiri/xml/document.rb +514 -0
  168. data/lib/nokogiri/xml/document_fragment.rb +276 -0
  169. data/lib/nokogiri/xml/dtd.rb +34 -0
  170. data/lib/nokogiri/xml/element_content.rb +46 -0
  171. data/lib/nokogiri/xml/element_decl.rb +17 -0
  172. data/lib/nokogiri/xml/entity_decl.rb +23 -0
  173. data/lib/nokogiri/xml/entity_reference.rb +20 -0
  174. data/lib/nokogiri/xml/namespace.rb +57 -0
  175. data/lib/nokogiri/xml/node/save_options.rb +76 -0
  176. data/lib/nokogiri/xml/node.rb +1650 -0
  177. data/lib/nokogiri/xml/node_set.rb +449 -0
  178. data/lib/nokogiri/xml/notation.rb +19 -0
  179. data/lib/nokogiri/xml/parse_options.rb +213 -0
  180. data/lib/nokogiri/xml/pp/character_data.rb +21 -0
  181. data/lib/nokogiri/xml/pp/node.rb +73 -0
  182. data/lib/nokogiri/xml/pp.rb +4 -0
  183. data/lib/nokogiri/xml/processing_instruction.rb +11 -0
  184. data/lib/nokogiri/xml/reader.rb +139 -0
  185. data/lib/nokogiri/xml/relax_ng.rb +75 -0
  186. data/lib/nokogiri/xml/sax/document.rb +258 -0
  187. data/lib/nokogiri/xml/sax/parser.rb +199 -0
  188. data/lib/nokogiri/xml/sax/parser_context.rb +129 -0
  189. data/lib/nokogiri/xml/sax/push_parser.rb +64 -0
  190. data/lib/nokogiri/xml/sax.rb +54 -0
  191. data/lib/nokogiri/xml/schema.rb +140 -0
  192. data/lib/nokogiri/xml/searchable.rb +274 -0
  193. data/lib/nokogiri/xml/syntax_error.rb +94 -0
  194. data/lib/nokogiri/xml/text.rb +11 -0
  195. data/lib/nokogiri/xml/xpath/syntax_error.rb +13 -0
  196. data/lib/nokogiri/xml/xpath.rb +21 -0
  197. data/lib/nokogiri/xml/xpath_context.rb +27 -0
  198. data/lib/nokogiri/xml.rb +65 -0
  199. data/lib/nokogiri/xslt/stylesheet.rb +49 -0
  200. data/lib/nokogiri/xslt.rb +129 -0
  201. data/lib/nokogiri.rb +128 -0
  202. data/lib/xsd/xmlparser/nokogiri.rb +105 -0
  203. metadata +321 -0
@@ -0,0 +1,1995 @@
1
+ /*
2
+ * Summary: internal data structures, constants and functions
3
+ * Description: Internal data structures, constants and functions used
4
+ * by the XSLT engine.
5
+ * They are not part of the API or ABI, i.e. they can change
6
+ * without prior notice, use carefully.
7
+ *
8
+ * Copy: See Copyright for the status of this software.
9
+ *
10
+ * Author: Daniel Veillard
11
+ */
12
+
13
+ #ifndef __XML_XSLT_INTERNALS_H__
14
+ #define __XML_XSLT_INTERNALS_H__
15
+
16
+ #include <libxml/tree.h>
17
+ #include <libxml/hash.h>
18
+ #include <libxml/xpath.h>
19
+ #include <libxml/xmlerror.h>
20
+ #include <libxml/dict.h>
21
+ #include <libxml/xmlstring.h>
22
+ #include <libxslt/xslt.h>
23
+ #include "xsltexports.h"
24
+ #include "numbersInternals.h"
25
+
26
+ #ifdef __cplusplus
27
+ extern "C" {
28
+ #endif
29
+
30
+ /* #define XSLT_DEBUG_PROFILE_CACHE */
31
+
32
+ /**
33
+ * XSLT_IS_TEXT_NODE:
34
+ *
35
+ * check if the argument is a text node
36
+ */
37
+ #define XSLT_IS_TEXT_NODE(n) ((n != NULL) && \
38
+ (((n)->type == XML_TEXT_NODE) || \
39
+ ((n)->type == XML_CDATA_SECTION_NODE)))
40
+
41
+
42
+ /**
43
+ * XSLT_MARK_RES_TREE_FRAG:
44
+ *
45
+ * internal macro to set up tree fragments
46
+ */
47
+ #define XSLT_MARK_RES_TREE_FRAG(n) \
48
+ (n)->name = (char *) xmlStrdup(BAD_CAST " fake node libxslt");
49
+
50
+ /**
51
+ * XSLT_IS_RES_TREE_FRAG:
52
+ *
53
+ * internal macro to test tree fragments
54
+ */
55
+ #define XSLT_IS_RES_TREE_FRAG(n) \
56
+ ((n != NULL) && ((n)->type == XML_DOCUMENT_NODE) && \
57
+ ((n)->name != NULL) && ((n)->name[0] == ' '))
58
+
59
+ /**
60
+ * XSLT_REFACTORED_KEYCOMP:
61
+ *
62
+ * Internal define to enable on-demand xsl:key computation.
63
+ * That's the only mode now but the define is kept for compatibility
64
+ */
65
+ #define XSLT_REFACTORED_KEYCOMP
66
+
67
+ /**
68
+ * XSLT_FAST_IF:
69
+ *
70
+ * Internal define to enable usage of xmlXPathCompiledEvalToBoolean()
71
+ * for XSLT "tests"; e.g. in <xsl:if test="/foo/bar">
72
+ */
73
+ #define XSLT_FAST_IF
74
+
75
+ /**
76
+ * XSLT_REFACTORED:
77
+ *
78
+ * Internal define to enable the refactored parts of Libxslt.
79
+ */
80
+ /* #define XSLT_REFACTORED */
81
+ /* ==================================================================== */
82
+
83
+ /**
84
+ * XSLT_REFACTORED_VARS:
85
+ *
86
+ * Internal define to enable the refactored variable part of libxslt
87
+ */
88
+ #define XSLT_REFACTORED_VARS
89
+
90
+ #ifdef XSLT_REFACTORED
91
+
92
+ extern const xmlChar *xsltXSLTAttrMarker;
93
+
94
+
95
+ /* TODO: REMOVE: #define XSLT_REFACTORED_EXCLRESNS */
96
+
97
+ /* TODO: REMOVE: #define XSLT_REFACTORED_NSALIAS */
98
+
99
+ /**
100
+ * XSLT_REFACTORED_XSLT_NSCOMP
101
+ *
102
+ * Internal define to enable the pointer-comparison of
103
+ * namespaces of XSLT elements.
104
+ */
105
+ /* #define XSLT_REFACTORED_XSLT_NSCOMP */
106
+
107
+ #ifdef XSLT_REFACTORED_XSLT_NSCOMP
108
+
109
+ extern const xmlChar *xsltConstNamespaceNameXSLT;
110
+
111
+ /**
112
+ * IS_XSLT_ELEM_FAST:
113
+ *
114
+ * quick test to detect XSLT elements
115
+ */
116
+ #define IS_XSLT_ELEM_FAST(n) \
117
+ (((n) != NULL) && ((n)->ns != NULL) && \
118
+ ((n)->ns->href == xsltConstNamespaceNameXSLT))
119
+
120
+ /**
121
+ * IS_XSLT_ATTR_FAST:
122
+ *
123
+ * quick test to detect XSLT attributes
124
+ */
125
+ #define IS_XSLT_ATTR_FAST(a) \
126
+ (((a) != NULL) && ((a)->ns != NULL) && \
127
+ ((a)->ns->href == xsltConstNamespaceNameXSLT))
128
+
129
+ /**
130
+ * XSLT_HAS_INTERNAL_NSMAP:
131
+ *
132
+ * check for namespace mapping
133
+ */
134
+ #define XSLT_HAS_INTERNAL_NSMAP(s) \
135
+ (((s) != NULL) && ((s)->principal) && \
136
+ ((s)->principal->principalData) && \
137
+ ((s)->principal->principalData->nsMap))
138
+
139
+ /**
140
+ * XSLT_GET_INTERNAL_NSMAP:
141
+ *
142
+ * get pointer to namespace map
143
+ */
144
+ #define XSLT_GET_INTERNAL_NSMAP(s) ((s)->principal->principalData->nsMap)
145
+
146
+ #else /* XSLT_REFACTORED_XSLT_NSCOMP */
147
+
148
+ /**
149
+ * IS_XSLT_ELEM_FAST:
150
+ *
151
+ * quick check whether this is an xslt element
152
+ */
153
+ #define IS_XSLT_ELEM_FAST(n) \
154
+ (((n) != NULL) && ((n)->ns != NULL) && \
155
+ (xmlStrEqual((n)->ns->href, XSLT_NAMESPACE)))
156
+
157
+ /**
158
+ * IS_XSLT_ATTR_FAST:
159
+ *
160
+ * quick check for xslt namespace attribute
161
+ */
162
+ #define IS_XSLT_ATTR_FAST(a) \
163
+ (((a) != NULL) && ((a)->ns != NULL) && \
164
+ (xmlStrEqual((a)->ns->href, XSLT_NAMESPACE)))
165
+
166
+
167
+ #endif /* XSLT_REFACTORED_XSLT_NSCOMP */
168
+
169
+
170
+ /**
171
+ * XSLT_REFACTORED_MANDATORY_VERSION:
172
+ *
173
+ * TODO: Currently disabled to surpress regression test failures, since
174
+ * the old behaviour was that a missing version attribute
175
+ * produced a only a warning and not an error, which was incerrect.
176
+ * So the regression tests need to be fixed if this is enabled.
177
+ */
178
+ /* #define XSLT_REFACTORED_MANDATORY_VERSION */
179
+
180
+ /**
181
+ * xsltPointerList:
182
+ *
183
+ * Pointer-list for various purposes.
184
+ */
185
+ typedef struct _xsltPointerList xsltPointerList;
186
+ typedef xsltPointerList *xsltPointerListPtr;
187
+ struct _xsltPointerList {
188
+ void **items;
189
+ int number;
190
+ int size;
191
+ };
192
+
193
+ #endif
194
+
195
+ /**
196
+ * XSLT_REFACTORED_PARSING:
197
+ *
198
+ * Internal define to enable the refactored parts of Libxslt
199
+ * related to parsing.
200
+ */
201
+ /* #define XSLT_REFACTORED_PARSING */
202
+
203
+ /**
204
+ * XSLT_MAX_SORT:
205
+ *
206
+ * Max number of specified xsl:sort on an element.
207
+ */
208
+ #define XSLT_MAX_SORT 15
209
+
210
+ /**
211
+ * XSLT_PAT_NO_PRIORITY:
212
+ *
213
+ * Specific value for pattern without priority expressed.
214
+ */
215
+ #define XSLT_PAT_NO_PRIORITY -12345789
216
+
217
+ /**
218
+ * xsltRuntimeExtra:
219
+ *
220
+ * Extra information added to the transformation context.
221
+ */
222
+ typedef struct _xsltRuntimeExtra xsltRuntimeExtra;
223
+ typedef xsltRuntimeExtra *xsltRuntimeExtraPtr;
224
+ struct _xsltRuntimeExtra {
225
+ void *info; /* pointer to the extra data */
226
+ xmlFreeFunc deallocate; /* pointer to the deallocation routine */
227
+ union { /* dual-purpose field */
228
+ void *ptr; /* data not needing deallocation */
229
+ int ival; /* integer value storage */
230
+ } val;
231
+ };
232
+
233
+ /**
234
+ * XSLT_RUNTIME_EXTRA_LST:
235
+ * @ctxt: the transformation context
236
+ * @nr: the index
237
+ *
238
+ * Macro used to access extra information stored in the context
239
+ */
240
+ #define XSLT_RUNTIME_EXTRA_LST(ctxt, nr) (ctxt)->extras[(nr)].info
241
+ /**
242
+ * XSLT_RUNTIME_EXTRA_FREE:
243
+ * @ctxt: the transformation context
244
+ * @nr: the index
245
+ *
246
+ * Macro used to free extra information stored in the context
247
+ */
248
+ #define XSLT_RUNTIME_EXTRA_FREE(ctxt, nr) (ctxt)->extras[(nr)].deallocate
249
+ /**
250
+ * XSLT_RUNTIME_EXTRA:
251
+ * @ctxt: the transformation context
252
+ * @nr: the index
253
+ *
254
+ * Macro used to define extra information stored in the context
255
+ */
256
+ #define XSLT_RUNTIME_EXTRA(ctxt, nr, typ) (ctxt)->extras[(nr)].val.typ
257
+
258
+ /**
259
+ * xsltTemplate:
260
+ *
261
+ * The in-memory structure corresponding to an XSLT Template.
262
+ */
263
+ typedef struct _xsltTemplate xsltTemplate;
264
+ typedef xsltTemplate *xsltTemplatePtr;
265
+ struct _xsltTemplate {
266
+ struct _xsltTemplate *next;/* chained list sorted by priority */
267
+ struct _xsltStylesheet *style;/* the containing stylesheet */
268
+ xmlChar *match; /* the matching string */
269
+ float priority; /* as given from the stylesheet, not computed */
270
+ const xmlChar *name; /* the local part of the name QName */
271
+ const xmlChar *nameURI; /* the URI part of the name QName */
272
+ const xmlChar *mode;/* the local part of the mode QName */
273
+ const xmlChar *modeURI;/* the URI part of the mode QName */
274
+ xmlNodePtr content; /* the template replacement value */
275
+ xmlNodePtr elem; /* the source element */
276
+
277
+ /*
278
+ * TODO: @inheritedNsNr and @inheritedNs won't be used in the
279
+ * refactored code.
280
+ */
281
+ int inheritedNsNr; /* number of inherited namespaces */
282
+ xmlNsPtr *inheritedNs;/* inherited non-excluded namespaces */
283
+
284
+ /* Profiling information */
285
+ int nbCalls; /* the number of time the template was called */
286
+ unsigned long time; /* the time spent in this template */
287
+ void *params; /* xsl:param instructions */
288
+
289
+ int templNr; /* Nb of templates in the stack */
290
+ int templMax; /* Size of the templtes stack */
291
+ xsltTemplatePtr *templCalledTab; /* templates called */
292
+ int *templCountTab; /* .. and how often */
293
+
294
+ /* Conflict resolution */
295
+ int position;
296
+ };
297
+
298
+ /**
299
+ * xsltDecimalFormat:
300
+ *
301
+ * Data structure of decimal-format.
302
+ */
303
+ typedef struct _xsltDecimalFormat xsltDecimalFormat;
304
+ typedef xsltDecimalFormat *xsltDecimalFormatPtr;
305
+ struct _xsltDecimalFormat {
306
+ struct _xsltDecimalFormat *next; /* chained list */
307
+ xmlChar *name;
308
+ /* Used for interpretation of pattern */
309
+ xmlChar *digit;
310
+ xmlChar *patternSeparator;
311
+ /* May appear in result */
312
+ xmlChar *minusSign;
313
+ xmlChar *infinity;
314
+ xmlChar *noNumber; /* Not-a-number */
315
+ /* Used for interpretation of pattern and may appear in result */
316
+ xmlChar *decimalPoint;
317
+ xmlChar *grouping;
318
+ xmlChar *percent;
319
+ xmlChar *permille;
320
+ xmlChar *zeroDigit;
321
+ const xmlChar *nsUri;
322
+ };
323
+
324
+ /**
325
+ * xsltDocument:
326
+ *
327
+ * Data structure associated to a parsed document.
328
+ */
329
+ typedef struct _xsltDocument xsltDocument;
330
+ typedef xsltDocument *xsltDocumentPtr;
331
+ struct _xsltDocument {
332
+ struct _xsltDocument *next; /* documents are kept in a chained list */
333
+ int main; /* is this the main document */
334
+ xmlDocPtr doc; /* the parsed document */
335
+ void *keys; /* key tables storage */
336
+ struct _xsltDocument *includes; /* subsidiary includes */
337
+ int preproc; /* pre-processing already done */
338
+ int nbKeysComputed;
339
+ };
340
+
341
+ /**
342
+ * xsltKeyDef:
343
+ *
344
+ * Representation of an xsl:key.
345
+ */
346
+ typedef struct _xsltKeyDef xsltKeyDef;
347
+ typedef xsltKeyDef *xsltKeyDefPtr;
348
+ struct _xsltKeyDef {
349
+ struct _xsltKeyDef *next;
350
+ xmlNodePtr inst;
351
+ xmlChar *name;
352
+ xmlChar *nameURI;
353
+ xmlChar *match;
354
+ xmlChar *use;
355
+ xmlXPathCompExprPtr comp;
356
+ xmlXPathCompExprPtr usecomp;
357
+ xmlNsPtr *nsList; /* the namespaces in scope */
358
+ int nsNr; /* the number of namespaces in scope */
359
+ };
360
+
361
+ /**
362
+ * xsltKeyTable:
363
+ *
364
+ * Holds the computed keys for key definitions of the same QName.
365
+ * Is owned by an xsltDocument.
366
+ */
367
+ typedef struct _xsltKeyTable xsltKeyTable;
368
+ typedef xsltKeyTable *xsltKeyTablePtr;
369
+ struct _xsltKeyTable {
370
+ struct _xsltKeyTable *next;
371
+ xmlChar *name;
372
+ xmlChar *nameURI;
373
+ xmlHashTablePtr keys;
374
+ };
375
+
376
+ /*
377
+ * The in-memory structure corresponding to an XSLT Stylesheet.
378
+ * NOTE: most of the content is simply linked from the doc tree
379
+ * structure, no specific allocation is made.
380
+ */
381
+ typedef struct _xsltStylesheet xsltStylesheet;
382
+ typedef xsltStylesheet *xsltStylesheetPtr;
383
+
384
+ typedef struct _xsltTransformContext xsltTransformContext;
385
+ typedef xsltTransformContext *xsltTransformContextPtr;
386
+
387
+ /**
388
+ * xsltElemPreComp:
389
+ *
390
+ * The in-memory structure corresponding to element precomputed data,
391
+ * designed to be extended by extension implementors.
392
+ */
393
+ typedef struct _xsltElemPreComp xsltElemPreComp;
394
+ typedef xsltElemPreComp *xsltElemPreCompPtr;
395
+
396
+ /**
397
+ * xsltTransformFunction:
398
+ * @ctxt: the XSLT transformation context
399
+ * @node: the input node
400
+ * @inst: the stylesheet node
401
+ * @comp: the compiled information from the stylesheet
402
+ *
403
+ * Signature of the function associated to elements part of the
404
+ * stylesheet language like xsl:if or xsl:apply-templates.
405
+ */
406
+ typedef void (*xsltTransformFunction) (xsltTransformContextPtr ctxt,
407
+ xmlNodePtr node,
408
+ xmlNodePtr inst,
409
+ xsltElemPreCompPtr comp);
410
+
411
+ /**
412
+ * xsltSortFunc:
413
+ * @ctxt: a transformation context
414
+ * @sorts: the node-set to sort
415
+ * @nbsorts: the number of sorts
416
+ *
417
+ * Signature of the function to use during sorting
418
+ */
419
+ typedef void (*xsltSortFunc) (xsltTransformContextPtr ctxt, xmlNodePtr *sorts,
420
+ int nbsorts);
421
+
422
+ typedef enum {
423
+ XSLT_FUNC_COPY=1,
424
+ XSLT_FUNC_SORT,
425
+ XSLT_FUNC_TEXT,
426
+ XSLT_FUNC_ELEMENT,
427
+ XSLT_FUNC_ATTRIBUTE,
428
+ XSLT_FUNC_COMMENT,
429
+ XSLT_FUNC_PI,
430
+ XSLT_FUNC_COPYOF,
431
+ XSLT_FUNC_VALUEOF,
432
+ XSLT_FUNC_NUMBER,
433
+ XSLT_FUNC_APPLYIMPORTS,
434
+ XSLT_FUNC_CALLTEMPLATE,
435
+ XSLT_FUNC_APPLYTEMPLATES,
436
+ XSLT_FUNC_CHOOSE,
437
+ XSLT_FUNC_IF,
438
+ XSLT_FUNC_FOREACH,
439
+ XSLT_FUNC_DOCUMENT,
440
+ XSLT_FUNC_WITHPARAM,
441
+ XSLT_FUNC_PARAM,
442
+ XSLT_FUNC_VARIABLE,
443
+ XSLT_FUNC_WHEN,
444
+ XSLT_FUNC_EXTENSION
445
+ #ifdef XSLT_REFACTORED
446
+ ,
447
+ XSLT_FUNC_OTHERWISE,
448
+ XSLT_FUNC_FALLBACK,
449
+ XSLT_FUNC_MESSAGE,
450
+ XSLT_FUNC_INCLUDE,
451
+ XSLT_FUNC_ATTRSET,
452
+ XSLT_FUNC_LITERAL_RESULT_ELEMENT,
453
+ XSLT_FUNC_UNKOWN_FORWARDS_COMPAT
454
+ #endif
455
+ } xsltStyleType;
456
+
457
+ /**
458
+ * xsltElemPreCompDeallocator:
459
+ * @comp: the #xsltElemPreComp to free up
460
+ *
461
+ * Deallocates an #xsltElemPreComp structure.
462
+ */
463
+ typedef void (*xsltElemPreCompDeallocator) (xsltElemPreCompPtr comp);
464
+
465
+ /**
466
+ * xsltElemPreComp:
467
+ *
468
+ * The basic structure for compiled items of the AST of the XSLT processor.
469
+ * This structure is also intended to be extended by extension implementors.
470
+ * TODO: This is somehow not nice, since it has a "free" field, which
471
+ * derived stylesheet-structs do not have.
472
+ */
473
+ struct _xsltElemPreComp {
474
+ xsltElemPreCompPtr next; /* next item in the global chained
475
+ list held by xsltStylesheet. */
476
+ xsltStyleType type; /* type of the element */
477
+ xsltTransformFunction func; /* handling function */
478
+ xmlNodePtr inst; /* the node in the stylesheet's tree
479
+ corresponding to this item */
480
+
481
+ /* end of common part */
482
+ xsltElemPreCompDeallocator free; /* the deallocator */
483
+ };
484
+
485
+ /**
486
+ * xsltStylePreComp:
487
+ *
488
+ * The abstract basic structure for items of the XSLT processor.
489
+ * This includes:
490
+ * 1) compiled forms of XSLT instructions (xsl:if, xsl:attribute, etc.)
491
+ * 2) compiled forms of literal result elements
492
+ * 3) compiled forms of extension elements
493
+ */
494
+ typedef struct _xsltStylePreComp xsltStylePreComp;
495
+ typedef xsltStylePreComp *xsltStylePreCompPtr;
496
+
497
+ #ifdef XSLT_REFACTORED
498
+
499
+ /*
500
+ * Some pointer-list utility functions.
501
+ */
502
+ XSLTPUBFUN xsltPointerListPtr XSLTCALL
503
+ xsltPointerListCreate (int initialSize);
504
+ XSLTPUBFUN void XSLTCALL
505
+ xsltPointerListFree (xsltPointerListPtr list);
506
+ XSLTPUBFUN void XSLTCALL
507
+ xsltPointerListClear (xsltPointerListPtr list);
508
+ XSLTPUBFUN int XSLTCALL
509
+ xsltPointerListAddSize (xsltPointerListPtr list,
510
+ void *item,
511
+ int initialSize);
512
+
513
+ /************************************************************************
514
+ * *
515
+ * Refactored structures *
516
+ * *
517
+ ************************************************************************/
518
+
519
+ typedef struct _xsltNsListContainer xsltNsListContainer;
520
+ typedef xsltNsListContainer *xsltNsListContainerPtr;
521
+ struct _xsltNsListContainer {
522
+ xmlNsPtr *list;
523
+ int totalNumber;
524
+ int xpathNumber;
525
+ };
526
+
527
+ /**
528
+ * XSLT_ITEM_COMPATIBILITY_FIELDS:
529
+ *
530
+ * Fields for API compatibility to the structure
531
+ * _xsltElemPreComp which is used for extension functions.
532
+ * Note that @next is used for storage; it does not reflect a next
533
+ * sibling in the tree.
534
+ * TODO: Evaluate if we really need such a compatibility.
535
+ */
536
+ #define XSLT_ITEM_COMPATIBILITY_FIELDS \
537
+ xsltElemPreCompPtr next;\
538
+ xsltStyleType type;\
539
+ xsltTransformFunction func;\
540
+ xmlNodePtr inst;
541
+
542
+ /**
543
+ * XSLT_ITEM_NAVIGATION_FIELDS:
544
+ *
545
+ * Currently empty.
546
+ * TODO: It is intended to hold navigational fields in the future.
547
+ */
548
+ #define XSLT_ITEM_NAVIGATION_FIELDS
549
+ /*
550
+ xsltStylePreCompPtr parent;\
551
+ xsltStylePreCompPtr children;\
552
+ xsltStylePreCompPtr nextItem;
553
+ */
554
+
555
+ /**
556
+ * XSLT_ITEM_NSINSCOPE_FIELDS:
557
+ *
558
+ * The in-scope namespaces.
559
+ */
560
+ #define XSLT_ITEM_NSINSCOPE_FIELDS xsltNsListContainerPtr inScopeNs;
561
+
562
+ /**
563
+ * XSLT_ITEM_COMMON_FIELDS:
564
+ *
565
+ * Common fields used for all items.
566
+ */
567
+ #define XSLT_ITEM_COMMON_FIELDS \
568
+ XSLT_ITEM_COMPATIBILITY_FIELDS \
569
+ XSLT_ITEM_NAVIGATION_FIELDS \
570
+ XSLT_ITEM_NSINSCOPE_FIELDS
571
+
572
+ /**
573
+ * _xsltStylePreComp:
574
+ *
575
+ * The abstract basic structure for items of the XSLT processor.
576
+ * This includes:
577
+ * 1) compiled forms of XSLT instructions (e.g. xsl:if, xsl:attribute, etc.)
578
+ * 2) compiled forms of literal result elements
579
+ * 3) various properties for XSLT instructions (e.g. xsl:when,
580
+ * xsl:with-param)
581
+ *
582
+ * REVISIT TODO: Keep this structure equal to the fields
583
+ * defined by XSLT_ITEM_COMMON_FIELDS
584
+ */
585
+ struct _xsltStylePreComp {
586
+ xsltElemPreCompPtr next; /* next item in the global chained
587
+ list held by xsltStylesheet */
588
+ xsltStyleType type; /* type of the item */
589
+ xsltTransformFunction func; /* handling function */
590
+ xmlNodePtr inst; /* the node in the stylesheet's tree
591
+ corresponding to this item. */
592
+ /* Currently no navigational fields. */
593
+ xsltNsListContainerPtr inScopeNs;
594
+ };
595
+
596
+ /**
597
+ * xsltStyleBasicEmptyItem:
598
+ *
599
+ * Abstract structure only used as a short-cut for
600
+ * XSLT items with no extra fields.
601
+ * NOTE that it is intended that this structure looks the same as
602
+ * _xsltStylePreComp.
603
+ */
604
+ typedef struct _xsltStyleBasicEmptyItem xsltStyleBasicEmptyItem;
605
+ typedef xsltStyleBasicEmptyItem *xsltStyleBasicEmptyItemPtr;
606
+
607
+ struct _xsltStyleBasicEmptyItem {
608
+ XSLT_ITEM_COMMON_FIELDS
609
+ };
610
+
611
+ /**
612
+ * xsltStyleBasicExpressionItem:
613
+ *
614
+ * Abstract structure only used as a short-cut for
615
+ * XSLT items with just an expression.
616
+ */
617
+ typedef struct _xsltStyleBasicExpressionItem xsltStyleBasicExpressionItem;
618
+ typedef xsltStyleBasicExpressionItem *xsltStyleBasicExpressionItemPtr;
619
+
620
+ struct _xsltStyleBasicExpressionItem {
621
+ XSLT_ITEM_COMMON_FIELDS
622
+
623
+ const xmlChar *select; /* TODO: Change this to "expression". */
624
+ xmlXPathCompExprPtr comp; /* TODO: Change this to compExpr. */
625
+ };
626
+
627
+ /************************************************************************
628
+ * *
629
+ * XSLT-instructions/declarations *
630
+ * *
631
+ ************************************************************************/
632
+
633
+ /**
634
+ * xsltStyleItemElement:
635
+ *
636
+ * <!-- Category: instruction -->
637
+ * <xsl:element
638
+ * name = { qname }
639
+ * namespace = { uri-reference }
640
+ * use-attribute-sets = qnames>
641
+ * <!-- Content: template -->
642
+ * </xsl:element>
643
+ */
644
+ typedef struct _xsltStyleItemElement xsltStyleItemElement;
645
+ typedef xsltStyleItemElement *xsltStyleItemElementPtr;
646
+
647
+ struct _xsltStyleItemElement {
648
+ XSLT_ITEM_COMMON_FIELDS
649
+
650
+ const xmlChar *use;
651
+ int has_use;
652
+ const xmlChar *name;
653
+ int has_name;
654
+ const xmlChar *ns;
655
+ const xmlChar *nsPrefix;
656
+ int has_ns;
657
+ };
658
+
659
+ /**
660
+ * xsltStyleItemAttribute:
661
+ *
662
+ * <!-- Category: instruction -->
663
+ * <xsl:attribute
664
+ * name = { qname }
665
+ * namespace = { uri-reference }>
666
+ * <!-- Content: template -->
667
+ * </xsl:attribute>
668
+ */
669
+ typedef struct _xsltStyleItemAttribute xsltStyleItemAttribute;
670
+ typedef xsltStyleItemAttribute *xsltStyleItemAttributePtr;
671
+
672
+ struct _xsltStyleItemAttribute {
673
+ XSLT_ITEM_COMMON_FIELDS
674
+ const xmlChar *name;
675
+ int has_name;
676
+ const xmlChar *ns;
677
+ const xmlChar *nsPrefix;
678
+ int has_ns;
679
+ };
680
+
681
+ /**
682
+ * xsltStyleItemText:
683
+ *
684
+ * <!-- Category: instruction -->
685
+ * <xsl:text
686
+ * disable-output-escaping = "yes" | "no">
687
+ * <!-- Content: #PCDATA -->
688
+ * </xsl:text>
689
+ */
690
+ typedef struct _xsltStyleItemText xsltStyleItemText;
691
+ typedef xsltStyleItemText *xsltStyleItemTextPtr;
692
+
693
+ struct _xsltStyleItemText {
694
+ XSLT_ITEM_COMMON_FIELDS
695
+ int noescape; /* text */
696
+ };
697
+
698
+ /**
699
+ * xsltStyleItemComment:
700
+ *
701
+ * <!-- Category: instruction -->
702
+ * <xsl:comment>
703
+ * <!-- Content: template -->
704
+ * </xsl:comment>
705
+ */
706
+ typedef xsltStyleBasicEmptyItem xsltStyleItemComment;
707
+ typedef xsltStyleItemComment *xsltStyleItemCommentPtr;
708
+
709
+ /**
710
+ * xsltStyleItemPI:
711
+ *
712
+ * <!-- Category: instruction -->
713
+ * <xsl:processing-instruction
714
+ * name = { ncname }>
715
+ * <!-- Content: template -->
716
+ * </xsl:processing-instruction>
717
+ */
718
+ typedef struct _xsltStyleItemPI xsltStyleItemPI;
719
+ typedef xsltStyleItemPI *xsltStyleItemPIPtr;
720
+
721
+ struct _xsltStyleItemPI {
722
+ XSLT_ITEM_COMMON_FIELDS
723
+ const xmlChar *name;
724
+ int has_name;
725
+ };
726
+
727
+ /**
728
+ * xsltStyleItemApplyImports:
729
+ *
730
+ * <!-- Category: instruction -->
731
+ * <xsl:apply-imports />
732
+ */
733
+ typedef xsltStyleBasicEmptyItem xsltStyleItemApplyImports;
734
+ typedef xsltStyleItemApplyImports *xsltStyleItemApplyImportsPtr;
735
+
736
+ /**
737
+ * xsltStyleItemApplyTemplates:
738
+ *
739
+ * <!-- Category: instruction -->
740
+ * <xsl:apply-templates
741
+ * select = node-set-expression
742
+ * mode = qname>
743
+ * <!-- Content: (xsl:sort | xsl:with-param)* -->
744
+ * </xsl:apply-templates>
745
+ */
746
+ typedef struct _xsltStyleItemApplyTemplates xsltStyleItemApplyTemplates;
747
+ typedef xsltStyleItemApplyTemplates *xsltStyleItemApplyTemplatesPtr;
748
+
749
+ struct _xsltStyleItemApplyTemplates {
750
+ XSLT_ITEM_COMMON_FIELDS
751
+
752
+ const xmlChar *mode; /* apply-templates */
753
+ const xmlChar *modeURI; /* apply-templates */
754
+ const xmlChar *select; /* sort, copy-of, value-of, apply-templates */
755
+ xmlXPathCompExprPtr comp; /* a precompiled XPath expression */
756
+ /* TODO: with-params */
757
+ };
758
+
759
+ /**
760
+ * xsltStyleItemCallTemplate:
761
+ *
762
+ * <!-- Category: instruction -->
763
+ * <xsl:call-template
764
+ * name = qname>
765
+ * <!-- Content: xsl:with-param* -->
766
+ * </xsl:call-template>
767
+ */
768
+ typedef struct _xsltStyleItemCallTemplate xsltStyleItemCallTemplate;
769
+ typedef xsltStyleItemCallTemplate *xsltStyleItemCallTemplatePtr;
770
+
771
+ struct _xsltStyleItemCallTemplate {
772
+ XSLT_ITEM_COMMON_FIELDS
773
+
774
+ xsltTemplatePtr templ; /* call-template */
775
+ const xmlChar *name; /* element, attribute, pi */
776
+ int has_name; /* element, attribute, pi */
777
+ const xmlChar *ns; /* element */
778
+ int has_ns; /* element */
779
+ /* TODO: with-params */
780
+ };
781
+
782
+ /**
783
+ * xsltStyleItemCopy:
784
+ *
785
+ * <!-- Category: instruction -->
786
+ * <xsl:copy
787
+ * use-attribute-sets = qnames>
788
+ * <!-- Content: template -->
789
+ * </xsl:copy>
790
+ */
791
+ typedef struct _xsltStyleItemCopy xsltStyleItemCopy;
792
+ typedef xsltStyleItemCopy *xsltStyleItemCopyPtr;
793
+
794
+ struct _xsltStyleItemCopy {
795
+ XSLT_ITEM_COMMON_FIELDS
796
+ const xmlChar *use; /* copy, element */
797
+ int has_use; /* copy, element */
798
+ };
799
+
800
+ /**
801
+ * xsltStyleItemIf:
802
+ *
803
+ * <!-- Category: instruction -->
804
+ * <xsl:if
805
+ * test = boolean-expression>
806
+ * <!-- Content: template -->
807
+ * </xsl:if>
808
+ */
809
+ typedef struct _xsltStyleItemIf xsltStyleItemIf;
810
+ typedef xsltStyleItemIf *xsltStyleItemIfPtr;
811
+
812
+ struct _xsltStyleItemIf {
813
+ XSLT_ITEM_COMMON_FIELDS
814
+
815
+ const xmlChar *test; /* if */
816
+ xmlXPathCompExprPtr comp; /* a precompiled XPath expression */
817
+ };
818
+
819
+
820
+ /**
821
+ * xsltStyleItemCopyOf:
822
+ *
823
+ * <!-- Category: instruction -->
824
+ * <xsl:copy-of
825
+ * select = expression />
826
+ */
827
+ typedef xsltStyleBasicExpressionItem xsltStyleItemCopyOf;
828
+ typedef xsltStyleItemCopyOf *xsltStyleItemCopyOfPtr;
829
+
830
+ /**
831
+ * xsltStyleItemValueOf:
832
+ *
833
+ * <!-- Category: instruction -->
834
+ * <xsl:value-of
835
+ * select = string-expression
836
+ * disable-output-escaping = "yes" | "no" />
837
+ */
838
+ typedef struct _xsltStyleItemValueOf xsltStyleItemValueOf;
839
+ typedef xsltStyleItemValueOf *xsltStyleItemValueOfPtr;
840
+
841
+ struct _xsltStyleItemValueOf {
842
+ XSLT_ITEM_COMMON_FIELDS
843
+
844
+ const xmlChar *select;
845
+ xmlXPathCompExprPtr comp; /* a precompiled XPath expression */
846
+ int noescape;
847
+ };
848
+
849
+ /**
850
+ * xsltStyleItemNumber:
851
+ *
852
+ * <!-- Category: instruction -->
853
+ * <xsl:number
854
+ * level = "single" | "multiple" | "any"
855
+ * count = pattern
856
+ * from = pattern
857
+ * value = number-expression
858
+ * format = { string }
859
+ * lang = { nmtoken }
860
+ * letter-value = { "alphabetic" | "traditional" }
861
+ * grouping-separator = { char }
862
+ * grouping-size = { number } />
863
+ */
864
+ typedef struct _xsltStyleItemNumber xsltStyleItemNumber;
865
+ typedef xsltStyleItemNumber *xsltStyleItemNumberPtr;
866
+
867
+ struct _xsltStyleItemNumber {
868
+ XSLT_ITEM_COMMON_FIELDS
869
+ xsltNumberData numdata; /* number */
870
+ };
871
+
872
+ /**
873
+ * xsltStyleItemChoose:
874
+ *
875
+ * <!-- Category: instruction -->
876
+ * <xsl:choose>
877
+ * <!-- Content: (xsl:when+, xsl:otherwise?) -->
878
+ * </xsl:choose>
879
+ */
880
+ typedef xsltStyleBasicEmptyItem xsltStyleItemChoose;
881
+ typedef xsltStyleItemChoose *xsltStyleItemChoosePtr;
882
+
883
+ /**
884
+ * xsltStyleItemFallback:
885
+ *
886
+ * <!-- Category: instruction -->
887
+ * <xsl:fallback>
888
+ * <!-- Content: template -->
889
+ * </xsl:fallback>
890
+ */
891
+ typedef xsltStyleBasicEmptyItem xsltStyleItemFallback;
892
+ typedef xsltStyleItemFallback *xsltStyleItemFallbackPtr;
893
+
894
+ /**
895
+ * xsltStyleItemForEach:
896
+ *
897
+ * <!-- Category: instruction -->
898
+ * <xsl:for-each
899
+ * select = node-set-expression>
900
+ * <!-- Content: (xsl:sort*, template) -->
901
+ * </xsl:for-each>
902
+ */
903
+ typedef xsltStyleBasicExpressionItem xsltStyleItemForEach;
904
+ typedef xsltStyleItemForEach *xsltStyleItemForEachPtr;
905
+
906
+ /**
907
+ * xsltStyleItemMessage:
908
+ *
909
+ * <!-- Category: instruction -->
910
+ * <xsl:message
911
+ * terminate = "yes" | "no">
912
+ * <!-- Content: template -->
913
+ * </xsl:message>
914
+ */
915
+ typedef struct _xsltStyleItemMessage xsltStyleItemMessage;
916
+ typedef xsltStyleItemMessage *xsltStyleItemMessagePtr;
917
+
918
+ struct _xsltStyleItemMessage {
919
+ XSLT_ITEM_COMMON_FIELDS
920
+ int terminate;
921
+ };
922
+
923
+ /**
924
+ * xsltStyleItemDocument:
925
+ *
926
+ * NOTE: This is not an instruction of XSLT 1.0.
927
+ */
928
+ typedef struct _xsltStyleItemDocument xsltStyleItemDocument;
929
+ typedef xsltStyleItemDocument *xsltStyleItemDocumentPtr;
930
+
931
+ struct _xsltStyleItemDocument {
932
+ XSLT_ITEM_COMMON_FIELDS
933
+ int ver11; /* assigned: in xsltDocumentComp;
934
+ read: nowhere;
935
+ TODO: Check if we need. */
936
+ const xmlChar *filename; /* document URL */
937
+ int has_filename;
938
+ };
939
+
940
+ /************************************************************************
941
+ * *
942
+ * Non-instructions (actually properties of instructions/declarations) *
943
+ * *
944
+ ************************************************************************/
945
+
946
+ /**
947
+ * xsltStyleBasicItemVariable:
948
+ *
949
+ * Basic struct for xsl:variable, xsl:param and xsl:with-param.
950
+ * It's currently important to have equal fields, since
951
+ * xsltParseStylesheetCallerParam() is used with xsl:with-param from
952
+ * the xslt side and with xsl:param from the exslt side (in
953
+ * exsltFuncFunctionFunction()).
954
+ *
955
+ * FUTURE NOTE: In XSLT 2.0 xsl:param, xsl:variable and xsl:with-param
956
+ * have additional different fields.
957
+ */
958
+ typedef struct _xsltStyleBasicItemVariable xsltStyleBasicItemVariable;
959
+ typedef xsltStyleBasicItemVariable *xsltStyleBasicItemVariablePtr;
960
+
961
+ struct _xsltStyleBasicItemVariable {
962
+ XSLT_ITEM_COMMON_FIELDS
963
+
964
+ const xmlChar *select;
965
+ xmlXPathCompExprPtr comp;
966
+
967
+ const xmlChar *name;
968
+ int has_name;
969
+ const xmlChar *ns;
970
+ int has_ns;
971
+ };
972
+
973
+ /**
974
+ * xsltStyleItemVariable:
975
+ *
976
+ * <!-- Category: top-level-element -->
977
+ * <xsl:param
978
+ * name = qname
979
+ * select = expression>
980
+ * <!-- Content: template -->
981
+ * </xsl:param>
982
+ */
983
+ typedef xsltStyleBasicItemVariable xsltStyleItemVariable;
984
+ typedef xsltStyleItemVariable *xsltStyleItemVariablePtr;
985
+
986
+ /**
987
+ * xsltStyleItemParam:
988
+ *
989
+ * <!-- Category: top-level-element -->
990
+ * <xsl:param
991
+ * name = qname
992
+ * select = expression>
993
+ * <!-- Content: template -->
994
+ * </xsl:param>
995
+ */
996
+ typedef struct _xsltStyleItemParam xsltStyleItemParam;
997
+ typedef xsltStyleItemParam *xsltStyleItemParamPtr;
998
+
999
+ struct _xsltStyleItemParam {
1000
+ XSLT_ITEM_COMMON_FIELDS
1001
+
1002
+ const xmlChar *select;
1003
+ xmlXPathCompExprPtr comp;
1004
+
1005
+ const xmlChar *name;
1006
+ int has_name;
1007
+ const xmlChar *ns;
1008
+ int has_ns;
1009
+ };
1010
+
1011
+ /**
1012
+ * xsltStyleItemWithParam:
1013
+ *
1014
+ * <xsl:with-param
1015
+ * name = qname
1016
+ * select = expression>
1017
+ * <!-- Content: template -->
1018
+ * </xsl:with-param>
1019
+ */
1020
+ typedef xsltStyleBasicItemVariable xsltStyleItemWithParam;
1021
+ typedef xsltStyleItemWithParam *xsltStyleItemWithParamPtr;
1022
+
1023
+ /**
1024
+ * xsltStyleItemSort:
1025
+ *
1026
+ * Reflects the XSLT xsl:sort item.
1027
+ * Allowed parents: xsl:apply-templates, xsl:for-each
1028
+ * <xsl:sort
1029
+ * select = string-expression
1030
+ * lang = { nmtoken }
1031
+ * data-type = { "text" | "number" | qname-but-not-ncname }
1032
+ * order = { "ascending" | "descending" }
1033
+ * case-order = { "upper-first" | "lower-first" } />
1034
+ */
1035
+ typedef struct _xsltStyleItemSort xsltStyleItemSort;
1036
+ typedef xsltStyleItemSort *xsltStyleItemSortPtr;
1037
+
1038
+ struct _xsltStyleItemSort {
1039
+ XSLT_ITEM_COMMON_FIELDS
1040
+
1041
+ const xmlChar *stype; /* sort */
1042
+ int has_stype; /* sort */
1043
+ int number; /* sort */
1044
+ const xmlChar *order; /* sort */
1045
+ int has_order; /* sort */
1046
+ int descending; /* sort */
1047
+ const xmlChar *lang; /* sort */
1048
+ int has_lang; /* sort */
1049
+ const xmlChar *case_order; /* sort */
1050
+ int lower_first; /* sort */
1051
+
1052
+ const xmlChar *use;
1053
+ int has_use;
1054
+
1055
+ const xmlChar *select; /* sort, copy-of, value-of, apply-templates */
1056
+
1057
+ xmlXPathCompExprPtr comp; /* a precompiled XPath expression */
1058
+ };
1059
+
1060
+
1061
+ /**
1062
+ * xsltStyleItemWhen:
1063
+ *
1064
+ * <xsl:when
1065
+ * test = boolean-expression>
1066
+ * <!-- Content: template -->
1067
+ * </xsl:when>
1068
+ * Allowed parent: xsl:choose
1069
+ */
1070
+ typedef struct _xsltStyleItemWhen xsltStyleItemWhen;
1071
+ typedef xsltStyleItemWhen *xsltStyleItemWhenPtr;
1072
+
1073
+ struct _xsltStyleItemWhen {
1074
+ XSLT_ITEM_COMMON_FIELDS
1075
+
1076
+ const xmlChar *test;
1077
+ xmlXPathCompExprPtr comp;
1078
+ };
1079
+
1080
+ /**
1081
+ * xsltStyleItemOtherwise:
1082
+ *
1083
+ * Allowed parent: xsl:choose
1084
+ * <xsl:otherwise>
1085
+ * <!-- Content: template -->
1086
+ * </xsl:otherwise>
1087
+ */
1088
+ typedef struct _xsltStyleItemOtherwise xsltStyleItemOtherwise;
1089
+ typedef xsltStyleItemOtherwise *xsltStyleItemOtherwisePtr;
1090
+
1091
+ struct _xsltStyleItemOtherwise {
1092
+ XSLT_ITEM_COMMON_FIELDS
1093
+ };
1094
+
1095
+ typedef struct _xsltStyleItemInclude xsltStyleItemInclude;
1096
+ typedef xsltStyleItemInclude *xsltStyleItemIncludePtr;
1097
+
1098
+ struct _xsltStyleItemInclude {
1099
+ XSLT_ITEM_COMMON_FIELDS
1100
+ xsltDocumentPtr include;
1101
+ };
1102
+
1103
+ /************************************************************************
1104
+ * *
1105
+ * XSLT elements in forwards-compatible mode *
1106
+ * *
1107
+ ************************************************************************/
1108
+
1109
+ typedef struct _xsltStyleItemUknown xsltStyleItemUknown;
1110
+ typedef xsltStyleItemUknown *xsltStyleItemUknownPtr;
1111
+ struct _xsltStyleItemUknown {
1112
+ XSLT_ITEM_COMMON_FIELDS
1113
+ };
1114
+
1115
+
1116
+ /************************************************************************
1117
+ * *
1118
+ * Extension elements *
1119
+ * *
1120
+ ************************************************************************/
1121
+
1122
+ /*
1123
+ * xsltStyleItemExtElement:
1124
+ *
1125
+ * Reflects extension elements.
1126
+ *
1127
+ * NOTE: Due to the fact that the structure xsltElemPreComp is most
1128
+ * probably already heavily in use out there by users, so we cannot
1129
+ * easily change it, we'll create an intermediate structure which will
1130
+ * hold an xsltElemPreCompPtr.
1131
+ * BIG NOTE: The only problem I see here is that the user processes the
1132
+ * content of the stylesheet tree, possibly he'll lookup the node->psvi
1133
+ * fields in order to find subsequent extension functions.
1134
+ * In this case, the user's code will break, since the node->psvi
1135
+ * field will hold now the xsltStyleItemExtElementPtr and not
1136
+ * the xsltElemPreCompPtr.
1137
+ * However the place where the structure is anchored in the node-tree,
1138
+ * namely node->psvi, has beed already once been moved from node->_private
1139
+ * to node->psvi, so we have a precedent here, which, I think, should allow
1140
+ * us to change such semantics without headaches.
1141
+ */
1142
+ typedef struct _xsltStyleItemExtElement xsltStyleItemExtElement;
1143
+ typedef xsltStyleItemExtElement *xsltStyleItemExtElementPtr;
1144
+ struct _xsltStyleItemExtElement {
1145
+ XSLT_ITEM_COMMON_FIELDS
1146
+ xsltElemPreCompPtr item;
1147
+ };
1148
+
1149
+ /************************************************************************
1150
+ * *
1151
+ * Literal result elements *
1152
+ * *
1153
+ ************************************************************************/
1154
+
1155
+ typedef struct _xsltEffectiveNs xsltEffectiveNs;
1156
+ typedef xsltEffectiveNs *xsltEffectiveNsPtr;
1157
+ struct _xsltEffectiveNs {
1158
+ xsltEffectiveNsPtr nextInStore; /* storage next */
1159
+ xsltEffectiveNsPtr next; /* next item in the list */
1160
+ const xmlChar *prefix;
1161
+ const xmlChar *nsName;
1162
+ /*
1163
+ * Indicates if eclared on the literal result element; dunno if really
1164
+ * needed.
1165
+ */
1166
+ int holdByElem;
1167
+ };
1168
+
1169
+ /*
1170
+ * Info for literal result elements.
1171
+ * This will be set on the elem->psvi field and will be
1172
+ * shared by literal result elements, which have the same
1173
+ * excluded result namespaces; i.e., this *won't* be created uniquely
1174
+ * for every literal result element.
1175
+ */
1176
+ typedef struct _xsltStyleItemLRElementInfo xsltStyleItemLRElementInfo;
1177
+ typedef xsltStyleItemLRElementInfo *xsltStyleItemLRElementInfoPtr;
1178
+ struct _xsltStyleItemLRElementInfo {
1179
+ XSLT_ITEM_COMMON_FIELDS
1180
+ /*
1181
+ * @effectiveNs is the set of effective ns-nodes
1182
+ * on the literal result element, which will be added to the result
1183
+ * element if not already existing in the result tree.
1184
+ * This means that excluded namespaces (via exclude-result-prefixes,
1185
+ * extension-element-prefixes and the XSLT namespace) not added
1186
+ * to the set.
1187
+ * Namespace-aliasing was applied on the @effectiveNs.
1188
+ */
1189
+ xsltEffectiveNsPtr effectiveNs;
1190
+
1191
+ };
1192
+
1193
+ #ifdef XSLT_REFACTORED
1194
+
1195
+ typedef struct _xsltNsAlias xsltNsAlias;
1196
+ typedef xsltNsAlias *xsltNsAliasPtr;
1197
+ struct _xsltNsAlias {
1198
+ xsltNsAliasPtr next; /* next in the list */
1199
+ xmlNsPtr literalNs;
1200
+ xmlNsPtr targetNs;
1201
+ xmlDocPtr docOfTargetNs;
1202
+ };
1203
+ #endif
1204
+
1205
+ #ifdef XSLT_REFACTORED_XSLT_NSCOMP
1206
+
1207
+ typedef struct _xsltNsMap xsltNsMap;
1208
+ typedef xsltNsMap *xsltNsMapPtr;
1209
+ struct _xsltNsMap {
1210
+ xsltNsMapPtr next; /* next in the list */
1211
+ xmlDocPtr doc;
1212
+ xmlNodePtr elem; /* the element holding the ns-decl */
1213
+ xmlNsPtr ns; /* the xmlNs structure holding the XML namespace name */
1214
+ const xmlChar *origNsName; /* the original XML namespace name */
1215
+ const xmlChar *newNsName; /* the mapped XML namespace name */
1216
+ };
1217
+ #endif
1218
+
1219
+ /************************************************************************
1220
+ * *
1221
+ * Compile-time structures for *internal* use only *
1222
+ * *
1223
+ ************************************************************************/
1224
+
1225
+ typedef struct _xsltPrincipalStylesheetData xsltPrincipalStylesheetData;
1226
+ typedef xsltPrincipalStylesheetData *xsltPrincipalStylesheetDataPtr;
1227
+
1228
+ typedef struct _xsltNsList xsltNsList;
1229
+ typedef xsltNsList *xsltNsListPtr;
1230
+ struct _xsltNsList {
1231
+ xsltNsListPtr next; /* next in the list */
1232
+ xmlNsPtr ns;
1233
+ };
1234
+
1235
+ /*
1236
+ * xsltVarInfo:
1237
+ *
1238
+ * Used at compilation time for parameters and variables.
1239
+ */
1240
+ typedef struct _xsltVarInfo xsltVarInfo;
1241
+ typedef xsltVarInfo *xsltVarInfoPtr;
1242
+ struct _xsltVarInfo {
1243
+ xsltVarInfoPtr next; /* next in the list */
1244
+ xsltVarInfoPtr prev;
1245
+ int depth; /* the depth in the tree */
1246
+ const xmlChar *name;
1247
+ const xmlChar *nsName;
1248
+ };
1249
+
1250
+ /**
1251
+ * xsltCompilerNodeInfo:
1252
+ *
1253
+ * Per-node information during compile-time.
1254
+ */
1255
+ typedef struct _xsltCompilerNodeInfo xsltCompilerNodeInfo;
1256
+ typedef xsltCompilerNodeInfo *xsltCompilerNodeInfoPtr;
1257
+ struct _xsltCompilerNodeInfo {
1258
+ xsltCompilerNodeInfoPtr next;
1259
+ xsltCompilerNodeInfoPtr prev;
1260
+ xmlNodePtr node;
1261
+ int depth;
1262
+ xsltTemplatePtr templ; /* The owning template */
1263
+ int category; /* XSLT element, LR-element or
1264
+ extension element */
1265
+ xsltStyleType type;
1266
+ xsltElemPreCompPtr item; /* The compiled information */
1267
+ /* The current in-scope namespaces */
1268
+ xsltNsListContainerPtr inScopeNs;
1269
+ /* The current excluded result namespaces */
1270
+ xsltPointerListPtr exclResultNs;
1271
+ /* The current extension instruction namespaces */
1272
+ xsltPointerListPtr extElemNs;
1273
+
1274
+ /* The current info for literal result elements. */
1275
+ xsltStyleItemLRElementInfoPtr litResElemInfo;
1276
+ /*
1277
+ * Set to 1 if in-scope namespaces changed,
1278
+ * or excluded result namespaces changed,
1279
+ * or extension element namespaces changed.
1280
+ * This will trigger creation of new infos
1281
+ * for literal result elements.
1282
+ */
1283
+ int nsChanged;
1284
+ int preserveWhitespace;
1285
+ int stripWhitespace;
1286
+ int isRoot; /* whether this is the stylesheet's root node */
1287
+ int forwardsCompat; /* whether forwards-compatible mode is enabled */
1288
+ /* whether the content of an extension element was processed */
1289
+ int extContentHandled;
1290
+ /* the type of the current child */
1291
+ xsltStyleType curChildType;
1292
+ };
1293
+
1294
+ /**
1295
+ * XSLT_CCTXT:
1296
+ *
1297
+ * get pointer to compiler context
1298
+ */
1299
+ #define XSLT_CCTXT(style) ((xsltCompilerCtxtPtr) style->compCtxt)
1300
+
1301
+ typedef enum {
1302
+ XSLT_ERROR_SEVERITY_ERROR = 0,
1303
+ XSLT_ERROR_SEVERITY_WARNING
1304
+ } xsltErrorSeverityType;
1305
+
1306
+ typedef struct _xsltCompilerCtxt xsltCompilerCtxt;
1307
+ typedef xsltCompilerCtxt *xsltCompilerCtxtPtr;
1308
+ struct _xsltCompilerCtxt {
1309
+ void *errorCtxt; /* user specific error context */
1310
+ /*
1311
+ * used for error/warning reports; e.g. XSLT_ERROR_SEVERITY_WARNING */
1312
+ xsltErrorSeverityType errSeverity;
1313
+ int warnings; /* TODO: number of warnings found at
1314
+ compilation */
1315
+ int errors; /* TODO: number of errors found at
1316
+ compilation */
1317
+ xmlDictPtr dict;
1318
+ xsltStylesheetPtr style;
1319
+ int simplified; /* whether this is a simplified stylesheet */
1320
+ /* TODO: structured/unstructured error contexts. */
1321
+ int depth; /* Current depth of processing */
1322
+
1323
+ xsltCompilerNodeInfoPtr inode;
1324
+ xsltCompilerNodeInfoPtr inodeList;
1325
+ xsltCompilerNodeInfoPtr inodeLast;
1326
+ xsltPointerListPtr tmpList; /* Used for various purposes */
1327
+ /*
1328
+ * The XSLT version as specified by the stylesheet's root element.
1329
+ */
1330
+ int isInclude;
1331
+ int hasForwardsCompat; /* whether forwards-compatible mode was used
1332
+ in a parsing episode */
1333
+ int maxNodeInfos; /* TEMP TODO: just for the interest */
1334
+ int maxLREs; /* TEMP TODO: just for the interest */
1335
+ /*
1336
+ * In order to keep the old behaviour, applying strict rules of
1337
+ * the spec can be turned off. This has effect only on special
1338
+ * mechanisms like whitespace-stripping in the stylesheet.
1339
+ */
1340
+ int strict;
1341
+ xsltPrincipalStylesheetDataPtr psData;
1342
+ xsltStyleItemUknownPtr unknownItem;
1343
+ int hasNsAliases; /* Indicator if there was an xsl:namespace-alias. */
1344
+ xsltNsAliasPtr nsAliases;
1345
+ xsltVarInfoPtr ivars; /* Storage of local in-scope variables/params. */
1346
+ xsltVarInfoPtr ivar; /* topmost local variable/param. */
1347
+ };
1348
+
1349
+ #else /* XSLT_REFACTORED */
1350
+ /*
1351
+ * The old structures before refactoring.
1352
+ */
1353
+
1354
+ /**
1355
+ * _xsltStylePreComp:
1356
+ *
1357
+ * The in-memory structure corresponding to XSLT stylesheet constructs
1358
+ * precomputed data.
1359
+ */
1360
+ struct _xsltStylePreComp {
1361
+ xsltElemPreCompPtr next; /* chained list */
1362
+ xsltStyleType type; /* type of the element */
1363
+ xsltTransformFunction func; /* handling function */
1364
+ xmlNodePtr inst; /* the instruction */
1365
+
1366
+ /*
1367
+ * Pre computed values.
1368
+ */
1369
+
1370
+ const xmlChar *stype; /* sort */
1371
+ int has_stype; /* sort */
1372
+ int number; /* sort */
1373
+ const xmlChar *order; /* sort */
1374
+ int has_order; /* sort */
1375
+ int descending; /* sort */
1376
+ const xmlChar *lang; /* sort */
1377
+ int has_lang; /* sort */
1378
+ const xmlChar *case_order; /* sort */
1379
+ int lower_first; /* sort */
1380
+
1381
+ const xmlChar *use; /* copy, element */
1382
+ int has_use; /* copy, element */
1383
+
1384
+ int noescape; /* text */
1385
+
1386
+ const xmlChar *name; /* element, attribute, pi */
1387
+ int has_name; /* element, attribute, pi */
1388
+ const xmlChar *ns; /* element */
1389
+ int has_ns; /* element */
1390
+
1391
+ const xmlChar *mode; /* apply-templates */
1392
+ const xmlChar *modeURI; /* apply-templates */
1393
+
1394
+ const xmlChar *test; /* if */
1395
+
1396
+ xsltTemplatePtr templ; /* call-template */
1397
+
1398
+ const xmlChar *select; /* sort, copy-of, value-of, apply-templates */
1399
+
1400
+ int ver11; /* document */
1401
+ const xmlChar *filename; /* document URL */
1402
+ int has_filename; /* document */
1403
+
1404
+ xsltNumberData numdata; /* number */
1405
+
1406
+ xmlXPathCompExprPtr comp; /* a precompiled XPath expression */
1407
+ xmlNsPtr *nsList; /* the namespaces in scope */
1408
+ int nsNr; /* the number of namespaces in scope */
1409
+ };
1410
+
1411
+ #endif /* XSLT_REFACTORED */
1412
+
1413
+
1414
+ /*
1415
+ * The in-memory structure corresponding to an XSLT Variable
1416
+ * or Param.
1417
+ */
1418
+ typedef struct _xsltStackElem xsltStackElem;
1419
+ typedef xsltStackElem *xsltStackElemPtr;
1420
+ struct _xsltStackElem {
1421
+ struct _xsltStackElem *next;/* chained list */
1422
+ xsltStylePreCompPtr comp; /* the compiled form */
1423
+ int computed; /* was the evaluation done */
1424
+ const xmlChar *name; /* the local part of the name QName */
1425
+ const xmlChar *nameURI; /* the URI part of the name QName */
1426
+ const xmlChar *select; /* the eval string */
1427
+ xmlNodePtr tree; /* the sequence constructor if no eval
1428
+ string or the location */
1429
+ xmlXPathObjectPtr value; /* The value if computed */
1430
+ xmlDocPtr fragment; /* The Result Tree Fragments (needed for XSLT 1.0)
1431
+ which are bound to the variable's lifetime. */
1432
+ int level; /* the depth in the tree;
1433
+ -1 if persistent (e.g. a given xsl:with-param) */
1434
+ xsltTransformContextPtr context; /* The transformation context; needed to cache
1435
+ the variables */
1436
+ int flags;
1437
+ };
1438
+
1439
+ #ifdef XSLT_REFACTORED
1440
+
1441
+ struct _xsltPrincipalStylesheetData {
1442
+ /*
1443
+ * Namespace dictionary for ns-prefixes and ns-names:
1444
+ * TODO: Shared between stylesheets, and XPath mechanisms.
1445
+ * Not used yet.
1446
+ */
1447
+ xmlDictPtr namespaceDict;
1448
+ /*
1449
+ * Global list of in-scope namespaces.
1450
+ */
1451
+ xsltPointerListPtr inScopeNamespaces;
1452
+ /*
1453
+ * Global list of information for [xsl:]excluded-result-prefixes.
1454
+ */
1455
+ xsltPointerListPtr exclResultNamespaces;
1456
+ /*
1457
+ * Global list of information for [xsl:]extension-element-prefixes.
1458
+ */
1459
+ xsltPointerListPtr extElemNamespaces;
1460
+ xsltEffectiveNsPtr effectiveNs;
1461
+ #ifdef XSLT_REFACTORED_XSLT_NSCOMP
1462
+ /*
1463
+ * Namespace name map to get rid of string comparison of namespace names.
1464
+ */
1465
+ xsltNsMapPtr nsMap;
1466
+ #endif
1467
+ };
1468
+
1469
+
1470
+ #endif
1471
+ /*
1472
+ * Note that we added a @compCtxt field to anchor an stylesheet compilation
1473
+ * context, since, due to historical reasons, various compile-time function
1474
+ * take only the stylesheet as argument and not a compilation context.
1475
+ */
1476
+ struct _xsltStylesheet {
1477
+ /*
1478
+ * The stylesheet import relation is kept as a tree.
1479
+ */
1480
+ struct _xsltStylesheet *parent;
1481
+ struct _xsltStylesheet *next;
1482
+ struct _xsltStylesheet *imports;
1483
+
1484
+ xsltDocumentPtr docList; /* the include document list */
1485
+
1486
+ /*
1487
+ * General data on the style sheet document.
1488
+ */
1489
+ xmlDocPtr doc; /* the parsed XML stylesheet */
1490
+ xmlHashTablePtr stripSpaces;/* the hash table of the strip-space and
1491
+ preserve space elements */
1492
+ int stripAll; /* strip-space * (1) preserve-space * (-1) */
1493
+ xmlHashTablePtr cdataSection;/* the hash table of the cdata-section */
1494
+
1495
+ /*
1496
+ * Global variable or parameters.
1497
+ */
1498
+ xsltStackElemPtr variables; /* linked list of param and variables */
1499
+
1500
+ /*
1501
+ * Template descriptions.
1502
+ */
1503
+ xsltTemplatePtr templates; /* the ordered list of templates */
1504
+ xmlHashTablePtr templatesHash; /* hash table or wherever compiled
1505
+ templates information is stored */
1506
+ struct _xsltCompMatch *rootMatch; /* template based on / */
1507
+ struct _xsltCompMatch *keyMatch; /* template based on key() */
1508
+ struct _xsltCompMatch *elemMatch; /* template based on * */
1509
+ struct _xsltCompMatch *attrMatch; /* template based on @* */
1510
+ struct _xsltCompMatch *parentMatch; /* template based on .. */
1511
+ struct _xsltCompMatch *textMatch; /* template based on text() */
1512
+ struct _xsltCompMatch *piMatch; /* template based on
1513
+ processing-instruction() */
1514
+ struct _xsltCompMatch *commentMatch; /* template based on comment() */
1515
+
1516
+ /*
1517
+ * Namespace aliases.
1518
+ * NOTE: Not used in the refactored code.
1519
+ */
1520
+ xmlHashTablePtr nsAliases; /* the namespace alias hash tables */
1521
+
1522
+ /*
1523
+ * Attribute sets.
1524
+ */
1525
+ xmlHashTablePtr attributeSets;/* the attribute sets hash tables */
1526
+
1527
+ /*
1528
+ * Namespaces.
1529
+ * TODO: Eliminate this.
1530
+ */
1531
+ xmlHashTablePtr nsHash; /* the set of namespaces in use:
1532
+ ATTENTION: This is used for
1533
+ execution of XPath expressions; unfortunately
1534
+ it restricts the stylesheet to have distinct
1535
+ prefixes.
1536
+ TODO: We need to get rid of this.
1537
+ */
1538
+ void *nsDefs; /* ATTENTION TODO: This is currently used to store
1539
+ xsltExtDefPtr (in extensions.c) and
1540
+ *not* xmlNsPtr.
1541
+ */
1542
+
1543
+ /*
1544
+ * Key definitions.
1545
+ */
1546
+ void *keys; /* key definitions */
1547
+
1548
+ /*
1549
+ * Output related stuff.
1550
+ */
1551
+ xmlChar *method; /* the output method */
1552
+ xmlChar *methodURI; /* associated namespace if any */
1553
+ xmlChar *version; /* version string */
1554
+ xmlChar *encoding; /* encoding string */
1555
+ int omitXmlDeclaration; /* omit-xml-declaration = "yes" | "no" */
1556
+
1557
+ /*
1558
+ * Number formatting.
1559
+ */
1560
+ xsltDecimalFormatPtr decimalFormat;
1561
+ int standalone; /* standalone = "yes" | "no" */
1562
+ xmlChar *doctypePublic; /* doctype-public string */
1563
+ xmlChar *doctypeSystem; /* doctype-system string */
1564
+ int indent; /* should output being indented */
1565
+ xmlChar *mediaType; /* media-type string */
1566
+
1567
+ /*
1568
+ * Precomputed blocks.
1569
+ */
1570
+ xsltElemPreCompPtr preComps;/* list of precomputed blocks */
1571
+ int warnings; /* number of warnings found at compilation */
1572
+ int errors; /* number of errors found at compilation */
1573
+
1574
+ xmlChar *exclPrefix; /* last excluded prefixes */
1575
+ xmlChar **exclPrefixTab; /* array of excluded prefixes */
1576
+ int exclPrefixNr; /* number of excluded prefixes in scope */
1577
+ int exclPrefixMax; /* size of the array */
1578
+
1579
+ void *_private; /* user defined data */
1580
+
1581
+ /*
1582
+ * Extensions.
1583
+ */
1584
+ xmlHashTablePtr extInfos; /* the extension data */
1585
+ int extrasNr; /* the number of extras required */
1586
+
1587
+ /*
1588
+ * For keeping track of nested includes
1589
+ */
1590
+ xsltDocumentPtr includes; /* points to last nested include */
1591
+
1592
+ /*
1593
+ * dictionary: shared between stylesheet, context and documents.
1594
+ */
1595
+ xmlDictPtr dict;
1596
+ /*
1597
+ * precompiled attribute value templates.
1598
+ */
1599
+ void *attVTs;
1600
+ /*
1601
+ * if namespace-alias has an alias for the default stylesheet prefix
1602
+ * NOTE: Not used in the refactored code.
1603
+ */
1604
+ const xmlChar *defaultAlias;
1605
+ /*
1606
+ * bypass pre-processing (already done) (used in imports)
1607
+ */
1608
+ int nopreproc;
1609
+ /*
1610
+ * all document text strings were internalized
1611
+ */
1612
+ int internalized;
1613
+ /*
1614
+ * Literal Result Element as Stylesheet c.f. section 2.3
1615
+ */
1616
+ int literal_result;
1617
+ /*
1618
+ * The principal stylesheet
1619
+ */
1620
+ xsltStylesheetPtr principal;
1621
+ #ifdef XSLT_REFACTORED
1622
+ /*
1623
+ * Compilation context used during compile-time.
1624
+ */
1625
+ xsltCompilerCtxtPtr compCtxt; /* TODO: Change this to (void *). */
1626
+
1627
+ xsltPrincipalStylesheetDataPtr principalData;
1628
+ #endif
1629
+ /*
1630
+ * Forwards-compatible processing
1631
+ */
1632
+ int forwards_compatible;
1633
+
1634
+ xmlHashTablePtr namedTemplates; /* hash table of named templates */
1635
+
1636
+ xmlXPathContextPtr xpathCtxt;
1637
+
1638
+ unsigned long opLimit;
1639
+ unsigned long opCount;
1640
+ };
1641
+
1642
+ typedef struct _xsltTransformCache xsltTransformCache;
1643
+ typedef xsltTransformCache *xsltTransformCachePtr;
1644
+ struct _xsltTransformCache {
1645
+ xmlDocPtr RVT;
1646
+ int nbRVT;
1647
+ xsltStackElemPtr stackItems;
1648
+ int nbStackItems;
1649
+ #ifdef XSLT_DEBUG_PROFILE_CACHE
1650
+ int dbgCachedRVTs;
1651
+ int dbgReusedRVTs;
1652
+ int dbgCachedVars;
1653
+ int dbgReusedVars;
1654
+ #endif
1655
+ };
1656
+
1657
+ /*
1658
+ * The in-memory structure corresponding to an XSLT Transformation.
1659
+ */
1660
+ typedef enum {
1661
+ XSLT_OUTPUT_XML = 0,
1662
+ XSLT_OUTPUT_HTML,
1663
+ XSLT_OUTPUT_TEXT
1664
+ } xsltOutputType;
1665
+
1666
+ typedef void *
1667
+ (*xsltNewLocaleFunc)(const xmlChar *lang, int lowerFirst);
1668
+ typedef void
1669
+ (*xsltFreeLocaleFunc)(void *locale);
1670
+ typedef xmlChar *
1671
+ (*xsltGenSortKeyFunc)(void *locale, const xmlChar *lang);
1672
+
1673
+ typedef enum {
1674
+ XSLT_STATE_OK = 0,
1675
+ XSLT_STATE_ERROR,
1676
+ XSLT_STATE_STOPPED
1677
+ } xsltTransformState;
1678
+
1679
+ struct _xsltTransformContext {
1680
+ xsltStylesheetPtr style; /* the stylesheet used */
1681
+ xsltOutputType type; /* the type of output */
1682
+
1683
+ xsltTemplatePtr templ; /* the current template */
1684
+ int templNr; /* Nb of templates in the stack */
1685
+ int templMax; /* Size of the templtes stack */
1686
+ xsltTemplatePtr *templTab; /* the template stack */
1687
+
1688
+ xsltStackElemPtr vars; /* the current variable list */
1689
+ int varsNr; /* Nb of variable list in the stack */
1690
+ int varsMax; /* Size of the variable list stack */
1691
+ xsltStackElemPtr *varsTab; /* the variable list stack */
1692
+ int varsBase; /* the var base for current templ */
1693
+
1694
+ /*
1695
+ * Extensions
1696
+ */
1697
+ xmlHashTablePtr extFunctions; /* the extension functions */
1698
+ xmlHashTablePtr extElements; /* the extension elements */
1699
+ xmlHashTablePtr extInfos; /* the extension data */
1700
+
1701
+ const xmlChar *mode; /* the current mode */
1702
+ const xmlChar *modeURI; /* the current mode URI */
1703
+
1704
+ xsltDocumentPtr docList; /* the document list */
1705
+
1706
+ xsltDocumentPtr document; /* the current source document; can be NULL if an RTF */
1707
+ xmlNodePtr node; /* the current node being processed */
1708
+ xmlNodeSetPtr nodeList; /* the current node list */
1709
+ /* xmlNodePtr current; the node */
1710
+
1711
+ xmlDocPtr output; /* the resulting document */
1712
+ xmlNodePtr insert; /* the insertion node */
1713
+
1714
+ xmlXPathContextPtr xpathCtxt; /* the XPath context */
1715
+ xsltTransformState state; /* the current state */
1716
+
1717
+ /*
1718
+ * Global variables
1719
+ */
1720
+ xmlHashTablePtr globalVars; /* the global variables and params */
1721
+
1722
+ xmlNodePtr inst; /* the instruction in the stylesheet */
1723
+
1724
+ int xinclude; /* should XInclude be processed */
1725
+
1726
+ const char * outputFile; /* the output URI if known */
1727
+
1728
+ int profile; /* is this run profiled */
1729
+ long prof; /* the current profiled value */
1730
+ int profNr; /* Nb of templates in the stack */
1731
+ int profMax; /* Size of the templtaes stack */
1732
+ long *profTab; /* the profile template stack */
1733
+
1734
+ void *_private; /* user defined data */
1735
+
1736
+ int extrasNr; /* the number of extras used */
1737
+ int extrasMax; /* the number of extras allocated */
1738
+ xsltRuntimeExtraPtr extras; /* extra per runtime information */
1739
+
1740
+ xsltDocumentPtr styleList; /* the stylesheet docs list */
1741
+ void * sec; /* the security preferences if any */
1742
+
1743
+ xmlGenericErrorFunc error; /* a specific error handler */
1744
+ void * errctx; /* context for the error handler */
1745
+
1746
+ xsltSortFunc sortfunc; /* a ctxt specific sort routine */
1747
+
1748
+ /*
1749
+ * handling of temporary Result Value Tree
1750
+ * (XSLT 1.0 term: "Result Tree Fragment")
1751
+ */
1752
+ xmlDocPtr tmpRVT; /* list of RVT without persistance */
1753
+ xmlDocPtr persistRVT; /* list of persistant RVTs */
1754
+ int ctxtflags; /* context processing flags */
1755
+
1756
+ /*
1757
+ * Speed optimization when coalescing text nodes
1758
+ */
1759
+ const xmlChar *lasttext; /* last text node content */
1760
+ int lasttsize; /* last text node size */
1761
+ int lasttuse; /* last text node use */
1762
+ /*
1763
+ * Per Context Debugging
1764
+ */
1765
+ int debugStatus; /* the context level debug status */
1766
+ unsigned long* traceCode; /* pointer to the variable holding the mask */
1767
+
1768
+ int parserOptions; /* parser options xmlParserOption */
1769
+
1770
+ /*
1771
+ * dictionary: shared between stylesheet, context and documents.
1772
+ */
1773
+ xmlDictPtr dict;
1774
+ xmlDocPtr tmpDoc; /* Obsolete; not used in the library. */
1775
+ /*
1776
+ * all document text strings are internalized
1777
+ */
1778
+ int internalized;
1779
+ int nbKeys;
1780
+ int hasTemplKeyPatterns;
1781
+ xsltTemplatePtr currentTemplateRule; /* the Current Template Rule */
1782
+ xmlNodePtr initialContextNode;
1783
+ xmlDocPtr initialContextDoc;
1784
+ xsltTransformCachePtr cache;
1785
+ void *contextVariable; /* the current variable item */
1786
+ xmlDocPtr localRVT; /* list of local tree fragments; will be freed when
1787
+ the instruction which created the fragment
1788
+ exits */
1789
+ xmlDocPtr localRVTBase; /* Obsolete */
1790
+ int keyInitLevel; /* Needed to catch recursive keys issues */
1791
+ int depth; /* Needed to catch recursions */
1792
+ int maxTemplateDepth;
1793
+ int maxTemplateVars;
1794
+ unsigned long opLimit;
1795
+ unsigned long opCount;
1796
+ int sourceDocDirty;
1797
+ unsigned long currentId; /* For generate-id() */
1798
+
1799
+ xsltNewLocaleFunc newLocale;
1800
+ xsltFreeLocaleFunc freeLocale;
1801
+ xsltGenSortKeyFunc genSortKey;
1802
+ };
1803
+
1804
+ /**
1805
+ * CHECK_STOPPED:
1806
+ *
1807
+ * Macro to check if the XSLT processing should be stopped.
1808
+ * Will return from the function.
1809
+ */
1810
+ #define CHECK_STOPPED if (ctxt->state == XSLT_STATE_STOPPED) return;
1811
+
1812
+ /**
1813
+ * CHECK_STOPPEDE:
1814
+ *
1815
+ * Macro to check if the XSLT processing should be stopped.
1816
+ * Will goto the error: label.
1817
+ */
1818
+ #define CHECK_STOPPEDE if (ctxt->state == XSLT_STATE_STOPPED) goto error;
1819
+
1820
+ /**
1821
+ * CHECK_STOPPED0:
1822
+ *
1823
+ * Macro to check if the XSLT processing should be stopped.
1824
+ * Will return from the function with a 0 value.
1825
+ */
1826
+ #define CHECK_STOPPED0 if (ctxt->state == XSLT_STATE_STOPPED) return(0);
1827
+
1828
+ /*
1829
+ * The macro XML_CAST_FPTR is a hack to avoid a gcc warning about
1830
+ * possible incompatibilities between function pointers and object
1831
+ * pointers. It is defined in libxml/hash.h within recent versions
1832
+ * of libxml2, but is put here for compatibility.
1833
+ */
1834
+ #ifndef XML_CAST_FPTR
1835
+ /**
1836
+ * XML_CAST_FPTR:
1837
+ * @fptr: pointer to a function
1838
+ *
1839
+ * Macro to do a casting from an object pointer to a
1840
+ * function pointer without encountering a warning from
1841
+ * gcc
1842
+ *
1843
+ * #define XML_CAST_FPTR(fptr) (*(void **)(&fptr))
1844
+ * This macro violated ISO C aliasing rules (gcc4 on s390 broke)
1845
+ * so it is disabled now
1846
+ */
1847
+
1848
+ #define XML_CAST_FPTR(fptr) fptr
1849
+ #endif
1850
+ /*
1851
+ * Functions associated to the internal types
1852
+ xsltDecimalFormatPtr xsltDecimalFormatGetByName(xsltStylesheetPtr sheet,
1853
+ xmlChar *name);
1854
+ */
1855
+ XSLTPUBFUN xsltStylesheetPtr XSLTCALL
1856
+ xsltNewStylesheet (void);
1857
+ XSLTPUBFUN xsltStylesheetPtr XSLTCALL
1858
+ xsltParseStylesheetFile (const xmlChar* filename);
1859
+ XSLTPUBFUN void XSLTCALL
1860
+ xsltFreeStylesheet (xsltStylesheetPtr style);
1861
+ XSLTPUBFUN int XSLTCALL
1862
+ xsltIsBlank (xmlChar *str);
1863
+ XSLTPUBFUN void XSLTCALL
1864
+ xsltFreeStackElemList (xsltStackElemPtr elem);
1865
+ XSLTPUBFUN xsltDecimalFormatPtr XSLTCALL
1866
+ xsltDecimalFormatGetByName(xsltStylesheetPtr style,
1867
+ xmlChar *name);
1868
+ XSLTPUBFUN xsltDecimalFormatPtr XSLTCALL
1869
+ xsltDecimalFormatGetByQName(xsltStylesheetPtr style,
1870
+ const xmlChar *nsUri,
1871
+ const xmlChar *name);
1872
+
1873
+ XSLTPUBFUN xsltStylesheetPtr XSLTCALL
1874
+ xsltParseStylesheetProcess(xsltStylesheetPtr ret,
1875
+ xmlDocPtr doc);
1876
+ XSLTPUBFUN void XSLTCALL
1877
+ xsltParseStylesheetOutput(xsltStylesheetPtr style,
1878
+ xmlNodePtr cur);
1879
+ XSLTPUBFUN xsltStylesheetPtr XSLTCALL
1880
+ xsltParseStylesheetDoc (xmlDocPtr doc);
1881
+ XSLTPUBFUN xsltStylesheetPtr XSLTCALL
1882
+ xsltParseStylesheetImportedDoc(xmlDocPtr doc,
1883
+ xsltStylesheetPtr style);
1884
+ XSLTPUBFUN int XSLTCALL
1885
+ xsltParseStylesheetUser(xsltStylesheetPtr style,
1886
+ xmlDocPtr doc);
1887
+ XSLTPUBFUN xsltStylesheetPtr XSLTCALL
1888
+ xsltLoadStylesheetPI (xmlDocPtr doc);
1889
+ XSLTPUBFUN void XSLTCALL
1890
+ xsltNumberFormat (xsltTransformContextPtr ctxt,
1891
+ xsltNumberDataPtr data,
1892
+ xmlNodePtr node);
1893
+ XSLTPUBFUN xmlXPathError XSLTCALL
1894
+ xsltFormatNumberConversion(xsltDecimalFormatPtr self,
1895
+ xmlChar *format,
1896
+ double number,
1897
+ xmlChar **result);
1898
+
1899
+ XSLTPUBFUN void XSLTCALL
1900
+ xsltParseTemplateContent(xsltStylesheetPtr style,
1901
+ xmlNodePtr templ);
1902
+ XSLTPUBFUN int XSLTCALL
1903
+ xsltAllocateExtra (xsltStylesheetPtr style);
1904
+ XSLTPUBFUN int XSLTCALL
1905
+ xsltAllocateExtraCtxt (xsltTransformContextPtr ctxt);
1906
+ /*
1907
+ * Extra functions for Result Value Trees
1908
+ */
1909
+ XSLTPUBFUN xmlDocPtr XSLTCALL
1910
+ xsltCreateRVT (xsltTransformContextPtr ctxt);
1911
+ XSLTPUBFUN int XSLTCALL
1912
+ xsltRegisterTmpRVT (xsltTransformContextPtr ctxt,
1913
+ xmlDocPtr RVT);
1914
+ XSLTPUBFUN int XSLTCALL
1915
+ xsltRegisterLocalRVT (xsltTransformContextPtr ctxt,
1916
+ xmlDocPtr RVT);
1917
+ XSLTPUBFUN int XSLTCALL
1918
+ xsltRegisterPersistRVT (xsltTransformContextPtr ctxt,
1919
+ xmlDocPtr RVT);
1920
+ XSLTPUBFUN int XSLTCALL
1921
+ xsltExtensionInstructionResultRegister(
1922
+ xsltTransformContextPtr ctxt,
1923
+ xmlXPathObjectPtr obj);
1924
+ XSLTPUBFUN int XSLTCALL
1925
+ xsltExtensionInstructionResultFinalize(
1926
+ xsltTransformContextPtr ctxt);
1927
+ XSLTPUBFUN int XSLTCALL
1928
+ xsltFlagRVTs(
1929
+ xsltTransformContextPtr ctxt,
1930
+ xmlXPathObjectPtr obj,
1931
+ int val);
1932
+ XSLTPUBFUN void XSLTCALL
1933
+ xsltFreeRVTs (xsltTransformContextPtr ctxt);
1934
+ XSLTPUBFUN void XSLTCALL
1935
+ xsltReleaseRVT (xsltTransformContextPtr ctxt,
1936
+ xmlDocPtr RVT);
1937
+ /*
1938
+ * Extra functions for Attribute Value Templates
1939
+ */
1940
+ XSLTPUBFUN void XSLTCALL
1941
+ xsltCompileAttr (xsltStylesheetPtr style,
1942
+ xmlAttrPtr attr);
1943
+ XSLTPUBFUN xmlChar * XSLTCALL
1944
+ xsltEvalAVT (xsltTransformContextPtr ctxt,
1945
+ void *avt,
1946
+ xmlNodePtr node);
1947
+ XSLTPUBFUN void XSLTCALL
1948
+ xsltFreeAVTList (void *avt);
1949
+
1950
+ /*
1951
+ * Extra function for successful xsltCleanupGlobals / xsltInit sequence.
1952
+ */
1953
+
1954
+ XSLTPUBFUN void XSLTCALL
1955
+ xsltUninit (void);
1956
+
1957
+ /************************************************************************
1958
+ * *
1959
+ * Compile-time functions for *internal* use only *
1960
+ * *
1961
+ ************************************************************************/
1962
+
1963
+ #ifdef XSLT_REFACTORED
1964
+ XSLTPUBFUN void XSLTCALL
1965
+ xsltParseSequenceConstructor(
1966
+ xsltCompilerCtxtPtr cctxt,
1967
+ xmlNodePtr start);
1968
+ XSLTPUBFUN int XSLTCALL
1969
+ xsltParseAnyXSLTElem (xsltCompilerCtxtPtr cctxt,
1970
+ xmlNodePtr elem);
1971
+ #ifdef XSLT_REFACTORED_XSLT_NSCOMP
1972
+ XSLTPUBFUN int XSLTCALL
1973
+ xsltRestoreDocumentNamespaces(
1974
+ xsltNsMapPtr ns,
1975
+ xmlDocPtr doc);
1976
+ #endif
1977
+ #endif /* XSLT_REFACTORED */
1978
+
1979
+ /************************************************************************
1980
+ * *
1981
+ * Transformation-time functions for *internal* use only *
1982
+ * *
1983
+ ************************************************************************/
1984
+ XSLTPUBFUN int XSLTCALL
1985
+ xsltInitCtxtKey (xsltTransformContextPtr ctxt,
1986
+ xsltDocumentPtr doc,
1987
+ xsltKeyDefPtr keyd);
1988
+ XSLTPUBFUN int XSLTCALL
1989
+ xsltInitAllDocKeys (xsltTransformContextPtr ctxt);
1990
+ #ifdef __cplusplus
1991
+ }
1992
+ #endif
1993
+
1994
+ #endif /* __XML_XSLT_H__ */
1995
+