nokogiri 1.14.5-x64-mingw32 → 1.15.0-x64-mingw32

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 (111) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -8
  3. data/dependencies.yml +6 -6
  4. data/ext/nokogiri/extconf.rb +66 -22
  5. data/ext/nokogiri/html4_document.c +1 -2
  6. data/ext/nokogiri/html4_element_description.c +19 -14
  7. data/ext/nokogiri/html4_sax_parser_context.c +10 -16
  8. data/ext/nokogiri/html4_sax_push_parser.c +2 -2
  9. data/ext/nokogiri/include/libexslt/exsltconfig.h +3 -3
  10. data/ext/nokogiri/include/libxml2/libxml/HTMLparser.h +52 -38
  11. data/ext/nokogiri/include/libxml2/libxml/HTMLtree.h +18 -18
  12. data/ext/nokogiri/include/libxml2/libxml/SAX.h +36 -36
  13. data/ext/nokogiri/include/libxml2/libxml/SAX2.h +37 -36
  14. data/ext/nokogiri/include/libxml2/libxml/c14n.h +4 -4
  15. data/ext/nokogiri/include/libxml2/libxml/catalog.h +36 -36
  16. data/ext/nokogiri/include/libxml2/libxml/chvalid.h +9 -9
  17. data/ext/nokogiri/include/libxml2/libxml/debugXML.h +28 -28
  18. data/ext/nokogiri/include/libxml2/libxml/dict.h +13 -13
  19. data/ext/nokogiri/include/libxml2/libxml/encoding.h +20 -19
  20. data/ext/nokogiri/include/libxml2/libxml/entities.h +19 -21
  21. data/ext/nokogiri/include/libxml2/libxml/globals.h +89 -59
  22. data/ext/nokogiri/include/libxml2/libxml/hash.h +25 -25
  23. data/ext/nokogiri/include/libxml2/libxml/list.h +26 -26
  24. data/ext/nokogiri/include/libxml2/libxml/nanoftp.h +22 -22
  25. data/ext/nokogiri/include/libxml2/libxml/nanohttp.h +17 -17
  26. data/ext/nokogiri/include/libxml2/libxml/parser.h +100 -79
  27. data/ext/nokogiri/include/libxml2/libxml/parserInternals.h +149 -143
  28. data/ext/nokogiri/include/libxml2/libxml/pattern.h +15 -15
  29. data/ext/nokogiri/include/libxml2/libxml/relaxng.h +26 -26
  30. data/ext/nokogiri/include/libxml2/libxml/schemasInternals.h +2 -2
  31. data/ext/nokogiri/include/libxml2/libxml/schematron.h +18 -18
  32. data/ext/nokogiri/include/libxml2/libxml/threads.h +23 -20
  33. data/ext/nokogiri/include/libxml2/libxml/tree.h +166 -164
  34. data/ext/nokogiri/include/libxml2/libxml/uri.h +15 -15
  35. data/ext/nokogiri/include/libxml2/libxml/valid.h +72 -87
  36. data/ext/nokogiri/include/libxml2/libxml/xinclude.h +10 -10
  37. data/ext/nokogiri/include/libxml2/libxml/xlink.h +5 -5
  38. data/ext/nokogiri/include/libxml2/libxml/xmlIO.h +60 -59
  39. data/ext/nokogiri/include/libxml2/libxml/xmlautomata.h +21 -21
  40. data/ext/nokogiri/include/libxml2/libxml/xmlerror.h +18 -46
  41. data/ext/nokogiri/include/libxml2/libxml/xmlexports.h +14 -41
  42. data/ext/nokogiri/include/libxml2/libxml/xmlmemory.h +26 -24
  43. data/ext/nokogiri/include/libxml2/libxml/xmlmodule.h +4 -4
  44. data/ext/nokogiri/include/libxml2/libxml/xmlreader.h +87 -87
  45. data/ext/nokogiri/include/libxml2/libxml/xmlregexp.h +30 -30
  46. data/ext/nokogiri/include/libxml2/libxml/xmlsave.h +10 -10
  47. data/ext/nokogiri/include/libxml2/libxml/xmlschemas.h +30 -30
  48. data/ext/nokogiri/include/libxml2/libxml/xmlschemastypes.h +34 -34
  49. data/ext/nokogiri/include/libxml2/libxml/xmlstring.h +30 -30
  50. data/ext/nokogiri/include/libxml2/libxml/xmlunicode.h +166 -166
  51. data/ext/nokogiri/include/libxml2/libxml/xmlversion.h +50 -27
  52. data/ext/nokogiri/include/libxml2/libxml/xmlwriter.h +80 -80
  53. data/ext/nokogiri/include/libxml2/libxml/xpath.h +41 -41
  54. data/ext/nokogiri/include/libxml2/libxml/xpathInternals.h +117 -117
  55. data/ext/nokogiri/include/libxml2/libxml/xpointer.h +21 -21
  56. data/ext/nokogiri/include/libxslt/attributes.h +1 -0
  57. data/ext/nokogiri/include/libxslt/variables.h +3 -3
  58. data/ext/nokogiri/include/libxslt/xsltInternals.h +14 -4
  59. data/ext/nokogiri/include/libxslt/xsltconfig.h +4 -4
  60. data/ext/nokogiri/include/libxslt/xsltlocale.h +14 -54
  61. data/ext/nokogiri/include/libxslt/xsltutils.h +35 -2
  62. data/ext/nokogiri/nokogiri.c +46 -24
  63. data/ext/nokogiri/nokogiri.h +13 -2
  64. data/ext/nokogiri/xml_attr.c +1 -1
  65. data/ext/nokogiri/xml_cdata.c +10 -2
  66. data/ext/nokogiri/xml_comment.c +1 -1
  67. data/ext/nokogiri/xml_document.c +102 -22
  68. data/ext/nokogiri/xml_document_fragment.c +1 -1
  69. data/ext/nokogiri/xml_dtd.c +1 -1
  70. data/ext/nokogiri/xml_element_content.c +32 -29
  71. data/ext/nokogiri/xml_element_decl.c +5 -5
  72. data/ext/nokogiri/xml_encoding_handler.c +12 -4
  73. data/ext/nokogiri/xml_entity_reference.c +1 -1
  74. data/ext/nokogiri/xml_namespace.c +11 -12
  75. data/ext/nokogiri/xml_node.c +7 -7
  76. data/ext/nokogiri/xml_node_set.c +125 -105
  77. data/ext/nokogiri/xml_processing_instruction.c +1 -1
  78. data/ext/nokogiri/xml_reader.c +37 -28
  79. data/ext/nokogiri/xml_relax_ng.c +65 -78
  80. data/ext/nokogiri/xml_sax_parser.c +24 -5
  81. data/ext/nokogiri/xml_sax_parser_context.c +46 -25
  82. data/ext/nokogiri/xml_sax_push_parser.c +29 -8
  83. data/ext/nokogiri/xml_schema.c +90 -116
  84. data/ext/nokogiri/xml_text.c +10 -2
  85. data/ext/nokogiri/xml_xpath_context.c +156 -83
  86. data/ext/nokogiri/xslt_stylesheet.c +103 -50
  87. data/lib/nokogiri/2.7/nokogiri.so +0 -0
  88. data/lib/nokogiri/3.0/nokogiri.so +0 -0
  89. data/lib/nokogiri/css/xpath_visitor.rb +2 -2
  90. data/lib/nokogiri/extension.rb +1 -1
  91. data/lib/nokogiri/html4/document_fragment.rb +1 -1
  92. data/lib/nokogiri/html4/element_description_defaults.rb +1821 -353
  93. data/lib/nokogiri/html5/document_fragment.rb +1 -1
  94. data/lib/nokogiri/html5/node.rb +5 -0
  95. data/lib/nokogiri/html5.rb +5 -2
  96. data/lib/nokogiri/jruby/nokogiri_jars.rb +3 -3
  97. data/lib/nokogiri/version/constant.rb +1 -1
  98. data/lib/nokogiri/xml/attribute_decl.rb +4 -2
  99. data/lib/nokogiri/xml/document_fragment.rb +1 -1
  100. data/lib/nokogiri/xml/element_content.rb +10 -2
  101. data/lib/nokogiri/xml/element_decl.rb +4 -2
  102. data/lib/nokogiri/xml/entity_decl.rb +4 -2
  103. data/lib/nokogiri/xml/node/save_options.rb +8 -0
  104. data/lib/nokogiri/xml/node.rb +22 -13
  105. data/lib/nokogiri/xml/pp/node.rb +23 -12
  106. data/lib/nokogiri/xml/sax/document.rb +1 -1
  107. data/lib/nokogiri/xml/searchable.rb +18 -10
  108. data/lib/nokogiri/xslt.rb +73 -3
  109. data/lib/nokogiri.rb +12 -4
  110. data/lib/xsd/xmlparser/nokogiri.rb +1 -1
  111. metadata +2 -2
