nokogiri 1.10.7 → 1.16.0
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 +42 -0
- data/LICENSE-DEPENDENCIES.md +1632 -1022
- data/LICENSE.md +1 -1
- data/README.md +188 -96
- data/bin/nokogiri +63 -50
- data/dependencies.yml +34 -66
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +862 -421
- data/ext/nokogiri/gumbo.c +594 -0
- data/ext/nokogiri/html4_document.c +165 -0
- data/ext/nokogiri/html4_element_description.c +299 -0
- data/ext/nokogiri/html4_entity_lookup.c +37 -0
- data/ext/nokogiri/html4_sax_parser_context.c +108 -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 +251 -105
- data/ext/nokogiri/nokogiri.h +222 -90
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +17 -17
- data/ext/nokogiri/xml_attribute_decl.c +22 -22
- data/ext/nokogiri/xml_cdata.c +39 -31
- data/ext/nokogiri/xml_comment.c +20 -27
- data/ext/nokogiri/xml_document.c +408 -243
- data/ext/nokogiri/xml_document_fragment.c +13 -17
- data/ext/nokogiri/xml_dtd.c +64 -58
- data/ext/nokogiri/xml_element_content.c +63 -55
- data/ext/nokogiri/xml_element_decl.c +31 -31
- data/ext/nokogiri/xml_encoding_handler.c +54 -21
- data/ext/nokogiri/xml_entity_decl.c +37 -35
- data/ext/nokogiri/xml_entity_reference.c +17 -19
- data/ext/nokogiri/xml_namespace.c +131 -61
- data/ext/nokogiri/xml_node.c +1343 -674
- data/ext/nokogiri/xml_node_set.c +246 -216
- data/ext/nokogiri/xml_processing_instruction.c +18 -20
- data/ext/nokogiri/xml_reader.c +305 -213
- data/ext/nokogiri/xml_relax_ng.c +87 -78
- data/ext/nokogiri/xml_sax_parser.c +149 -124
- data/ext/nokogiri/xml_sax_parser_context.c +149 -103
- data/ext/nokogiri/xml_sax_push_parser.c +65 -37
- data/ext/nokogiri/xml_schema.c +138 -82
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +35 -26
- data/ext/nokogiri/xml_xpath_context.c +363 -178
- data/ext/nokogiri/xslt_stylesheet.c +335 -189
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +126 -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 +630 -0
- data/gumbo-parser/src/error.h +148 -0
- data/gumbo-parser/src/foreign_attrs.c +103 -0
- data/gumbo-parser/src/foreign_attrs.gperf +27 -0
- data/gumbo-parser/src/insertion_mode.h +33 -0
- data/gumbo-parser/src/macros.h +91 -0
- data/gumbo-parser/src/nokogiri_gumbo.h +944 -0
- data/gumbo-parser/src/parser.c +4891 -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 +223 -0
- data/gumbo-parser/src/tag_lookup.c +382 -0
- data/gumbo-parser/src/tag_lookup.gperf +170 -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 +3464 -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 +66 -0
- data/gumbo-parser/src/util.h +34 -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 +205 -96
- data/lib/nokogiri/css.rb +56 -17
- data/lib/nokogiri/decorators/slop.rb +9 -7
- data/lib/nokogiri/encoding_handler.rb +57 -0
- data/lib/nokogiri/extension.rb +32 -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/html4/document.rb +214 -0
- 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 +2040 -0
- data/lib/nokogiri/html4/encoding_reader.rb +121 -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 +47 -0
- data/lib/nokogiri/html5/document.rb +168 -0
- data/lib/nokogiri/html5/document_fragment.rb +90 -0
- data/lib/nokogiri/html5/node.rb +103 -0
- data/lib/nokogiri/html5.rb +326 -0
- data/lib/nokogiri/jruby/dependencies.rb +3 -0
- data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
- data/lib/nokogiri/syntax_error.rb +2 -0
- data/lib/nokogiri/version/constant.rb +6 -0
- data/lib/nokogiri/version/info.rb +224 -0
- data/lib/nokogiri/version.rb +3 -108
- data/lib/nokogiri/xml/attr.rb +55 -3
- data/lib/nokogiri/xml/attribute_decl.rb +6 -2
- data/lib/nokogiri/xml/builder.rb +75 -34
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +2 -0
- data/lib/nokogiri/xml/document.rb +312 -127
- data/lib/nokogiri/xml/document_fragment.rb +93 -48
- data/lib/nokogiri/xml/dtd.rb +4 -2
- data/lib/nokogiri/xml/element_content.rb +12 -2
- data/lib/nokogiri/xml/element_decl.rb +6 -2
- data/lib/nokogiri/xml/entity_decl.rb +7 -3
- data/lib/nokogiri/xml/entity_reference.rb +2 -0
- data/lib/nokogiri/xml/namespace.rb +44 -0
- data/lib/nokogiri/xml/node/save_options.rb +23 -8
- data/lib/nokogiri/xml/node.rb +1096 -419
- data/lib/nokogiri/xml/node_set.rb +137 -61
- data/lib/nokogiri/xml/notation.rb +13 -0
- data/lib/nokogiri/xml/parse_options.rb +145 -52
- data/lib/nokogiri/xml/pp/character_data.rb +9 -6
- data/lib/nokogiri/xml/pp/node.rb +42 -30
- data/lib/nokogiri/xml/pp.rb +4 -2
- data/lib/nokogiri/xml/processing_instruction.rb +4 -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 +39 -36
- 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 +120 -72
- data/lib/nokogiri/xml/syntax_error.rb +7 -5
- 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 +39 -38
- data/lib/nokogiri/xslt/stylesheet.rb +3 -1
- data/lib/nokogiri/xslt.rb +101 -22
- data/lib/nokogiri.rb +59 -75
- data/lib/xsd/xmlparser/nokogiri.rb +29 -25
- data/patches/libxml2/{0004-libxml2.la-is-in-top_builddir.patch → 0003-libxml2.la-is-in-top_builddir.patch} +1 -1
- data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
- data/patches/libxml2/0010-update-config.guess-and-config.sub-for-libxml2.patch +224 -0
- data/patches/libxml2/0011-rip-out-libxml2-s-libc_single_threaded-support.patch +30 -0
- data/patches/libxslt/0001-update-config.guess-and-config.sub-for-libxslt.patch +224 -0
- data/ports/archives/libxml2-2.12.3.tar.xz +0 -0
- data/ports/archives/libxslt-1.1.39.tar.xz +0 -0
- metadata +121 -291
- 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.rb +0 -335
- 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/ports/archives/libxml2-2.9.10.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.34.tar.gz +0 -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/ext/nokogiri/xml_schema.c
CHANGED
@@ -1,33 +1,44 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
2
|
|
3
|
-
|
3
|
+
VALUE cNokogiriXmlSchema;
|
4
|
+
|
5
|
+
static void
|
6
|
+
xml_schema_deallocate(void *data)
|
4
7
|
{
|
5
|
-
|
8
|
+
xmlSchemaPtr schema = data;
|
6
9
|
xmlSchemaFree(schema);
|
7
|
-
NOKOGIRI_DEBUG_END(schema);
|
8
10
|
}
|
9
11
|
|
12
|
+
static const rb_data_type_t xml_schema_type = {
|
13
|
+
.wrap_struct_name = "Nokogiri::XML::Schema",
|
14
|
+
.function = {
|
15
|
+
.dfree = xml_schema_deallocate,
|
16
|
+
},
|
17
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
|
18
|
+
};
|
19
|
+
|
10
20
|
/*
|
11
21
|
* call-seq:
|
12
22
|
* validate_document(document)
|
13
23
|
*
|
14
24
|
* Validate a Nokogiri::XML::Document against this Schema.
|
15
25
|
*/
|
16
|
-
static VALUE
|
26
|
+
static VALUE
|
27
|
+
validate_document(VALUE self, VALUE document)
|
17
28
|
{
|
18
29
|
xmlDocPtr doc;
|
19
30
|
xmlSchemaPtr schema;
|
20
31
|
xmlSchemaValidCtxtPtr valid_ctxt;
|
21
32
|
VALUE errors;
|
22
33
|
|
23
|
-
|
24
|
-
|
34
|
+
TypedData_Get_Struct(self, xmlSchema, &xml_schema_type, schema);
|
35
|
+
doc = noko_xml_document_unwrap(document);
|
25
36
|
|
26
37
|
errors = rb_ary_new();
|
27
38
|
|
28
39
|
valid_ctxt = xmlSchemaNewValidCtxt(schema);
|
29
40
|
|
30
|
-
if(NULL == valid_ctxt) {
|
41
|
+
if (NULL == valid_ctxt) {
|
31
42
|
/* we have a problem */
|
32
43
|
rb_raise(rb_eRuntimeError, "Could not create a validation context");
|
33
44
|
}
|
@@ -53,21 +64,22 @@ static VALUE validate_document(VALUE self, VALUE document)
|
|
53
64
|
*
|
54
65
|
* Validate a file against this Schema.
|
55
66
|
*/
|
56
|
-
static VALUE
|
67
|
+
static VALUE
|
68
|
+
validate_file(VALUE self, VALUE rb_filename)
|
57
69
|
{
|
58
70
|
xmlSchemaPtr schema;
|
59
71
|
xmlSchemaValidCtxtPtr valid_ctxt;
|
60
72
|
const char *filename ;
|
61
73
|
VALUE errors;
|
62
74
|
|
63
|
-
|
64
|
-
filename = (const char*)StringValueCStr(rb_filename) ;
|
75
|
+
TypedData_Get_Struct(self, xmlSchema, &xml_schema_type, schema);
|
76
|
+
filename = (const char *)StringValueCStr(rb_filename) ;
|
65
77
|
|
66
78
|
errors = rb_ary_new();
|
67
79
|
|
68
80
|
valid_ctxt = xmlSchemaNewValidCtxt(schema);
|
69
81
|
|
70
|
-
if(NULL == valid_ctxt) {
|
82
|
+
if (NULL == valid_ctxt) {
|
71
83
|
/* we have a problem */
|
72
84
|
rb_raise(rb_eRuntimeError, "Could not create a validation context");
|
73
85
|
}
|
@@ -87,119 +99,163 @@ static VALUE validate_file(VALUE self, VALUE rb_filename)
|
|
87
99
|
return errors;
|
88
100
|
}
|
89
101
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
static VALUE read_memory(VALUE klass, VALUE content)
|
102
|
+
static VALUE
|
103
|
+
xml_schema_parse_schema(
|
104
|
+
VALUE klass,
|
105
|
+
xmlSchemaParserCtxtPtr c_parser_context,
|
106
|
+
VALUE rb_parse_options
|
107
|
+
)
|
97
108
|
{
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
);
|
109
|
+
VALUE rb_errors;
|
110
|
+
int parse_options_int;
|
111
|
+
xmlSchemaPtr c_schema;
|
112
|
+
xmlExternalEntityLoader old_loader = 0;
|
103
113
|
VALUE rb_schema;
|
104
|
-
|
105
|
-
|
114
|
+
|
115
|
+
if (NIL_P(rb_parse_options)) {
|
116
|
+
rb_parse_options = rb_const_get_at(
|
117
|
+
rb_const_get_at(mNokogiriXml, rb_intern("ParseOptions")),
|
118
|
+
rb_intern("DEFAULT_SCHEMA")
|
119
|
+
);
|
120
|
+
}
|
121
|
+
|
122
|
+
rb_errors = rb_ary_new();
|
123
|
+
xmlSetStructuredErrorFunc((void *)rb_errors, Nokogiri_error_array_pusher);
|
106
124
|
|
107
125
|
#ifdef HAVE_XMLSCHEMASETPARSERSTRUCTUREDERRORS
|
108
126
|
xmlSchemaSetParserStructuredErrors(
|
109
|
-
|
127
|
+
c_parser_context,
|
110
128
|
Nokogiri_error_array_pusher,
|
111
|
-
(void *)
|
129
|
+
(void *)rb_errors
|
112
130
|
);
|
113
131
|
#endif
|
114
132
|
|
115
|
-
|
133
|
+
parse_options_int = (int)NUM2INT(rb_funcall(rb_parse_options, rb_intern("to_i"), 0));
|
134
|
+
if (parse_options_int & XML_PARSE_NONET) {
|
135
|
+
old_loader = xmlGetExternalEntityLoader();
|
136
|
+
xmlSetExternalEntityLoader(xmlNoNetExternalEntityLoader);
|
137
|
+
}
|
138
|
+
|
139
|
+
c_schema = xmlSchemaParse(c_parser_context);
|
140
|
+
|
141
|
+
if (old_loader) {
|
142
|
+
xmlSetExternalEntityLoader(old_loader);
|
143
|
+
}
|
116
144
|
|
117
145
|
xmlSetStructuredErrorFunc(NULL, NULL);
|
118
|
-
xmlSchemaFreeParserCtxt(
|
146
|
+
xmlSchemaFreeParserCtxt(c_parser_context);
|
119
147
|
|
120
|
-
if(NULL ==
|
121
|
-
|
122
|
-
if(error)
|
148
|
+
if (NULL == c_schema) {
|
149
|
+
xmlErrorConstPtr error = xmlGetLastError();
|
150
|
+
if (error) {
|
123
151
|
Nokogiri_error_raise(NULL, error);
|
124
|
-
else
|
152
|
+
} else {
|
125
153
|
rb_raise(rb_eRuntimeError, "Could not parse document");
|
154
|
+
}
|
126
155
|
|
127
156
|
return Qnil;
|
128
157
|
}
|
129
158
|
|
130
|
-
rb_schema =
|
131
|
-
rb_iv_set(rb_schema, "@errors",
|
159
|
+
rb_schema = TypedData_Wrap_Struct(klass, &xml_schema_type, c_schema);
|
160
|
+
rb_iv_set(rb_schema, "@errors", rb_errors);
|
161
|
+
rb_iv_set(rb_schema, "@parse_options", rb_parse_options);
|
132
162
|
|
133
163
|
return rb_schema;
|
134
164
|
}
|
135
165
|
|
136
166
|
/*
|
137
167
|
* call-seq:
|
138
|
-
*
|
168
|
+
* read_memory(string) → Nokogiri::XML::Schema
|
169
|
+
*
|
170
|
+
* Create a new schema parsed from the contents of +string+
|
171
|
+
*
|
172
|
+
* [Parameters]
|
173
|
+
* - +string+: String containing XML to be parsed as a schema
|
139
174
|
*
|
140
|
-
*
|
175
|
+
* [Returns] Nokogiri::XML::Schema
|
141
176
|
*/
|
142
|
-
static VALUE
|
177
|
+
static VALUE
|
178
|
+
read_memory(int argc, VALUE *argv, VALUE klass)
|
143
179
|
{
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
VALUE errors;
|
148
|
-
VALUE rb_schema;
|
149
|
-
|
150
|
-
Data_Get_Struct(document, xmlDoc, doc);
|
180
|
+
VALUE rb_content;
|
181
|
+
VALUE rb_parse_options;
|
182
|
+
xmlSchemaParserCtxtPtr c_parser_context;
|
151
183
|
|
152
|
-
|
153
|
-
doc = doc->doc;
|
184
|
+
rb_scan_args(argc, argv, "11", &rb_content, &rb_parse_options);
|
154
185
|
|
155
|
-
|
186
|
+
c_parser_context = xmlSchemaNewMemParserCtxt(
|
187
|
+
(const char *)StringValuePtr(rb_content),
|
188
|
+
(int)RSTRING_LEN(rb_content)
|
189
|
+
);
|
156
190
|
|
157
|
-
|
158
|
-
|
191
|
+
return xml_schema_parse_schema(klass, c_parser_context, rb_parse_options);
|
192
|
+
}
|
159
193
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
194
|
+
/*
|
195
|
+
* call-seq:
|
196
|
+
* from_document(document) → Nokogiri::XML::Schema
|
197
|
+
*
|
198
|
+
* Create a new schema parsed from the +document+.
|
199
|
+
*
|
200
|
+
* [Parameters]
|
201
|
+
* - +document+: Nokogiri::XML::Document to be parsed
|
202
|
+
*
|
203
|
+
* [Returns] Nokogiri::XML::Schema
|
204
|
+
*/
|
205
|
+
static VALUE
|
206
|
+
rb_xml_schema_s_from_document(int argc, VALUE *argv, VALUE klass)
|
207
|
+
{
|
208
|
+
VALUE rb_document;
|
209
|
+
VALUE rb_parse_options;
|
210
|
+
VALUE rb_schema;
|
211
|
+
xmlDocPtr c_document;
|
212
|
+
xmlSchemaParserCtxtPtr c_parser_context;
|
213
|
+
int defensive_copy_p = 0;
|
167
214
|
|
168
|
-
|
215
|
+
rb_scan_args(argc, argv, "11", &rb_document, &rb_parse_options);
|
169
216
|
|
170
|
-
|
171
|
-
|
217
|
+
if (!rb_obj_is_kind_of(rb_document, cNokogiriXmlNode)) {
|
218
|
+
rb_raise(rb_eTypeError,
|
219
|
+
"expected parameter to be a Nokogiri::XML::Document, received %"PRIsVALUE,
|
220
|
+
rb_obj_class(rb_document));
|
221
|
+
}
|
172
222
|
|
173
|
-
if(
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
223
|
+
if (!rb_obj_is_kind_of(rb_document, cNokogiriXmlDocument)) {
|
224
|
+
xmlNodePtr deprecated_node_type_arg;
|
225
|
+
NOKO_WARN_DEPRECATION("Passing a Node as the first parameter to Schema.from_document is deprecated. Please pass a Document instead. This will become an error in Nokogiri v1.17.0."); // TODO: deprecated in v1.15.3, remove in v1.17.0
|
226
|
+
Noko_Node_Get_Struct(rb_document, xmlNode, deprecated_node_type_arg);
|
227
|
+
c_document = deprecated_node_type_arg->doc;
|
228
|
+
} else {
|
229
|
+
c_document = noko_xml_document_unwrap(rb_document);
|
230
|
+
}
|
179
231
|
|
180
|
-
|
232
|
+
if (noko_xml_document_has_wrapped_blank_nodes_p(c_document)) {
|
233
|
+
// see https://github.com/sparklemotion/nokogiri/pull/2001
|
234
|
+
c_document = xmlCopyDoc(c_document, 1);
|
235
|
+
defensive_copy_p = 1;
|
181
236
|
}
|
182
237
|
|
183
|
-
|
184
|
-
|
238
|
+
c_parser_context = xmlSchemaNewDocParserCtxt(c_document);
|
239
|
+
rb_schema = xml_schema_parse_schema(klass, c_parser_context, rb_parse_options);
|
185
240
|
|
186
|
-
|
241
|
+
if (defensive_copy_p) {
|
242
|
+
xmlFreeDoc(c_document);
|
243
|
+
c_document = NULL;
|
244
|
+
}
|
187
245
|
|
188
|
-
return
|
246
|
+
return rb_schema;
|
189
247
|
}
|
190
248
|
|
191
|
-
|
192
|
-
void
|
249
|
+
void
|
250
|
+
noko_init_xml_schema(void)
|
193
251
|
{
|
194
|
-
|
195
|
-
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
196
|
-
VALUE klass = rb_define_class_under(xml, "Schema", rb_cObject);
|
252
|
+
cNokogiriXmlSchema = rb_define_class_under(mNokogiriXml, "Schema", rb_cObject);
|
197
253
|
|
198
|
-
cNokogiriXmlSchema
|
254
|
+
rb_undef_alloc_func(cNokogiriXmlSchema);
|
199
255
|
|
200
|
-
rb_define_singleton_method(
|
201
|
-
rb_define_singleton_method(
|
256
|
+
rb_define_singleton_method(cNokogiriXmlSchema, "read_memory", read_memory, -1);
|
257
|
+
rb_define_singleton_method(cNokogiriXmlSchema, "from_document", rb_xml_schema_s_from_document, -1);
|
202
258
|
|
203
|
-
rb_define_private_method(
|
204
|
-
rb_define_private_method(
|
259
|
+
rb_define_private_method(cNokogiriXmlSchema, "validate_document", validate_document, 1);
|
260
|
+
rb_define_private_method(cNokogiriXmlSchema, "validate_file", validate_file, 1);
|
205
261
|
}
|
@@ -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, xmlErrorConstPtr 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, xmlErrorConstPtr 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(xmlErrorConstPtr 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
|
-
void
|
77
|
+
void
|
78
|
+
noko_init_xml_syntax_error(void)
|
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,47 +8,54 @@
|
|
6
8
|
*
|
7
9
|
* Create a new Text element on the +document+ with +content+
|
8
10
|
*/
|
9
|
-
static VALUE
|
11
|
+
static VALUE
|
12
|
+
rb_xml_text_s_new(int argc, VALUE *argv, VALUE klass)
|
10
13
|
{
|
11
|
-
xmlDocPtr
|
12
|
-
xmlNodePtr
|
13
|
-
VALUE
|
14
|
-
VALUE
|
15
|
-
VALUE
|
14
|
+
xmlDocPtr c_document;
|
15
|
+
xmlNodePtr c_node;
|
16
|
+
VALUE rb_string;
|
17
|
+
VALUE rb_document;
|
18
|
+
VALUE rb_rest;
|
16
19
|
VALUE rb_node;
|
17
20
|
|
18
|
-
rb_scan_args(argc, argv, "2*", &
|
21
|
+
rb_scan_args(argc, argv, "2*", &rb_string, &rb_document, &rb_rest);
|
22
|
+
|
23
|
+
if (!rb_obj_is_kind_of(rb_document, cNokogiriXmlNode)) {
|
24
|
+
rb_raise(rb_eTypeError,
|
25
|
+
"expected second parameter to be a Nokogiri::XML::Document, received %"PRIsVALUE,
|
26
|
+
rb_obj_class(rb_document));
|
27
|
+
}
|
19
28
|
|
20
|
-
|
29
|
+
if (!rb_obj_is_kind_of(rb_document, cNokogiriXmlDocument)) {
|
30
|
+
xmlNodePtr deprecated_node_type_arg;
|
31
|
+
NOKO_WARN_DEPRECATION("Passing a Node as the second parameter to Text.new is deprecated. Please pass a Document instead. This will become an error in Nokogiri v1.17.0."); // TODO: deprecated in v1.15.3, remove in v1.17.0
|
32
|
+
Noko_Node_Get_Struct(rb_document, xmlNode, deprecated_node_type_arg);
|
33
|
+
c_document = deprecated_node_type_arg->doc;
|
34
|
+
} else {
|
35
|
+
c_document = noko_xml_document_unwrap(rb_document);
|
36
|
+
}
|
21
37
|
|
22
|
-
|
23
|
-
|
38
|
+
c_node = xmlNewText((xmlChar *)StringValueCStr(rb_string));
|
39
|
+
c_node->doc = c_document;
|
24
40
|
|
25
|
-
|
41
|
+
noko_xml_document_pin_node(c_node);
|
26
42
|
|
27
|
-
rb_node =
|
43
|
+
rb_node = noko_xml_node_wrap(klass, c_node) ;
|
28
44
|
rb_obj_call_init(rb_node, argc, argv);
|
29
45
|
|
30
|
-
if(rb_block_given_p()) rb_yield(rb_node);
|
46
|
+
if (rb_block_given_p()) { rb_yield(rb_node); }
|
31
47
|
|
32
48
|
return rb_node;
|
33
49
|
}
|
34
50
|
|
35
|
-
|
36
|
-
void
|
51
|
+
void
|
52
|
+
noko_init_xml_text(void)
|
37
53
|
{
|
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
|
-
|
54
|
+
assert(cNokogiriXmlCharacterData);
|
44
55
|
/*
|
45
56
|
* Wraps Text nodes.
|
46
57
|
*/
|
47
|
-
|
48
|
-
|
49
|
-
cNokogiriXmlText = klass;
|
58
|
+
cNokogiriXmlText = rb_define_class_under(mNokogiriXml, "Text", cNokogiriXmlCharacterData);
|
50
59
|
|
51
|
-
rb_define_singleton_method(
|
60
|
+
rb_define_singleton_method(cNokogiriXmlText, "new", rb_xml_text_s_new, -1);
|
52
61
|
}
|