nokogiri 1.9.1 → 1.15.3
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 +45 -0
- data/LICENSE-DEPENDENCIES.md +1636 -1024
- data/LICENSE.md +5 -28
- data/README.md +203 -89
- data/bin/nokogiri +63 -50
- data/dependencies.yml +33 -61
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +864 -418
- 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 +215 -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 +40 -31
- data/ext/nokogiri/xml_comment.c +20 -27
- data/ext/nokogiri/xml_document.c +401 -240
- 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 +135 -61
- data/ext/nokogiri/xml_node.c +1346 -677
- data/ext/nokogiri/xml_node_set.c +246 -216
- data/ext/nokogiri/xml_processing_instruction.c +18 -20
- data/ext/nokogiri/xml_reader.c +347 -212
- data/ext/nokogiri/xml_relax_ng.c +86 -77
- data/ext/nokogiri/xml_sax_parser.c +149 -124
- data/ext/nokogiri/xml_sax_parser_context.c +145 -103
- data/ext/nokogiri/xml_sax_push_parser.c +64 -36
- data/ext/nokogiri/xml_schema.c +138 -81
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +36 -26
- data/ext/nokogiri/xml_xpath_context.c +366 -178
- data/ext/nokogiri/xslt_stylesheet.c +335 -189
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +111 -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 +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 +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 +107 -104
- data/lib/nokogiri/css/tokenizer.rex +3 -2
- data/lib/nokogiri/css/xpath_visitor.rb +224 -95
- 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 +392 -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 +6 -2
- data/lib/nokogiri/xml/builder.rb +98 -54
- 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 +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 +45 -0
- data/lib/nokogiri/xml/node/save_options.rb +23 -8
- data/lib/nokogiri/xml/node.rb +1088 -418
- data/lib/nokogiri/xml/node_set.rb +173 -63
- 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 +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 +101 -22
- data/lib/nokogiri.rb +59 -75
- data/lib/xsd/xmlparser/nokogiri.rb +29 -25
- data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
- data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
- data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
- 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.11.4.tar.xz +0 -0
- data/ports/archives/libxslt-1.1.38.tar.xz +0 -0
- metadata +128 -265
- 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-Fix-nullptr-deref-with-XPath-logic-ops.patch +0 -54
- data/patches/libxml2/0003-Fix-infinite-loop-in-LZMA-decompression.patch +0 -50
- data/ports/archives/libxml2-2.9.8.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.32.tar.gz +0 -0
@@ -1,4 +1,6 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
|
+
|
3
|
+
VALUE cNokogiriXmlDocumentFragment;
|
2
4
|
|
3
5
|
/*
|
4
6
|
* call-seq:
|
@@ -6,7 +8,8 @@
|
|
6
8
|
*
|
7
9
|
* Create a new DocumentFragment element on the +document+
|
8
10
|
*/
|
9
|
-
static VALUE
|
11
|
+
static VALUE
|
12
|
+
new (int argc, VALUE *argv, VALUE klass)
|
10
13
|
{
|
11
14
|
xmlDocPtr xml_doc;
|
12
15
|
xmlNodePtr node;
|
@@ -16,33 +19,26 @@ static VALUE new(int argc, VALUE *argv, VALUE klass)
|
|
16
19
|
|
17
20
|
rb_scan_args(argc, argv, "1*", &document, &rest);
|
18
21
|
|
19
|
-
|
22
|
+
xml_doc = noko_xml_document_unwrap(document);
|
20
23
|
|
21
24
|
node = xmlNewDocFragment(xml_doc->doc);
|
22
25
|
|
23
|
-
|
26
|
+
noko_xml_document_pin_node(node);
|
24
27
|
|
25
|
-
rb_node =
|
28
|
+
rb_node = noko_xml_node_wrap(klass, node);
|
26
29
|
rb_obj_call_init(rb_node, argc, argv);
|
27
30
|
|
28
|
-
if(rb_block_given_p()) rb_yield(rb_node);
|
29
|
-
|
30
31
|
return rb_node;
|
31
32
|
}
|
32
33
|
|
33
|
-
|
34
|
-
void
|
34
|
+
void
|
35
|
+
noko_init_xml_document_fragment(void)
|
35
36
|
{
|
36
|
-
|
37
|
-
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
38
|
-
VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
|
39
|
-
|
37
|
+
assert(cNokogiriXmlNode);
|
40
38
|
/*
|
41
39
|
* DocumentFragment represents a DocumentFragment node in an xml document.
|
42
40
|
*/
|
43
|
-
|
44
|
-
|
45
|
-
cNokogiriXmlDocumentFragment = klass;
|
41
|
+
cNokogiriXmlDocumentFragment = rb_define_class_under(mNokogiriXml, "DocumentFragment", cNokogiriXmlNode);
|
46
42
|
|
47
|
-
rb_define_singleton_method(
|
43
|
+
rb_define_singleton_method(cNokogiriXmlDocumentFragment, "new", new, -1);
|
48
44
|
}
|
data/ext/nokogiri/xml_dtd.c
CHANGED
@@ -1,30 +1,35 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
2
|
|
3
|
-
|
3
|
+
VALUE cNokogiriXmlDtd;
|
4
|
+
|
5
|
+
static void
|
6
|
+
notation_copier(void *c_notation_ptr, void *rb_hash_ptr, const xmlChar *name)
|
4
7
|
{
|
5
|
-
VALUE
|
6
|
-
|
8
|
+
VALUE rb_hash = (VALUE)rb_hash_ptr;
|
9
|
+
xmlNotationPtr c_notation = (xmlNotationPtr)c_notation_ptr;
|
10
|
+
VALUE rb_notation;
|
11
|
+
VALUE cNokogiriXmlNotation;
|
12
|
+
VALUE rb_constructor_args[3];
|
7
13
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
argv[0] = (c_notation->name ? NOKOGIRI_STR_NEW2(c_notation->name) : Qnil);
|
12
|
-
argv[1] = (c_notation->PublicID ? NOKOGIRI_STR_NEW2(c_notation->PublicID) : Qnil);
|
13
|
-
argv[2] = (c_notation->SystemID ? NOKOGIRI_STR_NEW2(c_notation->SystemID) : Qnil);
|
14
|
+
rb_constructor_args[0] = (c_notation->name ? NOKOGIRI_STR_NEW2(c_notation->name) : Qnil);
|
15
|
+
rb_constructor_args[1] = (c_notation->PublicID ? NOKOGIRI_STR_NEW2(c_notation->PublicID) : Qnil);
|
16
|
+
rb_constructor_args[2] = (c_notation->SystemID ? NOKOGIRI_STR_NEW2(c_notation->SystemID) : Qnil);
|
14
17
|
|
15
|
-
|
18
|
+
cNokogiriXmlNotation = rb_const_get_at(mNokogiriXml, rb_intern("Notation"));
|
19
|
+
rb_notation = rb_class_new_instance(3, rb_constructor_args, cNokogiriXmlNotation);
|
16
20
|
|
17
|
-
rb_hash_aset(
|
21
|
+
rb_hash_aset(rb_hash, NOKOGIRI_STR_NEW2(name), rb_notation);
|
18
22
|
}
|
19
23
|
|
20
|
-
static void
|
24
|
+
static void
|
25
|
+
element_copier(void *c_node_ptr, void *rb_hash_ptr, const xmlChar *c_name)
|
21
26
|
{
|
22
|
-
VALUE
|
23
|
-
xmlNodePtr
|
27
|
+
VALUE rb_hash = (VALUE)rb_hash_ptr;
|
28
|
+
xmlNodePtr c_node = (xmlNodePtr)c_node_ptr;
|
24
29
|
|
25
|
-
VALUE
|
30
|
+
VALUE rb_node = noko_xml_node_wrap(Qnil, c_node);
|
26
31
|
|
27
|
-
rb_hash_aset(
|
32
|
+
rb_hash_aset(rb_hash, NOKOGIRI_STR_NEW2(c_name), rb_node);
|
28
33
|
}
|
29
34
|
|
30
35
|
/*
|
@@ -33,14 +38,15 @@ static void element_copier(void *_payload, void *data, const xmlChar *name)
|
|
33
38
|
*
|
34
39
|
* Get a hash of the elements for this DTD.
|
35
40
|
*/
|
36
|
-
static VALUE
|
41
|
+
static VALUE
|
42
|
+
entities(VALUE self)
|
37
43
|
{
|
38
44
|
xmlDtdPtr dtd;
|
39
45
|
VALUE hash;
|
40
46
|
|
41
|
-
|
47
|
+
Noko_Node_Get_Struct(self, xmlDtd, dtd);
|
42
48
|
|
43
|
-
if(!dtd->entities) return Qnil;
|
49
|
+
if (!dtd->entities) { return Qnil; }
|
44
50
|
|
45
51
|
hash = rb_hash_new();
|
46
52
|
|
@@ -51,18 +57,19 @@ static VALUE entities(VALUE self)
|
|
51
57
|
|
52
58
|
/*
|
53
59
|
* call-seq:
|
54
|
-
* notations
|
60
|
+
* notations() → Hash<name(String)⇒Notation>
|
55
61
|
*
|
56
|
-
*
|
62
|
+
* [Returns] All the notations for this DTD in a Hash of Notation +name+ to Notation.
|
57
63
|
*/
|
58
|
-
static VALUE
|
64
|
+
static VALUE
|
65
|
+
notations(VALUE self)
|
59
66
|
{
|
60
67
|
xmlDtdPtr dtd;
|
61
68
|
VALUE hash;
|
62
69
|
|
63
|
-
|
70
|
+
Noko_Node_Get_Struct(self, xmlDtd, dtd);
|
64
71
|
|
65
|
-
if(!dtd->notations) return Qnil;
|
72
|
+
if (!dtd->notations) { return Qnil; }
|
66
73
|
|
67
74
|
hash = rb_hash_new();
|
68
75
|
|
@@ -77,16 +84,17 @@ static VALUE notations(VALUE self)
|
|
77
84
|
*
|
78
85
|
* Get a hash of the attributes for this DTD.
|
79
86
|
*/
|
80
|
-
static VALUE
|
87
|
+
static VALUE
|
88
|
+
attributes(VALUE self)
|
81
89
|
{
|
82
90
|
xmlDtdPtr dtd;
|
83
91
|
VALUE hash;
|
84
92
|
|
85
|
-
|
93
|
+
Noko_Node_Get_Struct(self, xmlDtd, dtd);
|
86
94
|
|
87
95
|
hash = rb_hash_new();
|
88
96
|
|
89
|
-
if(!dtd->attributes) return hash;
|
97
|
+
if (!dtd->attributes) { return hash; }
|
90
98
|
|
91
99
|
xmlHashScan((xmlHashTablePtr)dtd->attributes, element_copier, (void *)hash);
|
92
100
|
|
@@ -99,14 +107,15 @@ static VALUE attributes(VALUE self)
|
|
99
107
|
*
|
100
108
|
* Get a hash of the elements for this DTD.
|
101
109
|
*/
|
102
|
-
static VALUE
|
110
|
+
static VALUE
|
111
|
+
elements(VALUE self)
|
103
112
|
{
|
104
113
|
xmlDtdPtr dtd;
|
105
114
|
VALUE hash;
|
106
115
|
|
107
|
-
|
116
|
+
Noko_Node_Get_Struct(self, xmlDtd, dtd);
|
108
117
|
|
109
|
-
if(!dtd->elements) return Qnil;
|
118
|
+
if (!dtd->elements) { return Qnil; }
|
110
119
|
|
111
120
|
hash = rb_hash_new();
|
112
121
|
|
@@ -121,15 +130,16 @@ static VALUE elements(VALUE self)
|
|
121
130
|
*
|
122
131
|
* Validate +document+ returning a list of errors
|
123
132
|
*/
|
124
|
-
static VALUE
|
133
|
+
static VALUE
|
134
|
+
validate(VALUE self, VALUE document)
|
125
135
|
{
|
126
136
|
xmlDocPtr doc;
|
127
137
|
xmlDtdPtr dtd;
|
128
138
|
xmlValidCtxtPtr ctxt;
|
129
139
|
VALUE error_list;
|
130
140
|
|
131
|
-
|
132
|
-
|
141
|
+
Noko_Node_Get_Struct(self, xmlDtd, dtd);
|
142
|
+
doc = noko_xml_document_unwrap(document);
|
133
143
|
error_list = rb_ary_new();
|
134
144
|
|
135
145
|
ctxt = xmlNewValidCtxt();
|
@@ -151,12 +161,13 @@ static VALUE validate(VALUE self, VALUE document)
|
|
151
161
|
*
|
152
162
|
* Get the System ID for this DTD
|
153
163
|
*/
|
154
|
-
static VALUE
|
164
|
+
static VALUE
|
165
|
+
system_id(VALUE self)
|
155
166
|
{
|
156
167
|
xmlDtdPtr dtd;
|
157
|
-
|
168
|
+
Noko_Node_Get_Struct(self, xmlDtd, dtd);
|
158
169
|
|
159
|
-
if(!dtd->SystemID) return Qnil;
|
170
|
+
if (!dtd->SystemID) { return Qnil; }
|
160
171
|
|
161
172
|
return NOKOGIRI_STR_NEW2(dtd->SystemID);
|
162
173
|
}
|
@@ -167,36 +178,31 @@ static VALUE system_id(VALUE self)
|
|
167
178
|
*
|
168
179
|
* Get the External ID for this DTD
|
169
180
|
*/
|
170
|
-
static VALUE
|
181
|
+
static VALUE
|
182
|
+
external_id(VALUE self)
|
171
183
|
{
|
172
184
|
xmlDtdPtr dtd;
|
173
|
-
|
185
|
+
Noko_Node_Get_Struct(self, xmlDtd, dtd);
|
174
186
|
|
175
|
-
if(!dtd->ExternalID) return Qnil;
|
187
|
+
if (!dtd->ExternalID) { return Qnil; }
|
176
188
|
|
177
189
|
return NOKOGIRI_STR_NEW2(dtd->ExternalID);
|
178
190
|
}
|
179
191
|
|
180
|
-
|
181
|
-
|
182
|
-
void init_xml_dtd()
|
192
|
+
void
|
193
|
+
noko_init_xml_dtd(void)
|
183
194
|
{
|
184
|
-
|
185
|
-
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
186
|
-
VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
|
187
|
-
|
195
|
+
assert(cNokogiriXmlNode);
|
188
196
|
/*
|
189
197
|
* Nokogiri::XML::DTD wraps DTD nodes in an XML document
|
190
198
|
*/
|
191
|
-
|
192
|
-
|
193
|
-
cNokogiriXmlDtd
|
194
|
-
|
195
|
-
rb_define_method(
|
196
|
-
rb_define_method(
|
197
|
-
rb_define_method(
|
198
|
-
rb_define_method(
|
199
|
-
rb_define_method(
|
200
|
-
rb_define_method(klass, "system_id", system_id, 0);
|
201
|
-
rb_define_method(klass, "external_id", external_id, 0);
|
199
|
+
cNokogiriXmlDtd = rb_define_class_under(mNokogiriXml, "DTD", cNokogiriXmlNode);
|
200
|
+
|
201
|
+
rb_define_method(cNokogiriXmlDtd, "notations", notations, 0);
|
202
|
+
rb_define_method(cNokogiriXmlDtd, "elements", elements, 0);
|
203
|
+
rb_define_method(cNokogiriXmlDtd, "entities", entities, 0);
|
204
|
+
rb_define_method(cNokogiriXmlDtd, "validate", validate, 1);
|
205
|
+
rb_define_method(cNokogiriXmlDtd, "attributes", attributes, 0);
|
206
|
+
rb_define_method(cNokogiriXmlDtd, "system_id", system_id, 0);
|
207
|
+
rb_define_method(cNokogiriXmlDtd, "external_id", external_id, 0);
|
202
208
|
}
|
@@ -1,123 +1,131 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
2
|
|
3
3
|
VALUE cNokogiriXmlElementContent;
|
4
4
|
|
5
|
+
static const rb_data_type_t element_content_data_type = {
|
6
|
+
.wrap_struct_name = "Nokogiri::XML::ElementContent",
|
7
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
|
8
|
+
};
|
9
|
+
|
5
10
|
/*
|
6
11
|
* call-seq:
|
7
|
-
*
|
12
|
+
* name → String
|
8
13
|
*
|
9
|
-
*
|
14
|
+
* [Returns] The content element's +name+
|
10
15
|
*/
|
11
|
-
static VALUE
|
16
|
+
static VALUE
|
17
|
+
get_name(VALUE self)
|
12
18
|
{
|
13
19
|
xmlElementContentPtr elem;
|
14
|
-
|
20
|
+
TypedData_Get_Struct(self, xmlElementContent, &element_content_data_type, elem);
|
15
21
|
|
16
|
-
if(!elem->name) return Qnil;
|
22
|
+
if (!elem->name) { return Qnil; }
|
17
23
|
return NOKOGIRI_STR_NEW2(elem->name);
|
18
24
|
}
|
19
25
|
|
20
26
|
/*
|
21
27
|
* call-seq:
|
22
|
-
*
|
28
|
+
* type → Integer
|
23
29
|
*
|
24
|
-
*
|
25
|
-
* or OR.
|
30
|
+
* [Returns] The content element's +type+. Possible values are +PCDATA+, +ELEMENT+, +SEQ+, or +OR+.
|
26
31
|
*/
|
27
|
-
static VALUE
|
32
|
+
static VALUE
|
33
|
+
get_type(VALUE self)
|
28
34
|
{
|
29
35
|
xmlElementContentPtr elem;
|
30
|
-
|
36
|
+
TypedData_Get_Struct(self, xmlElementContent, &element_content_data_type, elem);
|
31
37
|
|
32
|
-
return INT2NUM(
|
38
|
+
return INT2NUM(elem->type);
|
33
39
|
}
|
34
40
|
|
35
41
|
/*
|
36
|
-
* call-seq:
|
37
|
-
* c1
|
38
|
-
*
|
39
42
|
* Get the first child.
|
40
43
|
*/
|
41
|
-
static VALUE
|
44
|
+
static VALUE
|
45
|
+
get_c1(VALUE self)
|
42
46
|
{
|
43
47
|
xmlElementContentPtr elem;
|
44
|
-
|
48
|
+
TypedData_Get_Struct(self, xmlElementContent, &element_content_data_type, elem);
|
45
49
|
|
46
|
-
if(!elem->c1) return Qnil;
|
47
|
-
return
|
50
|
+
if (!elem->c1) { return Qnil; }
|
51
|
+
return noko_xml_element_content_wrap(rb_iv_get(self, "@document"), elem->c1);
|
48
52
|
}
|
49
53
|
|
50
54
|
/*
|
51
|
-
*
|
52
|
-
* c2
|
53
|
-
*
|
54
|
-
* Get the first child.
|
55
|
+
* Get the second child.
|
55
56
|
*/
|
56
|
-
static VALUE
|
57
|
+
static VALUE
|
58
|
+
get_c2(VALUE self)
|
57
59
|
{
|
58
60
|
xmlElementContentPtr elem;
|
59
|
-
|
61
|
+
TypedData_Get_Struct(self, xmlElementContent, &element_content_data_type, elem);
|
60
62
|
|
61
|
-
if(!elem->c2) return Qnil;
|
62
|
-
return
|
63
|
+
if (!elem->c2) { return Qnil; }
|
64
|
+
return noko_xml_element_content_wrap(rb_iv_get(self, "@document"), elem->c2);
|
63
65
|
}
|
64
66
|
|
65
67
|
/*
|
66
68
|
* call-seq:
|
67
|
-
*
|
69
|
+
* occur → Integer
|
68
70
|
*
|
69
|
-
*
|
70
|
-
* or PLUS.
|
71
|
+
* [Returns] The content element's +occur+ flag. Possible values are +ONCE+, +OPT+, +MULT+ or +PLUS+.
|
71
72
|
*/
|
72
|
-
static VALUE
|
73
|
+
static VALUE
|
74
|
+
get_occur(VALUE self)
|
73
75
|
{
|
74
76
|
xmlElementContentPtr elem;
|
75
|
-
|
77
|
+
TypedData_Get_Struct(self, xmlElementContent, &element_content_data_type, elem);
|
76
78
|
|
77
|
-
return INT2NUM(
|
79
|
+
return INT2NUM(elem->ocur);
|
78
80
|
}
|
79
81
|
|
80
82
|
/*
|
81
83
|
* call-seq:
|
82
|
-
*
|
84
|
+
* prefix → String
|
83
85
|
*
|
84
|
-
*
|
86
|
+
* [Returns] The content element's namespace +prefix+.
|
85
87
|
*/
|
86
|
-
static VALUE
|
88
|
+
static VALUE
|
89
|
+
get_prefix(VALUE self)
|
87
90
|
{
|
88
91
|
xmlElementContentPtr elem;
|
89
|
-
|
92
|
+
TypedData_Get_Struct(self, xmlElementContent, &element_content_data_type, elem);
|
90
93
|
|
91
|
-
if(!elem->prefix) return Qnil;
|
94
|
+
if (!elem->prefix) { return Qnil; }
|
92
95
|
|
93
96
|
return NOKOGIRI_STR_NEW2(elem->prefix);
|
94
97
|
}
|
95
98
|
|
96
|
-
|
99
|
+
/*
|
100
|
+
* create a Nokogiri::XML::ElementContent object around an +element+.
|
101
|
+
*/
|
102
|
+
VALUE
|
103
|
+
noko_xml_element_content_wrap(VALUE rb_document, xmlElementContentPtr c_element_content)
|
97
104
|
{
|
98
|
-
VALUE elem =
|
105
|
+
VALUE elem = TypedData_Wrap_Struct(
|
106
|
+
cNokogiriXmlElementContent,
|
107
|
+
&element_content_data_type,
|
108
|
+
c_element_content
|
109
|
+
);
|
99
110
|
|
100
|
-
/*
|
101
|
-
|
102
|
-
rb_iv_set(elem, "@document", doc);
|
111
|
+
/* keep a handle on the document for GC marking */
|
112
|
+
rb_iv_set(elem, "@document", rb_document);
|
103
113
|
|
104
114
|
return elem;
|
105
115
|
}
|
106
116
|
|
107
|
-
void
|
117
|
+
void
|
118
|
+
noko_init_xml_element_content(void)
|
108
119
|
{
|
109
|
-
|
110
|
-
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
111
|
-
|
112
|
-
VALUE klass = rb_define_class_under(xml, "ElementContent", rb_cObject);
|
120
|
+
cNokogiriXmlElementContent = rb_define_class_under(mNokogiriXml, "ElementContent", rb_cObject);
|
113
121
|
|
114
|
-
cNokogiriXmlElementContent
|
122
|
+
rb_undef_alloc_func(cNokogiriXmlElementContent);
|
115
123
|
|
116
|
-
rb_define_method(
|
117
|
-
rb_define_method(
|
118
|
-
rb_define_method(
|
119
|
-
rb_define_method(
|
124
|
+
rb_define_method(cNokogiriXmlElementContent, "name", get_name, 0);
|
125
|
+
rb_define_method(cNokogiriXmlElementContent, "type", get_type, 0);
|
126
|
+
rb_define_method(cNokogiriXmlElementContent, "occur", get_occur, 0);
|
127
|
+
rb_define_method(cNokogiriXmlElementContent, "prefix", get_prefix, 0);
|
120
128
|
|
121
|
-
rb_define_private_method(
|
122
|
-
rb_define_private_method(
|
129
|
+
rb_define_private_method(cNokogiriXmlElementContent, "c1", get_c1, 0);
|
130
|
+
rb_define_private_method(cNokogiriXmlElementContent, "c2", get_c2, 0);
|
123
131
|
}
|
@@ -1,69 +1,69 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
|
+
|
3
|
+
VALUE cNokogiriXmlElementDecl;
|
2
4
|
|
3
5
|
static ID id_document;
|
4
6
|
|
5
7
|
/*
|
6
8
|
* call-seq:
|
7
|
-
*
|
9
|
+
* element_type → Integer
|
8
10
|
*
|
9
11
|
* The element_type
|
10
12
|
*/
|
11
|
-
static VALUE
|
13
|
+
static VALUE
|
14
|
+
element_type(VALUE self)
|
12
15
|
{
|
13
16
|
xmlElementPtr node;
|
14
|
-
|
15
|
-
return INT2NUM(
|
17
|
+
Noko_Node_Get_Struct(self, xmlElement, node);
|
18
|
+
return INT2NUM(node->etype);
|
16
19
|
}
|
17
20
|
|
18
21
|
/*
|
19
22
|
* call-seq:
|
20
|
-
*
|
23
|
+
* content → Nokogiri::XML::ElementContent
|
21
24
|
*
|
22
|
-
* The
|
25
|
+
* [Returns] The root of this element declaration's content tree.
|
23
26
|
*/
|
24
|
-
static VALUE
|
27
|
+
static VALUE
|
28
|
+
content(VALUE self)
|
25
29
|
{
|
26
30
|
xmlElementPtr node;
|
27
|
-
|
31
|
+
Noko_Node_Get_Struct(self, xmlElement, node);
|
28
32
|
|
29
|
-
if(!node->content) return Qnil;
|
33
|
+
if (!node->content) { return Qnil; }
|
30
34
|
|
31
|
-
return
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
+
return noko_xml_element_content_wrap(
|
36
|
+
rb_funcall(self, id_document, 0),
|
37
|
+
node->content
|
38
|
+
);
|
35
39
|
}
|
36
40
|
|
37
41
|
/*
|
38
42
|
* call-seq:
|
39
|
-
*
|
43
|
+
* prefix → String
|
40
44
|
*
|
41
|
-
* The namespace prefix for this
|
45
|
+
* [Returns] The namespace +prefix+ for this element declaration.
|
42
46
|
*/
|
43
|
-
static VALUE
|
47
|
+
static VALUE
|
48
|
+
prefix(VALUE self)
|
44
49
|
{
|
45
50
|
xmlElementPtr node;
|
46
|
-
|
51
|
+
Noko_Node_Get_Struct(self, xmlElement, node);
|
47
52
|
|
48
|
-
if(!node->prefix) return Qnil;
|
53
|
+
if (!node->prefix) { return Qnil; }
|
49
54
|
|
50
55
|
return NOKOGIRI_STR_NEW2(node->prefix);
|
51
56
|
}
|
52
57
|
|
53
|
-
|
54
|
-
|
55
|
-
void init_xml_element_decl()
|
58
|
+
void
|
59
|
+
noko_init_xml_element_decl(void)
|
56
60
|
{
|
57
|
-
|
58
|
-
|
59
|
-
VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
|
60
|
-
VALUE klass = rb_define_class_under(xml, "ElementDecl", node);
|
61
|
-
|
62
|
-
cNokogiriXmlElementDecl = klass;
|
61
|
+
assert(cNokogiriXmlNode);
|
62
|
+
cNokogiriXmlElementDecl = rb_define_class_under(mNokogiriXml, "ElementDecl", cNokogiriXmlNode);
|
63
63
|
|
64
|
-
rb_define_method(
|
65
|
-
rb_define_method(
|
66
|
-
rb_define_method(
|
64
|
+
rb_define_method(cNokogiriXmlElementDecl, "element_type", element_type, 0);
|
65
|
+
rb_define_method(cNokogiriXmlElementDecl, "content", content, 0);
|
66
|
+
rb_define_method(cNokogiriXmlElementDecl, "prefix", prefix, 0);
|
67
67
|
|
68
68
|
id_document = rb_intern("document");
|
69
69
|
}
|