@@ -3,19 +3,30 @@
3
3
  VALUE cNokogiriXsltStylesheet ;
4
4
 
5
5
  static void
6
- mark(nokogiriXsltStylesheetTuple *wrapper)
6
+ mark(void *data)
7
7
  {
8
+ nokogiriXsltStylesheetTuple *wrapper = (nokogiriXsltStylesheetTuple *)data;
8
9
  rb_gc_mark(wrapper->func_instances);
9
10
  }
10
11
 
11
12
  static void
12
- dealloc(nokogiriXsltStylesheetTuple *wrapper)
13
+ dealloc(void *data)
13
14
  {
15
+ nokogiriXsltStylesheetTuple *wrapper = (nokogiriXsltStylesheetTuple *)data;
14
16
  xsltStylesheetPtr doc = wrapper->ss;
15
17
  xsltFreeStylesheet(doc);
16
18
  ruby_xfree(wrapper);
17
19
  }
18
20
 
21
+ static const rb_data_type_t xslt_stylesheet_type = {
22
+ .wrap_struct_name = "Nokogiri::XSLT::Stylesheet",
23
+ .function = {
24
+ .dmark = mark,
25
+ .dfree = dealloc,
26
+ },
27
+ .flags = RUBY_TYPED_FREE_IMMEDIATELY
28
+ };
29
+
19
30
  PRINTFLIKE_DECL(2, 3)
