nokogiri 1.13.8 → 1.14.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +39 -0
  3. data/LICENSE-DEPENDENCIES.md +830 -509
  4. data/LICENSE.md +1 -1
  5. data/README.md +18 -11
  6. data/dependencies.yml +33 -15
  7. data/ext/nokogiri/extconf.rb +98 -24
  8. data/ext/nokogiri/gumbo.c +20 -10
  9. data/ext/nokogiri/html4_document.c +2 -2
  10. data/ext/nokogiri/html4_element_description.c +1 -1
  11. data/ext/nokogiri/html4_entity_lookup.c +2 -2
  12. data/ext/nokogiri/html4_sax_parser_context.c +1 -6
  13. data/ext/nokogiri/html4_sax_push_parser.c +1 -1
  14. data/ext/nokogiri/nokogiri.c +38 -51
  15. data/ext/nokogiri/nokogiri.h +18 -14
  16. data/ext/nokogiri/test_global_handlers.c +1 -1
  17. data/ext/nokogiri/xml_attr.c +1 -1
  18. data/ext/nokogiri/xml_attribute_decl.c +2 -2
  19. data/ext/nokogiri/xml_cdata.c +2 -2
  20. data/ext/nokogiri/xml_comment.c +1 -1
  21. data/ext/nokogiri/xml_document.c +22 -13
  22. data/ext/nokogiri/xml_document_fragment.c +1 -1
  23. data/ext/nokogiri/xml_dtd.c +1 -1
  24. data/ext/nokogiri/xml_element_content.c +3 -3
  25. data/ext/nokogiri/xml_element_decl.c +2 -2
  26. data/ext/nokogiri/xml_encoding_handler.c +3 -3
  27. data/ext/nokogiri/xml_entity_decl.c +1 -1
  28. data/ext/nokogiri/xml_entity_reference.c +1 -1
  29. data/ext/nokogiri/xml_namespace.c +80 -14
  30. data/ext/nokogiri/xml_node.c +288 -28
  31. data/ext/nokogiri/xml_node_set.c +0 -2
  32. data/ext/nokogiri/xml_processing_instruction.c +1 -1
  33. data/ext/nokogiri/xml_reader.c +45 -21
  34. data/ext/nokogiri/xml_relax_ng.c +1 -3
  35. data/ext/nokogiri/xml_sax_parser.c +23 -17
  36. data/ext/nokogiri/xml_sax_parser_context.c +1 -6
  37. data/ext/nokogiri/xml_sax_push_parser.c +1 -3
  38. data/ext/nokogiri/xml_schema.c +1 -3
  39. data/ext/nokogiri/xml_syntax_error.c +1 -1
  40. data/ext/nokogiri/xml_text.c +1 -1
  41. data/ext/nokogiri/xml_xpath_context.c +90 -83
  42. data/ext/nokogiri/xslt_stylesheet.c +15 -14
  43. data/gumbo-parser/Makefile +10 -0
  44. data/gumbo-parser/src/attribute.h +1 -1
  45. data/gumbo-parser/src/error.c +2 -2
  46. data/gumbo-parser/src/error.h +1 -1
  47. data/gumbo-parser/src/foreign_attrs.c +2 -2
  48. data/gumbo-parser/src/{gumbo.h → nokogiri_gumbo.h} +1 -0
  49. data/gumbo-parser/src/parser.c +8 -5
  50. data/gumbo-parser/src/replacement.h +1 -1
  51. data/gumbo-parser/src/string_buffer.h +1 -1
  52. data/gumbo-parser/src/string_piece.c +1 -1
  53. data/gumbo-parser/src/svg_attrs.c +2 -2
  54. data/gumbo-parser/src/svg_tags.c +2 -2
  55. data/gumbo-parser/src/tag.c +2 -1
  56. data/gumbo-parser/src/tag_lookup.c +7 -7
  57. data/gumbo-parser/src/tag_lookup.gperf +1 -0
  58. data/gumbo-parser/src/tag_lookup.h +1 -1
  59. data/gumbo-parser/src/token_buffer.h +1 -1
  60. data/gumbo-parser/src/tokenizer.c +1 -1
  61. data/gumbo-parser/src/tokenizer.h +1 -1
  62. data/gumbo-parser/src/utf8.c +1 -1
  63. data/gumbo-parser/src/utf8.h +1 -1
  64. data/gumbo-parser/src/util.c +1 -3
  65. data/gumbo-parser/src/util.h +4 -0
  66. data/gumbo-parser/src/vector.h +1 -1
  67. data/lib/nokogiri/css/node.rb +2 -2
  68. data/lib/nokogiri/css/xpath_visitor.rb +5 -3
  69. data/lib/nokogiri/css.rb +6 -0
  70. data/lib/nokogiri/decorators/slop.rb +1 -1
  71. data/lib/nokogiri/encoding_handler.rb +57 -0
  72. data/lib/nokogiri/extension.rb +3 -2
  73. data/lib/nokogiri/html4/document.rb +2 -121
  74. data/lib/nokogiri/html4/element_description_defaults.rb +6 -12
  75. data/lib/nokogiri/html4/encoding_reader.rb +121 -0
  76. data/lib/nokogiri/html4.rb +1 -0
  77. data/lib/nokogiri/html5/document.rb +113 -36
  78. data/lib/nokogiri/html5/document_fragment.rb +9 -2
  79. data/lib/nokogiri/html5/node.rb +3 -5
  80. data/lib/nokogiri/html5.rb +127 -216
  81. data/lib/nokogiri/jruby/dependencies.rb +1 -19
  82. data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
  83. data/lib/nokogiri/version/constant.rb +1 -1
  84. data/lib/nokogiri/version/info.rb +11 -10
  85. data/lib/nokogiri/xml/attr.rb +49 -0
  86. data/lib/nokogiri/xml/builder.rb +1 -1
  87. data/lib/nokogiri/xml/document.rb +103 -55
  88. data/lib/nokogiri/xml/document_fragment.rb +49 -6
  89. data/lib/nokogiri/xml/namespace.rb +42 -0
  90. data/lib/nokogiri/xml/node/save_options.rb +6 -4
  91. data/lib/nokogiri/xml/node.rb +190 -35
  92. data/lib/nokogiri/xml/node_set.rb +88 -9
  93. data/lib/nokogiri/xml/parse_options.rb +129 -50
  94. data/lib/nokogiri/xml/pp/node.rb +6 -4
  95. data/lib/nokogiri/xml/processing_instruction.rb +2 -1
  96. data/lib/nokogiri/xml/sax/parser.rb +2 -3
  97. data/lib/nokogiri/xslt.rb +1 -1
  98. data/lib/nokogiri.rb +3 -11
  99. data/lib/xsd/xmlparser/nokogiri.rb +3 -1
  100. data/ports/archives/libxml2-2.10.4.tar.xz +0 -0
  101. data/ports/archives/libxslt-1.1.37.tar.xz +0 -0
  102. metadata +13 -236
  103. data/patches/libxml2/0004-use-glibc-strlen.patch +0 -53
  104. data/patches/libxml2/0005-avoid-isnan-isinf.patch +0 -81
  105. data/patches/libxml2/0006-update-automake-files-for-arm64.patch +0 -3040
  106. data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +0 -61
  107. data/ports/archives/libxml2-2.9.14.tar.xz +0 -0
  108. data/ports/archives/libxslt-1.1.35.tar.xz +0 -0
