nokogiri 1.10.7 → 1.12.5-arm64-darwin
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.
- checksums.yaml +4 -4
- data/Gemfile +3 -0
- data/LICENSE-DEPENDENCIES.md +1173 -884
- data/LICENSE.md +1 -1
- data/README.md +176 -96
- data/dependencies.yml +12 -12
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +716 -414
- data/ext/nokogiri/gumbo.c +584 -0
- data/ext/nokogiri/html4_document.c +166 -0
- data/ext/nokogiri/html4_element_description.c +294 -0
- data/ext/nokogiri/html4_entity_lookup.c +37 -0
- data/ext/nokogiri/html4_sax_parser_context.c +120 -0
- data/ext/nokogiri/html4_sax_push_parser.c +95 -0
- data/ext/nokogiri/include/libexslt/exslt.h +102 -0
- data/ext/nokogiri/include/libexslt/exsltconfig.h +70 -0
- data/ext/nokogiri/include/libexslt/exsltexports.h +140 -0
- data/ext/nokogiri/include/libxml2/libxml/DOCBparser.h +96 -0
- data/ext/nokogiri/include/libxml2/libxml/HTMLparser.h +306 -0
- data/ext/nokogiri/include/libxml2/libxml/HTMLtree.h +147 -0
- data/ext/nokogiri/include/libxml2/libxml/SAX.h +173 -0
- data/ext/nokogiri/include/libxml2/libxml/SAX2.h +178 -0
- data/ext/nokogiri/include/libxml2/libxml/c14n.h +128 -0
- data/ext/nokogiri/include/libxml2/libxml/catalog.h +182 -0
- data/ext/nokogiri/include/libxml2/libxml/chvalid.h +230 -0
- data/ext/nokogiri/include/libxml2/libxml/debugXML.h +217 -0
- data/ext/nokogiri/include/libxml2/libxml/dict.h +79 -0
- data/ext/nokogiri/include/libxml2/libxml/encoding.h +245 -0
- data/ext/nokogiri/include/libxml2/libxml/entities.h +151 -0
- data/ext/nokogiri/include/libxml2/libxml/globals.h +508 -0
- data/ext/nokogiri/include/libxml2/libxml/hash.h +236 -0
- data/ext/nokogiri/include/libxml2/libxml/list.h +137 -0
- data/ext/nokogiri/include/libxml2/libxml/nanoftp.h +163 -0
- data/ext/nokogiri/include/libxml2/libxml/nanohttp.h +81 -0
- data/ext/nokogiri/include/libxml2/libxml/parser.h +1243 -0
- data/ext/nokogiri/include/libxml2/libxml/parserInternals.h +644 -0
- data/ext/nokogiri/include/libxml2/libxml/pattern.h +100 -0
- data/ext/nokogiri/include/libxml2/libxml/relaxng.h +217 -0
- data/ext/nokogiri/include/libxml2/libxml/schemasInternals.h +958 -0
- data/ext/nokogiri/include/libxml2/libxml/schematron.h +142 -0
- data/ext/nokogiri/include/libxml2/libxml/threads.h +89 -0
- data/ext/nokogiri/include/libxml2/libxml/tree.h +1311 -0
- data/ext/nokogiri/include/libxml2/libxml/uri.h +94 -0
- data/ext/nokogiri/include/libxml2/libxml/valid.h +458 -0
- data/ext/nokogiri/include/libxml2/libxml/xinclude.h +129 -0
- data/ext/nokogiri/include/libxml2/libxml/xlink.h +189 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlIO.h +368 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlautomata.h +146 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlerror.h +945 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlexports.h +77 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlmemory.h +224 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlmodule.h +57 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlreader.h +428 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlregexp.h +222 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlsave.h +88 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlschemas.h +246 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlschemastypes.h +151 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlstring.h +140 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlunicode.h +202 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlversion.h +485 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlwriter.h +488 -0
- data/ext/nokogiri/include/libxml2/libxml/xpath.h +564 -0
- data/ext/nokogiri/include/libxml2/libxml/xpathInternals.h +632 -0
- data/ext/nokogiri/include/libxml2/libxml/xpointer.h +114 -0
- data/ext/nokogiri/include/libxslt/attributes.h +38 -0
- data/ext/nokogiri/include/libxslt/documents.h +93 -0
- data/ext/nokogiri/include/libxslt/extensions.h +262 -0
- data/ext/nokogiri/include/libxslt/extra.h +72 -0
- data/ext/nokogiri/include/libxslt/functions.h +78 -0
- data/ext/nokogiri/include/libxslt/imports.h +75 -0
- data/ext/nokogiri/include/libxslt/keys.h +53 -0
- data/ext/nokogiri/include/libxslt/namespaces.h +68 -0
- data/ext/nokogiri/include/libxslt/numbersInternals.h +73 -0
- data/ext/nokogiri/include/libxslt/pattern.h +84 -0
- data/ext/nokogiri/include/libxslt/preproc.h +43 -0
- data/ext/nokogiri/include/libxslt/security.h +104 -0
- data/ext/nokogiri/include/libxslt/templates.h +77 -0
- data/ext/nokogiri/include/libxslt/transform.h +207 -0
- data/ext/nokogiri/include/libxslt/variables.h +118 -0
- data/ext/nokogiri/include/libxslt/xslt.h +110 -0
- data/ext/nokogiri/include/libxslt/xsltInternals.h +1978 -0
- data/ext/nokogiri/include/libxslt/xsltconfig.h +180 -0
- data/ext/nokogiri/include/libxslt/xsltexports.h +142 -0
- data/ext/nokogiri/include/libxslt/xsltlocale.h +76 -0
- data/ext/nokogiri/include/libxslt/xsltutils.h +313 -0
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +228 -91
- data/ext/nokogiri/nokogiri.h +191 -89
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +15 -15
- data/ext/nokogiri/xml_attribute_decl.c +18 -18
- data/ext/nokogiri/xml_cdata.c +13 -18
- data/ext/nokogiri/xml_comment.c +19 -26
- data/ext/nokogiri/xml_document.c +267 -195
- data/ext/nokogiri/xml_document_fragment.c +13 -15
- data/ext/nokogiri/xml_dtd.c +54 -48
- data/ext/nokogiri/xml_element_content.c +31 -26
- data/ext/nokogiri/xml_element_decl.c +22 -22
- data/ext/nokogiri/xml_encoding_handler.c +28 -17
- data/ext/nokogiri/xml_entity_decl.c +32 -30
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +60 -51
- data/ext/nokogiri/xml_node.c +493 -407
- data/ext/nokogiri/xml_node_set.c +174 -162
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +197 -172
- data/ext/nokogiri/xml_relax_ng.c +52 -28
- data/ext/nokogiri/xml_sax_parser.c +112 -112
- data/ext/nokogiri/xml_sax_parser_context.c +105 -86
- data/ext/nokogiri/xml_sax_push_parser.c +36 -27
- data/ext/nokogiri/xml_schema.c +112 -33
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +13 -17
- data/ext/nokogiri/xml_xpath_context.c +158 -73
- data/ext/nokogiri/xslt_stylesheet.c +158 -164
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +101 -0
- data/gumbo-parser/THANKS +27 -0
- data/lib/nokogiri/2.5/nokogiri.bundle +0 -0
- data/lib/nokogiri/2.6/nokogiri.bundle +0 -0
- data/lib/nokogiri/2.7/nokogiri.bundle +0 -0
- data/lib/nokogiri/3.0/nokogiri.bundle +0 -0
- data/lib/nokogiri/css/node.rb +1 -0
- data/lib/nokogiri/css/parser.rb +64 -63
- data/lib/nokogiri/css/parser.y +3 -3
- data/lib/nokogiri/css/parser_extras.rb +39 -36
- data/lib/nokogiri/css/syntax_error.rb +2 -1
- data/lib/nokogiri/css/tokenizer.rb +1 -0
- data/lib/nokogiri/css/xpath_visitor.rb +73 -43
- data/lib/nokogiri/css.rb +15 -14
- data/lib/nokogiri/decorators/slop.rb +1 -0
- data/lib/nokogiri/extension.rb +31 -0
- data/lib/nokogiri/gumbo.rb +14 -0
- data/lib/nokogiri/html.rb +32 -27
- data/lib/nokogiri/{html → html4}/builder.rb +3 -2
- data/lib/nokogiri/{html → html4}/document.rb +17 -30
- data/lib/nokogiri/{html → html4}/document_fragment.rb +18 -17
- data/lib/nokogiri/{html → html4}/element_description.rb +2 -1
- data/lib/nokogiri/{html → html4}/element_description_defaults.rb +2 -1
- data/lib/nokogiri/{html → html4}/entity_lookup.rb +2 -1
- data/lib/nokogiri/{html → html4}/sax/parser.rb +12 -14
- data/lib/nokogiri/html4/sax/parser_context.rb +19 -0
- data/lib/nokogiri/{html → html4}/sax/push_parser.rb +6 -5
- data/lib/nokogiri/html4.rb +40 -0
- data/lib/nokogiri/html5/document.rb +74 -0
- data/lib/nokogiri/html5/document_fragment.rb +80 -0
- data/lib/nokogiri/html5/node.rb +93 -0
- data/lib/nokogiri/html5.rb +473 -0
- data/lib/nokogiri/jruby/dependencies.rb +20 -0
- data/lib/nokogiri/syntax_error.rb +1 -0
- data/lib/nokogiri/version/constant.rb +5 -0
- data/lib/nokogiri/version/info.rb +215 -0
- data/lib/nokogiri/version.rb +3 -109
- data/lib/nokogiri/xml/attr.rb +1 -0
- data/lib/nokogiri/xml/attribute_decl.rb +1 -0
- data/lib/nokogiri/xml/builder.rb +41 -2
- data/lib/nokogiri/xml/cdata.rb +1 -0
- data/lib/nokogiri/xml/character_data.rb +1 -0
- data/lib/nokogiri/xml/document.rb +138 -41
- data/lib/nokogiri/xml/document_fragment.rb +5 -6
- data/lib/nokogiri/xml/dtd.rb +1 -0
- data/lib/nokogiri/xml/element_content.rb +1 -0
- data/lib/nokogiri/xml/element_decl.rb +1 -0
- data/lib/nokogiri/xml/entity_decl.rb +1 -0
- data/lib/nokogiri/xml/entity_reference.rb +1 -0
- data/lib/nokogiri/xml/namespace.rb +1 -0
- data/lib/nokogiri/xml/node/save_options.rb +2 -1
- data/lib/nokogiri/xml/node.rb +629 -293
- data/lib/nokogiri/xml/node_set.rb +1 -0
- data/lib/nokogiri/xml/notation.rb +1 -0
- data/lib/nokogiri/xml/parse_options.rb +12 -3
- data/lib/nokogiri/xml/pp/character_data.rb +1 -0
- data/lib/nokogiri/xml/pp/node.rb +1 -0
- data/lib/nokogiri/xml/pp.rb +3 -2
- data/lib/nokogiri/xml/processing_instruction.rb +1 -0
- data/lib/nokogiri/xml/reader.rb +9 -12
- data/lib/nokogiri/xml/relax_ng.rb +7 -2
- data/lib/nokogiri/xml/sax/document.rb +25 -30
- data/lib/nokogiri/xml/sax/parser.rb +1 -0
- data/lib/nokogiri/xml/sax/parser_context.rb +1 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +1 -0
- data/lib/nokogiri/xml/sax.rb +5 -4
- data/lib/nokogiri/xml/schema.rb +13 -4
- data/lib/nokogiri/xml/searchable.rb +25 -16
- data/lib/nokogiri/xml/syntax_error.rb +1 -0
- data/lib/nokogiri/xml/text.rb +1 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +2 -1
- data/lib/nokogiri/xml/xpath.rb +4 -5
- data/lib/nokogiri/xml/xpath_context.rb +1 -0
- data/lib/nokogiri/xml.rb +36 -36
- data/lib/nokogiri/xslt/stylesheet.rb +2 -1
- data/lib/nokogiri/xslt.rb +17 -16
- data/lib/nokogiri.rb +32 -51
- data/lib/xsd/xmlparser/nokogiri.rb +1 -0
- metadata +182 -193
- data/ext/nokogiri/html_document.c +0 -170
- data/ext/nokogiri/html_document.h +0 -10
- data/ext/nokogiri/html_element_description.c +0 -279
- data/ext/nokogiri/html_element_description.h +0 -10
- data/ext/nokogiri/html_entity_lookup.c +0 -32
- data/ext/nokogiri/html_entity_lookup.h +0 -8
- data/ext/nokogiri/html_sax_parser_context.c +0 -116
- data/ext/nokogiri/html_sax_parser_context.h +0 -11
- data/ext/nokogiri/html_sax_push_parser.c +0 -87
- data/ext/nokogiri/html_sax_push_parser.h +0 -9
- data/ext/nokogiri/xml_attr.h +0 -9
- data/ext/nokogiri/xml_attribute_decl.h +0 -9
- data/ext/nokogiri/xml_cdata.h +0 -9
- data/ext/nokogiri/xml_comment.h +0 -9
- data/ext/nokogiri/xml_document.h +0 -23
- data/ext/nokogiri/xml_document_fragment.h +0 -10
- data/ext/nokogiri/xml_dtd.h +0 -10
- data/ext/nokogiri/xml_element_content.h +0 -10
- data/ext/nokogiri/xml_element_decl.h +0 -9
- data/ext/nokogiri/xml_encoding_handler.h +0 -8
- data/ext/nokogiri/xml_entity_decl.h +0 -10
- data/ext/nokogiri/xml_entity_reference.h +0 -9
- data/ext/nokogiri/xml_io.c +0 -61
- data/ext/nokogiri/xml_io.h +0 -11
- data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
- data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
- data/ext/nokogiri/xml_namespace.h +0 -14
- data/ext/nokogiri/xml_node.h +0 -13
- data/ext/nokogiri/xml_node_set.h +0 -12
- data/ext/nokogiri/xml_processing_instruction.h +0 -9
- data/ext/nokogiri/xml_reader.h +0 -10
- data/ext/nokogiri/xml_relax_ng.h +0 -9
- data/ext/nokogiri/xml_sax_parser.h +0 -39
- data/ext/nokogiri/xml_sax_parser_context.h +0 -10
- data/ext/nokogiri/xml_sax_push_parser.h +0 -9
- data/ext/nokogiri/xml_schema.h +0 -9
- data/ext/nokogiri/xml_syntax_error.h +0 -13
- data/ext/nokogiri/xml_text.h +0 -9
- data/ext/nokogiri/xml_xpath_context.h +0 -10
- data/ext/nokogiri/xslt_stylesheet.h +0 -14
- data/lib/nokogiri/html/sax/parser_context.rb +0 -16
- data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
- data/patches/libxml2/0002-Remove-script-macro-support.patch +0 -40
- data/patches/libxml2/0003-Update-entities-to-remove-handling-of-ssi.patch +0 -44
- data/patches/libxml2/0004-libxml2.la-is-in-top_builddir.patch +0 -25
- data/ports/archives/libxml2-2.9.10.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
@@ -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
|
+
|