nokogiri 1.10.10 → 1.14.3-aarch64-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 +44 -0
- data/LICENSE-DEPENDENCIES.md +1632 -1022
- data/LICENSE.md +1 -1
- data/README.md +185 -96
- data/bin/nokogiri +63 -50
- data/dependencies.yml +33 -66
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +819 -421
- data/ext/nokogiri/gumbo.c +594 -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 +114 -0
- data/ext/nokogiri/html4_sax_push_parser.c +95 -0
- data/ext/nokogiri/include/libexslt/exslt.h +108 -0
- data/ext/nokogiri/include/libexslt/exsltconfig.h +70 -0
- data/ext/nokogiri/include/libexslt/exsltexports.h +63 -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 +204 -0
- data/ext/nokogiri/include/libxml2/libxml/SAX2.h +172 -0
- data/ext/nokogiri/include/libxml2/libxml/c14n.h +128 -0
- data/ext/nokogiri/include/libxml2/libxml/catalog.h +182 -0
- data/ext/nokogiri/include/libxml2/libxml/chvalid.h +230 -0
- data/ext/nokogiri/include/libxml2/libxml/debugXML.h +217 -0
- data/ext/nokogiri/include/libxml2/libxml/dict.h +81 -0
- data/ext/nokogiri/include/libxml2/libxml/encoding.h +232 -0
- data/ext/nokogiri/include/libxml2/libxml/entities.h +153 -0
- data/ext/nokogiri/include/libxml2/libxml/globals.h +499 -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 +186 -0
- data/ext/nokogiri/include/libxml2/libxml/nanohttp.h +81 -0
- data/ext/nokogiri/include/libxml2/libxml/parser.h +1244 -0
- data/ext/nokogiri/include/libxml2/libxml/parserInternals.h +656 -0
- data/ext/nokogiri/include/libxml2/libxml/pattern.h +100 -0
- data/ext/nokogiri/include/libxml2/libxml/relaxng.h +218 -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 +91 -0
- data/ext/nokogiri/include/libxml2/libxml/tree.h +1312 -0
- data/ext/nokogiri/include/libxml2/libxml/uri.h +94 -0
- data/ext/nokogiri/include/libxml2/libxml/valid.h +463 -0
- data/ext/nokogiri/include/libxml2/libxml/xinclude.h +129 -0
- data/ext/nokogiri/include/libxml2/libxml/xlink.h +189 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlIO.h +368 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlautomata.h +146 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlerror.h +947 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlexports.h +77 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlmemory.h +226 -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 +152 -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 +503 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlwriter.h +488 -0
- data/ext/nokogiri/include/libxml2/libxml/xpath.h +575 -0
- data/ext/nokogiri/include/libxml2/libxml/xpathInternals.h +632 -0
- data/ext/nokogiri/include/libxml2/libxml/xpointer.h +137 -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 +1982 -0
- data/ext/nokogiri/include/libxslt/xsltconfig.h +179 -0
- data/ext/nokogiri/include/libxslt/xsltexports.h +64 -0
- data/ext/nokogiri/include/libxslt/xsltlocale.h +76 -0
- data/ext/nokogiri/include/libxslt/xsltutils.h +310 -0
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +228 -104
- data/ext/nokogiri/nokogiri.h +204 -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 +15 -20
- data/ext/nokogiri/xml_comment.c +19 -26
- data/ext/nokogiri/xml_document.c +306 -225
- data/ext/nokogiri/xml_document_fragment.c +12 -16
- data/ext/nokogiri/xml_dtd.c +64 -58
- data/ext/nokogiri/xml_element_content.c +33 -28
- data/ext/nokogiri/xml_element_decl.c +26 -26
- data/ext/nokogiri/xml_encoding_handler.c +45 -20
- data/ext/nokogiri/xml_entity_decl.c +37 -35
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +136 -61
- data/ext/nokogiri/xml_node.c +1344 -672
- data/ext/nokogiri/xml_node_set.c +178 -168
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +316 -190
- data/ext/nokogiri/xml_relax_ng.c +52 -30
- data/ext/nokogiri/xml_sax_parser.c +130 -124
- data/ext/nokogiri/xml_sax_parser_context.c +110 -89
- data/ext/nokogiri/xml_sax_push_parser.c +36 -29
- data/ext/nokogiri/xml_schema.c +98 -50
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +14 -18
- data/ext/nokogiri/xml_xpath_context.c +263 -148
- data/ext/nokogiri/xslt_stylesheet.c +271 -178
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +111 -0
- data/gumbo-parser/THANKS +27 -0
- data/lib/nokogiri/2.7/nokogiri.so +0 -0
- data/lib/nokogiri/3.0/nokogiri.so +0 -0
- data/lib/nokogiri/3.1/nokogiri.so +0 -0
- data/lib/nokogiri/3.2/nokogiri.so +0 -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 +223 -94
- 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 +572 -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 +98 -0
- data/lib/nokogiri/html5.rb +389 -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 +223 -0
- data/lib/nokogiri/version.rb +3 -108
- data/lib/nokogiri/xml/attr.rb +55 -3
- data/lib/nokogiri/xml/attribute_decl.rb +3 -1
- 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 -126
- data/lib/nokogiri/xml/document_fragment.rb +93 -48
- 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 +45 -0
- data/lib/nokogiri/xml/node/save_options.rb +15 -8
- data/lib/nokogiri/xml/node.rb +1067 -406
- data/lib/nokogiri/xml/node_set.rb +135 -59
- 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 +27 -26
- 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 +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 +48 -72
- data/lib/xsd/xmlparser/nokogiri.rb +29 -25
- metadata +146 -307
- 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/patches/libxml2/0002-Remove-script-macro-support.patch +0 -40
- data/patches/libxml2/0003-Update-entities-to-remove-handling-of-ssi.patch +0 -44
- data/patches/libxml2/0004-libxml2.la-is-in-top_builddir.patch +0 -25
- data/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,10 +1,11 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
2
|
|
3
|
-
|
3
|
+
VALUE cNokogiriXmlSchema;
|
4
|
+
|
5
|
+
static void
|
6
|
+
dealloc(xmlSchemaPtr schema)
|
4
7
|
{
|
5
|
-
NOKOGIRI_DEBUG_START(schema);
|
6
8
|
xmlSchemaFree(schema);
|
7
|
-
NOKOGIRI_DEBUG_END(schema);
|
8
9
|
}
|
9
10
|
|
10
11
|
/*
|
@@ -13,7 +14,8 @@ static void dealloc(xmlSchemaPtr schema)
|
|
13
14
|
*
|
14
15
|
* Validate a Nokogiri::XML::Document against this Schema.
|
15
16
|
*/
|
16
|
-
static VALUE
|
17
|
+
static VALUE
|
18
|
+
validate_document(VALUE self, VALUE document)
|
17
19
|
{
|
18
20
|
xmlDocPtr doc;
|
19
21
|
xmlSchemaPtr schema;
|
@@ -21,13 +23,13 @@ static VALUE validate_document(VALUE self, VALUE document)
|
|
21
23
|
VALUE errors;
|
22
24
|
|
23
25
|
Data_Get_Struct(self, xmlSchema, schema);
|
24
|
-
|
26
|
+
Noko_Node_Get_Struct(document, xmlDoc, doc);
|
25
27
|
|
26
28
|
errors = rb_ary_new();
|
27
29
|
|
28
30
|
valid_ctxt = xmlSchemaNewValidCtxt(schema);
|
29
31
|
|
30
|
-
if(NULL == valid_ctxt) {
|
32
|
+
if (NULL == valid_ctxt) {
|
31
33
|
/* we have a problem */
|
32
34
|
rb_raise(rb_eRuntimeError, "Could not create a validation context");
|
33
35
|
}
|
@@ -53,7 +55,8 @@ static VALUE validate_document(VALUE self, VALUE document)
|
|
53
55
|
*
|
54
56
|
* Validate a file against this Schema.
|
55
57
|
*/
|
56
|
-
static VALUE
|
58
|
+
static VALUE
|
59
|
+
validate_file(VALUE self, VALUE rb_filename)
|
57
60
|
{
|
58
61
|
xmlSchemaPtr schema;
|
59
62
|
xmlSchemaValidCtxtPtr valid_ctxt;
|
@@ -61,13 +64,13 @@ static VALUE validate_file(VALUE self, VALUE rb_filename)
|
|
61
64
|
VALUE errors;
|
62
65
|
|
63
66
|
Data_Get_Struct(self, xmlSchema, schema);
|
64
|
-
filename = (const char*)StringValueCStr(rb_filename) ;
|
67
|
+
filename = (const char *)StringValueCStr(rb_filename) ;
|
65
68
|
|
66
69
|
errors = rb_ary_new();
|
67
70
|
|
68
71
|
valid_ctxt = xmlSchemaNewValidCtxt(schema);
|
69
72
|
|
70
|
-
if(NULL == valid_ctxt) {
|
73
|
+
if (NULL == valid_ctxt) {
|
71
74
|
/* we have a problem */
|
72
75
|
rb_raise(rb_eRuntimeError, "Could not create a validation context");
|
73
76
|
}
|
@@ -93,15 +96,28 @@ static VALUE validate_file(VALUE self, VALUE rb_filename)
|
|
93
96
|
*
|
94
97
|
* Create a new Schema from the contents of +string+
|
95
98
|
*/
|
96
|
-
static VALUE
|
99
|
+
static VALUE
|
100
|
+
read_memory(int argc, VALUE *argv, VALUE klass)
|
97
101
|
{
|
102
|
+
VALUE content;
|
103
|
+
VALUE parse_options;
|
104
|
+
int parse_options_int;
|
105
|
+
xmlSchemaParserCtxtPtr ctx;
|
98
106
|
xmlSchemaPtr schema;
|
99
|
-
|
100
|
-
(const char *)StringValuePtr(content),
|
101
|
-
(int)RSTRING_LEN(content)
|
102
|
-
);
|
107
|
+
VALUE errors;
|
103
108
|
VALUE rb_schema;
|
104
|
-
|
109
|
+
int scanned_args = 0;
|
110
|
+
xmlExternalEntityLoader old_loader = 0;
|
111
|
+
|
112
|
+
scanned_args = rb_scan_args(argc, argv, "11", &content, &parse_options);
|
113
|
+
if (scanned_args == 1) {
|
114
|
+
parse_options = rb_const_get_at(rb_const_get_at(mNokogiriXml, rb_intern("ParseOptions")), rb_intern("DEFAULT_SCHEMA"));
|
115
|
+
}
|
116
|
+
parse_options_int = (int)NUM2INT(rb_funcall(parse_options, rb_intern("to_i"), 0));
|
117
|
+
|
118
|
+
ctx = xmlSchemaNewMemParserCtxt((const char *)StringValuePtr(content), (int)RSTRING_LEN(content));
|
119
|
+
|
120
|
+
errors = rb_ary_new();
|
105
121
|
xmlSetStructuredErrorFunc((void *)errors, Nokogiri_error_array_pusher);
|
106
122
|
|
107
123
|
#ifdef HAVE_XMLSCHEMASETPARSERSTRUCTUREDERRORS
|
@@ -112,23 +128,34 @@ static VALUE read_memory(VALUE klass, VALUE content)
|
|
112
128
|
);
|
113
129
|
#endif
|
114
130
|
|
115
|
-
|
131
|
+
if (parse_options_int & XML_PARSE_NONET) {
|
132
|
+
old_loader = xmlGetExternalEntityLoader();
|
133
|
+
xmlSetExternalEntityLoader(xmlNoNetExternalEntityLoader);
|
134
|
+
}
|
135
|
+
|
136
|
+
schema = xmlSchemaParse(ctx);
|
137
|
+
|
138
|
+
if (old_loader) {
|
139
|
+
xmlSetExternalEntityLoader(old_loader);
|
140
|
+
}
|
116
141
|
|
117
142
|
xmlSetStructuredErrorFunc(NULL, NULL);
|
118
143
|
xmlSchemaFreeParserCtxt(ctx);
|
119
144
|
|
120
|
-
if(NULL == schema) {
|
145
|
+
if (NULL == schema) {
|
121
146
|
xmlErrorPtr error = xmlGetLastError();
|
122
|
-
if(error)
|
147
|
+
if (error) {
|
123
148
|
Nokogiri_error_raise(NULL, error);
|
124
|
-
else
|
149
|
+
} else {
|
125
150
|
rb_raise(rb_eRuntimeError, "Could not parse document");
|
151
|
+
}
|
126
152
|
|
127
153
|
return Qnil;
|
128
154
|
}
|
129
155
|
|
130
156
|
rb_schema = Data_Wrap_Struct(klass, 0, dealloc, schema);
|
131
157
|
rb_iv_set(rb_schema, "@errors", errors);
|
158
|
+
rb_iv_set(rb_schema, "@parse_options", parse_options);
|
132
159
|
|
133
160
|
return rb_schema;
|
134
161
|
}
|
@@ -138,24 +165,25 @@ static VALUE read_memory(VALUE klass, VALUE content)
|
|
138
165
|
* out from under the VALUE pointer. This function checks to see if any of
|
139
166
|
* those nodes have been exposed to Ruby, and if so we should raise an exception.
|
140
167
|
*/
|
141
|
-
static int
|
168
|
+
static int
|
169
|
+
has_blank_nodes_p(VALUE cache)
|
142
170
|
{
|
143
|
-
|
171
|
+
long i;
|
144
172
|
|
145
|
-
|
146
|
-
|
147
|
-
|
173
|
+
if (NIL_P(cache)) {
|
174
|
+
return 0;
|
175
|
+
}
|
148
176
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
}
|
177
|
+
for (i = 0; i < RARRAY_LEN(cache); i++) {
|
178
|
+
xmlNodePtr node;
|
179
|
+
VALUE element = rb_ary_entry(cache, i);
|
180
|
+
Noko_Node_Get_Struct(element, xmlNode, node);
|
181
|
+
if (xmlIsBlankNode(node)) {
|
182
|
+
return 1;
|
156
183
|
}
|
184
|
+
}
|
157
185
|
|
158
|
-
|
186
|
+
return 0;
|
159
187
|
}
|
160
188
|
|
161
189
|
/*
|
@@ -164,18 +192,29 @@ static int has_blank_nodes_p(VALUE cache)
|
|
164
192
|
*
|
165
193
|
* Create a new Schema from the Nokogiri::XML::Document +doc+
|
166
194
|
*/
|
167
|
-
static VALUE
|
195
|
+
static VALUE
|
196
|
+
from_document(int argc, VALUE *argv, VALUE klass)
|
168
197
|
{
|
198
|
+
VALUE document;
|
199
|
+
VALUE parse_options;
|
200
|
+
int parse_options_int;
|
169
201
|
xmlDocPtr doc;
|
170
202
|
xmlSchemaParserCtxtPtr ctx;
|
171
203
|
xmlSchemaPtr schema;
|
172
204
|
VALUE errors;
|
173
205
|
VALUE rb_schema;
|
206
|
+
int scanned_args = 0;
|
207
|
+
xmlExternalEntityLoader old_loader = 0;
|
208
|
+
|
209
|
+
scanned_args = rb_scan_args(argc, argv, "11", &document, &parse_options);
|
174
210
|
|
175
|
-
|
211
|
+
Noko_Node_Get_Struct(document, xmlDoc, doc);
|
212
|
+
doc = doc->doc; /* In case someone passes us a node. ugh. */
|
176
213
|
|
177
|
-
|
178
|
-
|
214
|
+
if (scanned_args == 1) {
|
215
|
+
parse_options = rb_const_get_at(rb_const_get_at(mNokogiriXml, rb_intern("ParseOptions")), rb_intern("DEFAULT_SCHEMA"));
|
216
|
+
}
|
217
|
+
parse_options_int = (int)NUM2INT(rb_funcall(parse_options, rb_intern("to_i"), 0));
|
179
218
|
|
180
219
|
if (has_blank_nodes_p(DOC_NODE_CACHE(doc))) {
|
181
220
|
rb_raise(rb_eArgError, "Creating a schema from a document that has blank nodes exposed to Ruby is dangerous");
|
@@ -194,41 +233,50 @@ static VALUE from_document(VALUE klass, VALUE document)
|
|
194
233
|
);
|
195
234
|
#endif
|
196
235
|
|
236
|
+
if (parse_options_int & XML_PARSE_NONET) {
|
237
|
+
old_loader = xmlGetExternalEntityLoader();
|
238
|
+
xmlSetExternalEntityLoader(xmlNoNetExternalEntityLoader);
|
239
|
+
}
|
240
|
+
|
197
241
|
schema = xmlSchemaParse(ctx);
|
198
242
|
|
243
|
+
if (old_loader) {
|
244
|
+
xmlSetExternalEntityLoader(old_loader);
|
245
|
+
}
|
246
|
+
|
199
247
|
xmlSetStructuredErrorFunc(NULL, NULL);
|
200
248
|
xmlSchemaFreeParserCtxt(ctx);
|
201
249
|
|
202
|
-
if(NULL == schema) {
|
250
|
+
if (NULL == schema) {
|
203
251
|
xmlErrorPtr error = xmlGetLastError();
|
204
|
-
if(error)
|
252
|
+
if (error) {
|
205
253
|
Nokogiri_error_raise(NULL, error);
|
206
|
-
else
|
254
|
+
} else {
|
207
255
|
rb_raise(rb_eRuntimeError, "Could not parse document");
|
256
|
+
}
|
208
257
|
|
209
258
|
return Qnil;
|
210
259
|
}
|
211
260
|
|
212
261
|
rb_schema = Data_Wrap_Struct(klass, 0, dealloc, schema);
|
213
262
|
rb_iv_set(rb_schema, "@errors", errors);
|
263
|
+
rb_iv_set(rb_schema, "@parse_options", parse_options);
|
214
264
|
|
215
265
|
return rb_schema;
|
216
266
|
|
217
267
|
return Qnil;
|
218
268
|
}
|
219
269
|
|
220
|
-
|
221
|
-
void
|
270
|
+
void
|
271
|
+
noko_init_xml_schema(void)
|
222
272
|
{
|
223
|
-
|
224
|
-
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
225
|
-
VALUE klass = rb_define_class_under(xml, "Schema", rb_cObject);
|
273
|
+
cNokogiriXmlSchema = rb_define_class_under(mNokogiriXml, "Schema", rb_cObject);
|
226
274
|
|
227
|
-
cNokogiriXmlSchema
|
275
|
+
rb_undef_alloc_func(cNokogiriXmlSchema);
|
228
276
|
|
229
|
-
rb_define_singleton_method(
|
230
|
-
rb_define_singleton_method(
|
277
|
+
rb_define_singleton_method(cNokogiriXmlSchema, "read_memory", read_memory, -1);
|
278
|
+
rb_define_singleton_method(cNokogiriXmlSchema, "from_document", from_document, -1);
|
231
279
|
|
232
|
-
rb_define_private_method(
|
233
|
-
rb_define_private_method(
|
280
|
+
rb_define_private_method(cNokogiriXmlSchema, "validate_document", validate_document, 1);
|
281
|
+
rb_define_private_method(cNokogiriXmlSchema, "validate_file", validate_file, 1);
|
234
282
|
}
|
@@ -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
|
-
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,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
|
-
void
|
38
|
+
void
|
39
|
+
noko_init_xml_text(void)
|
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
|
}
|