@@ -1,84 +1,163 @@
1
+ # coding: utf-8
1
2
  # frozen_string_literal: true
2
3
 
3
4
  module Nokogiri
4
5
  module XML
5
- ###
6
- # Parse options for passing to Nokogiri.XML or Nokogiri.HTML
7
- #
8
- # == Building combinations of parse options
9
- # You can build your own combinations of these parse options by using any of the following methods:
10
- # *Note*: All examples attempt to set the +RECOVER+ & +NOENT+ options.
11
- # [Ruby's bitwise operators] You can use the Ruby bitwise operators to set various combinations.
12
- # Nokogiri.XML('<content>Chapter 1</content', nil, nil, Nokogiri::XML::ParseOptions.new((1 << 0) | (1 << 1)))
13
- # [Method chaining] Every option has an equivalent method in lowercase. You can chain these methods together to set various combinations.
14
- # Nokogiri.XML('<content>Chapter 1</content', nil, nil, Nokogiri::XML::ParseOptions.new.recover.noent)
15
- # [Using Ruby Blocks] You can also setup parse combinations in the block passed to Nokogiri.XML or Nokogiri.HTML
16
- # Nokogiri.XML('<content>Chapter 1</content') {|config| config.recover.noent}
17
- #
18
- # == Removing particular parse options
19
- # You can also remove options from an instance of +ParseOptions+ dynamically.
20
- # Every option has an equivalent <code>no{option}</code> method in lowercase. You can call these methods on an instance of +ParseOptions+ to remove the option.
21
- # Note that this is not available for +STRICT+.
22
- #
23
- # # Setting the RECOVER & NOENT options...
24
- # options = Nokogiri::XML::ParseOptions.new.recover.noent
25
- # # later...
26
- # options.norecover # Removes the Nokogiri::XML::ParseOptions::RECOVER option
27
- # options.nonoent # Removes the Nokogiri::XML::ParseOptions::NOENT option
6
+ # Options that control the parsing behavior for XML::Document, XML::DocumentFragment,
7
+ # HTML4::Document, HTML4::DocumentFragment, XSLT::Stylesheet, and XML::Schema.
8
+ #
9
+ # These options directly expose libxml2's parse options, which are all boolean in the sense that
10
+ # an option is "on" or "off".
11
+ #
12
+ # 💡 Note that HTML5 parsing has a separate, orthogonal set of options due to the nature of the
13
+ # HTML5 specification. See Nokogiri::HTML5.
14
+ #
15
+ # ⚠ Not all parse options are supported on JRuby. Nokogiri will attempt to invoke the equivalent
16
+ # behavior in Xerces/NekoHTML on JRuby when it's possible.
17
+ #
18
+ # == Setting and unsetting parse options
19
+ #
20
+ # You can build your own combinations of parse options by using any of the following methods:
21
+ #
22
+ # [ParseOptions method chaining]
23
+ #
24
+ # Every option has an equivalent method in lowercase. You can chain these methods together to
25
+ # set various combinations.
26
+ #
27
+ # # Set the HUGE & PEDANTIC options
28
+ # po = Nokogiri::XML::ParseOptions.new.huge.pedantic
29
+ # doc = Nokogiri::XML::Document.parse(xml, nil, nil, po)
30
+ #
31
+ # Every option has an equivalent <code>no{option}</code> method in lowercase. You can call these
32
+ # methods on an instance of ParseOptions to unset the option.
33
+ #
34
+ # # Set the HUGE & PEDANTIC options
35
+ # po = Nokogiri::XML::ParseOptions.new.huge.pedantic
36
+ #
37
+ # # later we want to modify the options
38
+ # po.nohuge # Unset the HUGE option
39
+ # po.nopedantic # Unset the PEDANTIC option
40
+ #
41
+ # 💡 Note that some options begin with "no" leading to the logical but perhaps unintuitive
42
+ # double negative:
43
+ #
44
+ # po.nocdata # Set the NOCDATA parse option
45
+ # po.nonocdata # Unset the NOCDATA parse option
46
+ #
47
+ # 💡 Note that negation is not available for STRICT, which is itself a negation of all other
48
+ # features.
49
+ #
50
+ #
51
+ # [Using Ruby Blocks]
52
+ #
53
+ # Most parsing methods will accept a block for configuration of parse options, and we
54
+ # recommend chaining the setter methods:
55
+ #
56
+ # doc = Nokogiri::XML::Document.parse(xml) { |config| config.huge.pedantic }
57
+ #
58
+ #
59
+ # [ParseOptions constants]
60
+ #
61
+ # You can also use the constants declared under Nokogiri::XML::ParseOptions to set various
62
+ # combinations. They are bits in a bitmask, and so can be combined with bitwise operators:
63
+ #
64
+ # po = Nokogiri::XML::ParseOptions.new(Nokogiri::XML::ParseOptions::HUGE | Nokogiri::XML::ParseOptions::PEDANTIC)
65
+ # doc = Nokogiri::XML::Document.parse(xml, nil, nil, po)
28
66
  #
