nokogiri 1.10.10-x86-mingw32 → 1.11.0-x86-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

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