20
31
  static void
21
32
  xslt_generic_error_handler(void *ctx, const char *msg, ...)
@@ -42,8 +53,12 @@ Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
42
53
  VALUE self;
43
54
  nokogiriXsltStylesheetTuple *wrapper;
44
55
 
45
- self = Data_Make_Struct(cNokogiriXsltStylesheet, nokogiriXsltStylesheetTuple,
46
- mark, dealloc, wrapper);
56
+ self = TypedData_Make_Struct(
57
+ cNokogiriXsltStylesheet,
58
+ nokogiriXsltStylesheetTuple,
59
+ &xslt_stylesheet_type,
60
+ wrapper
61
+ );
47
62
 
48
63
  ss->_private = (void *)self;
49
64
  wrapper->ss = ss;
@@ -64,7 +79,8 @@ parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
64
79
  xmlDocPtr xml, xml_cpy;
65
80
  VALUE errstr, exception;
66
81
  xsltStylesheetPtr ss ;
67
- Data_Get_Struct(xmldocobj, xmlDoc, xml);
82
+
83
+ xml = noko_xml_document_unwrap(xmldocobj);
68
84
 
69
85
  errstr = rb_str_new(0, 0);
70
86
  xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
@@ -91,7 +107,7 @@ parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
91
107
  * Serialize +document+ to an xml string.
92
108
  */
93
109
  static VALUE
