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.

Files changed (226) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +45 -0
  3. data/LICENSE-DEPENDENCIES.md +1636 -1024
  4. data/LICENSE.md +5 -28
  5. data/README.md +203 -89
  6. data/bin/nokogiri +63 -50
  7. data/dependencies.yml +33 -61
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +864 -418
  10. data/ext/nokogiri/gumbo.c +594 -0
  11. data/ext/nokogiri/html4_document.c +165 -0
  12. data/ext/nokogiri/html4_element_description.c +299 -0
  13. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  14. data/ext/nokogiri/html4_sax_parser_context.c +108 -0
  15. data/ext/nokogiri/html4_sax_push_parser.c +95 -0
  16. data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
  17. data/ext/nokogiri/nokogiri.c +251 -105
  18. data/ext/nokogiri/nokogiri.h +215 -90
  19. data/ext/nokogiri/test_global_handlers.c +40 -0
  20. data/ext/nokogiri/xml_attr.c +17 -17
  21. data/ext/nokogiri/xml_attribute_decl.c +22 -22
  22. data/ext/nokogiri/xml_cdata.c +40 -31
  23. data/ext/nokogiri/xml_comment.c +20 -27
  24. data/ext/nokogiri/xml_document.c +401 -240
  25. data/ext/nokogiri/xml_document_fragment.c +13 -17
  26. data/ext/nokogiri/xml_dtd.c +64 -58
  27. data/ext/nokogiri/xml_element_content.c +63 -55
  28. data/ext/nokogiri/xml_element_decl.c +31 -31
  29. data/ext/nokogiri/xml_encoding_handler.c +54 -21
  30. data/ext/nokogiri/xml_entity_decl.c +37 -35
  31. data/ext/nokogiri/xml_entity_reference.c +17 -19
  32. data/ext/nokogiri/xml_namespace.c +135 -61
  33. data/ext/nokogiri/xml_node.c +1346 -677
  34. data/ext/nokogiri/xml_node_set.c +246 -216
  35. data/ext/nokogiri/xml_processing_instruction.c +18 -20
  36. data/ext/nokogiri/xml_reader.c +347 -212
  37. data/ext/nokogiri/xml_relax_ng.c +86 -77
  38. data/ext/nokogiri/xml_sax_parser.c +149 -124
  39. data/ext/nokogiri/xml_sax_parser_context.c +145 -103
  40. data/ext/nokogiri/xml_sax_push_parser.c +64 -36
  41. data/ext/nokogiri/xml_schema.c +138 -81
  42. data/ext/nokogiri/xml_syntax_error.c +42 -21
  43. data/ext/nokogiri/xml_text.c +36 -26
  44. data/ext/nokogiri/xml_xpath_context.c +366 -178
  45. data/ext/nokogiri/xslt_stylesheet.c +335 -189
  46. data/gumbo-parser/CHANGES.md +63 -0
  47. data/gumbo-parser/Makefile +111 -0
  48. data/gumbo-parser/THANKS +27 -0
  49. data/gumbo-parser/src/Makefile +34 -0
  50. data/gumbo-parser/src/README.md +41 -0
  51. data/gumbo-parser/src/ascii.c +75 -0
  52. data/gumbo-parser/src/ascii.h +115 -0
  53. data/gumbo-parser/src/attribute.c +42 -0
  54. data/gumbo-parser/src/attribute.h +17 -0
  55. data/gumbo-parser/src/char_ref.c +22225 -0
  56. data/gumbo-parser/src/char_ref.h +29 -0
  57. data/gumbo-parser/src/char_ref.rl +2154 -0
  58. data/gumbo-parser/src/error.c +630 -0
  59. data/gumbo-parser/src/error.h +148 -0
  60. data/gumbo-parser/src/foreign_attrs.c +103 -0
  61. data/gumbo-parser/src/foreign_attrs.gperf +27 -0
  62. data/gumbo-parser/src/insertion_mode.h +33 -0
  63. data/gumbo-parser/src/macros.h +91 -0
  64. data/gumbo-parser/src/nokogiri_gumbo.h +944 -0
  65. data/gumbo-parser/src/parser.c +4891 -0
  66. data/gumbo-parser/src/parser.h +41 -0
  67. data/gumbo-parser/src/replacement.h +33 -0
  68. data/gumbo-parser/src/string_buffer.c +103 -0
  69. data/gumbo-parser/src/string_buffer.h +68 -0
  70. data/gumbo-parser/src/string_piece.c +48 -0
  71. data/gumbo-parser/src/svg_attrs.c +174 -0
  72. data/gumbo-parser/src/svg_attrs.gperf +77 -0
  73. data/gumbo-parser/src/svg_tags.c +137 -0
  74. data/gumbo-parser/src/svg_tags.gperf +55 -0
  75. data/gumbo-parser/src/tag.c +223 -0
  76. data/gumbo-parser/src/tag_lookup.c +382 -0
  77. data/gumbo-parser/src/tag_lookup.gperf +170 -0
  78. data/gumbo-parser/src/tag_lookup.h +13 -0
  79. data/gumbo-parser/src/token_buffer.c +79 -0
  80. data/gumbo-parser/src/token_buffer.h +71 -0
  81. data/gumbo-parser/src/token_type.h +17 -0
  82. data/gumbo-parser/src/tokenizer.c +3463 -0
  83. data/gumbo-parser/src/tokenizer.h +112 -0
  84. data/gumbo-parser/src/tokenizer_states.h +339 -0
  85. data/gumbo-parser/src/utf8.c +245 -0
  86. data/gumbo-parser/src/utf8.h +164 -0
  87. data/gumbo-parser/src/util.c +66 -0
  88. data/gumbo-parser/src/util.h +34 -0
  89. data/gumbo-parser/src/vector.c +111 -0
  90. data/gumbo-parser/src/vector.h +45 -0
  91. data/lib/nokogiri/class_resolver.rb +67 -0
  92. data/lib/nokogiri/css/node.rb +10 -8
  93. data/lib/nokogiri/css/parser.rb +397 -377
  94. data/lib/nokogiri/css/parser.y +250 -245
  95. data/lib/nokogiri/css/parser_extras.rb +54 -49
  96. data/lib/nokogiri/css/syntax_error.rb +3 -1
  97. data/lib/nokogiri/css/tokenizer.rb +107 -104
  98. data/lib/nokogiri/css/tokenizer.rex +3 -2
  99. data/lib/nokogiri/css/xpath_visitor.rb +224 -95
  100. data/lib/nokogiri/css.rb +56 -17
  101. data/lib/nokogiri/decorators/slop.rb +9 -7
  102. data/lib/nokogiri/encoding_handler.rb +57 -0
  103. data/lib/nokogiri/extension.rb +32 -0
  104. data/lib/nokogiri/gumbo.rb +15 -0
  105. data/lib/nokogiri/html.rb +38 -27
  106. data/lib/nokogiri/{html → html4}/builder.rb +4 -2
  107. data/lib/nokogiri/html4/document.rb +214 -0
  108. data/lib/nokogiri/html4/document_fragment.rb +54 -0
  109. data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
  110. data/lib/nokogiri/html4/element_description_defaults.rb +2040 -0
  111. data/lib/nokogiri/html4/encoding_reader.rb +121 -0
  112. data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
  113. data/lib/nokogiri/{html → html4}/sax/parser.rb +17 -16
  114. data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
  115. data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
  116. data/lib/nokogiri/html4.rb +47 -0
  117. data/lib/nokogiri/html5/document.rb +168 -0
  118. data/lib/nokogiri/html5/document_fragment.rb +90 -0
  119. data/lib/nokogiri/html5/node.rb +103 -0
  120. data/lib/nokogiri/html5.rb +392 -0
  121. data/lib/nokogiri/jruby/dependencies.rb +3 -0
  122. data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
  123. data/lib/nokogiri/syntax_error.rb +2 -0
  124. data/lib/nokogiri/version/constant.rb +6 -0
  125. data/lib/nokogiri/version/info.rb +223 -0
  126. data/lib/nokogiri/version.rb +3 -108
  127. data/lib/nokogiri/xml/attr.rb +55 -3
  128. data/lib/nokogiri/xml/attribute_decl.rb +6 -2
  129. data/lib/nokogiri/xml/builder.rb +98 -54
  130. data/lib/nokogiri/xml/cdata.rb +3 -1
  131. data/lib/nokogiri/xml/character_data.rb +2 -0
  132. data/lib/nokogiri/xml/document.rb +312 -126
  133. data/lib/nokogiri/xml/document_fragment.rb +93 -48
  134. data/lib/nokogiri/xml/dtd.rb +4 -2
  135. data/lib/nokogiri/xml/element_content.rb +12 -2
  136. data/lib/nokogiri/xml/element_decl.rb +6 -2
  137. data/lib/nokogiri/xml/entity_decl.rb +7 -3
  138. data/lib/nokogiri/xml/entity_reference.rb +2 -0
  139. data/lib/nokogiri/xml/namespace.rb +45 -0
  140. data/lib/nokogiri/xml/node/save_options.rb +23 -8
  141. data/lib/nokogiri/xml/node.rb +1088 -418
  142. data/lib/nokogiri/xml/node_set.rb +173 -63
  143. data/lib/nokogiri/xml/notation.rb +13 -0
  144. data/lib/nokogiri/xml/parse_options.rb +145 -52
  145. data/lib/nokogiri/xml/pp/character_data.rb +9 -6
  146. data/lib/nokogiri/xml/pp/node.rb +42 -30
  147. data/lib/nokogiri/xml/pp.rb +4 -2
  148. data/lib/nokogiri/xml/processing_instruction.rb +4 -1
  149. data/lib/nokogiri/xml/reader.rb +21 -28
  150. data/lib/nokogiri/xml/relax_ng.rb +8 -2
  151. data/lib/nokogiri/xml/sax/document.rb +45 -49
  152. data/lib/nokogiri/xml/sax/parser.rb +39 -36
  153. data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
  154. data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
  155. data/lib/nokogiri/xml/sax.rb +6 -4
  156. data/lib/nokogiri/xml/schema.rb +19 -9
  157. data/lib/nokogiri/xml/searchable.rb +120 -72
  158. data/lib/nokogiri/xml/syntax_error.rb +6 -4
  159. data/lib/nokogiri/xml/text.rb +2 -0
  160. data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
  161. data/lib/nokogiri/xml/xpath.rb +15 -4
  162. data/lib/nokogiri/xml/xpath_context.rb +3 -3
  163. data/lib/nokogiri/xml.rb +38 -37
  164. data/lib/nokogiri/xslt/stylesheet.rb +3 -1
  165. data/lib/nokogiri/xslt.rb +101 -22
  166. data/lib/nokogiri.rb +59 -75
  167. data/lib/xsd/xmlparser/nokogiri.rb +29 -25
  168. data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
  169. data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
  170. data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
  171. data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
  172. data/patches/libxml2/0010-update-config.guess-and-config.sub-for-libxml2.patch +224 -0
  173. data/patches/libxml2/0011-rip-out-libxml2-s-libc_single_threaded-support.patch +30 -0
  174. data/patches/libxslt/0001-update-config.guess-and-config.sub-for-libxslt.patch +224 -0
  175. data/ports/archives/libxml2-2.11.4.tar.xz +0 -0
  176. data/ports/archives/libxslt-1.1.38.tar.xz +0 -0
  177. metadata +128 -265
  178. data/ext/nokogiri/html_document.c +0 -170
  179. data/ext/nokogiri/html_document.h +0 -10
  180. data/ext/nokogiri/html_element_description.c +0 -279
  181. data/ext/nokogiri/html_element_description.h +0 -10
  182. data/ext/nokogiri/html_entity_lookup.c +0 -32
  183. data/ext/nokogiri/html_entity_lookup.h +0 -8
  184. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  185. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  186. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  187. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  188. data/ext/nokogiri/xml_attr.h +0 -9
  189. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  190. data/ext/nokogiri/xml_cdata.h +0 -9
  191. data/ext/nokogiri/xml_comment.h +0 -9
  192. data/ext/nokogiri/xml_document.h +0 -23
  193. data/ext/nokogiri/xml_document_fragment.h +0 -10
  194. data/ext/nokogiri/xml_dtd.h +0 -10
  195. data/ext/nokogiri/xml_element_content.h +0 -10
  196. data/ext/nokogiri/xml_element_decl.h +0 -9
  197. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  198. data/ext/nokogiri/xml_entity_decl.h +0 -10
  199. data/ext/nokogiri/xml_entity_reference.h +0 -9
  200. data/ext/nokogiri/xml_io.c +0 -61
  201. data/ext/nokogiri/xml_io.h +0 -11
  202. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  203. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  204. data/ext/nokogiri/xml_namespace.h +0 -14
  205. data/ext/nokogiri/xml_node.h +0 -13
  206. data/ext/nokogiri/xml_node_set.h +0 -12
  207. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  208. data/ext/nokogiri/xml_reader.h +0 -10
  209. data/ext/nokogiri/xml_relax_ng.h +0 -9
  210. data/ext/nokogiri/xml_sax_parser.h +0 -39
  211. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  212. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  213. data/ext/nokogiri/xml_schema.h +0 -9
  214. data/ext/nokogiri/xml_syntax_error.h +0 -13
  215. data/ext/nokogiri/xml_text.h +0 -9
  216. data/ext/nokogiri/xml_xpath_context.h +0 -10
  217. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  218. data/lib/nokogiri/html/document.rb +0 -335
  219. data/lib/nokogiri/html/document_fragment.rb +0 -49
  220. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  221. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  222. data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
  223. data/patches/libxml2/0002-Fix-nullptr-deref-with-XPath-logic-ops.patch +0 -54
  224. data/patches/libxml2/0003-Fix-infinite-loop-in-LZMA-decompression.patch +0 -50
  225. data/ports/archives/libxml2-2.9.8.tar.gz +0 -0
  226. data/ports/archives/libxslt-1.1.32.tar.gz +0 -0
