nokogiri 1.10.9 → 1.12.5
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 +1173 -884
- data/LICENSE.md +1 -1
- data/README.md +176 -96
- data/dependencies.yml +12 -12
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +716 -414
- 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 +120 -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 +191 -89
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +15 -15
- data/ext/nokogiri/xml_attribute_decl.c +18 -18
- data/ext/nokogiri/xml_cdata.c +13 -18
- data/ext/nokogiri/xml_comment.c +19 -26
- data/ext/nokogiri/xml_document.c +267 -195
- data/ext/nokogiri/xml_document_fragment.c +13 -15
- data/ext/nokogiri/xml_dtd.c +54 -48
- data/ext/nokogiri/xml_element_content.c +31 -26
- data/ext/nokogiri/xml_element_decl.c +22 -22
- data/ext/nokogiri/xml_encoding_handler.c +28 -17
- data/ext/nokogiri/xml_entity_decl.c +32 -30
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +60 -51
- data/ext/nokogiri/xml_node.c +493 -407
- data/ext/nokogiri/xml_node_set.c +174 -162
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +197 -172
- 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 +105 -86
- data/ext/nokogiri/xml_sax_push_parser.c +36 -27
- data/ext/nokogiri/xml_schema.c +96 -46
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +13 -17
- data/ext/nokogiri/xml_xpath_context.c +158 -73
- data/ext/nokogiri/xslt_stylesheet.c +158 -164
- 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 +4886 -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/css/node.rb +1 -0
- data/lib/nokogiri/css/parser.rb +64 -63
- data/lib/nokogiri/css/parser.y +3 -3
- data/lib/nokogiri/css/parser_extras.rb +39 -36
- data/lib/nokogiri/css/syntax_error.rb +2 -1
- data/lib/nokogiri/css/tokenizer.rb +1 -0
- data/lib/nokogiri/css/xpath_visitor.rb +73 -43
- data/lib/nokogiri/css.rb +15 -14
- data/lib/nokogiri/decorators/slop.rb +1 -0
- data/lib/nokogiri/extension.rb +31 -0
- data/lib/nokogiri/gumbo.rb +14 -0
- data/lib/nokogiri/html.rb +32 -27
- data/lib/nokogiri/{html → html4}/builder.rb +3 -2
- data/lib/nokogiri/{html → html4}/document.rb +17 -30
- data/lib/nokogiri/{html → html4}/document_fragment.rb +18 -17
- data/lib/nokogiri/{html → html4}/element_description.rb +2 -1
- data/lib/nokogiri/{html → html4}/element_description_defaults.rb +2 -1
- data/lib/nokogiri/{html → html4}/entity_lookup.rb +2 -1
- data/lib/nokogiri/{html → html4}/sax/parser.rb +12 -14
- data/lib/nokogiri/html4/sax/parser_context.rb +19 -0
- data/lib/nokogiri/{html → html4}/sax/push_parser.rb +6 -5
- data/lib/nokogiri/html4.rb +40 -0
- data/lib/nokogiri/html5/document.rb +74 -0
- data/lib/nokogiri/html5/document_fragment.rb +80 -0
- data/lib/nokogiri/html5/node.rb +93 -0
- data/lib/nokogiri/html5.rb +473 -0
- data/lib/nokogiri/jruby/dependencies.rb +20 -0
- data/lib/nokogiri/syntax_error.rb +1 -0
- data/lib/nokogiri/version/constant.rb +5 -0
- data/lib/nokogiri/version/info.rb +215 -0
- data/lib/nokogiri/version.rb +3 -109
- data/lib/nokogiri/xml/attr.rb +1 -0
- data/lib/nokogiri/xml/attribute_decl.rb +1 -0
- data/lib/nokogiri/xml/builder.rb +41 -2
- data/lib/nokogiri/xml/cdata.rb +1 -0
- data/lib/nokogiri/xml/character_data.rb +1 -0
- data/lib/nokogiri/xml/document.rb +138 -41
- data/lib/nokogiri/xml/document_fragment.rb +5 -6
- data/lib/nokogiri/xml/dtd.rb +1 -0
- data/lib/nokogiri/xml/element_content.rb +1 -0
- data/lib/nokogiri/xml/element_decl.rb +1 -0
- data/lib/nokogiri/xml/entity_decl.rb +1 -0
- data/lib/nokogiri/xml/entity_reference.rb +1 -0
- data/lib/nokogiri/xml/namespace.rb +1 -0
- data/lib/nokogiri/xml/node/save_options.rb +2 -1
- data/lib/nokogiri/xml/node.rb +629 -293
- data/lib/nokogiri/xml/node_set.rb +1 -0
- data/lib/nokogiri/xml/notation.rb +1 -0
- data/lib/nokogiri/xml/parse_options.rb +12 -3
- data/lib/nokogiri/xml/pp/character_data.rb +1 -0
- data/lib/nokogiri/xml/pp/node.rb +1 -0
- data/lib/nokogiri/xml/pp.rb +3 -2
- data/lib/nokogiri/xml/processing_instruction.rb +1 -0
- data/lib/nokogiri/xml/reader.rb +9 -12
- data/lib/nokogiri/xml/relax_ng.rb +7 -2
- data/lib/nokogiri/xml/sax/document.rb +25 -30
- data/lib/nokogiri/xml/sax/parser.rb +1 -0
- data/lib/nokogiri/xml/sax/parser_context.rb +1 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +1 -0
- data/lib/nokogiri/xml/sax.rb +5 -4
- data/lib/nokogiri/xml/schema.rb +13 -4
- data/lib/nokogiri/xml/searchable.rb +25 -16
- data/lib/nokogiri/xml/syntax_error.rb +1 -0
- data/lib/nokogiri/xml/text.rb +1 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +2 -1
- data/lib/nokogiri/xml/xpath.rb +4 -5
- data/lib/nokogiri/xml/xpath_context.rb +1 -0
- data/lib/nokogiri/xml.rb +36 -36
- data/lib/nokogiri/xslt/stylesheet.rb +2 -1
- data/lib/nokogiri/xslt.rb +17 -16
- data/lib/nokogiri.rb +32 -51
- data/lib/xsd/xmlparser/nokogiri.rb +1 -0
- data/patches/libxml2/{0002-Remove-script-macro-support.patch → 0001-Remove-script-macro-support.patch} +0 -0
- data/patches/libxml2/{0003-Update-entities-to-remove-handling-of-ssi.patch → 0002-Update-entities-to-remove-handling-of-ssi.patch} +0 -0
- data/patches/libxml2/{0004-libxml2.la-is-in-top_builddir.patch → 0003-libxml2.la-is-in-top_builddir.patch} +1 -1
- data/patches/libxml2/0004-use-glibc-strlen.patch +53 -0
- data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
- data/patches/libxml2/0006-update-automake-files-for-arm64.patch +2511 -0
- data/patches/libxml2/0007-Fix-XPath-recursion-limit.patch +31 -0
- data/patches/libxslt/0001-update-automake-files-for-arm64.patch +2511 -0
- data/patches/libxslt/0002-Fix-xml2-config-check-in-configure-script.patch +19 -0
- data/ports/archives/libxml2-2.9.12.tar.gz +0 -0
- metadata +139 -161
- 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/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
@@ -1,16 +1,17 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
2
|
|
3
3
|
VALUE cNokogiriXmlSaxParserContext ;
|
4
4
|
|
5
|
-
static void
|
5
|
+
static void
|
6
|
+
deallocate(xmlParserCtxtPtr ctxt)
|
6
7
|
{
|
7
|
-
NOKOGIRI_DEBUG_START(
|
8
|
+
NOKOGIRI_DEBUG_START(ctxt);
|
8
9
|
|
9
10
|
ctxt->sax = NULL;
|
10
11
|
|
11
12
|
xmlFreeParserCtxt(ctxt);
|
12
13
|
|
13
|
-
NOKOGIRI_DEBUG_END(
|
14
|
+
NOKOGIRI_DEBUG_END(ctxt);
|
14
15
|
}
|
15
16
|
|
16
17
|
/*
|
@@ -22,19 +23,19 @@ static void deallocate(xmlParserCtxtPtr ctxt)
|
|
22
23
|
static VALUE
|
23
24
|
parse_io(VALUE klass, VALUE io, VALUE encoding)
|
24
25
|
{
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
26
|
+
xmlParserCtxtPtr ctxt;
|
27
|
+
xmlCharEncoding enc = (xmlCharEncoding)NUM2INT(encoding);
|
28
|
+
|
29
|
+
ctxt = xmlCreateIOParserCtxt(NULL, NULL,
|
30
|
+
(xmlInputReadCallback)noko_io_read,
|
31
|
+
(xmlInputCloseCallback)noko_io_close,
|
32
|
+
(void *)io, enc);
|
33
|
+
if (ctxt->sax) {
|
34
|
+
xmlFree(ctxt->sax);
|
35
|
+
ctxt->sax = NULL;
|
36
|
+
}
|
37
|
+
|
38
|
+
return Data_Wrap_Struct(klass, NULL, deallocate, ctxt);
|
38
39
|
}
|
39
40
|
|
40
41
|
/*
|
@@ -43,7 +44,8 @@ parse_io(VALUE klass, VALUE io, VALUE encoding)
|
|
43
44
|
*
|
44
45
|
* Parse file given +filename+
|
45
46
|
*/
|
46
|
-
static VALUE
|
47
|
+
static VALUE
|
48
|
+
parse_file(VALUE klass, VALUE filename)
|
47
49
|
{
|
48
50
|
xmlParserCtxtPtr ctxt = xmlCreateFileParserCtxt(StringValueCStr(filename));
|
49
51
|
return Data_Wrap_Struct(klass, NULL, deallocate, ctxt);
|
@@ -58,41 +60,44 @@ static VALUE parse_file(VALUE klass, VALUE filename)
|
|
58
60
|
static VALUE
|
59
61
|
parse_memory(VALUE klass, VALUE data)
|
60
62
|
{
|
61
|
-
|
63
|
+
xmlParserCtxtPtr ctxt;
|
62
64
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
65
|
+
if (NIL_P(data)) {
|
66
|
+
rb_raise(rb_eArgError, "data cannot be nil");
|
67
|
+
}
|
68
|
+
if (!(int)RSTRING_LEN(data)) {
|
69
|
+
rb_raise(rb_eRuntimeError, "data cannot be empty");
|
70
|
+
}
|
67
71
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
72
|
+
ctxt = xmlCreateMemoryParserCtxt(StringValuePtr(data),
|
73
|
+
(int)RSTRING_LEN(data));
|
74
|
+
if (ctxt->sax) {
|
75
|
+
xmlFree(ctxt->sax);
|
76
|
+
ctxt->sax = NULL;
|
77
|
+
}
|
74
78
|
|
75
|
-
|
79
|
+
return Data_Wrap_Struct(klass, NULL, deallocate, ctxt);
|
76
80
|
}
|
77
81
|
|
78
82
|
static VALUE
|
79
83
|
parse_doc(VALUE ctxt_val)
|
80
84
|
{
|
81
|
-
|
82
|
-
|
83
|
-
|
85
|
+
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr)ctxt_val;
|
86
|
+
xmlParseDocument(ctxt);
|
87
|
+
return Qnil;
|
84
88
|
}
|
85
89
|
|
86
90
|
static VALUE
|
87
91
|
parse_doc_finalize(VALUE ctxt_val)
|
88
92
|
{
|
89
|
-
|
93
|
+
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr)ctxt_val;
|
90
94
|
|
91
|
-
|
92
|
-
|
95
|
+
if (NULL != ctxt->myDoc) {
|
96
|
+
xmlFreeDoc(ctxt->myDoc);
|
97
|
+
}
|
93
98
|
|
94
|
-
|
95
|
-
|
99
|
+
NOKOGIRI_SAX_TUPLE_DESTROY(ctxt->userData);
|
100
|
+
return Qnil;
|
96
101
|
}
|
97
102
|
|
98
103
|
/*
|
@@ -104,25 +109,29 @@ parse_doc_finalize(VALUE ctxt_val)
|
|
104
109
|
static VALUE
|
105
110
|
parse_with(VALUE self, VALUE sax_handler)
|
106
111
|
{
|
107
|
-
|
108
|
-
|
112
|
+
xmlParserCtxtPtr ctxt;
|
113
|
+
xmlSAXHandlerPtr sax;
|
114
|
+
|
115
|
+
if (!rb_obj_is_kind_of(sax_handler, cNokogiriXmlSaxParser)) {
|
116
|
+
rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::SAX::Parser");
|
117
|
+
}
|
109
118
|
|
110
|
-
|
111
|
-
|
119
|
+
Data_Get_Struct(self, xmlParserCtxt, ctxt);
|
120
|
+
Data_Get_Struct(sax_handler, xmlSAXHandler, sax);
|
112
121
|
|
113
|
-
|
114
|
-
|
122
|
+
/* Free the sax handler since we'll assign our own */
|
123
|
+
if (ctxt->sax && ctxt->sax != (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) {
|
124
|
+
xmlFree(ctxt->sax);
|
125
|
+
}
|
115
126
|
|
116
|
-
|
117
|
-
|
118
|
-
xmlFree(ctxt->sax);
|
127
|
+
ctxt->sax = sax;
|
128
|
+
ctxt->userData = (void *)NOKOGIRI_SAX_TUPLE_NEW(ctxt, sax_handler);
|
119
129
|
|
120
|
-
|
121
|
-
ctxt->userData = (void *)NOKOGIRI_SAX_TUPLE_NEW(ctxt, sax_handler);
|
130
|
+
xmlSetStructuredErrorFunc(NULL, NULL);
|
122
131
|
|
123
|
-
|
132
|
+
rb_ensure(parse_doc, (VALUE)ctxt, parse_doc_finalize, (VALUE)ctxt);
|
124
133
|
|
125
|
-
|
134
|
+
return Qnil;
|
126
135
|
}
|
127
136
|
|
128
137
|
/*
|
@@ -132,15 +141,17 @@ parse_with(VALUE self, VALUE sax_handler)
|
|
132
141
|
* Should this parser replace entities? & will get converted to '&' if
|
133
142
|
* set to true
|
134
143
|
*/
|
135
|
-
static VALUE
|
144
|
+
static VALUE
|
145
|
+
set_replace_entities(VALUE self, VALUE value)
|
136
146
|
{
|
137
147
|
xmlParserCtxtPtr ctxt;
|
138
148
|
Data_Get_Struct(self, xmlParserCtxt, ctxt);
|
139
149
|
|
140
|
-
if(Qfalse == value)
|
150
|
+
if (Qfalse == value) {
|
141
151
|
ctxt->replaceEntities = 0;
|
142
|
-
else
|
152
|
+
} else {
|
143
153
|
ctxt->replaceEntities = 1;
|
154
|
+
}
|
144
155
|
|
145
156
|
return value;
|
146
157
|
}
|
@@ -152,15 +163,17 @@ static VALUE set_replace_entities(VALUE self, VALUE value)
|
|
152
163
|
* Should this parser replace entities? & will get converted to '&' if
|
153
164
|
* set to true
|
154
165
|
*/
|
155
|
-
static VALUE
|
166
|
+
static VALUE
|
167
|
+
get_replace_entities(VALUE self)
|
156
168
|
{
|
157
169
|
xmlParserCtxtPtr ctxt;
|
158
170
|
Data_Get_Struct(self, xmlParserCtxt, ctxt);
|
159
171
|
|
160
|
-
if(0 == ctxt->replaceEntities)
|
172
|
+
if (0 == ctxt->replaceEntities) {
|
161
173
|
return Qfalse;
|
162
|
-
else
|
174
|
+
} else {
|
163
175
|
return Qtrue;
|
176
|
+
}
|
164
177
|
}
|
165
178
|
|
166
179
|
/*
|
@@ -168,7 +181,8 @@ static VALUE get_replace_entities(VALUE self)
|
|
168
181
|
*
|
169
182
|
* Get the current line the parser context is processing.
|
170
183
|
*/
|
171
|
-
static VALUE
|
184
|
+
static VALUE
|
185
|
+
line(VALUE self)
|
172
186
|
{
|
173
187
|
xmlParserCtxtPtr ctxt;
|
174
188
|
xmlParserInputPtr io;
|
@@ -176,8 +190,9 @@ static VALUE line(VALUE self)
|
|
176
190
|
Data_Get_Struct(self, xmlParserCtxt, ctxt);
|
177
191
|
|
178
192
|
io = ctxt->input;
|
179
|
-
if(io)
|
193
|
+
if (io) {
|
180
194
|
return INT2NUM(io->line);
|
195
|
+
}
|
181
196
|
|
182
197
|
return Qnil;
|
183
198
|
}
|
@@ -187,7 +202,8 @@ static VALUE line(VALUE self)
|
|
187
202
|
*
|
188
203
|
* Get the current column the parser context is processing.
|
189
204
|
*/
|
190
|
-
static VALUE
|
205
|
+
static VALUE
|
206
|
+
column(VALUE self)
|
191
207
|
{
|
192
208
|
xmlParserCtxtPtr ctxt;
|
193
209
|
xmlParserInputPtr io;
|
@@ -195,8 +211,9 @@ static VALUE column(VALUE self)
|
|
195
211
|
Data_Get_Struct(self, xmlParserCtxt, ctxt);
|
196
212
|
|
197
213
|
io = ctxt->input;
|
198
|
-
if(io)
|
214
|
+
if (io) {
|
199
215
|
return INT2NUM(io->col);
|
216
|
+
}
|
200
217
|
|
201
218
|
return Qnil;
|
202
219
|
}
|
@@ -208,15 +225,17 @@ static VALUE column(VALUE self)
|
|
208
225
|
* Should this parser recover from structural errors? It will not stop processing
|
209
226
|
* file on structural errors if set to true
|
210
227
|
*/
|
211
|
-
static VALUE
|
228
|
+
static VALUE
|
229
|
+
set_recovery(VALUE self, VALUE value)
|
212
230
|
{
|
213
231
|
xmlParserCtxtPtr ctxt;
|
214
232
|
Data_Get_Struct(self, xmlParserCtxt, ctxt);
|
215
233
|
|
216
|
-
if(value == Qfalse)
|
234
|
+
if (value == Qfalse) {
|
217
235
|
ctxt->recovery = 0;
|
218
|
-
else
|
236
|
+
} else {
|
219
237
|
ctxt->recovery = 1;
|
238
|
+
}
|
220
239
|
|
221
240
|
return value;
|
222
241
|
}
|
@@ -228,35 +247,35 @@ static VALUE set_recovery(VALUE self, VALUE value)
|
|
228
247
|
* Should this parser recover from structural errors? It will not stop processing
|
229
248
|
* file on structural errors if set to true
|
230
249
|
*/
|
231
|
-
static VALUE
|
250
|
+
static VALUE
|
251
|
+
get_recovery(VALUE self)
|
232
252
|
{
|
233
253
|
xmlParserCtxtPtr ctxt;
|
234
254
|
Data_Get_Struct(self, xmlParserCtxt, ctxt);
|
235
255
|
|
236
|
-
if(ctxt->recovery == 0)
|
256
|
+
if (ctxt->recovery == 0) {
|
237
257
|
return Qfalse;
|
238
|
-
else
|
258
|
+
} else {
|
239
259
|
return Qtrue;
|
260
|
+
}
|
240
261
|
}
|
241
262
|
|
242
|
-
void
|
263
|
+
void
|
264
|
+
noko_init_xml_sax_parser_context()
|
243
265
|
{
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
cNokogiriXmlSaxParserContext
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
rb_define_method(
|
256
|
-
rb_define_method(
|
257
|
-
rb_define_method(
|
258
|
-
rb_define_method(
|
259
|
-
rb_define_method(klass, "recovery", get_recovery, 0);
|
260
|
-
rb_define_method(klass, "line", line, 0);
|
261
|
-
rb_define_method(klass, "column", column, 0);
|
266
|
+
cNokogiriXmlSaxParserContext = rb_define_class_under(mNokogiriXmlSax, "ParserContext", rb_cObject);
|
267
|
+
|
268
|
+
rb_undef_alloc_func(cNokogiriXmlSaxParserContext);
|
269
|
+
|
270
|
+
rb_define_singleton_method(cNokogiriXmlSaxParserContext, "io", parse_io, 2);
|
271
|
+
rb_define_singleton_method(cNokogiriXmlSaxParserContext, "memory", parse_memory, 1);
|
272
|
+
rb_define_singleton_method(cNokogiriXmlSaxParserContext, "file", parse_file, 1);
|
273
|
+
|
274
|
+
rb_define_method(cNokogiriXmlSaxParserContext, "parse_with", parse_with, 1);
|
275
|
+
rb_define_method(cNokogiriXmlSaxParserContext, "replace_entities=", set_replace_entities, 1);
|
276
|
+
rb_define_method(cNokogiriXmlSaxParserContext, "replace_entities", get_replace_entities, 0);
|
277
|
+
rb_define_method(cNokogiriXmlSaxParserContext, "recovery=", set_recovery, 1);
|
278
|
+
rb_define_method(cNokogiriXmlSaxParserContext, "recovery", get_recovery, 0);
|
279
|
+
rb_define_method(cNokogiriXmlSaxParserContext, "line", line, 0);
|
280
|
+
rb_define_method(cNokogiriXmlSaxParserContext, "column", column, 0);
|
262
281
|
}
|
@@ -1,6 +1,9 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
2
|
|
3
|
-
|
3
|
+
VALUE cNokogiriXmlSaxPushParser ;
|
4
|
+
|
5
|
+
static void
|
6
|
+
deallocate(xmlParserCtxtPtr ctx)
|
4
7
|
{
|
5
8
|
NOKOGIRI_DEBUG_START(ctx);
|
6
9
|
if (ctx != NULL) {
|
@@ -10,7 +13,8 @@ static void deallocate(xmlParserCtxtPtr ctx)
|
|
10
13
|
NOKOGIRI_DEBUG_END(ctx);
|
11
14
|
}
|
12
15
|
|
13
|
-
static VALUE
|
16
|
+
static VALUE
|
17
|
+
allocate(VALUE klass)
|
14
18
|
{
|
15
19
|
return Data_Wrap_Struct(klass, NULL, deallocate, NULL);
|
16
20
|
}
|
@@ -21,10 +25,11 @@ static VALUE allocate(VALUE klass)
|
|
21
25
|
*
|
22
26
|
* Write +chunk+ to PushParser. +last_chunk+ triggers the end_document handle
|
23
27
|
*/
|
24
|
-
static VALUE
|
28
|
+
static VALUE
|
29
|
+
native_write(VALUE self, VALUE _chunk, VALUE _last_chunk)
|
25
30
|
{
|
26
31
|
xmlParserCtxtPtr ctx;
|
27
|
-
const char *
|
32
|
+
const char *chunk = NULL;
|
28
33
|
int size = 0;
|
29
34
|
|
30
35
|
|
@@ -35,6 +40,8 @@ static VALUE native_write(VALUE self, VALUE _chunk, VALUE _last_chunk)
|
|
35
40
|
size = (int)RSTRING_LEN(_chunk);
|
36
41
|
}
|
37
42
|
|
43
|
+
xmlSetStructuredErrorFunc(NULL, NULL);
|
44
|
+
|
38
45
|
if (xmlParseChunk(ctx, chunk, size, Qtrue == _last_chunk ? 1 : 0)) {
|
39
46
|
if (!(ctx->options & XML_PARSE_RECOVER)) {
|
40
47
|
xmlErrorPtr e = xmlCtxtGetLastError(ctx);
|
@@ -51,10 +58,11 @@ static VALUE native_write(VALUE self, VALUE _chunk, VALUE _last_chunk)
|
|
51
58
|
*
|
52
59
|
* Initialize the push parser with +xml_sax+ using +filename+
|
53
60
|
*/
|
54
|
-
static VALUE
|
61
|
+
static VALUE
|
62
|
+
initialize_native(VALUE self, VALUE _xml_sax, VALUE _filename)
|
55
63
|
{
|
56
64
|
xmlSAXHandlerPtr sax;
|
57
|
-
const char *
|
65
|
+
const char *filename = NULL;
|
58
66
|
xmlParserCtxtPtr ctx;
|
59
67
|
|
60
68
|
Data_Get_Struct(_xml_sax, xmlSAXHandler, sax);
|
@@ -79,7 +87,8 @@ static VALUE initialize_native(VALUE self, VALUE _xml_sax, VALUE _filename)
|
|
79
87
|
return self;
|
80
88
|
}
|
81
89
|
|
82
|
-
static VALUE
|
90
|
+
static VALUE
|
91
|
+
get_options(VALUE self)
|
83
92
|
{
|
84
93
|
xmlParserCtxtPtr ctx;
|
85
94
|
Data_Get_Struct(self, xmlParserCtxt, ctx);
|
@@ -87,7 +96,8 @@ static VALUE get_options(VALUE self)
|
|
87
96
|
return INT2NUM(ctx->options);
|
88
97
|
}
|
89
98
|
|
90
|
-
static VALUE
|
99
|
+
static VALUE
|
100
|
+
set_options(VALUE self, VALUE options)
|
91
101
|
{
|
92
102
|
xmlParserCtxtPtr ctx;
|
93
103
|
Data_Get_Struct(self, xmlParserCtxt, ctx);
|
@@ -106,7 +116,8 @@ static VALUE set_options(VALUE self, VALUE options)
|
|
106
116
|
* Should this parser replace entities? & will get converted to '&' if
|
107
117
|
* set to true
|
108
118
|
*/
|
109
|
-
static VALUE
|
119
|
+
static VALUE
|
120
|
+
get_replace_entities(VALUE self)
|
110
121
|
{
|
111
122
|
xmlParserCtxtPtr ctx;
|
112
123
|
Data_Get_Struct(self, xmlParserCtxt, ctx);
|
@@ -125,7 +136,8 @@ static VALUE get_replace_entities(VALUE self)
|
|
125
136
|
* Should this parser replace entities? & will get converted to '&' if
|
126
137
|
* set to true
|
127
138
|
*/
|
128
|
-
static VALUE
|
139
|
+
static VALUE
|
140
|
+
set_replace_entities(VALUE self, VALUE value)
|
129
141
|
{
|
130
142
|
xmlParserCtxtPtr ctx;
|
131
143
|
Data_Get_Struct(self, xmlParserCtxt, ctx);
|
@@ -139,21 +151,18 @@ static VALUE set_replace_entities(VALUE self, VALUE value)
|
|
139
151
|
return value;
|
140
152
|
}
|
141
153
|
|
142
|
-
|
143
|
-
|
154
|
+
void
|
155
|
+
noko_init_xml_sax_push_parser()
|
144
156
|
{
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
cNokogiriXmlSaxPushParser =
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
rb_define_private_method(
|
155
|
-
|
156
|
-
rb_define_method(klass, "options=", set_options, 1);
|
157
|
-
rb_define_method(klass, "replace_entities", get_replace_entities, 0);
|
158
|
-
rb_define_method(klass, "replace_entities=", set_replace_entities, 1);
|
157
|
+
cNokogiriXmlSaxPushParser = rb_define_class_under(mNokogiriXmlSax, "PushParser", rb_cObject);
|
158
|
+
|
159
|
+
rb_define_alloc_func(cNokogiriXmlSaxPushParser, allocate);
|
160
|
+
|
161
|
+
rb_define_method(cNokogiriXmlSaxPushParser, "options", get_options, 0);
|
162
|
+
rb_define_method(cNokogiriXmlSaxPushParser, "options=", set_options, 1);
|
163
|
+
rb_define_method(cNokogiriXmlSaxPushParser, "replace_entities", get_replace_entities, 0);
|
164
|
+
rb_define_method(cNokogiriXmlSaxPushParser, "replace_entities=", set_replace_entities, 1);
|
165
|
+
|
166
|
+
rb_define_private_method(cNokogiriXmlSaxPushParser, "initialize_native", initialize_native, 2);
|
167
|
+
rb_define_private_method(cNokogiriXmlSaxPushParser, "native_write", native_write, 2);
|
159
168
|
}
|