nokogiri 1.10.9 → 1.18.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

Files changed (230) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +38 -0
  3. data/LICENSE-DEPENDENCIES.md +1632 -1022
  4. data/LICENSE.md +1 -1
  5. data/README.md +190 -95
  6. data/bin/nokogiri +63 -50
  7. data/dependencies.yml +34 -66
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +909 -422
  10. data/ext/nokogiri/gumbo.c +610 -0
  11. data/ext/nokogiri/html4_document.c +171 -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.c +40 -0
  15. data/ext/nokogiri/html4_sax_parser_context.c +98 -0
  16. data/ext/nokogiri/html4_sax_push_parser.c +96 -0
  17. data/ext/nokogiri/libxml2_polyfill.c +114 -0
  18. data/ext/nokogiri/nokogiri.c +258 -105
  19. data/ext/nokogiri/nokogiri.h +207 -90
  20. data/ext/nokogiri/test_global_handlers.c +40 -0
  21. data/ext/nokogiri/xml_attr.c +18 -18
  22. data/ext/nokogiri/xml_attribute_decl.c +22 -22
  23. data/ext/nokogiri/xml_cdata.c +33 -33
  24. data/ext/nokogiri/xml_comment.c +19 -31
  25. data/ext/nokogiri/xml_document.c +499 -323
  26. data/ext/nokogiri/xml_document_fragment.c +17 -36
  27. data/ext/nokogiri/xml_dtd.c +65 -59
  28. data/ext/nokogiri/xml_element_content.c +63 -55
  29. data/ext/nokogiri/xml_element_decl.c +31 -31
  30. data/ext/nokogiri/xml_encoding_handler.c +54 -21
  31. data/ext/nokogiri/xml_entity_decl.c +37 -35
  32. data/ext/nokogiri/xml_entity_reference.c +17 -19
  33. data/ext/nokogiri/xml_namespace.c +131 -61
  34. data/ext/nokogiri/xml_node.c +1429 -723
  35. data/ext/nokogiri/xml_node_set.c +257 -225
  36. data/ext/nokogiri/xml_processing_instruction.c +18 -20
  37. data/ext/nokogiri/xml_reader.c +340 -231
  38. data/ext/nokogiri/xml_relax_ng.c +87 -99
  39. data/ext/nokogiri/xml_sax_parser.c +269 -176
  40. data/ext/nokogiri/xml_sax_parser_context.c +286 -152
  41. data/ext/nokogiri/xml_sax_push_parser.c +111 -64
  42. data/ext/nokogiri/xml_schema.c +132 -140
  43. data/ext/nokogiri/xml_syntax_error.c +52 -23
  44. data/ext/nokogiri/xml_text.c +37 -30
  45. data/ext/nokogiri/xml_xpath_context.c +373 -185
  46. data/ext/nokogiri/xslt_stylesheet.c +342 -191
  47. data/gumbo-parser/CHANGES.md +63 -0
  48. data/gumbo-parser/Makefile +129 -0
  49. data/gumbo-parser/THANKS +27 -0
  50. data/gumbo-parser/src/Makefile +34 -0
  51. data/gumbo-parser/src/README.md +41 -0
  52. data/gumbo-parser/src/ascii.c +75 -0
  53. data/gumbo-parser/src/ascii.h +115 -0
  54. data/gumbo-parser/src/attribute.c +42 -0
  55. data/gumbo-parser/src/attribute.h +17 -0
  56. data/gumbo-parser/src/char_ref.c +22225 -0
  57. data/gumbo-parser/src/char_ref.h +29 -0
  58. data/gumbo-parser/src/char_ref.rl +2154 -0
  59. data/gumbo-parser/src/error.c +658 -0
  60. data/gumbo-parser/src/error.h +152 -0
  61. data/gumbo-parser/src/foreign_attrs.c +103 -0
  62. data/gumbo-parser/src/foreign_attrs.gperf +27 -0
  63. data/gumbo-parser/src/insertion_mode.h +33 -0
  64. data/gumbo-parser/src/macros.h +91 -0
  65. data/gumbo-parser/src/nokogiri_gumbo.h +953 -0
  66. data/gumbo-parser/src/parser.c +4932 -0
  67. data/gumbo-parser/src/parser.h +41 -0
  68. data/gumbo-parser/src/replacement.h +33 -0
  69. data/gumbo-parser/src/string_buffer.c +103 -0
  70. data/gumbo-parser/src/string_buffer.h +68 -0
  71. data/gumbo-parser/src/string_piece.c +48 -0
  72. data/gumbo-parser/src/svg_attrs.c +174 -0
  73. data/gumbo-parser/src/svg_attrs.gperf +77 -0
  74. data/gumbo-parser/src/svg_tags.c +137 -0
  75. data/gumbo-parser/src/svg_tags.gperf +55 -0
  76. data/gumbo-parser/src/tag.c +223 -0
  77. data/gumbo-parser/src/tag_lookup.c +382 -0
  78. data/gumbo-parser/src/tag_lookup.gperf +170 -0
  79. data/gumbo-parser/src/tag_lookup.h +13 -0
  80. data/gumbo-parser/src/token_buffer.c +79 -0
  81. data/gumbo-parser/src/token_buffer.h +71 -0
  82. data/gumbo-parser/src/token_type.h +17 -0
  83. data/gumbo-parser/src/tokenizer.c +3464 -0
  84. data/gumbo-parser/src/tokenizer.h +112 -0
  85. data/gumbo-parser/src/tokenizer_states.h +339 -0
  86. data/gumbo-parser/src/utf8.c +245 -0
  87. data/gumbo-parser/src/utf8.h +164 -0
  88. data/gumbo-parser/src/util.c +66 -0
  89. data/gumbo-parser/src/util.h +34 -0
  90. data/gumbo-parser/src/vector.c +111 -0
  91. data/gumbo-parser/src/vector.h +45 -0
  92. data/lib/nokogiri/class_resolver.rb +67 -0
  93. data/lib/nokogiri/css/node.rb +14 -8
  94. data/lib/nokogiri/css/parser.rb +399 -377
  95. data/lib/nokogiri/css/parser.y +250 -245
  96. data/lib/nokogiri/css/parser_extras.rb +16 -71
  97. data/lib/nokogiri/css/selector_cache.rb +38 -0
  98. data/lib/nokogiri/css/syntax_error.rb +3 -1
  99. data/lib/nokogiri/css/tokenizer.rb +7 -5
  100. data/lib/nokogiri/css/tokenizer.rex +11 -9
  101. data/lib/nokogiri/css/xpath_visitor.rb +242 -96
  102. data/lib/nokogiri/css.rb +122 -17
  103. data/lib/nokogiri/decorators/slop.rb +11 -11
  104. data/lib/nokogiri/encoding_handler.rb +57 -0
  105. data/lib/nokogiri/extension.rb +32 -0
  106. data/lib/nokogiri/gumbo.rb +15 -0
  107. data/lib/nokogiri/html.rb +38 -27
  108. data/lib/nokogiri/{html → html4}/builder.rb +4 -2
  109. data/lib/nokogiri/html4/document.rb +235 -0
  110. data/lib/nokogiri/html4/document_fragment.rb +166 -0
  111. data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
  112. data/lib/nokogiri/html4/element_description_defaults.rb +2040 -0
  113. data/lib/nokogiri/html4/encoding_reader.rb +121 -0
  114. data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
  115. data/lib/nokogiri/html4/sax/parser.rb +48 -0
  116. data/lib/nokogiri/html4/sax/parser_context.rb +15 -0
  117. data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
  118. data/lib/nokogiri/html4.rb +42 -0
  119. data/lib/nokogiri/html5/builder.rb +40 -0
  120. data/lib/nokogiri/html5/document.rb +199 -0
  121. data/lib/nokogiri/html5/document_fragment.rb +200 -0
  122. data/lib/nokogiri/html5/node.rb +103 -0
  123. data/lib/nokogiri/html5.rb +368 -0
  124. data/lib/nokogiri/jruby/dependencies.rb +3 -0
  125. data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
  126. data/lib/nokogiri/syntax_error.rb +2 -0
  127. data/lib/nokogiri/version/constant.rb +6 -0
  128. data/lib/nokogiri/version/info.rb +224 -0
  129. data/lib/nokogiri/version.rb +3 -108
  130. data/lib/nokogiri/xml/attr.rb +55 -3
  131. data/lib/nokogiri/xml/attribute_decl.rb +6 -2
  132. data/lib/nokogiri/xml/builder.rb +83 -35
  133. data/lib/nokogiri/xml/cdata.rb +3 -1
  134. data/lib/nokogiri/xml/character_data.rb +2 -0
  135. data/lib/nokogiri/xml/document.rb +359 -130
  136. data/lib/nokogiri/xml/document_fragment.rb +170 -54
  137. data/lib/nokogiri/xml/dtd.rb +4 -2
  138. data/lib/nokogiri/xml/element_content.rb +12 -2
  139. data/lib/nokogiri/xml/element_decl.rb +6 -2
  140. data/lib/nokogiri/xml/entity_decl.rb +7 -3
  141. data/lib/nokogiri/xml/entity_reference.rb +2 -0
  142. data/lib/nokogiri/xml/namespace.rb +44 -0
  143. data/lib/nokogiri/xml/node/save_options.rb +23 -8
  144. data/lib/nokogiri/xml/node.rb +1168 -420
  145. data/lib/nokogiri/xml/node_set.rb +145 -67
  146. data/lib/nokogiri/xml/notation.rb +13 -0
  147. data/lib/nokogiri/xml/parse_options.rb +145 -52
  148. data/lib/nokogiri/xml/pp/character_data.rb +9 -6
  149. data/lib/nokogiri/xml/pp/node.rb +47 -30
  150. data/lib/nokogiri/xml/pp.rb +4 -2
  151. data/lib/nokogiri/xml/processing_instruction.rb +4 -1
  152. data/lib/nokogiri/xml/reader.rb +68 -41
  153. data/lib/nokogiri/xml/relax_ng.rb +60 -17
  154. data/lib/nokogiri/xml/sax/document.rb +198 -111
  155. data/lib/nokogiri/xml/sax/parser.rb +144 -67
  156. data/lib/nokogiri/xml/sax/parser_context.rb +119 -6
  157. data/lib/nokogiri/xml/sax/push_parser.rb +9 -5
  158. data/lib/nokogiri/xml/sax.rb +54 -4
  159. data/lib/nokogiri/xml/schema.rb +116 -39
  160. data/lib/nokogiri/xml/searchable.rb +139 -95
  161. data/lib/nokogiri/xml/syntax_error.rb +29 -5
  162. data/lib/nokogiri/xml/text.rb +2 -0
  163. data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
  164. data/lib/nokogiri/xml/xpath.rb +15 -4
  165. data/lib/nokogiri/xml/xpath_context.rb +15 -4
  166. data/lib/nokogiri/xml.rb +45 -55
  167. data/lib/nokogiri/xslt/stylesheet.rb +32 -8
  168. data/lib/nokogiri/xslt.rb +103 -30
  169. data/lib/nokogiri.rb +59 -75
  170. data/lib/xsd/xmlparser/nokogiri.rb +32 -29
  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/libxml2/0019-xpath-Use-separate-static-hash-table-for-standard-fu.patch +244 -0
  175. data/patches/libxslt/0001-update-config.guess-and-config.sub-for-libxslt.patch +224 -0
  176. data/ports/archives/libxml2-2.13.6.tar.xz +0 -0
  177. data/ports/archives/libxslt-1.1.42.tar.xz +0 -0
  178. metadata +123 -295
  179. data/ext/nokogiri/html_document.c +0 -170
  180. data/ext/nokogiri/html_document.h +0 -10
  181. data/ext/nokogiri/html_element_description.c +0 -279
  182. data/ext/nokogiri/html_element_description.h +0 -10
  183. data/ext/nokogiri/html_entity_lookup.c +0 -32
  184. data/ext/nokogiri/html_entity_lookup.h +0 -8
  185. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  186. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  187. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  188. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  189. data/ext/nokogiri/xml_attr.h +0 -9
  190. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  191. data/ext/nokogiri/xml_cdata.h +0 -9
  192. data/ext/nokogiri/xml_comment.h +0 -9
  193. data/ext/nokogiri/xml_document.h +0 -23
  194. data/ext/nokogiri/xml_document_fragment.h +0 -10
  195. data/ext/nokogiri/xml_dtd.h +0 -10
  196. data/ext/nokogiri/xml_element_content.h +0 -10
  197. data/ext/nokogiri/xml_element_decl.h +0 -9
  198. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  199. data/ext/nokogiri/xml_entity_decl.h +0 -10
  200. data/ext/nokogiri/xml_entity_reference.h +0 -9
  201. data/ext/nokogiri/xml_io.c +0 -61
  202. data/ext/nokogiri/xml_io.h +0 -11
  203. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  204. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  205. data/ext/nokogiri/xml_namespace.h +0 -14
  206. data/ext/nokogiri/xml_node.h +0 -13
  207. data/ext/nokogiri/xml_node_set.h +0 -12
  208. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  209. data/ext/nokogiri/xml_reader.h +0 -10
  210. data/ext/nokogiri/xml_relax_ng.h +0 -9
  211. data/ext/nokogiri/xml_sax_parser.h +0 -39
  212. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  213. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  214. data/ext/nokogiri/xml_schema.h +0 -9
  215. data/ext/nokogiri/xml_syntax_error.h +0 -13
  216. data/ext/nokogiri/xml_text.h +0 -9
  217. data/ext/nokogiri/xml_xpath_context.h +0 -10
  218. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  219. data/lib/nokogiri/html/document.rb +0 -335
  220. data/lib/nokogiri/html/document_fragment.rb +0 -49
  221. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  222. data/lib/nokogiri/html/sax/parser.rb +0 -62
  223. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  224. data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
  225. data/patches/libxml2/0004-libxml2.la-is-in-top_builddir.patch +0 -25
  226. data/patches/libxml2/0005-Fix-infinite-loop-in-xmlStringLenDecodeEntities.patch +0 -32
  227. data/ports/archives/libxml2-2.9.10.tar.gz +0 -0
  228. data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
  229. /data/patches/libxml2/{0002-Remove-script-macro-support.patch → 0001-Remove-script-macro-support.patch} +0 -0
  230. /data/patches/libxml2/{0003-Update-entities-to-remove-handling-of-ssi.patch → 0002-Update-entities-to-remove-handling-of-ssi.patch} +0 -0