@@ -1,4 +1,6 @@
1
- #include <xml_document_fragment.h>
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 new(int argc, VALUE *argv, VALUE klass)
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
- Data_Get_Struct(document, xmlDoc, xml_doc);
22
+ xml_doc = noko_xml_document_unwrap(document);
20
23
 
21
24
  node = xmlNewDocFragment(xml_doc->doc);
22
25
 
23
- nokogiri_root_node(node);
26
+ noko_xml_document_pin_node(node);
24
27
 
25
- rb_node = Nokogiri_wrap_xml_node(klass, 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
- VALUE cNokogiriXmlDocumentFragment;
34
- void init_xml_document_fragment()
34
+ void
35
+ noko_init_xml_document_fragment(void)
35
36
  {
36
- VALUE nokogiri = rb_define_module("Nokogiri");
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
- VALUE klass = rb_define_class_under(xml, "DocumentFragment", node);
44
-
45
- cNokogiriXmlDocumentFragment = klass;
41
+ cNokogiriXmlDocumentFragment = rb_define_class_under(mNokogiriXml, "DocumentFragment", cNokogiriXmlNode);
46
42
 
47
- rb_define_singleton_method(klass, "new", new, -1);
43
+ rb_define_singleton_method(cNokogiriXmlDocumentFragment, "new", new, -1);
48
44
  }
@@ -1,30 +1,35 @@
1
- #include <xml_dtd.h>
1
+ #include <nokogiri.h>
2
2
 
3
- static void notation_copier(void *payload, void *data, const xmlChar *name)
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 hash = (VALUE)data;
6
- VALUE klass = rb_const_get(mNokogiriXml, rb_intern("Notation"));
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
- xmlNotationPtr c_notation = (xmlNotationPtr)payload;
9
- VALUE notation;
10
- VALUE argv[3];
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
- notation = rb_class_new_instance(3, argv, klass);
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(hash, NOKOGIRI_STR_NEW2(name),notation);
21
+ rb_hash_aset(rb_hash, NOKOGIRI_STR_NEW2(name), rb_notation);
18
22
  }
