nokogiri 1.10.10 → 1.13.9
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 +5 -0
- data/LICENSE-DEPENDENCIES.md +1173 -884
- data/LICENSE.md +1 -1
- data/README.md +178 -96
- data/bin/nokogiri +63 -50
- data/dependencies.yml +13 -64
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +761 -424
- 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 +119 -0
- data/ext/nokogiri/html4_sax_push_parser.c +95 -0
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +228 -91
- data/ext/nokogiri/nokogiri.h +199 -88
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +17 -17
- data/ext/nokogiri/xml_attribute_decl.c +21 -21
- data/ext/nokogiri/xml_cdata.c +14 -19
- data/ext/nokogiri/xml_comment.c +19 -26
- data/ext/nokogiri/xml_document.c +296 -220
- data/ext/nokogiri/xml_document_fragment.c +12 -16
- data/ext/nokogiri/xml_dtd.c +64 -58
- data/ext/nokogiri/xml_element_content.c +31 -26
- data/ext/nokogiri/xml_element_decl.c +25 -25
- data/ext/nokogiri/xml_encoding_handler.c +43 -18
- data/ext/nokogiri/xml_entity_decl.c +37 -35
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +98 -53
- data/ext/nokogiri/xml_node.c +1065 -653
- data/ext/nokogiri/xml_node_set.c +178 -166
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +277 -175
- 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 +112 -86
- data/ext/nokogiri/xml_sax_push_parser.c +36 -27
- data/ext/nokogiri/xml_schema.c +98 -48
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +14 -18
- data/ext/nokogiri/xml_xpath_context.c +226 -115
- data/ext/nokogiri/xslt_stylesheet.c +265 -173
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +101 -0
- data/gumbo-parser/THANKS +27 -0
- data/gumbo-parser/src/Makefile +34 -0
- data/gumbo-parser/src/README.md +41 -0
- data/gumbo-parser/src/ascii.c +75 -0
- data/gumbo-parser/src/ascii.h +115 -0
- data/gumbo-parser/src/attribute.c +42 -0
- data/gumbo-parser/src/attribute.h +17 -0
- data/gumbo-parser/src/char_ref.c +22225 -0
- data/gumbo-parser/src/char_ref.h +29 -0
- data/gumbo-parser/src/char_ref.rl +2154 -0
- data/gumbo-parser/src/error.c +626 -0
- data/gumbo-parser/src/error.h +148 -0
- data/gumbo-parser/src/foreign_attrs.c +104 -0
- data/gumbo-parser/src/foreign_attrs.gperf +27 -0
- data/gumbo-parser/src/gumbo.h +943 -0
- data/gumbo-parser/src/insertion_mode.h +33 -0
- data/gumbo-parser/src/macros.h +91 -0
- data/gumbo-parser/src/parser.c +4875 -0
- data/gumbo-parser/src/parser.h +41 -0
- data/gumbo-parser/src/replacement.h +33 -0
- data/gumbo-parser/src/string_buffer.c +103 -0
- data/gumbo-parser/src/string_buffer.h +68 -0
- data/gumbo-parser/src/string_piece.c +48 -0
- data/gumbo-parser/src/svg_attrs.c +174 -0
- data/gumbo-parser/src/svg_attrs.gperf +77 -0
- data/gumbo-parser/src/svg_tags.c +137 -0
- data/gumbo-parser/src/svg_tags.gperf +55 -0
- data/gumbo-parser/src/tag.c +222 -0
- data/gumbo-parser/src/tag_lookup.c +382 -0
- data/gumbo-parser/src/tag_lookup.gperf +169 -0
- data/gumbo-parser/src/tag_lookup.h +13 -0
- data/gumbo-parser/src/token_buffer.c +79 -0
- data/gumbo-parser/src/token_buffer.h +71 -0
- data/gumbo-parser/src/token_type.h +17 -0
- data/gumbo-parser/src/tokenizer.c +3463 -0
- data/gumbo-parser/src/tokenizer.h +112 -0
- data/gumbo-parser/src/tokenizer_states.h +339 -0
- data/gumbo-parser/src/utf8.c +245 -0
- data/gumbo-parser/src/utf8.h +164 -0
- data/gumbo-parser/src/util.c +68 -0
- data/gumbo-parser/src/util.h +30 -0
- data/gumbo-parser/src/vector.c +111 -0
- data/gumbo-parser/src/vector.h +45 -0
- data/lib/nokogiri/class_resolver.rb +67 -0
- data/lib/nokogiri/css/node.rb +10 -8
- data/lib/nokogiri/css/parser.rb +397 -377
- data/lib/nokogiri/css/parser.y +250 -245
- data/lib/nokogiri/css/parser_extras.rb +54 -49
- data/lib/nokogiri/css/syntax_error.rb +3 -1
- data/lib/nokogiri/css/tokenizer.rb +5 -3
- data/lib/nokogiri/css/tokenizer.rex +3 -2
- data/lib/nokogiri/css/xpath_visitor.rb +218 -91
- data/lib/nokogiri/css.rb +50 -17
- data/lib/nokogiri/decorators/slop.rb +9 -7
- data/lib/nokogiri/extension.rb +31 -0
- data/lib/nokogiri/gumbo.rb +15 -0
- data/lib/nokogiri/html.rb +38 -27
- data/lib/nokogiri/{html → html4}/builder.rb +4 -2
- data/lib/nokogiri/{html → html4}/document.rb +103 -105
- data/lib/nokogiri/html4/document_fragment.rb +54 -0
- data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
- data/lib/nokogiri/html4/element_description_defaults.rb +578 -0
- data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
- data/lib/nokogiri/{html → html4}/sax/parser.rb +17 -16
- data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
- data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
- data/lib/nokogiri/html4.rb +46 -0
- data/lib/nokogiri/html5/document.rb +91 -0
- data/lib/nokogiri/html5/document_fragment.rb +83 -0
- data/lib/nokogiri/html5/node.rb +100 -0
- data/lib/nokogiri/html5.rb +478 -0
- data/lib/nokogiri/jruby/dependencies.rb +21 -0
- data/lib/nokogiri/syntax_error.rb +2 -0
- data/lib/nokogiri/version/constant.rb +6 -0
- data/lib/nokogiri/version/info.rb +222 -0
- data/lib/nokogiri/version.rb +3 -108
- data/lib/nokogiri/xml/attr.rb +6 -3
- data/lib/nokogiri/xml/attribute_decl.rb +3 -1
- data/lib/nokogiri/xml/builder.rb +74 -33
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +2 -0
- data/lib/nokogiri/xml/document.rb +224 -86
- data/lib/nokogiri/xml/document_fragment.rb +46 -44
- data/lib/nokogiri/xml/dtd.rb +4 -2
- data/lib/nokogiri/xml/element_content.rb +2 -0
- data/lib/nokogiri/xml/element_decl.rb +3 -1
- data/lib/nokogiri/xml/entity_decl.rb +4 -2
- data/lib/nokogiri/xml/entity_reference.rb +2 -0
- data/lib/nokogiri/xml/namespace.rb +3 -0
- data/lib/nokogiri/xml/node/save_options.rb +10 -5
- data/lib/nokogiri/xml/node.rb +884 -378
- data/lib/nokogiri/xml/node_set.rb +51 -54
- data/lib/nokogiri/xml/notation.rb +13 -0
- data/lib/nokogiri/xml/parse_options.rb +22 -8
- data/lib/nokogiri/xml/pp/character_data.rb +9 -6
- data/lib/nokogiri/xml/pp/node.rb +25 -26
- data/lib/nokogiri/xml/pp.rb +4 -2
- data/lib/nokogiri/xml/processing_instruction.rb +3 -1
- data/lib/nokogiri/xml/reader.rb +21 -28
- data/lib/nokogiri/xml/relax_ng.rb +8 -2
- data/lib/nokogiri/xml/sax/document.rb +45 -49
- data/lib/nokogiri/xml/sax/parser.rb +38 -34
- data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
- data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
- data/lib/nokogiri/xml/sax.rb +6 -4
- data/lib/nokogiri/xml/schema.rb +19 -9
- data/lib/nokogiri/xml/searchable.rb +112 -72
- data/lib/nokogiri/xml/syntax_error.rb +6 -4
- data/lib/nokogiri/xml/text.rb +2 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
- data/lib/nokogiri/xml/xpath.rb +15 -4
- data/lib/nokogiri/xml/xpath_context.rb +3 -3
- data/lib/nokogiri/xml.rb +38 -37
- data/lib/nokogiri/xslt/stylesheet.rb +3 -1
- data/lib/nokogiri/xslt.rb +29 -20
- data/lib/nokogiri.rb +49 -65
- data/lib/xsd/xmlparser/nokogiri.rb +26 -24
- 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/{0004-libxml2.la-is-in-top_builddir.patch → 0003-libxml2.la-is-in-top_builddir.patch} +1 -1
- data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
- data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
- data/patches/libxslt/0001-update-automake-files-for-arm64.patch +3037 -0
- data/ports/archives/libxml2-2.10.3.tar.xz +0 -0
- data/ports/archives/libxslt-1.1.37.tar.xz +0 -0
- metadata +189 -142
- 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/document_fragment.rb +0 -49
- data/lib/nokogiri/html/element_description_defaults.rb +0 -671
- 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/0005-Fix-infinite-loop-in-xmlStringLenDecodeEntities.patch +0 -32
- data/ports/archives/libxml2-2.9.10.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
data/ext/nokogiri/xml_schema.c
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
2
|
|
3
|
-
|
3
|
+
VALUE cNokogiriXmlSchema;
|
4
|
+
|
5
|
+
static void
|
6
|
+
dealloc(xmlSchemaPtr schema)
|
4
7
|
{
|
5
8
|
NOKOGIRI_DEBUG_START(schema);
|
6
9
|
xmlSchemaFree(schema);
|
@@ -13,7 +16,8 @@ static void dealloc(xmlSchemaPtr schema)
|
|
13
16
|
*
|
14
17
|
* Validate a Nokogiri::XML::Document against this Schema.
|
15
18
|
*/
|
16
|
-
static VALUE
|
19
|
+
static VALUE
|
20
|
+
validate_document(VALUE self, VALUE document)
|
17
21
|
{
|
18
22
|
xmlDocPtr doc;
|
19
23
|
xmlSchemaPtr schema;
|
@@ -21,13 +25,13 @@ static VALUE validate_document(VALUE self, VALUE document)
|
|
21
25
|
VALUE errors;
|
22
26
|
|
23
27
|
Data_Get_Struct(self, xmlSchema, schema);
|
24
|
-
|
28
|
+
Noko_Node_Get_Struct(document, xmlDoc, doc);
|
25
29
|
|
26
30
|
errors = rb_ary_new();
|
27
31
|
|
28
32
|
valid_ctxt = xmlSchemaNewValidCtxt(schema);
|
29
33
|
|
30
|
-
if(NULL == valid_ctxt) {
|
34
|
+
if (NULL == valid_ctxt) {
|
31
35
|
/* we have a problem */
|
32
36
|
rb_raise(rb_eRuntimeError, "Could not create a validation context");
|
33
37
|
}
|
@@ -53,7 +57,8 @@ static VALUE validate_document(VALUE self, VALUE document)
|
|
53
57
|
*
|
54
58
|
* Validate a file against this Schema.
|
55
59
|
*/
|
56
|
-
static VALUE
|
60
|
+
static VALUE
|
61
|
+
validate_file(VALUE self, VALUE rb_filename)
|
57
62
|
{
|
58
63
|
xmlSchemaPtr schema;
|
59
64
|
xmlSchemaValidCtxtPtr valid_ctxt;
|
@@ -61,13 +66,13 @@ static VALUE validate_file(VALUE self, VALUE rb_filename)
|
|
61
66
|
VALUE errors;
|
62
67
|
|
63
68
|
Data_Get_Struct(self, xmlSchema, schema);
|
64
|
-
filename = (const char*)StringValueCStr(rb_filename) ;
|
69
|
+
filename = (const char *)StringValueCStr(rb_filename) ;
|
65
70
|
|
66
71
|
errors = rb_ary_new();
|
67
72
|
|
68
73
|
valid_ctxt = xmlSchemaNewValidCtxt(schema);
|
69
74
|
|
70
|
-
if(NULL == valid_ctxt) {
|
75
|
+
if (NULL == valid_ctxt) {
|
71
76
|
/* we have a problem */
|
72
77
|
rb_raise(rb_eRuntimeError, "Could not create a validation context");
|
73
78
|
}
|
@@ -93,15 +98,28 @@ static VALUE validate_file(VALUE self, VALUE rb_filename)
|
|
93
98
|
*
|
94
99
|
* Create a new Schema from the contents of +string+
|
95
100
|
*/
|
96
|
-
static VALUE
|
101
|
+
static VALUE
|
102
|
+
read_memory(int argc, VALUE *argv, VALUE klass)
|
97
103
|
{
|
104
|
+
VALUE content;
|
105
|
+
VALUE parse_options;
|
106
|
+
int parse_options_int;
|
107
|
+
xmlSchemaParserCtxtPtr ctx;
|
98
108
|
xmlSchemaPtr schema;
|
99
|
-
|
100
|
-
(const char *)StringValuePtr(content),
|
101
|
-
(int)RSTRING_LEN(content)
|
102
|
-
);
|
109
|
+
VALUE errors;
|
103
110
|
VALUE rb_schema;
|
104
|
-
|
111
|
+
int scanned_args = 0;
|
112
|
+
xmlExternalEntityLoader old_loader = 0;
|
113
|
+
|
114
|
+
scanned_args = rb_scan_args(argc, argv, "11", &content, &parse_options);
|
115
|
+
if (scanned_args == 1) {
|
116
|
+
parse_options = rb_const_get_at(rb_const_get_at(mNokogiriXml, rb_intern("ParseOptions")), rb_intern("DEFAULT_SCHEMA"));
|
117
|
+
}
|
118
|
+
parse_options_int = (int)NUM2INT(rb_funcall(parse_options, rb_intern("to_i"), 0));
|
119
|
+
|
120
|
+
ctx = xmlSchemaNewMemParserCtxt((const char *)StringValuePtr(content), (int)RSTRING_LEN(content));
|
121
|
+
|
122
|
+
errors = rb_ary_new();
|
105
123
|
xmlSetStructuredErrorFunc((void *)errors, Nokogiri_error_array_pusher);
|
106
124
|
|
107
125
|
#ifdef HAVE_XMLSCHEMASETPARSERSTRUCTUREDERRORS
|
@@ -112,23 +130,34 @@ static VALUE read_memory(VALUE klass, VALUE content)
|
|
112
130
|
);
|
113
131
|
#endif
|
114
132
|
|
115
|
-
|
133
|
+
if (parse_options_int & XML_PARSE_NONET) {
|
134
|
+
old_loader = xmlGetExternalEntityLoader();
|
135
|
+
xmlSetExternalEntityLoader(xmlNoNetExternalEntityLoader);
|
136
|
+
}
|
137
|
+
|
138
|
+
schema = xmlSchemaParse(ctx);
|
139
|
+
|
140
|
+
if (old_loader) {
|
141
|
+
xmlSetExternalEntityLoader(old_loader);
|
142
|
+
}
|
116
143
|
|
117
144
|
xmlSetStructuredErrorFunc(NULL, NULL);
|
118
145
|
xmlSchemaFreeParserCtxt(ctx);
|
119
146
|
|
120
|
-
if(NULL == schema) {
|
147
|
+
if (NULL == schema) {
|
121
148
|
xmlErrorPtr error = xmlGetLastError();
|
122
|
-
if(error)
|
149
|
+
if (error) {
|
123
150
|
Nokogiri_error_raise(NULL, error);
|
124
|
-
else
|
151
|
+
} else {
|
125
152
|
rb_raise(rb_eRuntimeError, "Could not parse document");
|
153
|
+
}
|
126
154
|
|
127
155
|
return Qnil;
|
128
156
|
}
|
129
157
|
|
130
158
|
rb_schema = Data_Wrap_Struct(klass, 0, dealloc, schema);
|
131
159
|
rb_iv_set(rb_schema, "@errors", errors);
|
160
|
+
rb_iv_set(rb_schema, "@parse_options", parse_options);
|
132
161
|
|
133
162
|
return rb_schema;
|
134
163
|
}
|
@@ -138,24 +167,25 @@ static VALUE read_memory(VALUE klass, VALUE content)
|
|
138
167
|
* out from under the VALUE pointer. This function checks to see if any of
|
139
168
|
* those nodes have been exposed to Ruby, and if so we should raise an exception.
|
140
169
|
*/
|
141
|
-
static int
|
170
|
+
static int
|
171
|
+
has_blank_nodes_p(VALUE cache)
|
142
172
|
{
|
143
|
-
|
173
|
+
long i;
|
144
174
|
|
145
|
-
|
146
|
-
|
147
|
-
|
175
|
+
if (NIL_P(cache)) {
|
176
|
+
return 0;
|
177
|
+
}
|
148
178
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
}
|
179
|
+
for (i = 0; i < RARRAY_LEN(cache); i++) {
|
180
|
+
xmlNodePtr node;
|
181
|
+
VALUE element = rb_ary_entry(cache, i);
|
182
|
+
Noko_Node_Get_Struct(element, xmlNode, node);
|
183
|
+
if (xmlIsBlankNode(node)) {
|
184
|
+
return 1;
|
156
185
|
}
|
186
|
+
}
|
157
187
|
|
158
|
-
|
188
|
+
return 0;
|
159
189
|
}
|
160
190
|
|
161
191
|
/*
|
@@ -164,18 +194,29 @@ static int has_blank_nodes_p(VALUE cache)
|
|
164
194
|
*
|
165
195
|
* Create a new Schema from the Nokogiri::XML::Document +doc+
|
166
196
|
*/
|
167
|
-
static VALUE
|
197
|
+
static VALUE
|
198
|
+
from_document(int argc, VALUE *argv, VALUE klass)
|
168
199
|
{
|
200
|
+
VALUE document;
|
201
|
+
VALUE parse_options;
|
202
|
+
int parse_options_int;
|
169
203
|
xmlDocPtr doc;
|
170
204
|
xmlSchemaParserCtxtPtr ctx;
|
171
205
|
xmlSchemaPtr schema;
|
172
206
|
VALUE errors;
|
173
207
|
VALUE rb_schema;
|
208
|
+
int scanned_args = 0;
|
209
|
+
xmlExternalEntityLoader old_loader = 0;
|
210
|
+
|
211
|
+
scanned_args = rb_scan_args(argc, argv, "11", &document, &parse_options);
|
174
212
|
|
175
|
-
|
213
|
+
Noko_Node_Get_Struct(document, xmlDoc, doc);
|
214
|
+
doc = doc->doc; /* In case someone passes us a node. ugh. */
|
176
215
|
|
177
|
-
|
178
|
-
|
216
|
+
if (scanned_args == 1) {
|
217
|
+
parse_options = rb_const_get_at(rb_const_get_at(mNokogiriXml, rb_intern("ParseOptions")), rb_intern("DEFAULT_SCHEMA"));
|
218
|
+
}
|
219
|
+
parse_options_int = (int)NUM2INT(rb_funcall(parse_options, rb_intern("to_i"), 0));
|
179
220
|
|
180
221
|
if (has_blank_nodes_p(DOC_NODE_CACHE(doc))) {
|
181
222
|
rb_raise(rb_eArgError, "Creating a schema from a document that has blank nodes exposed to Ruby is dangerous");
|
@@ -194,41 +235,50 @@ static VALUE from_document(VALUE klass, VALUE document)
|
|
194
235
|
);
|
195
236
|
#endif
|
196
237
|
|
238
|
+
if (parse_options_int & XML_PARSE_NONET) {
|
239
|
+
old_loader = xmlGetExternalEntityLoader();
|
240
|
+
xmlSetExternalEntityLoader(xmlNoNetExternalEntityLoader);
|
241
|
+
}
|
242
|
+
|
197
243
|
schema = xmlSchemaParse(ctx);
|
198
244
|
|
245
|
+
if (old_loader) {
|
246
|
+
xmlSetExternalEntityLoader(old_loader);
|
247
|
+
}
|
248
|
+
|
199
249
|
xmlSetStructuredErrorFunc(NULL, NULL);
|
200
250
|
xmlSchemaFreeParserCtxt(ctx);
|
201
251
|
|
202
|
-
if(NULL == schema) {
|
252
|
+
if (NULL == schema) {
|
203
253
|
xmlErrorPtr error = xmlGetLastError();
|
204
|
-
if(error)
|
254
|
+
if (error) {
|
205
255
|
Nokogiri_error_raise(NULL, error);
|
206
|
-
else
|
256
|
+
} else {
|
207
257
|
rb_raise(rb_eRuntimeError, "Could not parse document");
|
258
|
+
}
|
208
259
|
|
209
260
|
return Qnil;
|
210
261
|
}
|
211
262
|
|
212
263
|
rb_schema = Data_Wrap_Struct(klass, 0, dealloc, schema);
|
213
264
|
rb_iv_set(rb_schema, "@errors", errors);
|
265
|
+
rb_iv_set(rb_schema, "@parse_options", parse_options);
|
214
266
|
|
215
267
|
return rb_schema;
|
216
268
|
|
217
269
|
return Qnil;
|
218
270
|
}
|
219
271
|
|
220
|
-
|
221
|
-
|
272
|
+
void
|
273
|
+
noko_init_xml_schema()
|
222
274
|
{
|
223
|
-
|
224
|
-
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
225
|
-
VALUE klass = rb_define_class_under(xml, "Schema", rb_cObject);
|
275
|
+
cNokogiriXmlSchema = rb_define_class_under(mNokogiriXml, "Schema", rb_cObject);
|
226
276
|
|
227
|
-
cNokogiriXmlSchema
|
277
|
+
rb_undef_alloc_func(cNokogiriXmlSchema);
|
228
278
|
|
229
|
-
rb_define_singleton_method(
|
230
|
-
rb_define_singleton_method(
|
279
|
+
rb_define_singleton_method(cNokogiriXmlSchema, "read_memory", read_memory, -1);
|
280
|
+
rb_define_singleton_method(cNokogiriXmlSchema, "from_document", from_document, -1);
|
231
281
|
|
232
|
-
rb_define_private_method(
|
233
|
-
rb_define_private_method(
|
282
|
+
rb_define_private_method(cNokogiriXmlSchema, "validate_document", validate_document, 1);
|
283
|
+
rb_define_private_method(cNokogiriXmlSchema, "validate_file", validate_file, 1);
|
234
284
|
}
|
@@ -1,38 +1,64 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
2
|
|
3
|
-
|
3
|
+
VALUE cNokogiriXmlSyntaxError;
|
4
|
+
|
5
|
+
void
|
6
|
+
Nokogiri_structured_error_func_save(libxmlStructuredErrorHandlerState *handler_state)
|
7
|
+
{
|
8
|
+
/* this method is tightly coupled to the implementation of xmlSetStructuredErrorFunc */
|
9
|
+
handler_state->user_data = xmlStructuredErrorContext;
|
10
|
+
handler_state->handler = xmlStructuredError;
|
11
|
+
}
|
12
|
+
|
13
|
+
void
|
14
|
+
Nokogiri_structured_error_func_save_and_set(libxmlStructuredErrorHandlerState *handler_state,
|
15
|
+
void *user_data,
|
16
|
+
xmlStructuredErrorFunc handler)
|
17
|
+
{
|
18
|
+
Nokogiri_structured_error_func_save(handler_state);
|
19
|
+
xmlSetStructuredErrorFunc(user_data, handler);
|
20
|
+
}
|
21
|
+
|
22
|
+
void
|
23
|
+
Nokogiri_structured_error_func_restore(libxmlStructuredErrorHandlerState *handler_state)
|
24
|
+
{
|
25
|
+
xmlSetStructuredErrorFunc(handler_state->user_data, handler_state->handler);
|
26
|
+
}
|
27
|
+
|
28
|
+
void
|
29
|
+
Nokogiri_error_array_pusher(void *ctx, xmlErrorPtr error)
|
4
30
|
{
|
5
31
|
VALUE list = (VALUE)ctx;
|
6
32
|
Check_Type(list, T_ARRAY);
|
7
33
|
rb_ary_push(list, Nokogiri_wrap_xml_syntax_error(error));
|
8
34
|
}
|
9
35
|
|
10
|
-
void
|
36
|
+
void
|
37
|
+
Nokogiri_error_raise(void *ctx, xmlErrorPtr error)
|
11
38
|
{
|
12
39
|
rb_exc_raise(Nokogiri_wrap_xml_syntax_error(error));
|
13
40
|
}
|
14
41
|
|
15
|
-
VALUE
|
42
|
+
VALUE
|
43
|
+
Nokogiri_wrap_xml_syntax_error(xmlErrorPtr error)
|
16
44
|
{
|
17
45
|
VALUE msg, e, klass;
|
18
46
|
|
19
47
|
klass = cNokogiriXmlSyntaxError;
|
20
48
|
|
21
49
|
if (error && error->domain == XML_FROM_XPATH) {
|
22
|
-
|
23
|
-
klass = rb_const_get(xpath, rb_intern("SyntaxError"));
|
50
|
+
klass = cNokogiriXmlXpathSyntaxError;
|
24
51
|
}
|
25
52
|
|
26
53
|
msg = (error && error->message) ? NOKOGIRI_STR_NEW2(error->message) : Qnil;
|
27
54
|
|
28
55
|
e = rb_class_new_instance(
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
56
|
+
1,
|
57
|
+
&msg,
|
58
|
+
klass
|
59
|
+
);
|
33
60
|
|
34
|
-
if (error)
|
35
|
-
{
|
61
|
+
if (error) {
|
36
62
|
rb_iv_set(e, "@domain", INT2NUM(error->domain));
|
37
63
|
rb_iv_set(e, "@code", INT2NUM(error->code));
|
38
64
|
rb_iv_set(e, "@level", INT2NUM((short)error->level));
|
@@ -48,17 +74,12 @@ VALUE Nokogiri_wrap_xml_syntax_error(xmlErrorPtr error)
|
|
48
74
|
return e;
|
49
75
|
}
|
50
76
|
|
51
|
-
|
52
|
-
|
77
|
+
void
|
78
|
+
noko_init_xml_syntax_error()
|
53
79
|
{
|
54
|
-
|
55
|
-
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
56
|
-
|
80
|
+
assert(cNokogiriSyntaxError);
|
57
81
|
/*
|
58
82
|
* The XML::SyntaxError is raised on parse errors
|
59
83
|
*/
|
60
|
-
|
61
|
-
VALUE klass = rb_define_class_under(xml, "SyntaxError", syntax_error_mommy);
|
62
|
-
cNokogiriXmlSyntaxError = klass;
|
63
|
-
|
84
|
+
cNokogiriXmlSyntaxError = rb_define_class_under(mNokogiriXml, "SyntaxError", cNokogiriSyntaxError);
|
64
85
|
}
|
data/ext/nokogiri/xml_text.c
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
|
+
|
3
|
+
VALUE cNokogiriXmlText ;
|
2
4
|
|
3
5
|
/*
|
4
6
|
* call-seq:
|
@@ -6,7 +8,8 @@
|
|
6
8
|
*
|
7
9
|
* Create a new Text element on the +document+ with +content+
|
8
10
|
*/
|
9
|
-
static VALUE
|
11
|
+
static VALUE
|
12
|
+
new (int argc, VALUE *argv, VALUE klass)
|
10
13
|
{
|
11
14
|
xmlDocPtr doc;
|
12
15
|
xmlNodePtr node;
|
@@ -17,36 +20,29 @@ static VALUE new(int argc, VALUE *argv, VALUE klass)
|
|
17
20
|
|
18
21
|
rb_scan_args(argc, argv, "2*", &string, &document, &rest);
|
19
22
|
|
20
|
-
|
23
|
+
Noko_Node_Get_Struct(document, xmlDoc, doc);
|
21
24
|
|
22
25
|
node = xmlNewText((xmlChar *)StringValueCStr(string));
|
23
26
|
node->doc = doc->doc;
|
24
27
|
|
25
|
-
|
28
|
+
noko_xml_document_pin_node(node);
|
26
29
|
|
27
|
-
rb_node =
|
30
|
+
rb_node = noko_xml_node_wrap(klass, node) ;
|
28
31
|
rb_obj_call_init(rb_node, argc, argv);
|
29
32
|
|
30
|
-
if(rb_block_given_p()) rb_yield(rb_node);
|
33
|
+
if (rb_block_given_p()) { rb_yield(rb_node); }
|
31
34
|
|
32
35
|
return rb_node;
|
33
36
|
}
|
34
37
|
|
35
|
-
|
36
|
-
|
38
|
+
void
|
39
|
+
noko_init_xml_text()
|
37
40
|
{
|
38
|
-
|
39
|
-
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
40
|
-
/* */
|
41
|
-
VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
|
42
|
-
VALUE char_data = rb_define_class_under(xml, "CharacterData", node);
|
43
|
-
|
41
|
+
assert(cNokogiriXmlCharacterData);
|
44
42
|
/*
|
45
43
|
* Wraps Text nodes.
|
46
44
|
*/
|
47
|
-
|
48
|
-
|
49
|
-
cNokogiriXmlText = klass;
|
45
|
+
cNokogiriXmlText = rb_define_class_under(mNokogiriXml, "Text", cNokogiriXmlCharacterData);
|
50
46
|
|
51
|
-
rb_define_singleton_method(
|
47
|
+
rb_define_singleton_method(cNokogiriXmlText, "new", new, -1);
|
52
48
|
}
|