94
- serialize(VALUE self, VALUE xmlobj)
110
+ rb_xslt_stylesheet_serialize(VALUE self, VALUE xmlobj)
95
111
  {
96
112
  xmlDocPtr xml ;
97
113
  nokogiriXsltStylesheetTuple *wrapper;
@@ -99,8 +115,13 @@ serialize(VALUE self, VALUE xmlobj)
99
115
  int doc_len ;
100
116
  VALUE rval ;
101
117
 
102
- Data_Get_Struct(xmlobj, xmlDoc, xml);
103
- Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
118
+ xml = noko_xml_document_unwrap(xmlobj);
119
+ TypedData_Get_Struct(
120
+ self,
121
+ nokogiriXsltStylesheetTuple,
122
+ &xslt_stylesheet_type,
123
+ wrapper
124
+ );
104
125
  xsltSaveResultToString(&doc_ptr, &doc_len, xml, wrapper->ss);
105
126
  rval = NOKOGIRI_STR_NEW(doc_ptr, doc_len);
106
127
  xmlFree(doc_ptr);
@@ -221,60 +242,74 @@ serialize(VALUE self, VALUE xmlobj)
221
242
  * See: Nokogiri::XSLT.quote_params
222
243
  */
223
244
  static VALUE
224
- transform(int argc, VALUE *argv, VALUE self)
245
+ rb_xslt_stylesheet_transform(int argc, VALUE *argv, VALUE self)
225
246
  {
226
- VALUE xmldoc, paramobj, errstr, exception ;
227
- xmlDocPtr xml ;
228
- xmlDocPtr result ;
247
+ VALUE rb_document, rb_param, rb_error_str;
248
+ xmlDocPtr c_document ;
249
+ xmlDocPtr c_result_document ;
229
250
  nokogiriXsltStylesheetTuple *wrapper;
230
251
  const char **params ;
231
252
  long param_len, j ;
232
253
  int parse_error_occurred ;
254
+ int defensive_copy_p = 0;
233
255
 
234
- rb_scan_args(argc, argv, "11", &xmldoc, &paramobj);
235
- if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0L) ; }
236
- if (!rb_obj_is_kind_of(xmldoc, cNokogiriXmlDocument)) {
256
+ rb_scan_args(argc, argv, "11", &rb_document, &rb_param);
257
+ if (NIL_P(rb_param)) { rb_param = rb_ary_new2(0L) ; }
258
+ if (!rb_obj_is_kind_of(rb_document, cNokogiriXmlDocument)) {
237
259
  rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::Document");
238
260
  }
239
261
 
240
262
  /* handle hashes as arguments. */
241
- if (T_HASH == TYPE(paramobj)) {
242
- paramobj = rb_funcall(paramobj, rb_intern("to_a"), 0);
243
- paramobj = rb_funcall(paramobj, rb_intern("flatten"), 0);
263
+ if (T_HASH == TYPE(rb_param)) {
264
+ rb_param = rb_funcall(rb_param, rb_intern("to_a"), 0);
265
+ rb_param = rb_funcall(rb_param, rb_intern("flatten"), 0);
244
266
  }
245
267
 
246
- Check_Type(paramobj, T_ARRAY);
268
+ Check_Type(rb_param, T_ARRAY);
247
269
 
248
- Data_Get_Struct(xmldoc, xmlDoc, xml);
249
- Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
270
+ c_document = noko_xml_document_unwrap(rb_document);
271
+ TypedData_Get_Struct(self, nokogiriXsltStylesheetTuple, &xslt_stylesheet_type, wrapper);
250
272
 
251
- param_len = RARRAY_LEN(paramobj);
273
+ param_len = RARRAY_LEN(rb_param);
252
274
  params = ruby_xcalloc((size_t)param_len + 1, sizeof(char *));
253
275
  for (j = 0 ; j < param_len ; j++) {
254
- VALUE entry = rb_ary_entry(paramobj, j);
276
+ VALUE entry = rb_ary_entry(rb_param, j);
255
277
  const char *ptr = StringValueCStr(entry);
256
278
  params[j] = ptr;
257
279
  }
258
280
  params[param_len] = 0 ;
259
281
 
260
- errstr = rb_str_new(0, 0);
261
- xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
262
- xmlSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
282
+ xsltTransformContextPtr c_transform_context = xsltNewTransformContext(wrapper->ss, c_document);
283
+ if (xsltNeedElemSpaceHandling(c_transform_context) &&
284
+ noko_xml_document_has_wrapped_blank_nodes_p(c_document)) {
285
+ // see https://github.com/sparklemotion/nokogiri/issues/2800
286
+ c_document = xmlCopyDoc(c_document, 1);
287
+ defensive_copy_p = 1;
288
+ }
289
+ xsltFreeTransformContext(c_transform_context);
290
+
291
+ rb_error_str = rb_str_new(0, 0);
292
+ xsltSetGenericErrorFunc((void *)rb_error_str, xslt_generic_error_handler);
293
+ xmlSetGenericErrorFunc((void *)rb_error_str, xslt_generic_error_handler);
294
+
295
+ c_result_document = xsltApplyStylesheet(wrapper->ss, c_document, params);
263
296
 
264
- result = xsltApplyStylesheet(wrapper->ss, xml, params);
265
297
  ruby_xfree(params);
298
+ if (defensive_copy_p) {
299
+ xmlFreeDoc(c_document);
300
+ c_document = NULL;
301
+ }
266
302
 
267
303
  xsltSetGenericErrorFunc(NULL, NULL);
268
304
  xmlSetGenericErrorFunc(NULL, NULL);
269
305
 
270
- parse_error_occurred = (Qfalse == rb_funcall(errstr, rb_intern("empty?"), 0));
306
+ parse_error_occurred = (Qfalse == rb_funcall(rb_error_str, rb_intern("empty?"), 0));
271
307
 
272
308
  if (parse_error_occurred) {
273
- exception = rb_exc_new3(rb_eRuntimeError, errstr);
274
- rb_exc_raise(exception);
309
+ rb_exc_raise(rb_exc_new3(rb_eRuntimeError, rb_error_str));
275
310
  }
276
311
 
277
- return noko_xml_document_wrap((VALUE)0, result) ;
312
+ return noko_xml_document_wrap((VALUE)0, c_result_document) ;
278
313
  }
279
314
 
280
315
  static void
@@ -290,7 +325,12 @@ method_caller(xmlXPathParserContextPtr ctxt, int nargs)
290
325
  handler = (VALUE)xsltGetExtData(transform, functionURI);
291
326
  function_name = (const char *)(ctxt->context->function);
292
327
 
293
- Nokogiri_marshal_xpath_funcall_and_return_values(ctxt, nargs, handler, (const char *)function_name);
328
+ Nokogiri_marshal_xpath_funcall_and_return_values(
329
+ ctxt,
330
+ nargs,
331
+ handler,
332
+ (const char *)function_name
333
+ );
294
334
  }