29
67
  class ParseOptions
30
68
  # Strict parsing
31
69
  STRICT = 0
32
- # Recover from errors
70
+
71
+ # Recover from errors. On by default for XML::Document, XML::DocumentFragment,
72
+ # HTML4::Document, HTML4::DocumentFragment, XSLT::Stylesheet, and XML::Schema.
33
73
  RECOVER = 1 << 0
34
- # Substitute entities
74
+
75
+ # Substitute entities. Off by default.
76
+ #
77
+ # ⚠ This option enables entity substitution, contrary to what the name implies.
78
+ #
79
+ # ⚠ <b>It is UNSAFE to set this option</b> when parsing untrusted documents.
35
80
  NOENT = 1 << 1
36
- # Load external subsets
81
+
82
+ # Load external subsets. On by default for XSLT::Stylesheet.
83
+ #
84
+ # ⚠ <b>It is UNSAFE to set this option</b> when parsing untrusted documents.
37
85
  DTDLOAD = 1 << 2
38
- # Default DTD attributes
86
+
87
+ # Default DTD attributes. On by default for XSLT::Stylesheet.
39
88
  DTDATTR = 1 << 3
40
- # validate with the DTD
89
+
90
+ # Validate with the DTD. Off by default.
41
91
  DTDVALID = 1 << 4
