nokogiri 1.10.3 → 1.11.4
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 +1015 -947
- data/LICENSE.md +1 -1
- data/README.md +173 -94
- data/dependencies.yml +28 -26
- data/ext/nokogiri/depend +37 -358
- data/ext/nokogiri/extconf.rb +611 -391
- data/ext/nokogiri/html_document.c +78 -82
- data/ext/nokogiri/html_element_description.c +84 -71
- data/ext/nokogiri/html_entity_lookup.c +21 -16
- data/ext/nokogiri/html_sax_parser_context.c +69 -66
- data/ext/nokogiri/html_sax_push_parser.c +42 -34
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +192 -87
- data/ext/nokogiri/nokogiri.h +181 -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 +255 -183
- data/ext/nokogiri/xml_document_fragment.c +13 -15
- data/ext/nokogiri/xml_dtd.c +54 -48
- data/ext/nokogiri/xml_element_content.c +30 -27
- data/ext/nokogiri/xml_element_decl.c +22 -22
- data/ext/nokogiri/xml_encoding_handler.c +17 -11
- data/ext/nokogiri/xml_entity_decl.c +32 -30
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +56 -49
- data/ext/nokogiri/xml_node.c +387 -316
- data/ext/nokogiri/xml_node_set.c +168 -156
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +195 -172
- data/ext/nokogiri/xml_relax_ng.c +52 -28
- data/ext/nokogiri/xml_sax_parser.c +118 -118
- data/ext/nokogiri/xml_sax_parser_context.c +103 -86
- data/ext/nokogiri/xml_sax_push_parser.c +36 -27
- data/ext/nokogiri/xml_schema.c +111 -34
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +13 -17
- data/ext/nokogiri/xml_xpath_context.c +206 -123
- data/ext/nokogiri/xslt_stylesheet.c +158 -165
- data/lib/nokogiri/css/node.rb +1 -0
- data/lib/nokogiri/css/parser.rb +63 -62
- data/lib/nokogiri/css/parser.y +2 -2
- data/lib/nokogiri/css/parser_extras.rb +39 -36
- data/lib/nokogiri/css/syntax_error.rb +1 -0
- data/lib/nokogiri/css/tokenizer.rb +105 -103
- data/lib/nokogiri/css/xpath_visitor.rb +73 -43
- data/lib/nokogiri/css.rb +1 -0
- data/lib/nokogiri/decorators/slop.rb +1 -0
- data/lib/nokogiri/extension.rb +26 -0
- data/lib/nokogiri/html/builder.rb +1 -0
- data/lib/nokogiri/html/document.rb +13 -26
- data/lib/nokogiri/html/document_fragment.rb +16 -15
- data/lib/nokogiri/html/element_description.rb +1 -0
- data/lib/nokogiri/html/element_description_defaults.rb +1 -0
- data/lib/nokogiri/html/entity_lookup.rb +1 -0
- data/lib/nokogiri/html/sax/parser.rb +1 -0
- data/lib/nokogiri/html/sax/parser_context.rb +1 -0
- data/lib/nokogiri/html/sax/push_parser.rb +1 -0
- data/lib/nokogiri/html.rb +1 -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 +205 -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 +36 -32
- data/lib/nokogiri/xml/cdata.rb +1 -0
- data/lib/nokogiri/xml/character_data.rb +1 -0
- data/lib/nokogiri/xml/document.rb +92 -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 +1 -0
- data/lib/nokogiri/xml/node.rb +625 -290
- data/lib/nokogiri/xml/node_set.rb +1 -0
- data/lib/nokogiri/xml/notation.rb +1 -0
- data/lib/nokogiri/xml/parse_options.rb +10 -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 +1 -0
- 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 +1 -0
- 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 +1 -0
- 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 +2 -3
- data/lib/nokogiri/xml/xpath_context.rb +1 -0
- data/lib/nokogiri/xml.rb +1 -0
- data/lib/nokogiri/xslt/stylesheet.rb +1 -0
- data/lib/nokogiri/xslt.rb +1 -0
- data/lib/nokogiri.rb +6 -27
- data/lib/xsd/xmlparser/nokogiri.rb +1 -0
- data/patches/libxml2/{0002-Remove-script-macro-support.patch → 0001-Remove-script-macro-support.patch} +0 -0
- data/patches/libxml2/{0003-Update-entities-to-remove-handling-of-ssi.patch → 0002-Update-entities-to-remove-handling-of-ssi.patch} +0 -0
- data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
- data/patches/libxml2/0004-use-glibc-strlen.patch +53 -0
- data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
- data/patches/libxml2/0006-update-automake-files-for-arm64.patch +2511 -0
- data/patches/libxslt/0001-update-automake-files-for-arm64.patch +2511 -0
- data/patches/libxslt/0002-Fix-xml2-config-check-in-configure-script.patch +19 -0
- data/ports/archives/libxml2-2.9.12.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
- metadata +102 -147
- data/ext/nokogiri/html_document.h +0 -10
- data/ext/nokogiri/html_element_description.h +0 -10
- data/ext/nokogiri/html_entity_lookup.h +0 -8
- data/ext/nokogiri/html_sax_parser_context.h +0 -11
- 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/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
- data/patches/libxslt/0001-Fix-security-framework-bypass.patch +0 -120
- data/ports/archives/libxml2-2.9.9.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.33.tar.gz +0 -0
@@ -1,34 +1,29 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
2
|
|
3
|
-
|
4
|
-
#include <libxslt/xsltutils.h>
|
5
|
-
#include <libxslt/transform.h>
|
6
|
-
#include <libexslt/exslt.h>
|
7
|
-
|
8
|
-
VALUE xslt;
|
9
|
-
|
10
|
-
int vasprintf (char **strp, const char *fmt, va_list ap);
|
11
|
-
void vasprintf_free (void *p);
|
3
|
+
VALUE cNokogiriXsltStylesheet ;
|
12
4
|
|
13
|
-
static void
|
5
|
+
static void
|
6
|
+
mark(nokogiriXsltStylesheetTuple *wrapper)
|
14
7
|
{
|
15
8
|
rb_gc_mark(wrapper->func_instances);
|
16
9
|
}
|
17
10
|
|
18
|
-
static void
|
11
|
+
static void
|
12
|
+
dealloc(nokogiriXsltStylesheetTuple *wrapper)
|
19
13
|
{
|
20
|
-
|
14
|
+
xsltStylesheetPtr doc = wrapper->ss;
|
21
15
|
|
22
|
-
|
23
|
-
|
24
|
-
|
16
|
+
NOKOGIRI_DEBUG_START(doc);
|
17
|
+
xsltFreeStylesheet(doc); /* commented out for now. */
|
18
|
+
NOKOGIRI_DEBUG_END(doc);
|
25
19
|
|
26
|
-
|
20
|
+
free(wrapper);
|
27
21
|
}
|
28
22
|
|
29
|
-
static void
|
23
|
+
static void
|
24
|
+
xslt_generic_error_handler(void *ctx, const char *msg, ...)
|
30
25
|
{
|
31
|
-
char *
|
26
|
+
char *message;
|
32
27
|
|
33
28
|
va_list args;
|
34
29
|
va_start(args, msg);
|
@@ -37,10 +32,11 @@ static void xslt_generic_error_handler(void * ctx, const char *msg, ...)
|
|
37
32
|
|
38
33
|
rb_str_cat2((VALUE)ctx, message);
|
39
34
|
|
40
|
-
|
35
|
+
free(message);
|
41
36
|
}
|
42
37
|
|
43
|
-
VALUE
|
38
|
+
VALUE
|
39
|
+
Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
|
44
40
|
{
|
45
41
|
VALUE self;
|
46
42
|
nokogiriXsltStylesheetTuple *wrapper;
|
@@ -61,29 +57,30 @@ VALUE Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
|
|
61
57
|
*
|
62
58
|
* Parse a stylesheet from +document+.
|
63
59
|
*/
|
64
|
-
static VALUE
|
60
|
+
static VALUE
|
61
|
+
parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
|
65
62
|
{
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
63
|
+
xmlDocPtr xml, xml_cpy;
|
64
|
+
VALUE errstr, exception;
|
65
|
+
xsltStylesheetPtr ss ;
|
66
|
+
Data_Get_Struct(xmldocobj, xmlDoc, xml);
|
67
|
+
exsltRegisterAll();
|
71
68
|
|
72
|
-
|
73
|
-
|
69
|
+
errstr = rb_str_new(0, 0);
|
70
|
+
xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
|
74
71
|
|
75
|
-
|
76
|
-
|
72
|
+
xml_cpy = xmlCopyDoc(xml, 1); /* 1 => recursive */
|
73
|
+
ss = xsltParseStylesheetDoc(xml_cpy);
|
77
74
|
|
78
|
-
|
75
|
+
xsltSetGenericErrorFunc(NULL, NULL);
|
79
76
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
77
|
+
if (!ss) {
|
78
|
+
xmlFreeDoc(xml_cpy);
|
79
|
+
exception = rb_exc_new3(rb_eRuntimeError, errstr);
|
80
|
+
rb_exc_raise(exception);
|
81
|
+
}
|
85
82
|
|
86
|
-
|
83
|
+
return Nokogiri_wrap_xslt_stylesheet(ss);
|
87
84
|
}
|
88
85
|
|
89
86
|
|
@@ -93,24 +90,21 @@ static VALUE parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
|
|
93
90
|
*
|
94
91
|
* Serialize +document+ to an xml string.
|
95
92
|
*/
|
96
|
-
static VALUE
|
97
|
-
|
98
|
-
xmlDocPtr xml ;
|
99
|
-
nokogiriXsltStylesheetTuple *wrapper;
|
100
|
-
xmlChar* doc_ptr ;
|
101
|
-
int doc_len ;
|
102
|
-
VALUE rval ;
|
103
|
-
|
104
|
-
Data_Get_Struct(xmlobj, xmlDoc, xml);
|
105
|
-
Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
|
106
|
-
xsltSaveResultToString(&doc_ptr, &doc_len, xml, wrapper->ss);
|
107
|
-
rval = NOKOGIRI_STR_NEW(doc_ptr, doc_len);
|
108
|
-
xmlFree(doc_ptr);
|
109
|
-
return rval ;
|
110
|
-
}
|
111
|
-
|
112
|
-
static void swallow_superfluous_xml_errors(void * userdata, xmlErrorPtr error, ...)
|
93
|
+
static VALUE
|
94
|
+
serialize(VALUE self, VALUE xmlobj)
|
113
95
|
{
|
96
|
+
xmlDocPtr xml ;
|
97
|
+
nokogiriXsltStylesheetTuple *wrapper;
|
98
|
+
xmlChar *doc_ptr ;
|
99
|
+
int doc_len ;
|
100
|
+
VALUE rval ;
|
101
|
+
|
102
|
+
Data_Get_Struct(xmlobj, xmlDoc, xml);
|
103
|
+
Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
|
104
|
+
xsltSaveResultToString(&doc_ptr, &doc_len, xml, wrapper->ss);
|
105
|
+
rval = NOKOGIRI_STR_NEW(doc_ptr, doc_len);
|
106
|
+
xmlFree(doc_ptr);
|
107
|
+
return rval ;
|
114
108
|
}
|
115
109
|
|
116
110
|
/*
|
@@ -128,109 +122,114 @@ static void swallow_superfluous_xml_errors(void * userdata, xmlErrorPtr error, .
|
|
128
122
|
* puts xslt.transform(doc, ['key', 'value'])
|
129
123
|
*
|
130
124
|
*/
|
131
|
-
static VALUE
|
125
|
+
static VALUE
|
126
|
+
transform(int argc, VALUE *argv, VALUE self)
|
132
127
|
{
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
128
|
+
VALUE xmldoc, paramobj, errstr, exception ;
|
129
|
+
xmlDocPtr xml ;
|
130
|
+
xmlDocPtr result ;
|
131
|
+
nokogiriXsltStylesheetTuple *wrapper;
|
132
|
+
const char **params ;
|
133
|
+
long param_len, j ;
|
134
|
+
int parse_error_occurred ;
|
135
|
+
|
136
|
+
rb_scan_args(argc, argv, "11", &xmldoc, ¶mobj);
|
137
|
+
if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0L) ; }
|
138
|
+
if (!rb_obj_is_kind_of(xmldoc, cNokogiriXmlDocument)) {
|
139
|
+
rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::Document");
|
140
|
+
}
|
141
|
+
|
142
|
+
/* handle hashes as arguments. */
|
143
|
+
if (T_HASH == TYPE(paramobj)) {
|
144
|
+
paramobj = rb_funcall(paramobj, rb_intern("to_a"), 0);
|
145
|
+
paramobj = rb_funcall(paramobj, rb_intern("flatten"), 0);
|
146
|
+
}
|
147
|
+
|
148
|
+
Check_Type(paramobj, T_ARRAY);
|
149
|
+
|
150
|
+
Data_Get_Struct(xmldoc, xmlDoc, xml);
|
151
|
+
Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
|
152
|
+
|
153
|
+
param_len = RARRAY_LEN(paramobj);
|
154
|
+
params = calloc((size_t)param_len + 1, sizeof(char *));
|
155
|
+
for (j = 0 ; j < param_len ; j++) {
|
156
|
+
VALUE entry = rb_ary_entry(paramobj, j);
|
157
|
+
const char *ptr = StringValueCStr(entry);
|
158
|
+
params[j] = ptr;
|
159
|
+
}
|
160
|
+
params[param_len] = 0 ;
|
161
|
+
|
162
|
+
errstr = rb_str_new(0, 0);
|
163
|
+
xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
|
164
|
+
xmlSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
|
165
|
+
|
166
|
+
result = xsltApplyStylesheet(wrapper->ss, xml, params);
|
167
|
+
free(params);
|
168
|
+
|
169
|
+
xsltSetGenericErrorFunc(NULL, NULL);
|
170
|
+
xmlSetGenericErrorFunc(NULL, NULL);
|
171
|
+
|
172
|
+
parse_error_occurred = (Qfalse == rb_funcall(errstr, rb_intern("empty?"), 0));
|
173
|
+
|
174
|
+
if (parse_error_occurred) {
|
175
|
+
exception = rb_exc_new3(rb_eRuntimeError, errstr);
|
176
|
+
rb_exc_raise(exception);
|
177
|
+
}
|
178
|
+
|
179
|
+
return noko_xml_document_wrap((VALUE)0, result) ;
|
184
180
|
}
|
185
181
|
|
186
|
-
static void
|
182
|
+
static void
|
183
|
+
method_caller(xmlXPathParserContextPtr ctxt, int nargs)
|
187
184
|
{
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
185
|
+
VALUE handler;
|
186
|
+
const char *function_name;
|
187
|
+
xsltTransformContextPtr transform;
|
188
|
+
const xmlChar *functionURI;
|
192
189
|
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
190
|
+
transform = xsltXPathGetTransformContext(ctxt);
|
191
|
+
functionURI = ctxt->context->functionURI;
|
192
|
+
handler = (VALUE)xsltGetExtData(transform, functionURI);
|
193
|
+
function_name = (const char *)(ctxt->context->function);
|
197
194
|
|
198
|
-
|
195
|
+
Nokogiri_marshal_xpath_funcall_and_return_values(ctxt, nargs, handler, (const char *)function_name);
|
199
196
|
}
|
200
197
|
|
201
|
-
static void *
|
198
|
+
static void *
|
199
|
+
initFunc(xsltTransformContextPtr ctxt, const xmlChar *uri)
|
202
200
|
{
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
201
|
+
VALUE modules = rb_iv_get(mNokogiriXslt, "@modules");
|
202
|
+
VALUE obj = rb_hash_aref(modules, rb_str_new2((const char *)uri));
|
203
|
+
VALUE args = { Qfalse };
|
204
|
+
VALUE methods = rb_funcall(obj, rb_intern("instance_methods"), 1, args);
|
205
|
+
VALUE inst;
|
206
|
+
nokogiriXsltStylesheetTuple *wrapper;
|
207
|
+
int i;
|
208
|
+
|
209
|
+
for (i = 0; i < RARRAY_LEN(methods); i++) {
|
210
|
+
VALUE method_name = rb_obj_as_string(rb_ary_entry(methods, i));
|
211
|
+
xsltRegisterExtFunction(ctxt,
|
212
|
+
(unsigned char *)StringValueCStr(method_name), uri, method_caller);
|
213
|
+
}
|
214
|
+
|
215
|
+
Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
|
216
|
+
wrapper);
|
217
|
+
inst = rb_class_new_instance(0, NULL, obj);
|
218
|
+
rb_ary_push(wrapper->func_instances, inst);
|
219
|
+
|
220
|
+
return (void *)inst;
|
223
221
|
}
|
224
222
|
|
225
|
-
static void
|
226
|
-
|
223
|
+
static void
|
224
|
+
shutdownFunc(xsltTransformContextPtr ctxt,
|
225
|
+
const xmlChar *uri, void *data)
|
227
226
|
{
|
228
|
-
|
227
|
+
nokogiriXsltStylesheetTuple *wrapper;
|
229
228
|
|
230
|
-
|
231
|
-
|
229
|
+
Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
|
230
|
+
wrapper);
|
232
231
|
|
233
|
-
|
232
|
+
rb_ary_clear(wrapper->func_instances);
|
234
233
|
}
|
235
234
|
|
236
235
|
/*
|
@@ -239,32 +238,26 @@ static void shutdownFunc(xsltTransformContextPtr ctxt,
|
|
239
238
|
*
|
240
239
|
* Register a class that implements custom XSLT transformation functions.
|
241
240
|
*/
|
242
|
-
static VALUE
|
241
|
+
static VALUE
|
242
|
+
registr(VALUE self, VALUE uri, VALUE obj)
|
243
243
|
{
|
244
|
-
|
245
|
-
|
244
|
+
VALUE modules = rb_iv_get(self, "@modules");
|
245
|
+
if (NIL_P(modules)) { rb_raise(rb_eRuntimeError, "wtf! @modules isn't set"); }
|
246
246
|
|
247
|
-
|
248
|
-
|
249
|
-
|
247
|
+
rb_hash_aset(modules, uri, obj);
|
248
|
+
xsltRegisterExtModule((unsigned char *)StringValueCStr(uri), initFunc, shutdownFunc);
|
249
|
+
return self;
|
250
250
|
}
|
251
251
|
|
252
|
-
|
253
|
-
|
252
|
+
void
|
253
|
+
noko_init_xslt_stylesheet()
|
254
254
|
{
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
nokogiri = rb_define_module("Nokogiri");
|
259
|
-
xslt = rb_define_module_under(nokogiri, "XSLT");
|
260
|
-
klass = rb_define_class_under(xslt, "Stylesheet", rb_cObject);
|
261
|
-
|
262
|
-
rb_iv_set(xslt, "@modules", rb_hash_new());
|
255
|
+
rb_define_singleton_method(mNokogiriXslt, "register", registr, 2);
|
256
|
+
rb_iv_set(mNokogiriXslt, "@modules", rb_hash_new());
|
263
257
|
|
264
|
-
cNokogiriXsltStylesheet =
|
258
|
+
cNokogiriXsltStylesheet = rb_define_class_under(mNokogiriXslt, "Stylesheet", rb_cObject);
|
265
259
|
|
266
|
-
rb_define_singleton_method(
|
267
|
-
|
268
|
-
rb_define_method(
|
269
|
-
rb_define_method(klass, "transform", transform, -1);
|
260
|
+
rb_define_singleton_method(cNokogiriXsltStylesheet, "parse_stylesheet_doc", parse_stylesheet_doc, 1);
|
261
|
+
rb_define_method(cNokogiriXsltStylesheet, "serialize", serialize, 1);
|
262
|
+
rb_define_method(cNokogiriXsltStylesheet, "transform", transform, -1);
|
270
263
|
}
|
data/lib/nokogiri/css/node.rb
CHANGED