19
23
 
20
- static void element_copier(void *_payload, void *data, const xmlChar *name)
24
+ static void
25
+ element_copier(void *c_node_ptr, void *rb_hash_ptr, const xmlChar *c_name)
21
26
  {
22
- VALUE hash = (VALUE)data;
23
- xmlNodePtr payload = (xmlNodePtr)_payload;
27
+ VALUE rb_hash = (VALUE)rb_hash_ptr;
28
+ xmlNodePtr c_node = (xmlNodePtr)c_node_ptr;
24
29
 
25
- VALUE element = Nokogiri_wrap_xml_node(Qnil, payload);
30
+ VALUE rb_node = noko_xml_node_wrap(Qnil, c_node);
26
31
 
27
- rb_hash_aset(hash, NOKOGIRI_STR_NEW2(name), element);
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 entities(VALUE self)
41
+ static VALUE
42
+ entities(VALUE self)
37
43
  {
38
44
  xmlDtdPtr dtd;
39
45
  VALUE hash;
40
46
 
41
- Data_Get_Struct(self, xmlDtd, dtd);
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
- * Get a hash of the notations for this DTD.
62
+ * [Returns] All the notations for this DTD in a Hash of Notation +name+ to Notation.
57
63
  */
58
- static VALUE notations(VALUE self)
64
+ static VALUE
65
+ notations(VALUE self)
59
66
  {
60
67
  xmlDtdPtr dtd;
61
68
  VALUE hash;
62
69
 
63
- Data_Get_Struct(self, xmlDtd, dtd);
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 attributes(VALUE self)
87
+ static VALUE
88
+ attributes(VALUE self)
81
89
  {
82
90
  xmlDtdPtr dtd;
83
91
  VALUE hash;
84
92
 
85
- Data_Get_Struct(self, xmlDtd, dtd);
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 elements(VALUE self)
110
+ static VALUE
111
+ elements(VALUE self)
103
112
  {
104
113
  xmlDtdPtr dtd;
105
114
  VALUE hash;
106
115
 
107
- Data_Get_Struct(self, xmlDtd, dtd);
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 validate(VALUE self, VALUE document)
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
- Data_Get_Struct(self, xmlDtd, dtd);
132
- Data_Get_Struct(document, xmlDoc, doc);
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 system_id(VALUE self)
164
+ static VALUE
165
+ system_id(VALUE self)
155
166
  {
156
167
  xmlDtdPtr dtd;
157
- Data_Get_Struct(self, xmlDtd, dtd);
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 external_id(VALUE self)
181
+ static VALUE
182
+ external_id(VALUE self)
171
183
  {
172
184
  xmlDtdPtr dtd;
173
- Data_Get_Struct(self, xmlDtd, dtd);
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
- VALUE cNokogiriXmlDtd;
181
-
182
- void init_xml_dtd()
192
+ void
193
+ noko_init_xml_dtd(void)
183
194
  {
184
- VALUE nokogiri = rb_define_module("Nokogiri");
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
- VALUE klass = rb_define_class_under(xml, "DTD", node);
192
-
193
- cNokogiriXmlDtd = klass;
194
-
195
- rb_define_method(klass, "notations", notations, 0);
196
- rb_define_method(klass, "elements", elements, 0);
197
- rb_define_method(klass, "entities", entities, 0);
198
- rb_define_method(klass, "validate", validate, 1);
199
- rb_define_method(klass, "attributes", attributes, 0);
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 <xml_element_content.h>
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
- * name
12
+ * name → String
8
13
  *
9
- * Get the require element +name+
14
+ * [Returns] The content element's +name+
10
15
  */
11
- static VALUE get_name(VALUE self)
16
+ static VALUE
17
+ get_name(VALUE self)
12
18
  {
13
19
  xmlElementContentPtr elem;
14
- Data_Get_Struct(self, xmlElementContent, elem);
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
- * type
28
+ * type → Integer
23
29
  *
24
- * Get the element content +type+. Possible values are PCDATA, ELEMENT, SEQ,
25
- * or OR.
30
+ * [Returns] The content element's +type+. Possible values are +PCDATA+, +ELEMENT+, +SEQ+, or +OR+.
26
31
  */
27
- static VALUE get_type(VALUE self)
32
+ static VALUE
33
+ get_type(VALUE self)
28
34
  {
29
35
  xmlElementContentPtr elem;
30
- Data_Get_Struct(self, xmlElementContent, elem);
36
+ TypedData_Get_Struct(self, xmlElementContent, &element_content_data_type, elem);
31
37
 
32
- return INT2NUM((long)elem->type);
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 get_c1(VALUE self)
44
+ static VALUE
45
+ get_c1(VALUE self)
42
46
  {
43
47
  xmlElementContentPtr elem;
44
- Data_Get_Struct(self, xmlElementContent, elem);
48
+ TypedData_Get_Struct(self, xmlElementContent, &element_content_data_type, elem);
45
49
 
46
- if(!elem->c1) return Qnil;
47
- return Nokogiri_wrap_element_content(rb_iv_get(self, "@document"), elem->c1);
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
- * call-seq:
52
- * c2
53
- *
54
- * Get the first child.
55
+ * Get the second child.
55
56
  */
56
- static VALUE get_c2(VALUE self)
57
+ static VALUE
58
+ get_c2(VALUE self)
57
59
  {
58
60
  xmlElementContentPtr elem;
59
- Data_Get_Struct(self, xmlElementContent, elem);
61
+ TypedData_Get_Struct(self, xmlElementContent, &element_content_data_type, elem);
60
62
 
61
- if(!elem->c2) return Qnil;
62
- return Nokogiri_wrap_element_content(rb_iv_get(self, "@document"), elem->c2);
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
- * occur
69
+ * occur → Integer
68
70
  *
69
- * Get the element content +occur+ flag. Possible values are ONCE, OPT, MULT
70
- * or PLUS.
71
+ * [Returns] The content element's +occur+ flag. Possible values are +ONCE+, +OPT+, +MULT+ or +PLUS+.
71
72
  */
72
- static VALUE get_occur(VALUE self)
73
+ static VALUE
74
+ get_occur(VALUE self)
73
75
  {
74
76
  xmlElementContentPtr elem;
75
- Data_Get_Struct(self, xmlElementContent, elem);
77
+ TypedData_Get_Struct(self, xmlElementContent, &element_content_data_type, elem);
76
78
 
77
- return INT2NUM((long)elem->ocur);
79
+ return INT2NUM(elem->ocur);
78
80
  }
79
81
 
80
82
  /*
81
83
  * call-seq:
82
- * prefix
84
+ * prefix → String
83
85
  *
84
- * Get the element content namespace +prefix+.
86
+ * [Returns] The content element's namespace +prefix+.
85
87
  */
86
- static VALUE get_prefix(VALUE self)
88
+ static VALUE
89
+ get_prefix(VALUE self)
87
90
  {
88
91
  xmlElementContentPtr elem;
89
- Data_Get_Struct(self, xmlElementContent, elem);
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
- VALUE Nokogiri_wrap_element_content(VALUE doc, xmlElementContentPtr element)
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 = Data_Wrap_Struct(cNokogiriXmlElementContent, 0, 0, element);
105
+ VALUE elem = TypedData_Wrap_Struct(
106
+ cNokogiriXmlElementContent,
107
+ &element_content_data_type,
108
+ c_element_content
109
+ );
99
110
 
100
- /* Setting the document is necessary so that this does not get GC'd until */
101
- /* the document is GC'd */
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 init_xml_element_content()
117
+ void
118
+ noko_init_xml_element_content(void)
108
119
  {
109
- VALUE nokogiri = rb_define_module("Nokogiri");
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 = klass;
122
+ rb_undef_alloc_func(cNokogiriXmlElementContent);
115
123
 
116
- rb_define_method(klass, "name", get_name, 0);
117
- rb_define_method(klass, "type", get_type, 0);
118
- rb_define_method(klass, "occur", get_occur, 0);
119
- rb_define_method(klass, "prefix", get_prefix, 0);
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(klass, "c1", get_c1, 0);
122
- rb_define_private_method(klass, "c2", get_c2, 0);
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 <xml_element_decl.h>
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
- * element_type
9
+ * element_type → Integer
8
10
  *
9
11
  * The element_type
10
12
  */
11
- static VALUE element_type(VALUE self)
13
+ static VALUE
14
+ element_type(VALUE self)
12
15
  {
13
16
  xmlElementPtr node;
14
- Data_Get_Struct(self, xmlElement, node);
15
- return INT2NUM((long)node->etype);
17
+ Noko_Node_Get_Struct(self, xmlElement, node);
18
+ return INT2NUM(node->etype);
16
19
  }
17
20
 
18
21
  /*
19
22
  * call-seq:
20
- * content
23
+ * content → Nokogiri::XML::ElementContent
21
24
  *
22
- * The allowed content for this ElementDecl
25
+ * [Returns] The root of this element declaration's content tree.
23
26
  */
24
- static VALUE content(VALUE self)
27
+ static VALUE
28
+ content(VALUE self)
25
29
  {
26
30
  xmlElementPtr node;
27
- Data_Get_Struct(self, xmlElement, node);
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 Nokogiri_wrap_element_content(
32
- rb_funcall(self, id_document, 0),
33
- node->content
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
- * prefix
43
+ * prefix → String
40
44
  *
41
- * The namespace prefix for this ElementDecl
45
+ * [Returns] The namespace +prefix+ for this element declaration.
42
46
  */
43
- static VALUE prefix(VALUE self)
47
+ static VALUE
48
+ prefix(VALUE self)
44
49
  {
45
50
  xmlElementPtr node;
46
- Data_Get_Struct(self, xmlElement, node);
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
- VALUE cNokogiriXmlElementDecl;
54
-
55
- void init_xml_element_decl()
58
+ void
59
+ noko_init_xml_element_decl(void)
56
60
  {
57
- VALUE nokogiri = rb_define_module("Nokogiri");
58
- VALUE xml = rb_define_module_under(nokogiri, "XML");
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(klass, "element_type", element_type, 0);
65
- rb_define_method(klass, "content", content, 0);
66
- rb_define_method(klass, "prefix", prefix, 0);
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
  }