42
- # suppress error reports
92
+
93
+ # Suppress error reports. On by default for HTML4::Document and HTML4::DocumentFragment
43
94
  NOERROR = 1 << 5
44
- # suppress warning reports
95
+
96
+ # Suppress warning reports. On by default for HTML4::Document and HTML4::DocumentFragment
45
97
  NOWARNING = 1 << 6
46
- # pedantic error reporting
98
+
99
+ # Enable pedantic error reporting. Off by default.
47
100
  PEDANTIC = 1 << 7
48
- # remove blank nodes
101
+
102
+ # Remove blank nodes. Off by default.
49
103
  NOBLANKS = 1 << 8
50
- # use the SAX1 interface internally
104
+
105
+ # Use the SAX1 interface internally. Off by default.
51
106
  SAX1 = 1 << 9
52
- # Implement XInclude substitution
107
+
108
+ # Implement XInclude substitution. Off by default.
53
109
  XINCLUDE = 1 << 10
54
- # Forbid network access. Recommended for dealing with untrusted documents.
110
+
111
+ # Forbid network access. On by default for XML::Document, XML::DocumentFragment,
112
+ # HTML4::Document, HTML4::DocumentFragment, XSLT::Stylesheet, and XML::Schema.
113
+ #
114
+ # ⚠ <b>It is UNSAFE to unset this option</b> when parsing untrusted documents.
55
115
  NONET = 1 << 11
56
- # Do not reuse the context dictionary
116
+
117
+ # Do not reuse the context dictionary. Off by default.
57
118
  NODICT = 1 << 12
58
- # remove redundant namespaces declarations
119
+
120
+ # Remove redundant namespaces declarations. Off by default.
59
121
  NSCLEAN = 1 << 13
60
- # merge CDATA as text nodes
122
+
123
+ # Merge CDATA as text nodes. On by default for XSLT::Stylesheet.
61
124
  NOCDATA = 1 << 14
62
- # do not generate XINCLUDE START/END nodes
125
+
126
+ # Do not generate XInclude START/END nodes. Off by default.
63
127
  NOXINCNODE = 1 << 15
64
- # compact small text nodes; no modification of the tree allowed afterwards (will possibly crash if you try to modify the tree)
128
+
129
+ # Compact small text nodes. Off by default.
130
+ #
131
+ # ⚠ No modification of the DOM tree is allowed after parsing. libxml2 may crash if you try to
132
+ # modify the tree.
65
133
  COMPACT = 1 << 16
66
- # parse using XML-1.0 before update 5
134
+
135
+ # Parse using XML-1.0 before update 5. Off by default
67
136
  OLD10 = 1 << 17
68
- # do not fixup XINCLUDE xml:base uris
137
+
138
+ # Do not fixup XInclude xml:base uris. Off by default
69
139
  NOBASEFIX = 1 << 18
70
- # relax any hardcoded limit from the parser
140
+
141
+ # Relax any hardcoded limit from the parser. Off by default.
142
+ #
143
+ # ⚠ There may be a performance penalty when this option is set.
71
144
  HUGE = 1 << 19
72
- # line numbers stored as long int (instead of a short int)
145
+
146
+ # Support line numbers up to <code>long int</code> (default is a <code>short int</code>). On
147
+ # by default for for XML::Document, XML::DocumentFragment, HTML4::Document,
148
+ # HTML4::DocumentFragment, XSLT::Stylesheet, and XML::Schema.
73
149
  BIG_LINES = 1 << 22
74
150
 
75
- # the default options used for parsing XML documents
151
+ # The options mask used by default for parsing XML::Document and XML::DocumentFragment
76
152
  DEFAULT_XML = RECOVER | NONET | BIG_LINES
77
- # the default options used for parsing XSLT stylesheets
153
+
154
+ # The options mask used by default used for parsing XSLT::Stylesheet
78
155
  DEFAULT_XSLT = RECOVER | NONET | NOENT | DTDLOAD | DTDATTR | NOCDATA | BIG_LINES
79
- # the default options used for parsing HTML documents
156
+
157
+ # The options mask used by default used for parsing HTML4::Document and HTML4::DocumentFragment
80
158
  DEFAULT_HTML = RECOVER | NOERROR | NOWARNING | NONET | BIG_LINES