@@ -1,44 +1,47 @@
1
- #include <xml_relax_ng.h>
1
+ #include <nokogiri.h>
2
2
 
3
- static void dealloc(xmlRelaxNGPtr schema)
3
+ VALUE cNokogiriXmlRelaxNG;
4
+
5
+ static void
6
+ _noko_xml_relax_ng_deallocate(void *data)
4
7
  {
5
- NOKOGIRI_DEBUG_START(schema);
8
+ xmlRelaxNGPtr schema = data;
6
9
  xmlRelaxNGFree(schema);
7
- NOKOGIRI_DEBUG_END(schema);
8
10
  }
9
11
 
10
- /*
11
- * call-seq:
12
- * validate_document(document)
13
- *
14
- * Validate a Nokogiri::XML::Document against this RelaxNG schema.
15
- */
16
- static VALUE validate_document(VALUE self, VALUE document)
12
+ static const rb_data_type_t xml_relax_ng_type = {
13
+ .wrap_struct_name = "xmlRelaxNG",
14
+ .function = {
15
+ .dfree = _noko_xml_relax_ng_deallocate,
16
+ },
17
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
18
+ };
19
+
20
+ static VALUE
21
+ noko_xml_relax_ng__validate_document(VALUE self, VALUE document)
17
22
  {
18
23
  xmlDocPtr doc;
19
24
  xmlRelaxNGPtr schema;
20
25
  VALUE errors;
21
26
  xmlRelaxNGValidCtxtPtr valid_ctxt;
22
27
 
23
- Data_Get_Struct(self, xmlRelaxNG, schema);
24
- Data_Get_Struct(document, xmlDoc, doc);
28
+ TypedData_Get_Struct(self, xmlRelaxNG, &xml_relax_ng_type, schema);
29
+ doc = noko_xml_document_unwrap(document);
25
30
 
26
31
  errors = rb_ary_new();
27
32
 
28
33
  valid_ctxt = xmlRelaxNGNewValidCtxt(schema);
29
34
 
30
- if(NULL == valid_ctxt) {
35
+ if (NULL == valid_ctxt) {
31
36
  /* we have a problem */
32
37
  rb_raise(rb_eRuntimeError, "Could not create a validation context");
33
38
  }
34
39
 
35
- #ifdef HAVE_XMLRELAXNGSETVALIDSTRUCTUREDERRORS
36
40
  xmlRelaxNGSetValidStructuredErrors(
37
41
  valid_ctxt,
38
- Nokogiri_error_array_pusher,
42
+ noko__error_array_pusher,
39
43
  (void *)errors
40
44
  );
41
- #endif
42
45
 
43
46
  xmlRelaxNGValidateDoc(valid_ctxt, doc);
44
47
 
@@ -47,115 +50,100 @@ static VALUE validate_document(VALUE self, VALUE document)
47
50
  return errors;
48
51
  }
49
52
 
50
- /*
51
- * call-seq:
52
- * read_memory(string)
53
- *
54
- * Create a new RelaxNG from the contents of +string+
55
- */
56
- static VALUE read_memory(VALUE klass, VALUE content)
53
+ static VALUE
54
+ _noko_xml_relax_ng_parse_schema(
55
+ VALUE rb_class,
56
+ xmlRelaxNGParserCtxtPtr c_parser_context,
57
+ VALUE rb_parse_options
58
+ )
57
59
  {
58
- xmlRelaxNGParserCtxtPtr ctx = xmlRelaxNGNewMemParserCtxt(
59
- (const char *)StringValuePtr(content),
60
- (int)RSTRING_LEN(content)
61
- );
62
- xmlRelaxNGPtr schema;
63
- VALUE errors = rb_ary_new();
60
+ VALUE rb_errors;
64
61
  VALUE rb_schema;
62
+ xmlRelaxNGPtr c_schema;
63
+ libxmlStructuredErrorHandlerState handler_state;
64
+
65
+ if (NIL_P(rb_parse_options)) {
66
+ rb_parse_options = rb_const_get_at(
67
+ rb_const_get_at(mNokogiriXml, rb_intern("ParseOptions")),
68
+ rb_intern("DEFAULT_SCHEMA")
69
+ );
70
+ }
65
71
 
66
- xmlSetStructuredErrorFunc((void *)errors, Nokogiri_error_array_pusher);
72
+ rb_errors = rb_ary_new();
67
73
 
68
- #ifdef HAVE_XMLRELAXNGSETPARSERSTRUCTUREDERRORS
74
+ noko__structured_error_func_save_and_set(&handler_state, (void *)rb_errors, noko__error_array_pusher);
69
75
  xmlRelaxNGSetParserStructuredErrors(
70
- ctx,
71
- Nokogiri_error_array_pusher,
72
- (void *)errors
76
+ c_parser_context,
77
+ noko__error_array_pusher,
78
+ (void *)rb_errors
73
79
  );
74
- #endif
75
80
 
76
- schema = xmlRelaxNGParse(ctx);
81
+ c_schema = xmlRelaxNGParse(c_parser_context);
77
82
 
78
- xmlSetStructuredErrorFunc(NULL, NULL);
79
- xmlRelaxNGFreeParserCtxt(ctx);
83
+ xmlRelaxNGFreeParserCtxt(c_parser_context);
84
+ noko__structured_error_func_restore(&handler_state);
80
85
 
81
- if(NULL == schema) {
82
- xmlErrorPtr error = xmlGetLastError();
83
- if(error)
84
- Nokogiri_error_raise(NULL, error);
85
- else
86
- rb_raise(rb_eRuntimeError, "Could not parse document");
86
+ if (NULL == c_schema) {
87
+ VALUE exception = rb_funcall(cNokogiriXmlSyntaxError, rb_intern("aggregate"), 1, rb_errors);
87
88
 
88
- return Qnil;
89
+ if (RB_TEST(exception)) {
90
+ rb_exc_raise(exception);
91
+ } else {
92
+ rb_raise(rb_eRuntimeError, "Could not parse document");
93
+ }
89
94
  }
90
95
 
91
- rb_schema = Data_Wrap_Struct(klass, 0, dealloc, schema);
92
- rb_iv_set(rb_schema, "@errors", errors);
96
+ rb_schema = TypedData_Wrap_Struct(rb_class, &xml_relax_ng_type, c_schema);
97
+ rb_iv_set(rb_schema, "@errors", rb_errors);
98
+ rb_iv_set(rb_schema, "@parse_options", rb_parse_options);
93
99
 
94
100
  return rb_schema;
95
101
  }
96
102
 
97
103
  /*
98
- * call-seq:
99
- * from_document(doc)
104
+ * :call-seq:
105
+ * from_document(document) → Nokogiri::XML::RelaxNG
106
+ * from_document(document, parse_options) → Nokogiri::XML::RelaxNG
100
107
  *
101
- * Create a new RelaxNG schema from the Nokogiri::XML::Document +doc+
108
+ * Parse a RELAX NG schema definition from a Document to create a new Nokogiri::XML::RelaxNG.
109
+ *
110
+ * [Parameters]
111
+ * - +document+ (XML::Document) A document containing the RELAX NG schema definition
112
+ * - +parse_options+ (Nokogiri::XML::ParseOptions)
113
+ * Defaults to ParseOptions::DEFAULT_SCHEMA ⚠ Unused
114
+ *
115
+ * [Returns] Nokogiri::XML::RelaxNG
116
+ *
117
+ * ⚠ +parse_options+ is currently unused by this method and is present only as a placeholder for
118
+ * future functionality.
102
119
  */
103
- static VALUE from_document(VALUE klass, VALUE document)
120
+ static VALUE
121
+ noko_xml_relax_ng_s_from_document(int argc, VALUE *argv, VALUE rb_class)
104
122
  {
105
- xmlDocPtr doc;
106
- xmlRelaxNGParserCtxtPtr ctx;
107
- xmlRelaxNGPtr schema;
108
- VALUE errors;
109
- VALUE rb_schema;
110
-
111
- Data_Get_Struct(document, xmlDoc, doc);
112
-
113
- /* In case someone passes us a node. ugh. */
114
- doc = doc->doc;
115
-
116
- ctx = xmlRelaxNGNewDocParserCtxt(doc);
117
-
118
- errors = rb_ary_new();
119
- xmlSetStructuredErrorFunc((void *)errors, Nokogiri_error_array_pusher);
120
-
121
- #ifdef HAVE_XMLRELAXNGSETPARSERSTRUCTUREDERRORS
122
- xmlRelaxNGSetParserStructuredErrors(
123
- ctx,
124
- Nokogiri_error_array_pusher,
125
- (void *)errors
126
- );
127
- #endif
123
+ /* TODO: deprecate this method and put file-or-string logic into .new so that becomes the
124
+ * preferred entry point, and this can become a private method */
125
+ VALUE rb_document;
126
+ VALUE rb_parse_options;
127
+ xmlDocPtr c_document;
128
+ xmlRelaxNGParserCtxtPtr c_parser_context;
128
129
 
129
- schema = xmlRelaxNGParse(ctx);
130
+ rb_scan_args(argc, argv, "11", &rb_document, &rb_parse_options);
130
131
 
131
- xmlSetStructuredErrorFunc(NULL, NULL);
132
+ c_document = noko_xml_document_unwrap(rb_document);
133
+ c_document = c_document->doc; /* In case someone passes us a node. ugh. */
132
134
 
133
- if(NULL == schema) {
134
- xmlErrorPtr error = xmlGetLastError();
135
- if(error)
136
- Nokogiri_error_raise(NULL, error);
137
- else
138
- rb_raise(rb_eRuntimeError, "Could not parse document");
135
+ c_parser_context = xmlRelaxNGNewDocParserCtxt(c_document);
139
136
 
140
- return Qnil;
141
- }
142
-
143
- rb_schema = Data_Wrap_Struct(klass, 0, dealloc, schema);
144
- rb_iv_set(rb_schema, "@errors", errors);
145
-
146
- return rb_schema;
137
+ return _noko_xml_relax_ng_parse_schema(rb_class, c_parser_context, rb_parse_options);
147
138
  }
148
139
 
149
- VALUE cNokogiriXmlRelaxNG;
150
- void init_xml_relax_ng()
140
+ void
141
+ noko_init_xml_relax_ng(void)
151
142
  {
152
- VALUE nokogiri = rb_define_module("Nokogiri");
153
- VALUE xml = rb_define_module_under(nokogiri, "XML");
154
- VALUE klass = rb_define_class_under(xml, "RelaxNG", cNokogiriXmlSchema);
143
+ assert(cNokogiriXmlSchema);
144
+ cNokogiriXmlRelaxNG = rb_define_class_under(mNokogiriXml, "RelaxNG", cNokogiriXmlSchema);
155
145
 
156
- cNokogiriXmlRelaxNG = klass;
146
+ rb_define_singleton_method(cNokogiriXmlRelaxNG, "from_document", noko_xml_relax_ng_s_from_document, -1);
157
147
 
158
- rb_define_singleton_method(klass, "read_memory", read_memory, 1);
159
- rb_define_singleton_method(klass, "from_document", from_document, 1);
160
- rb_define_private_method(klass, "validate_document", validate_document, 1);
148
+ rb_define_private_method(cNokogiriXmlRelaxNG, "validate_document", noko_xml_relax_ng__validate_document, 1);
161
149
  }