295
335
 
296
336
  static void *
@@ -306,12 +346,20 @@ initFunc(xsltTransformContextPtr ctxt, const xmlChar *uri)
306
346
 
307
347
  for (i = 0; i < RARRAY_LEN(methods); i++) {
308
348
  VALUE method_name = rb_obj_as_string(rb_ary_entry(methods, i));
309
- xsltRegisterExtFunction(ctxt,
310
- (unsigned char *)StringValueCStr(method_name), uri, method_caller);
349
+ xsltRegisterExtFunction(
350
+ ctxt,
351
+ (unsigned char *)StringValueCStr(method_name),
352
+ uri,
353
+ method_caller
354
+ );
311
355
  }
312
356
 
313
- Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
314
- wrapper);
357
+ TypedData_Get_Struct(
358
+ (VALUE)ctxt->style->_private,
359
+ nokogiriXsltStylesheetTuple,
360
+ &xslt_stylesheet_type,
361
+ wrapper
362
+ );
315
363
  inst = rb_class_new_instance(0, NULL, obj);
316
364
  rb_ary_push(wrapper->func_instances, inst);
317
365
 
@@ -324,33 +372,38 @@ shutdownFunc(xsltTransformContextPtr ctxt,
324
372
  {
325
373
  nokogiriXsltStylesheetTuple *wrapper;
326
374
 
327
- Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
328
- wrapper);
375
+ TypedData_Get_Struct(
376
+ (VALUE)ctxt->style->_private,
377
+ nokogiriXsltStylesheetTuple,
378
+ &xslt_stylesheet_type,
379
+ wrapper
380
+ );
329
381
 
330
382
  rb_ary_clear(wrapper->func_instances);
331
383
  }
332
384
 
333
- /*
334
- * call-seq:
335
- * register(uri, custom_handler_class)
336
- *
337
- * Register a class that implements custom XSLT transformation functions.
338
- */
385
+ /* docstring is in lib/nokogiri/xslt.rb */
339
386
  static VALUE