81
- # the default options used for parsing XML schemas
159
+
160
+ # The options mask used by default used for parsing XML::Schema
82
161
  DEFAULT_SCHEMA = NONET | BIG_LINES
83
162
 
84
163
  attr_accessor :options
@@ -90,7 +169,7 @@ module Nokogiri
90
169
  constants.each do |constant|
91
170
  next if constant.to_sym == :STRICT
92
171
 
93
- class_eval %{
172
+ class_eval <<~RUBY, __FILE__, __LINE__ + 1
94
173
  def #{constant.downcase}
95
174
  @options |= #{constant}
96
175
  self
@@ -104,7 +183,7 @@ module Nokogiri
104
183
  def #{constant.downcase}?
105
184
  #{constant} & @options == #{constant}
106
185
  end
107
- }
186
+ RUBY
108
187
  end
109
188
 
110
189
  def strict
@@ -5,6 +5,8 @@ module Nokogiri
5
5
  # :nodoc: all
6
6
  module PP
7
7
  module Node
8
+ COLLECTIONS = [:attribute_nodes, :children]
9
+
8
10
  def inspect
9
11
  attributes = inspect_attributes.reject do |x|
10
12
  attribute = send(x)
@@ -21,11 +23,11 @@ module Nokogiri
21
23
  nice_name = self.class.name.split("::").last
22
24
  pp.group(2, "#(#{nice_name}:#{format("0x%x", object_id)} {", "})") do
23
25
  pp.breakable
24
- attrs = inspect_attributes.map do |t|
26
+ attrs = inspect_attributes.filter_map do |t|
25
27
  [t, send(t)] if respond_to?(t)
26
- end.compact.find_all do |x|
28
+ end.find_all do |x|
27
29
  if x.last
28
- if [:attribute_nodes, :children].include?(x.first)
30
+ if COLLECTIONS.include?(x.first)
29
31
  !x.last.empty?
30
32
  else
31
33
  true
@@ -34,7 +36,7 @@ module Nokogiri
34
36
  end
35
37
 
36
38
  pp.seplist(attrs) do |v|
37
- if [:attribute_nodes, :children].include?(v.first)
39
+ if COLLECTIONS.include?(v.first)
38
40
  pp.group(2, "#{v.first.to_s.sub(/_\w+$/, "s")} = [", "]") do
39
41
  pp.breakable
40
42
  pp.seplist(v.last) do |item|
@@ -3,7 +3,8 @@
3
3
  module Nokogiri
4
4
  module XML
5
5
  class ProcessingInstruction < Node
6
- def initialize(document, name, content) # rubocop:disable Style/RedundantInitialize
6
+ def initialize(document, name, content)
7
+ super(document, name)
7
8
  end
8
9
  end
9
10
  end
@@ -88,9 +88,8 @@ module Nokogiri
88
88
 
89
89
  ###
90
90
  # Parse given +io+
91
- def parse_io(io, encoding = "ASCII")
92
- @encoding = check_encoding(encoding)
93
- ctx = ParserContext.io(io, ENCODINGS[@encoding])
91
+ def parse_io(io, encoding = @encoding)
92
+ ctx = ParserContext.io(io, ENCODINGS[check_encoding(encoding)])
94
93
  yield ctx if block_given?
95
94
  ctx.parse_with(self)
96
95
  end
data/lib/nokogiri/xslt.rb CHANGED
@@ -47,7 +47,7 @@ module Nokogiri
47
47
  # [Returns] Array of string parameters, with quotes correctly escaped for use with XSLT::Stylesheet.transform
48
48
  #
49
49
  def quote_params(params)
50
- params.flatten.each_slice(2).each_with_object([]) do |kv, quoted_params|
50
+ params.flatten.each_slice(2).with_object([]) do |kv, quoted_params|
51
51
  key, value = kv.map(&:to_s)
52
52
  value = if /'/.match?(value)
53
53
  "concat('#{value.gsub(/'/, %q{', "'", '})}')"
data/lib/nokogiri.rb CHANGED
@@ -1,8 +1,6 @@
1
1
  # coding: utf-8
2
2
  # frozen_string_literal: true
3
3
 
4
- require "rbconfig"
5
-
6
4
  if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
7
5
  require_relative "nokogiri/jruby/dependencies"
8
6
  end
@@ -88,17 +86,10 @@ module Nokogiri
88
86
 
89
87
  # :nodoc:
90
88
  def install_default_aliases
