nokogiri 1.11.0.rc2-x86-linux → 1.11.2-x86-linux
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 +171 -94
- data/ext/nokogiri/depend +37 -358
- data/ext/nokogiri/extconf.rb +581 -374
- 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/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 +126 -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 +1241 -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 +366 -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 +153 -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 +566 -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 +192 -93
- data/ext/nokogiri/nokogiri.h +177 -98
- 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 +225 -163
- 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 +338 -286
- data/ext/nokogiri/xml_node_set.c +168 -156
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +191 -157
- 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 +95 -47
- 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 -161
- data/lib/nokogiri.rb +4 -8
- data/lib/nokogiri/2.5/nokogiri.so +0 -0
- data/lib/nokogiri/2.6/nokogiri.so +0 -0
- data/lib/nokogiri/2.7/nokogiri.so +0 -0
- data/lib/nokogiri/3.0/nokogiri.so +0 -0
- data/lib/nokogiri/css/parser.rb +62 -62
- data/lib/nokogiri/css/parser.y +2 -2
- data/lib/nokogiri/css/xpath_visitor.rb +70 -42
- data/lib/nokogiri/extension.rb +26 -0
- data/lib/nokogiri/html/document.rb +12 -26
- data/lib/nokogiri/html/document_fragment.rb +15 -15
- data/lib/nokogiri/version.rb +2 -148
- data/lib/nokogiri/version/constant.rb +5 -0
- data/lib/nokogiri/version/info.rb +205 -0
- data/lib/nokogiri/xml/builder.rb +2 -2
- data/lib/nokogiri/xml/document.rb +48 -18
- data/lib/nokogiri/xml/document_fragment.rb +4 -6
- data/lib/nokogiri/xml/node.rb +88 -69
- data/lib/nokogiri/xml/parse_options.rb +6 -0
- data/lib/nokogiri/xml/reader.rb +2 -9
- data/lib/nokogiri/xml/relax_ng.rb +6 -2
- data/lib/nokogiri/xml/schema.rb +12 -4
- data/lib/nokogiri/xml/searchable.rb +3 -1
- data/lib/nokogiri/xml/xpath.rb +1 -3
- data/lib/nokogiri/xml/xpath/syntax_error.rb +1 -1
- metadata +151 -158
- 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/lib/nokogiri/2.4/nokogiri.so +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,20 +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
|
93
|
+
static VALUE
|
94
|
+
serialize(VALUE self, VALUE xmlobj)
|
97
95
|
{
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
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 ;
|
110
108
|
}
|
111
109
|
|
112
110
|
/*
|
@@ -124,109 +122,114 @@ static VALUE serialize(VALUE self, VALUE xmlobj)
|
|
124
122
|
* puts xslt.transform(doc, ['key', 'value'])
|
125
123
|
*
|
126
124
|
*/
|
127
|
-
static VALUE
|
125
|
+
static VALUE
|
126
|
+
transform(int argc, VALUE *argv, VALUE self)
|
128
127
|
{
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
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
|
-
|
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) ;
|
180
180
|
}
|
181
181
|
|
182
|
-
static void
|
182
|
+
static void
|
183
|
+
method_caller(xmlXPathParserContextPtr ctxt, int nargs)
|
183
184
|
{
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
185
|
+
VALUE handler;
|
186
|
+
const char *function_name;
|
187
|
+
xsltTransformContextPtr transform;
|
188
|
+
const xmlChar *functionURI;
|
188
189
|
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
190
|
+
transform = xsltXPathGetTransformContext(ctxt);
|
191
|
+
functionURI = ctxt->context->functionURI;
|
192
|
+
handler = (VALUE)xsltGetExtData(transform, functionURI);
|
193
|
+
function_name = (const char *)(ctxt->context->function);
|
193
194
|
|
194
|
-
|
195
|
+
Nokogiri_marshal_xpath_funcall_and_return_values(ctxt, nargs, handler, (const char *)function_name);
|
195
196
|
}
|
196
197
|
|
197
|
-
static void *
|
198
|
+
static void *
|
199
|
+
initFunc(xsltTransformContextPtr ctxt, const xmlChar *uri)
|
198
200
|
{
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
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;
|
219
221
|
}
|
220
222
|
|
221
|
-
static void
|
222
|
-
|
223
|
+
static void
|
224
|
+
shutdownFunc(xsltTransformContextPtr ctxt,
|
225
|
+
const xmlChar *uri, void *data)
|
223
226
|
{
|
224
|
-
|
227
|
+
nokogiriXsltStylesheetTuple *wrapper;
|
225
228
|
|
226
|
-
|
227
|
-
|
229
|
+
Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
|
230
|
+
wrapper);
|
228
231
|
|
229
|
-
|
232
|
+
rb_ary_clear(wrapper->func_instances);
|
230
233
|
}
|
231
234
|
|
232
235
|
/*
|
@@ -235,32 +238,26 @@ static void shutdownFunc(xsltTransformContextPtr ctxt,
|
|
235
238
|
*
|
236
239
|
* Register a class that implements custom XSLT transformation functions.
|
237
240
|
*/
|
238
|
-
static VALUE
|
241
|
+
static VALUE
|
242
|
+
registr(VALUE self, VALUE uri, VALUE obj)
|
239
243
|
{
|
240
|
-
|
241
|
-
|
244
|
+
VALUE modules = rb_iv_get(self, "@modules");
|
245
|
+
if (NIL_P(modules)) { rb_raise(rb_eRuntimeError, "wtf! @modules isn't set"); }
|
242
246
|
|
243
|
-
|
244
|
-
|
245
|
-
|
247
|
+
rb_hash_aset(modules, uri, obj);
|
248
|
+
xsltRegisterExtModule((unsigned char *)StringValueCStr(uri), initFunc, shutdownFunc);
|
249
|
+
return self;
|
246
250
|
}
|
247
251
|
|
248
|
-
|
249
|
-
|
252
|
+
void
|
253
|
+
noko_init_xslt_stylesheet()
|
250
254
|
{
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
nokogiri = rb_define_module("Nokogiri");
|
255
|
-
xslt = rb_define_module_under(nokogiri, "XSLT");
|
256
|
-
klass = rb_define_class_under(xslt, "Stylesheet", rb_cObject);
|
257
|
-
|
258
|
-
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());
|
259
257
|
|
260
|
-
cNokogiriXsltStylesheet =
|
258
|
+
cNokogiriXsltStylesheet = rb_define_class_under(mNokogiriXslt, "Stylesheet", rb_cObject);
|
261
259
|
|
262
|
-
rb_define_singleton_method(
|
263
|
-
|
264
|
-
rb_define_method(
|
265
|
-
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);
|
266
263
|
}
|
data/lib/nokogiri.rb
CHANGED
@@ -8,12 +8,8 @@ if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
|
|
8
8
|
require 'nokogiri/jruby/dependencies'
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
require "nokogiri/#{$1}/nokogiri"
|
14
|
-
rescue LoadError
|
15
|
-
require 'nokogiri/nokogiri'
|
16
|
-
end
|
11
|
+
require 'nokogiri/extension'
|
12
|
+
|
17
13
|
require 'nokogiri/version'
|
18
14
|
require 'nokogiri/syntax_error'
|
19
15
|
require 'nokogiri/xml'
|
@@ -37,7 +33,7 @@ require 'nokogiri/html/builder'
|
|
37
33
|
#
|
38
34
|
# # Get a Nokogiri::HTML:Document for the page we’re interested in...
|
39
35
|
#
|
40
|
-
# doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))
|
36
|
+
# doc = Nokogiri::HTML(URI.open('http://www.google.com/search?q=tenderlove'))
|
41
37
|
#
|
42
38
|
# # Do funky things with it using Nokogiri::XML::Node methods...
|
43
39
|
#
|
@@ -113,7 +109,7 @@ module Nokogiri
|
|
113
109
|
end
|
114
110
|
|
115
111
|
###
|
116
|
-
#
|
112
|
+
# Parse a document contained in +args+. Nokogiri will try to guess what
|
117
113
|
# type of document you are attempting to parse. For more information, see
|
118
114
|
# Nokogiri.parse
|
119
115
|
#
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/nokogiri/css/parser.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
#
|
3
3
|
# DO NOT MODIFY!!!!
|
4
|
-
# This file is automatically generated by Racc 1.
|
5
|
-
# from Racc
|
4
|
+
# This file is automatically generated by Racc 1.5.2
|
5
|
+
# from Racc grammar file "".
|
6
6
|
#
|
7
7
|
|
8
8
|
require 'racc/parser.rb'
|
@@ -334,42 +334,42 @@ Racc_debug_parser = false
|
|
334
334
|
|
335
335
|
def _reduce_1(val, _values, result)
|
336
336
|
result = [val.first, val.last].flatten
|
337
|
-
|
337
|
+
|
338
338
|
result
|
339
339
|
end
|
340
340
|
|
341
341
|
def _reduce_2(val, _values, result)
|
342
|
-
result = val.flatten
|
342
|
+
result = val.flatten
|
343
343
|
result
|
344
344
|
end
|
345
345
|
|
346
346
|
def _reduce_3(val, _values, result)
|
347
|
-
result = [val.last].flatten
|
347
|
+
result = [val.last].flatten
|
348
348
|
result
|
349
349
|
end
|
350
350
|
|
351
351
|
def _reduce_4(val, _values, result)
|
352
|
-
result = :DIRECT_ADJACENT_SELECTOR
|
352
|
+
result = :DIRECT_ADJACENT_SELECTOR
|
353
353
|
result
|
354
354
|
end
|
355
355
|
|
356
356
|
def _reduce_5(val, _values, result)
|
357
|
-
result = :CHILD_SELECTOR
|
357
|
+
result = :CHILD_SELECTOR
|
358
358
|
result
|
359
359
|
end
|
360
360
|
|
361
361
|
def _reduce_6(val, _values, result)
|
362
|
-
result = :FOLLOWING_SELECTOR
|
362
|
+
result = :FOLLOWING_SELECTOR
|
363
363
|
result
|
364
364
|
end
|
365
365
|
|
366
366
|
def _reduce_7(val, _values, result)
|
367
|
-
result = :DESCENDANT_SELECTOR
|
367
|
+
result = :DESCENDANT_SELECTOR
|
368
368
|
result
|
369
369
|
end
|
370
370
|
|
371
371
|
def _reduce_8(val, _values, result)
|
372
|
-
result = :CHILD_SELECTOR
|
372
|
+
result = :CHILD_SELECTOR
|
373
373
|
result
|
374
374
|
end
|
375
375
|
|
@@ -379,7 +379,7 @@ def _reduce_9(val, _values, result)
|
|
379
379
|
else
|
380
380
|
Node.new(:CONDITIONAL_SELECTOR, [val.first, val[1]])
|
381
381
|
end
|
382
|
-
|
382
|
+
|
383
383
|
result
|
384
384
|
end
|
385
385
|
|
@@ -387,13 +387,13 @@ end
|
|
387
387
|
|
388
388
|
def _reduce_11(val, _values, result)
|
389
389
|
result = Node.new(:CONDITIONAL_SELECTOR, val)
|
390
|
-
|
390
|
+
|
391
391
|
result
|
392
392
|
end
|
393
393
|
|
394
394
|
def _reduce_12(val, _values, result)
|
395
395
|
result = Node.new(:CONDITIONAL_SELECTOR, val)
|
396
|
-
|
396
|
+
|
397
397
|
result
|
398
398
|
end
|
399
399
|
|
@@ -401,39 +401,39 @@ def _reduce_13(val, _values, result)
|
|
401
401
|
result = Node.new(:CONDITIONAL_SELECTOR,
|
402
402
|
[Node.new(:ELEMENT_NAME, ['*']), val.first]
|
403
403
|
)
|
404
|
-
|
404
|
+
|
405
405
|
result
|
406
406
|
end
|
407
407
|
|
408
408
|
def _reduce_14(val, _values, result)
|
409
409
|
result = Node.new(val.first, [nil, val.last])
|
410
|
-
|
410
|
+
|
411
411
|
result
|
412
412
|
end
|
413
413
|
|
414
414
|
def _reduce_15(val, _values, result)
|
415
415
|
result = Node.new(val[1], [val.first, val.last])
|
416
|
-
|
416
|
+
|
417
417
|
result
|
418
418
|
end
|
419
419
|
|
420
420
|
def _reduce_16(val, _values, result)
|
421
421
|
result = Node.new(:DESCENDANT_SELECTOR, [val.first, val.last])
|
422
|
-
|
422
|
+
|
423
423
|
result
|
424
424
|
end
|
425
425
|
|
426
426
|
# reduce 17 omitted
|
427
427
|
|
428
428
|
def _reduce_18(val, _values, result)
|
429
|
-
result = Node.new(:CLASS_CONDITION, [unescape_css_identifier(val[1])])
|
429
|
+
result = Node.new(:CLASS_CONDITION, [unescape_css_identifier(val[1])])
|
430
430
|
result
|
431
431
|
end
|
432
432
|
|
433
433
|
# reduce 19 omitted
|
434
434
|
|
435
435
|
def _reduce_20(val, _values, result)
|
436
|
-
result = Node.new(:ELEMENT_NAME, val)
|
436
|
+
result = Node.new(:ELEMENT_NAME, val)
|
437
437
|
result
|
438
438
|
end
|
439
439
|
|
@@ -441,19 +441,19 @@ def _reduce_21(val, _values, result)
|
|
441
441
|
result = Node.new(:ELEMENT_NAME,
|
442
442
|
[[val.first, val.last].compact.join(':')]
|
443
443
|
)
|
444
|
-
|
444
|
+
|
445
445
|
result
|
446
446
|
end
|
447
447
|
|
448
448
|
def _reduce_22(val, _values, result)
|
449
449
|
name = @namespaces.key?('xmlns') ? "xmlns:#{val.first}" : val.first
|
450
450
|
result = Node.new(:ELEMENT_NAME, [name])
|
451
|
-
|
451
|
+
|
452
452
|
result
|
453
453
|
end
|
454
454
|
|
455
455
|
def _reduce_23(val, _values, result)
|
456
|
-
result = val[0]
|
456
|
+
result = val[0]
|
457
457
|
result
|
458
458
|
end
|
459
459
|
|
@@ -463,7 +463,7 @@ def _reduce_25(val, _values, result)
|
|
463
463
|
result = Node.new(:ATTRIBUTE_CONDITION,
|
464
464
|
[val[1]] + (val[2] || [])
|
465
465
|
)
|
466
|
-
|
466
|
+
|
467
467
|
result
|
468
468
|
end
|
469
469
|
|
@@ -471,16 +471,16 @@ def _reduce_26(val, _values, result)
|
|
471
471
|
result = Node.new(:ATTRIBUTE_CONDITION,
|
472
472
|
[val[1]] + (val[2] || [])
|
473
473
|
)
|
474
|
-
|
474
|
+
|
475
475
|
result
|
476
476
|
end
|
477
477
|
|
478
478
|
def _reduce_27(val, _values, result)
|
479
|
-
#
|
479
|
+
# non-standard, from hpricot
|
480
480
|
result = Node.new(:PSEUDO_CLASS,
|
481
481
|
[Node.new(:FUNCTION, ['nth-child(', val[1]])]
|
482
482
|
)
|
483
|
-
|
483
|
+
|
484
484
|
result
|
485
485
|
end
|
486
486
|
|
@@ -488,7 +488,7 @@ def _reduce_28(val, _values, result)
|
|
488
488
|
result = Node.new(:ELEMENT_NAME,
|
489
489
|
[[val.first, val.last].compact.join(':')]
|
490
490
|
)
|
491
|
-
|
491
|
+
|
492
492
|
result
|
493
493
|
end
|
494
494
|
|
@@ -496,52 +496,52 @@ def _reduce_29(val, _values, result)
|
|
496
496
|
# Default namespace is not applied to attributes.
|
497
497
|
# So we don't add prefix "xmlns:" as in namespaced_ident.
|
498
498
|
result = Node.new(:ELEMENT_NAME, [val.first])
|
499
|
-
|
499
|
+
|
500
500
|
result
|
501
501
|
end
|
502
502
|
|
503
503
|
def _reduce_30(val, _values, result)
|
504
504
|
result = Node.new(:FUNCTION, [val.first.strip])
|
505
|
-
|
505
|
+
|
506
506
|
result
|
507
507
|
end
|
508
508
|
|
509
509
|
def _reduce_31(val, _values, result)
|
510
510
|
result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
|
511
|
-
|
511
|
+
|
512
512
|
result
|
513
513
|
end
|
514
514
|
|
515
515
|
def _reduce_32(val, _values, result)
|
516
516
|
result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
|
517
|
-
|
517
|
+
|
518
518
|
result
|
519
519
|
end
|
520
520
|
|
521
521
|
def _reduce_33(val, _values, result)
|
522
522
|
result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
|
523
|
-
|
523
|
+
|
524
524
|
result
|
525
525
|
end
|
526
526
|
|
527
527
|
def _reduce_34(val, _values, result)
|
528
528
|
result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
|
529
|
-
|
529
|
+
|
530
530
|
result
|
531
531
|
end
|
532
532
|
|
533
533
|
def _reduce_35(val, _values, result)
|
534
|
-
result = [val.first, val.last]
|
534
|
+
result = [val.first, val.last]
|
535
535
|
result
|
536
536
|
end
|
537
537
|
|
538
538
|
def _reduce_36(val, _values, result)
|
539
|
-
result = [val.first, val.last]
|
539
|
+
result = [val.first, val.last]
|
540
540
|
result
|
541
541
|
end
|
542
542
|
|
543
543
|
def _reduce_37(val, _values, result)
|
544
|
-
result = [val.first, val.last]
|
544
|
+
result = [val.first, val.last]
|
545
545
|
result
|
546
546
|
end
|
547
547
|
|
@@ -558,13 +558,13 @@ def _reduce_40(val, _values, result)
|
|
558
558
|
when 'n'
|
559
559
|
result = Node.new(:NTH, ['1','n','+','0'])
|
560
560
|
else
|
561
|
-
#
|
561
|
+
# non-standard to support custom functions:
|
562
562
|
# assert_xpath("//a[foo(., @href)]", @parser.parse('a:foo(@href)'))
|
563
563
|
# assert_xpath("//a[foo(., @a, b)]", @parser.parse('a:foo(@a, b)'))
|
564
564
|
# assert_xpath("//a[foo(., a, 10)]", @parser.parse('a:foo(a, 10)'))
|
565
565
|
result = val
|
566
566
|
end
|
567
|
-
|
567
|
+
|
568
568
|
result
|
569
569
|
end
|
570
570
|
|
@@ -574,7 +574,7 @@ def _reduce_41(val, _values, result)
|
|
574
574
|
else
|
575
575
|
raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
|
576
576
|
end
|
577
|
-
|
577
|
+
|
578
578
|
result
|
579
579
|
end
|
580
580
|
|
@@ -590,7 +590,7 @@ def _reduce_42(val, _values, result)
|
|
590
590
|
else
|
591
591
|
raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
|
592
592
|
end
|
593
|
-
|
593
|
+
|
594
594
|
result
|
595
595
|
end
|
596
596
|
|
@@ -610,18 +610,18 @@ def _reduce_43(val, _values, result)
|
|
610
610
|
else
|
611
611
|
raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
|
612
612
|
end
|
613
|
-
|
613
|
+
|
614
614
|
result
|
615
615
|
end
|
616
616
|
|
617
617
|
def _reduce_44(val, _values, result)
|
618
618
|
result = Node.new(:PSEUDO_CLASS, [val[1]])
|
619
|
-
|
619
|
+
|
620
620
|
result
|
621
621
|
end
|
622
622
|
|
623
623
|
def _reduce_45(val, _values, result)
|
624
|
-
result = Node.new(:PSEUDO_CLASS, [val[1]])
|
624
|
+
result = Node.new(:PSEUDO_CLASS, [val[1]])
|
625
625
|
result
|
626
626
|
end
|
627
627
|
|
@@ -631,31 +631,31 @@ end
|
|
631
631
|
|
632
632
|
def _reduce_48(val, _values, result)
|
633
633
|
result = Node.new(:COMBINATOR, val)
|
634
|
-
|
634
|
+
|
635
635
|
result
|
636
636
|
end
|
637
637
|
|
638
638
|
def _reduce_49(val, _values, result)
|
639
639
|
result = Node.new(:COMBINATOR, val)
|
640
|
-
|
640
|
+
|
641
641
|
result
|
642
642
|
end
|
643
643
|
|
644
644
|
def _reduce_50(val, _values, result)
|
645
645
|
result = Node.new(:COMBINATOR, val)
|
646
|
-
|
646
|
+
|
647
647
|
result
|
648
648
|
end
|
649
649
|
|
650
650
|
def _reduce_51(val, _values, result)
|
651
651
|
result = Node.new(:COMBINATOR, val)
|
652
|
-
|
652
|
+
|
653
653
|
result
|
654
654
|
end
|
655
655
|
|
656
656
|
def _reduce_52(val, _values, result)
|
657
657
|
result = Node.new(:COMBINATOR, val)
|
658
|
-
|
658
|
+
|
659
659
|
result
|
660
660
|
end
|
661
661
|
|
@@ -670,65 +670,65 @@ end
|
|
670
670
|
# reduce 57 omitted
|
671
671
|
|
672
672
|
def _reduce_58(val, _values, result)
|
673
|
-
result = Node.new(:ID, [unescape_css_identifier(val.first)])
|
673
|
+
result = Node.new(:ID, [unescape_css_identifier(val.first)])
|
674
674
|
result
|
675
675
|
end
|
676
676
|
|
677
677
|
def _reduce_59(val, _values, result)
|
678
|
-
result = [val.first, unescape_css_identifier(val[1])]
|
678
|
+
result = [val.first, unescape_css_identifier(val[1])]
|
679
679
|
result
|
680
680
|
end
|
681
681
|
|
682
682
|
def _reduce_60(val, _values, result)
|
683
|
-
result = [val.first, unescape_css_string(val[1])]
|
683
|
+
result = [val.first, unescape_css_string(val[1])]
|
684
684
|
result
|
685
685
|
end
|
686
686
|
|
687
687
|
def _reduce_61(val, _values, result)
|
688
|
-
result = [val.first, val[1]]
|
688
|
+
result = [val.first, val[1]]
|
689
689
|
result
|
690
690
|
end
|
691
691
|
|
692
692
|
# reduce 62 omitted
|
693
693
|
|
694
694
|
def _reduce_63(val, _values, result)
|
695
|
-
result = :equal
|
695
|
+
result = :equal
|
696
696
|
result
|
697
697
|
end
|
698
698
|
|
699
699
|
def _reduce_64(val, _values, result)
|
700
|
-
result = :prefix_match
|
700
|
+
result = :prefix_match
|
701
701
|
result
|
702
702
|
end
|
703
703
|
|
704
704
|
def _reduce_65(val, _values, result)
|
705
|
-
result = :suffix_match
|
705
|
+
result = :suffix_match
|
706
706
|
result
|
707
707
|
end
|
708
708
|
|
709
709
|
def _reduce_66(val, _values, result)
|
710
|
-
result = :substring_match
|
710
|
+
result = :substring_match
|
711
711
|
result
|
712
712
|
end
|
713
713
|
|
714
714
|
def _reduce_67(val, _values, result)
|
715
|
-
result = :not_equal
|
715
|
+
result = :not_equal
|
716
716
|
result
|
717
717
|
end
|
718
718
|
|
719
719
|
def _reduce_68(val, _values, result)
|
720
|
-
result = :includes
|
720
|
+
result = :includes
|
721
721
|
result
|
722
722
|
end
|
723
723
|
|
724
724
|
def _reduce_69(val, _values, result)
|
725
|
-
result = :dash_match
|
725
|
+
result = :dash_match
|
726
726
|
result
|
727
727
|
end
|
728
728
|
|
729
729
|
def _reduce_70(val, _values, result)
|
730
730
|
result = Node.new(:NOT, [val[1]])
|
731
|
-
|
731
|
+
|
732
732
|
result
|
733
733
|
end
|
734
734
|
|
@@ -747,5 +747,5 @@ def _reduce_none(val, _values, result)
|
|
747
747
|
end
|
748
748
|
|
749
749
|
end # class Parser
|
750
|
-
|
751
|
-
|
750
|
+
end # module CSS
|
751
|
+
end # module Nokogiri
|