340
- registr(VALUE self, VALUE uri, VALUE obj)
387
+ rb_xslt_s_register(VALUE self, VALUE uri, VALUE obj)
341
388
  {
342
389
  VALUE modules = rb_iv_get(self, "@modules");
343
- if (NIL_P(modules)) { rb_raise(rb_eRuntimeError, "wtf! @modules isn't set"); }
390
+ if (NIL_P(modules)) {
391
+ rb_raise(rb_eRuntimeError, "internal error: @modules not set");
392
+ }
344
393
 
345
394
  rb_hash_aset(modules, uri, obj);
346
- xsltRegisterExtModule((unsigned char *)StringValueCStr(uri), initFunc, shutdownFunc);
395
+ xsltRegisterExtModule(
396
+ (unsigned char *)StringValueCStr(uri),
397
+ initFunc,
398
+ shutdownFunc
399
+ );
347
400
  return self;
348
401
  }
349
402
 
350
403
  void
351
404
  noko_init_xslt_stylesheet(void)
352
405
  {
353
- rb_define_singleton_method(mNokogiriXslt, "register", registr, 2);
406
+ rb_define_singleton_method(mNokogiriXslt, "register", rb_xslt_s_register, 2);
354
407
  rb_iv_set(mNokogiriXslt, "@modules", rb_hash_new());
355
408
 
356
409
  cNokogiriXsltStylesheet = rb_define_class_under(mNokogiriXslt, "Stylesheet", rb_cObject);
@@ -358,6 +411,6 @@ noko_init_xslt_stylesheet(void)
358
411
  rb_undef_alloc_func(cNokogiriXsltStylesheet);
359
412
 
360
413
  rb_define_singleton_method(cNokogiriXsltStylesheet, "parse_stylesheet_doc", parse_stylesheet_doc, 1);
361
- rb_define_method(cNokogiriXsltStylesheet, "serialize", serialize, 1);
362
- rb_define_method(cNokogiriXsltStylesheet, "transform", transform, -1);
414
+ rb_define_method(cNokogiriXsltStylesheet, "serialize", rb_xslt_stylesheet_serialize, 1);
415
+ rb_define_method(cNokogiriXsltStylesheet, "transform", rb_xslt_stylesheet_transform, -1);
363
416
  }
Binary file
Binary file
@@ -133,7 +133,7 @@ module Nokogiri
133
133
  args += node.value[1..-1].map do |n|
134
134
  n.is_a?(Nokogiri::CSS::Node) ? n.accept(self) : n
135
135
  end
136
- "#{node.value.first}#{args.join(",")})"
136
+ "nokogiri:#{node.value.first}#{args.join(",")})"
137
137
  end
138
138
  end
139
139
 
@@ -207,7 +207,7 @@ module Nokogiri
207
207
  when "parent" then "node()"
208
208
  when "root" then "not(parent::*)"
209
209
  else
210
- node.value.first + "(.)"
210
+ "nokogiri:#{node.value.first}(.)"
211
211
  end
212
212
  end
213
213
  end
@@ -6,7 +6,7 @@ begin
6
6
  RUBY_VERSION =~ /(\d+\.\d+)/
7
7
  require_relative "#{Regexp.last_match(1)}/nokogiri"
8
8
  rescue LoadError => e
9
- if /GLIBC/.match?(e.message)
9
+ if e.message.include?("GLIBC")
10
10
  warn(<<~EOM)
11
11
 
12
12
  ERROR: It looks like you're trying to use Nokogiri as a precompiled native gem on a system
@@ -24,7 +24,7 @@ module Nokogiri
24
24
  new(doc, tags, nil, options, &block)
25
25
  end
26
26
 
27
- def initialize(document, tags = nil, ctx = nil, options = XML::ParseOptions::DEFAULT_HTML)
27
+ def initialize(document, tags = nil, ctx = nil, options = XML::ParseOptions::DEFAULT_HTML) # rubocop:disable Lint/MissingSuper
28
28
  return self unless tags
29
29
 
30
30
  options = Nokogiri::XML::ParseOptions.new(options) if Integer === options