91
- # Make sure to support some popular encoding aliases not known by
92
- # all iconv implementations.
93
- {
94
- "Windows-31J" => "CP932", # Windows-31J is the IANA registered name of CP932.
95
- }.each do |alias_name, name|
96
- EncodingHandler.alias(name, alias_name) if EncodingHandler[alias_name].nil?
97
- end
89
+ warn("Nokogiri.install_default_aliases is deprecated and will be removed in a future version of Nokogiri. Please call Nokogiri::EncodingHandler.install_default_aliases instead.")
90
+ Nokogiri::EncodingHandler.install_default_aliases
98
91
  end
99
92
  end
100
-
101
- Nokogiri.install_default_aliases
102
93
  end
103
94
 
104
95
  ###
@@ -124,5 +115,6 @@ require_relative "nokogiri/html"
124
115
  require_relative "nokogiri/decorators/slop"
125
116
  require_relative "nokogiri/css"
126
117
  require_relative "nokogiri/html4/builder"
118
+ require_relative "nokogiri/encoding_handler"
127
119
 
128
120
  require_relative "nokogiri/html5" if Nokogiri.uses_gumbo?
@@ -95,7 +95,9 @@ module XSD
95
95
  end
96
96
 
97
97
  ["xmldecl", "start_document", "end_document", "comment"].each do |name|
98
- class_eval %{ def #{name}(*args); end }
98
+ class_eval <<~RUBY, __FILE__, __LINE__ + 1
99
+ def #{name}(*args); end
100
+ RUBY
99
101
  end
100
102
 
101
103
  add_factory(self)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nokogiri
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.8
4
+ version: 1.14.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Dalessio
@@ -20,7 +20,7 @@ authors:
20
20
  autorequire:
21
21
  bindir: bin
22
22
  cert_chain: []
23
- date: 2022-07-23 00:00:00.000000000 Z
23
+ date: 2023-05-24 00:00:00.000000000 Z
24
24
  dependencies:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mini_portile2
@@ -36,6 +36,7 @@ dependencies:
36
36
  - - "~>"
37
37
  - !ruby/object:Gem::Version
38
38
  version: 2.8.0
39
+ force_ruby_platform: false
39
40
  - !ruby/object:Gem::Dependency
40
41
  name: racc
41
42
  requirement: !ruby/object:Gem::Requirement
@@ -50,234 +51,11 @@ dependencies:
50
51
  - - "~>"
51
52
  - !ruby/object:Gem::Version
52
53
  version: '1.4'
53
- - !ruby/object:Gem::Dependency
54
- name: bundler
55
- requirement: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '2.2'
60
- type: :development
61
- prerelease: false
62
- version_requirements: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - "~>"
65
- - !ruby/object:Gem::Version
66
- version: '2.2'
67
- - !ruby/object:Gem::Dependency
68
- name: hoe-markdown
69
- requirement: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '1.4'
74
- type: :development
75
- prerelease: false
76
- version_requirements: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - "~>"
79
- - !ruby/object:Gem::Version
80
- version: '1.4'
81
- - !ruby/object:Gem::Dependency
82
- name: minitest
83
- requirement: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - "~>"
86
- - !ruby/object:Gem::Version
87
- version: '5.15'
88
- type: :development
89
- prerelease: false
90
- version_requirements: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - "~>"
93
- - !ruby/object:Gem::Version
94
- version: '5.15'
95
- - !ruby/object:Gem::Dependency
96
- name: minitest-reporters
97
- requirement: !ruby/object:Gem::Requirement
98
- requirements:
99
- - - "~>"
100
- - !ruby/object:Gem::Version
101
- version: '1.4'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - "~>"
107
- - !ruby/object:Gem::Version
108
- version: '1.4'
109
- - !ruby/object:Gem::Dependency
110
- name: rake
111
- requirement: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - "~>"
114
- - !ruby/object:Gem::Version
115
- version: '13.0'
116
- type: :development
117
- prerelease: false
118
- version_requirements: !ruby/object:Gem::Requirement
119
- requirements:
120
- - - "~>"
121
- - !ruby/object:Gem::Version
122
- version: '13.0'
123
- - !ruby/object:Gem::Dependency
124
- name: rake-compiler
125
- requirement: !ruby/object:Gem::Requirement
126
- requirements:
127
- - - '='
128
- - !ruby/object:Gem::Version
129
- version: 1.1.7
130
- type: :development
131
- prerelease: false
132
- version_requirements: !ruby/object:Gem::Requirement
133
- requirements:
134
- - - '='
135
- - !ruby/object:Gem::Version
136
- version: 1.1.7
137
- - !ruby/object:Gem::Dependency
138
- name: rake-compiler-dock
139
- requirement: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - '='
142
- - !ruby/object:Gem::Version
143
- version: 1.2.2
144
- type: :development
145
- prerelease: false
146
- version_requirements: !ruby/object:Gem::Requirement
147
- requirements:
148
- - - '='
149
- - !ruby/object:Gem::Version
150
- version: 1.2.2
151
- - !ruby/object:Gem::Dependency
152
- name: rdoc
153
- requirement: !ruby/object:Gem::Requirement
154
- requirements:
155
- - - "~>"
156
- - !ruby/object:Gem::Version
157
- version: '6.3'
158
- type: :development
159
- prerelease: false
160
- version_requirements: !ruby/object:Gem::Requirement
161
- requirements:
162
- - - "~>"
163
- - !ruby/object:Gem::Version
164
- version: '6.3'
165
- - !ruby/object:Gem::Dependency
166
- name: rexical
167
- requirement: !ruby/object:Gem::Requirement
168
- requirements:
169
- - - "~>"
170
- - !ruby/object:Gem::Version
171
- version: 1.0.7
172
- type: :development
173
- prerelease: false
174
- version_requirements: !ruby/object:Gem::Requirement
175
- requirements:
176
- - - "~>"
177
- - !ruby/object:Gem::Version
178
- version: 1.0.7
179
- - !ruby/object:Gem::Dependency
180
- name: rubocop
181
- requirement: !ruby/object:Gem::Requirement
182
- requirements:
183
- - - "~>"
184
- - !ruby/object:Gem::Version
185
- version: 1.30.1
186
- type: :development
187
- prerelease: false
188
- version_requirements: !ruby/object:Gem::Requirement
189
- requirements:
190
- - - "~>"
191
- - !ruby/object:Gem::Version
192
- version: 1.30.1
193
- - !ruby/object:Gem::Dependency
194
- name: rubocop-minitest
195
- requirement: !ruby/object:Gem::Requirement
196
- requirements:
197
- - - "~>"
198
- - !ruby/object:Gem::Version
199
- version: '0.17'
200
- type: :development
201
- prerelease: false
202
- version_requirements: !ruby/object:Gem::Requirement
203
- requirements:
204
- - - "~>"
205
- - !ruby/object:Gem::Version
206
- version: '0.17'
207
- - !ruby/object:Gem::Dependency
208
- name: rubocop-performance
209
- requirement: !ruby/object:Gem::Requirement
210
- requirements:
211
- - - "~>"
212
- - !ruby/object:Gem::Version
213
- version: '1.12'
214
- type: :development
215
- prerelease: false
216
- version_requirements: !ruby/object:Gem::Requirement
217
- requirements:
218
- - - "~>"
219
- - !ruby/object:Gem::Version
220
- version: '1.12'
221
- - !ruby/object:Gem::Dependency
222
- name: rubocop-rake
223
- requirement: !ruby/object:Gem::Requirement
224
- requirements:
225
- - - "~>"
226
- - !ruby/object:Gem::Version
227
- version: '0.6'
228
- type: :development
229
- prerelease: false
230
- version_requirements: !ruby/object:Gem::Requirement
231
- requirements:
232
- - - "~>"
233
- - !ruby/object:Gem::Version
234
- version: '0.6'
235
- - !ruby/object:Gem::Dependency
236
- name: rubocop-shopify
237
- requirement: !ruby/object:Gem::Requirement
238
- requirements:
239
- - - '='
240
- - !ruby/object:Gem::Version
241
- version: 2.5.0
242
- type: :development
243
- prerelease: false
244
- version_requirements: !ruby/object:Gem::Requirement
245
- requirements:
246
- - - '='
247
- - !ruby/object:Gem::Version
248
- version: 2.5.0
249
- - !ruby/object:Gem::Dependency
250
- name: ruby_memcheck
251
- requirement: !ruby/object:Gem::Requirement
252
- requirements:
253
- - - "~>"
254
- - !ruby/object:Gem::Version
255
- version: '1.0'
256
- type: :development
257
- prerelease: false
258
- version_requirements: !ruby/object:Gem::Requirement
259
- requirements:
260
- - - "~>"
261
- - !ruby/object:Gem::Version
262
- version: '1.0'
263
- - !ruby/object:Gem::Dependency
264
- name: simplecov
265
- requirement: !ruby/object:Gem::Requirement
266
- requirements:
267
- - - "~>"
268
- - !ruby/object:Gem::Version
269
- version: '0.21'
270
- type: :development
271
- prerelease: false
272
- version_requirements: !ruby/object:Gem::Requirement
273
- requirements:
274
- - - "~>"
275
- - !ruby/object:Gem::Version
276
- version: '0.21'
54
+ force_ruby_platform: false
277
55
  description: |
278
56
  Nokogiri (鋸) makes it easy and painless to work with XML and HTML from Ruby. It provides a
279
57
  sensible, easy-to-understand API for reading, writing, modifying, and querying documents. It is
280
- fast and standards-compliant by relying on native parsers like libxml2 (C) and xerces (Java).
58
+ fast and standards-compliant by relying on native parsers like libxml2, libgumbo, or xerces.
281
59
  email: nokogiri-talk@googlegroups.com
282
60
  executables:
283
61
  - nokogiri
@@ -381,9 +159,9 @@ files:
381
159
  - gumbo-parser/src/error.h
382
160
  - gumbo-parser/src/foreign_attrs.c
383
161
  - gumbo-parser/src/foreign_attrs.gperf
384
- - gumbo-parser/src/gumbo.h
385
162
  - gumbo-parser/src/insertion_mode.h
386
163
  - gumbo-parser/src/macros.h
164
+ - gumbo-parser/src/nokogiri_gumbo.h
387
165
  - gumbo-parser/src/parser.c
388
166
  - gumbo-parser/src/parser.h
389
167
  - gumbo-parser/src/replacement.h
@@ -422,6 +200,7 @@ files:
422
200
  - lib/nokogiri/css/tokenizer.rex
423
201
  - lib/nokogiri/css/xpath_visitor.rb
424
202
  - lib/nokogiri/decorators/slop.rb
203
+ - lib/nokogiri/encoding_handler.rb
425
204
  - lib/nokogiri/extension.rb
426
205
  - lib/nokogiri/gumbo.rb
427
206
  - lib/nokogiri/html.rb
@@ -431,6 +210,7 @@ files:
431
210
  - lib/nokogiri/html4/document_fragment.rb
432
211
  - lib/nokogiri/html4/element_description.rb
433
212
  - lib/nokogiri/html4/element_description_defaults.rb
213
+ - lib/nokogiri/html4/encoding_reader.rb
434
214
  - lib/nokogiri/html4/entity_lookup.rb
435
215
  - lib/nokogiri/html4/sax/parser.rb
436
216
  - lib/nokogiri/html4/sax/parser_context.rb
@@ -440,6 +220,7 @@ files:
440
220
  - lib/nokogiri/html5/document_fragment.rb
441
221
  - lib/nokogiri/html5/node.rb
442
222
  - lib/nokogiri/jruby/dependencies.rb
223
+ - lib/nokogiri/jruby/nokogiri_jars.rb
443
224
  - lib/nokogiri/syntax_error.rb
444
225
  - lib/nokogiri/version.rb
445
226
  - lib/nokogiri/version/constant.rb
@@ -487,14 +268,10 @@ files:
487
268
  - patches/libxml2/0001-Remove-script-macro-support.patch
488
269
  - patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch
489
270
  - patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch
490
- - patches/libxml2/0004-use-glibc-strlen.patch
491
- - patches/libxml2/0005-avoid-isnan-isinf.patch
492
- - patches/libxml2/0006-update-automake-files-for-arm64.patch
493
- - patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch
494
271
  - patches/libxml2/0009-allow-wildcard-namespaces.patch
495
272
  - patches/libxslt/0001-update-automake-files-for-arm64.patch
496
- - ports/archives/libxml2-2.9.14.tar.xz
497
- - ports/archives/libxslt-1.1.35.tar.xz
273
+ - ports/archives/libxml2-2.10.4.tar.xz
274
+ - ports/archives/libxslt-1.1.37.tar.xz
498
275
  homepage: https://nokogiri.org
499
276
  licenses:
500
277
  - MIT
@@ -515,14 +292,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
515
292
  requirements:
516
293
  - - ">="
517
294
  - !ruby/object:Gem::Version
518
- version: 2.6.0
295
+ version: 2.7.0
519
296
  required_rubygems_version: !ruby/object:Gem::Requirement
520
297
  requirements:
521
298
  - - ">="
522
299
  - !ruby/object:Gem::Version
523
300
  version: '0'
524
301
  requirements: []
525
- rubygems_version: 3.3.7
302
+ rubygems_version: 3.4.10
526
303
  signing_key:
527
304
  specification_version: 4
528
305
  summary: Nokogiri (鋸) makes it easy and painless to work with XML and HTML from Ruby.