nokogiri 1.10.3 → 1.13.9

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 (220) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -0
  3. data/LICENSE-DEPENDENCIES.md +1173 -884
  4. data/LICENSE.md +1 -1
  5. data/README.md +178 -96
  6. data/bin/nokogiri +63 -50
  7. data/dependencies.yml +13 -62
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +761 -424
  10. data/ext/nokogiri/gumbo.c +584 -0
  11. data/ext/nokogiri/html4_document.c +166 -0
  12. data/ext/nokogiri/html4_element_description.c +294 -0
  13. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  14. data/ext/nokogiri/html4_sax_parser_context.c +119 -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 +228 -91
  18. data/ext/nokogiri/nokogiri.h +199 -88
  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 +21 -21
  22. data/ext/nokogiri/xml_cdata.c +14 -19
  23. data/ext/nokogiri/xml_comment.c +19 -26
  24. data/ext/nokogiri/xml_document.c +296 -220
  25. data/ext/nokogiri/xml_document_fragment.c +12 -16
  26. data/ext/nokogiri/xml_dtd.c +64 -58
  27. data/ext/nokogiri/xml_element_content.c +31 -26
  28. data/ext/nokogiri/xml_element_decl.c +25 -25
  29. data/ext/nokogiri/xml_encoding_handler.c +43 -18
  30. data/ext/nokogiri/xml_entity_decl.c +37 -35
  31. data/ext/nokogiri/xml_entity_reference.c +16 -18
  32. data/ext/nokogiri/xml_namespace.c +98 -53
  33. data/ext/nokogiri/xml_node.c +1065 -653
  34. data/ext/nokogiri/xml_node_set.c +178 -166
  35. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  36. data/ext/nokogiri/xml_reader.c +277 -175
  37. data/ext/nokogiri/xml_relax_ng.c +52 -28
  38. data/ext/nokogiri/xml_sax_parser.c +112 -112
  39. data/ext/nokogiri/xml_sax_parser_context.c +112 -86
  40. data/ext/nokogiri/xml_sax_push_parser.c +36 -27
  41. data/ext/nokogiri/xml_schema.c +114 -35
  42. data/ext/nokogiri/xml_syntax_error.c +42 -21
  43. data/ext/nokogiri/xml_text.c +14 -18
  44. data/ext/nokogiri/xml_xpath_context.c +226 -115
  45. data/ext/nokogiri/xslt_stylesheet.c +265 -173
  46. data/gumbo-parser/CHANGES.md +63 -0
  47. data/gumbo-parser/Makefile +101 -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 +626 -0
  59. data/gumbo-parser/src/error.h +148 -0
  60. data/gumbo-parser/src/foreign_attrs.c +104 -0
  61. data/gumbo-parser/src/foreign_attrs.gperf +27 -0
  62. data/gumbo-parser/src/gumbo.h +943 -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/parser.c +4875 -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 +222 -0
  76. data/gumbo-parser/src/tag_lookup.c +382 -0
  77. data/gumbo-parser/src/tag_lookup.gperf +169 -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 +68 -0
  88. data/gumbo-parser/src/util.h +30 -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 +218 -91
  100. data/lib/nokogiri/css.rb +50 -17
  101. data/lib/nokogiri/decorators/slop.rb +9 -7
  102. data/lib/nokogiri/extension.rb +31 -0
  103. data/lib/nokogiri/gumbo.rb +15 -0
  104. data/lib/nokogiri/html.rb +38 -27
  105. data/lib/nokogiri/{html → html4}/builder.rb +4 -2
  106. data/lib/nokogiri/{html → html4}/document.rb +103 -105
  107. data/lib/nokogiri/html4/document_fragment.rb +54 -0
  108. data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
  109. data/lib/nokogiri/html4/element_description_defaults.rb +578 -0
  110. data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
  111. data/lib/nokogiri/{html → html4}/sax/parser.rb +17 -16
  112. data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
  113. data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
  114. data/lib/nokogiri/html4.rb +46 -0
  115. data/lib/nokogiri/html5/document.rb +91 -0
  116. data/lib/nokogiri/html5/document_fragment.rb +83 -0
  117. data/lib/nokogiri/html5/node.rb +100 -0
  118. data/lib/nokogiri/html5.rb +478 -0
  119. data/lib/nokogiri/jruby/dependencies.rb +21 -0
  120. data/lib/nokogiri/syntax_error.rb +2 -0
  121. data/lib/nokogiri/version/constant.rb +6 -0
  122. data/lib/nokogiri/version/info.rb +222 -0
  123. data/lib/nokogiri/version.rb +3 -108
  124. data/lib/nokogiri/xml/attr.rb +6 -3
  125. data/lib/nokogiri/xml/attribute_decl.rb +3 -1
  126. data/lib/nokogiri/xml/builder.rb +97 -53
  127. data/lib/nokogiri/xml/cdata.rb +3 -1
  128. data/lib/nokogiri/xml/character_data.rb +2 -0
  129. data/lib/nokogiri/xml/document.rb +224 -86
  130. data/lib/nokogiri/xml/document_fragment.rb +46 -44
  131. data/lib/nokogiri/xml/dtd.rb +4 -2
  132. data/lib/nokogiri/xml/element_content.rb +2 -0
  133. data/lib/nokogiri/xml/element_decl.rb +3 -1
  134. data/lib/nokogiri/xml/entity_decl.rb +4 -2
  135. data/lib/nokogiri/xml/entity_reference.rb +2 -0
  136. data/lib/nokogiri/xml/namespace.rb +3 -0
  137. data/lib/nokogiri/xml/node/save_options.rb +10 -5
  138. data/lib/nokogiri/xml/node.rb +884 -378
  139. data/lib/nokogiri/xml/node_set.rb +51 -54
  140. data/lib/nokogiri/xml/notation.rb +13 -0
  141. data/lib/nokogiri/xml/parse_options.rb +22 -8
  142. data/lib/nokogiri/xml/pp/character_data.rb +9 -6
  143. data/lib/nokogiri/xml/pp/node.rb +25 -26
  144. data/lib/nokogiri/xml/pp.rb +4 -2
  145. data/lib/nokogiri/xml/processing_instruction.rb +3 -1
  146. data/lib/nokogiri/xml/reader.rb +21 -28
  147. data/lib/nokogiri/xml/relax_ng.rb +8 -2
  148. data/lib/nokogiri/xml/sax/document.rb +45 -49
  149. data/lib/nokogiri/xml/sax/parser.rb +38 -34
  150. data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
  151. data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
  152. data/lib/nokogiri/xml/sax.rb +6 -4
  153. data/lib/nokogiri/xml/schema.rb +19 -9
  154. data/lib/nokogiri/xml/searchable.rb +112 -72
  155. data/lib/nokogiri/xml/syntax_error.rb +6 -4
  156. data/lib/nokogiri/xml/text.rb +2 -0
  157. data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
  158. data/lib/nokogiri/xml/xpath.rb +15 -4
  159. data/lib/nokogiri/xml/xpath_context.rb +3 -3
  160. data/lib/nokogiri/xml.rb +38 -37
  161. data/lib/nokogiri/xslt/stylesheet.rb +3 -1
  162. data/lib/nokogiri/xslt.rb +29 -20
  163. data/lib/nokogiri.rb +49 -65
  164. data/lib/xsd/xmlparser/nokogiri.rb +26 -24
  165. data/patches/libxml2/{0002-Remove-script-macro-support.patch → 0001-Remove-script-macro-support.patch} +0 -0
  166. data/patches/libxml2/{0003-Update-entities-to-remove-handling-of-ssi.patch → 0002-Update-entities-to-remove-handling-of-ssi.patch} +0 -0
  167. data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
  168. data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
  169. data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
  170. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +3037 -0
  171. data/ports/archives/libxml2-2.10.3.tar.xz +0 -0
  172. data/ports/archives/libxslt-1.1.37.tar.xz +0 -0
  173. metadata +205 -138
  174. data/ext/nokogiri/html_document.c +0 -170
  175. data/ext/nokogiri/html_document.h +0 -10
  176. data/ext/nokogiri/html_element_description.c +0 -279
  177. data/ext/nokogiri/html_element_description.h +0 -10
  178. data/ext/nokogiri/html_entity_lookup.c +0 -32
  179. data/ext/nokogiri/html_entity_lookup.h +0 -8
  180. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  181. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  182. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  183. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  184. data/ext/nokogiri/xml_attr.h +0 -9
  185. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  186. data/ext/nokogiri/xml_cdata.h +0 -9
  187. data/ext/nokogiri/xml_comment.h +0 -9
  188. data/ext/nokogiri/xml_document.h +0 -23
  189. data/ext/nokogiri/xml_document_fragment.h +0 -10
  190. data/ext/nokogiri/xml_dtd.h +0 -10
  191. data/ext/nokogiri/xml_element_content.h +0 -10
  192. data/ext/nokogiri/xml_element_decl.h +0 -9
  193. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  194. data/ext/nokogiri/xml_entity_decl.h +0 -10
  195. data/ext/nokogiri/xml_entity_reference.h +0 -9
  196. data/ext/nokogiri/xml_io.c +0 -61
  197. data/ext/nokogiri/xml_io.h +0 -11
  198. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  199. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  200. data/ext/nokogiri/xml_namespace.h +0 -14
  201. data/ext/nokogiri/xml_node.h +0 -13
  202. data/ext/nokogiri/xml_node_set.h +0 -12
  203. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  204. data/ext/nokogiri/xml_reader.h +0 -10
  205. data/ext/nokogiri/xml_relax_ng.h +0 -9
  206. data/ext/nokogiri/xml_sax_parser.h +0 -39
  207. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  208. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  209. data/ext/nokogiri/xml_schema.h +0 -9
  210. data/ext/nokogiri/xml_syntax_error.h +0 -13
  211. data/ext/nokogiri/xml_text.h +0 -9
  212. data/ext/nokogiri/xml_xpath_context.h +0 -10
  213. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  214. data/lib/nokogiri/html/document_fragment.rb +0 -49
  215. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  216. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  217. data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
  218. data/patches/libxslt/0001-Fix-security-framework-bypass.patch +0 -120
  219. data/ports/archives/libxml2-2.9.9.tar.gz +0 -0
  220. data/ports/archives/libxslt-1.1.33.tar.gz +0 -0
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
3
5
  ####
@@ -11,10 +13,10 @@ module Nokogiri
11
13
  # The Document this NodeSet is associated with
12
14
  attr_accessor :document
13
15
 
14
- alias :clone :dup
16
+ alias_method :clone, :dup
15
17
 
16
18
  # Create a NodeSet with +document+ defaulting to +list+
17
- def initialize document, list = []
19
+ def initialize(document, list = [])
18
20
  @document = document
19
21
  document.decorate(self)
20
22
  list.each { |x| self << x }
@@ -23,8 +25,9 @@ module Nokogiri
23
25
 
24
26
  ###
25
27
  # Get the first element of the NodeSet.
26
- def first n = nil
28
+ def first(n = nil)
27
29
  return self[0] unless n
30
+
28
31
  list = []
29
32
  [n, length].min.times { |i| list << self[i] }
30
33
  list
@@ -46,7 +49,7 @@ module Nokogiri
46
49
  # Returns the index of the first node in self that is == to +node+ or meets the given block. Returns nil if no match is found.
47
50
  def index(node = nil)
48
51
  if node
49
- warn "given block not used" if block_given?
52
+ warn("given block not used") if block_given?
50
53
  each_with_index { |member, j| return j if member == node }
51
54
  elsif block_given?
52
55
  each_with_index { |member, j| return j if yield(member) }
@@ -56,18 +59,18 @@ module Nokogiri
56
59
 
57
60
  ###
58
61
  # Insert +datum+ before the first Node in this NodeSet
59
- def before datum
60
- first.before datum
62
+ def before(datum)
63
+ first.before(datum)
61
64
  end
62
65
 
63
66
  ###
64
67
  # Insert +datum+ after the last Node in this NodeSet
65
- def after datum
66
- last.after datum
68
+ def after(datum)
69
+ last.after(datum)
67
70
  end
68
71
 
69
- alias :<< :push
70
- alias :remove :unlink
72
+ alias_method :<<, :push
73
+ alias_method :remove, :unlink
71
74
 
72
75
  ###
73
76
  # call-seq: css *rules, [namespace-bindings, custom-pseudo-class]
@@ -76,7 +79,7 @@ module Nokogiri
76
79
  # selectors. For example:
77
80
  #
78
81
  # For more information see Nokogiri::XML::Searchable#css
79
- def css *args
82
+ def css(*args)
80
83
  rules, handler, ns, _ = extract_params(args)
81
84
  paths = css_rules_to_xpath(rules, ns)
82
85
 
@@ -92,7 +95,7 @@ module Nokogiri
92
95
  # queries.
93
96
  #
94
97
  # For more information see Nokogiri::XML::Searchable#xpath
95
- def xpath *args
98
+ def xpath(*args)
96
99
  paths, handler, ns, binds = extract_params(args)
97
100
 
98
101
  inject(NodeSet.new(document)) do |set, node|
@@ -100,13 +103,6 @@ module Nokogiri
100
103
  end
101
104
  end
102
105
 
103
- ###
104
- # Search this NodeSet's nodes' immediate children using CSS selector +selector+
105
- def > selector
106
- ns = document.root.namespaces
107
- xpath CSS.xpath_for(selector, :prefix => "./", :ns => ns).first
108
- end
109
-
110
106
  ###
111
107
  # call-seq: search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class]
112
108
  #
@@ -119,18 +115,18 @@ module Nokogiri
119
115
  #
120
116
  # node_set.at(3) # same as node_set[3]
121
117
  #
122
- def at *args
118
+ def at(*args)
123
119
  if args.length == 1 && args.first.is_a?(Numeric)
124
120
  return self[args.first]
125
121
  end
126
122
 
127
123
  super(*args)
128
124
  end
129
- alias :% :at
125
+ alias_method :%, :at
130
126
 
131
127
  ###
132
128
  # Filter this list for nodes that match +expr+
133
- def filter expr
129
+ def filter(expr)
134
130
  find_all { |node| node.matches?(expr) }
135
131
  end
136
132
 
@@ -139,7 +135,7 @@ module Nokogiri
139
135
  # NodeSet.
140
136
  #
141
137
  # See Nokogiri::XML::Node#add_class for more information.
142
- def add_class name
138
+ def add_class(name)
143
139
  each do |el|
144
140
  el.add_class(name)
145
141
  end
@@ -151,7 +147,7 @@ module Nokogiri
151
147
  # NodeSet.
152
148
  #
153
149
  # See Nokogiri::XML::Node#append_class for more information.
154
- def append_class name
150
+ def append_class(name)
155
151
  each do |el|
156
152
  el.append_class(name)
157
153
  end
@@ -163,7 +159,7 @@ module Nokogiri
163
159
  # NodeSet.
164
160
  #
165
161
  # See Nokogiri::XML::Node#remove_class for more information.
166
- def remove_class name = nil
162
+ def remove_class(name = nil)
167
163
  each do |el|
168
164
  el.remove_class(name)
169
165
  end
@@ -203,31 +199,31 @@ module Nokogiri
203
199
  #
204
200
  # node_set.attr("class") { |node| node.name }
205
201
  #
206
- def attr key, value = nil, &block
202
+ def attr(key, value = nil, &block)
207
203
  unless key.is_a?(Hash) || (key && (value || block))
208
204
  return first ? first.attribute(key) : nil
209
205
  end
210
206
 
211
207
  hash = key.is_a?(Hash) ? key : { key => value }
212
208
 
213
- hash.each do |k,v|
209
+ hash.each do |k, v|
214
210
  each do |node|
215
- node[k] = v || block.call(node)
211
+ node[k] = v || yield(node)
216
212
  end
217
213
  end
218
214
 
219
215
  self
220
216
  end
221
- alias :set :attr
222
- alias :attribute :attr
217
+ alias_method :set, :attr
218
+ alias_method :attribute, :attr
223
219
 
224
220
  ###
225
221
  # Remove the attributed named +name+ from all Node objects in the NodeSet
226
- def remove_attr name
227
- each { |el| el.delete name }
222
+ def remove_attr(name)
223
+ each { |el| el.delete(name) }
228
224
  self
229
225
  end
230
- alias remove_attribute remove_attr
226
+ alias_method :remove_attribute, :remove_attr
231
227
 
232
228
  ###
233
229
  # Iterate over each node, yielding to +block+
@@ -254,20 +250,20 @@ module Nokogiri
254
250
  #
255
251
  # See Nokogiri::XML::Node#content for more information.
256
252
  def inner_text
257
- collect(&:inner_text).join('')
253
+ collect(&:inner_text).join("")
258
254
  end
259
- alias :text :inner_text
255
+ alias_method :text, :inner_text
260
256
 
261
257
  ###
262
258
  # Get the inner html of all contained Node objects
263
- def inner_html *args
264
- collect{|j| j.inner_html(*args) }.join('')
259
+ def inner_html(*args)
260
+ collect { |j| j.inner_html(*args) }.join("")
265
261
  end
266
262
 
267
263
  ###
268
264
  # Wrap this NodeSet with +html+
269
- def wrap html
270
- map { |node| node.wrap html }
265
+ def wrap(html)
266
+ map { |node| node.wrap(html) }
271
267
  end
272
268
 
273
269
  ###
@@ -278,10 +274,10 @@ module Nokogiri
278
274
 
279
275
  ###
280
276
  # Convert this NodeSet to HTML
281
- def to_html *args
277
+ def to_html(*args)
282
278
  if Nokogiri.jruby?
283
279
  options = args.first.is_a?(Hash) ? args.shift : {}
284
- if !options[:save_with]
280
+ unless options[:save_with]
285
281
  options[:save_with] = Node::SaveOptions::NO_DECLARATION | Node::SaveOptions::NO_EMPTY_TAGS | Node::SaveOptions::AS_HTML
286
282
  end
287
283
  args.insert(0, options)
@@ -291,25 +287,26 @@ module Nokogiri
291
287
 
292
288
  ###
293
289
  # Convert this NodeSet to XHTML
294
- def to_xhtml *args
290
+ def to_xhtml(*args)
295
291
  map { |x| x.to_xhtml(*args) }.join
296
292
  end
297
293
 
298
294
  ###
299
295
  # Convert this NodeSet to XML
300
- def to_xml *args
296
+ def to_xml(*args)
301
297
  map { |x| x.to_xml(*args) }.join
302
298
  end
303
299
 
304
- alias :size :length
305
- alias :to_ary :to_a
300
+ alias_method :size, :length
301
+ alias_method :to_ary, :to_a
306
302
 
307
303
  ###
308
304
  # Removes the last element from set and returns it, or +nil+ if
309
305
  # the set is empty
310
306
  def pop
311
307
  return nil if length == 0
312
- delete last
308
+
309
+ delete(last)
313
310
  end
314
311
 
315
312
  ###
@@ -317,16 +314,18 @@ module Nokogiri
317
314
  # +nil+ if the set is empty.
318
315
  def shift
319
316
  return nil if length == 0
320
- delete first
317
+
318
+ delete(first)
321
319
  end
322
320
 
323
321
  ###
324
322
  # Equality -- Two NodeSets are equal if the contain the same number
325
323
  # of elements and if each element is equal to the corresponding
326
324
  # element in the other NodeSet
327
- def == other
325
+ def ==(other)
328
326
  return false unless other.is_a?(Nokogiri::XML::NodeSet)
329
327
  return false unless length == other.length
328
+
330
329
  each_with_index do |node, i|
331
330
  return false unless node == other[i]
332
331
  end
@@ -350,7 +349,7 @@ module Nokogiri
350
349
  def reverse
351
350
  node_set = NodeSet.new(document)
352
351
  (length - 1).downto(0) do |x|
353
- node_set.push self[x]
352
+ node_set.push(self[x])
354
353
  end
355
354
  node_set
356
355
  end
@@ -358,14 +357,12 @@ module Nokogiri
358
357
  ###
359
358
  # Return a nicely formated string representation
360
359
  def inspect
361
- "[#{map(&:inspect).join ', '}]"
360
+ "[#{map(&:inspect).join(", ")}]"
362
361
  end
363
362
 
364
- alias :+ :|
365
-
366
- # @private
367
- IMPLIED_XPATH_CONTEXTS = [ './/'.freeze, 'self::'.freeze ].freeze # :nodoc:
363
+ alias_method :+, :|
368
364
 
365
+ IMPLIED_XPATH_CONTEXTS = [".//", "self::"].freeze # :nodoc:
369
366
  end
370
367
  end
371
368
  end
@@ -1,6 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
5
+ # Struct representing an {XML Schema Notation}[https://www.w3.org/TR/xml/#Notations]
3
6
  class Notation < Struct.new(:name, :public_id, :system_id)
7
+ # dead comment to ensure rdoc processing
8
+
9
+ # :attr: name (String)
10
+ # The name for the element.
11
+
12
+ # :attr: public_id (String)
13
+ # The URI corresponding to the public identifier
14
+
15
+ # :attr: system_id (String,nil)
16
+ # The URI corresponding to the system identifier
4
17
  end
5
18
  end
6
19
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
3
5
  ###
@@ -5,11 +7,11 @@ module Nokogiri
5
7
  #
6
8
  # == Building combinations of parse options
7
9
  # You can build your own combinations of these parse options by using any of the following methods:
8
- # *Note*: All examples attempt to set the +RECOVER+ & +NOENT+ options. All examples use Ruby 2 optional parameter syntax.
10
+ # *Note*: All examples attempt to set the +RECOVER+ & +NOENT+ options.
9
11
  # [Ruby's bitwise operators] You can use the Ruby bitwise operators to set various combinations.
10
- # Nokogiri.XML('<content>Chapter 1</content', options: Nokogiri::XML::ParseOptions.new((1 << 0) | (1 << 1)))
12
+ # Nokogiri.XML('<content>Chapter 1</content', nil, nil, Nokogiri::XML::ParseOptions.new((1 << 0) | (1 << 1)))
11
13
  # [Method chaining] Every option has an equivalent method in lowercase. You can chain these methods together to set various combinations.
12
- # Nokogiri.XML('<content>Chapter 1</content', options: Nokogiri::XML::ParseOptions.new.recover.noent)
14
+ # Nokogiri.XML('<content>Chapter 1</content', nil, nil, Nokogiri::XML::ParseOptions.new.recover.noent)
13
15
  # [Using Ruby Blocks] You can also setup parse combinations in the block passed to Nokogiri.XML or Nokogiri.HTML
14
16
  # Nokogiri.XML('<content>Chapter 1</content') {|config| config.recover.noent}
15
17
  #
@@ -67,19 +69,27 @@ module Nokogiri
67
69
  NOBASEFIX = 1 << 18
68
70
  # relax any hardcoded limit from the parser
69
71
  HUGE = 1 << 19
72
+ # line numbers stored as long int (instead of a short int)
73
+ BIG_LINES = 1 << 22
70
74
 
71
75
  # the default options used for parsing XML documents
72
- DEFAULT_XML = RECOVER | NONET
76
+ DEFAULT_XML = RECOVER | NONET | BIG_LINES
77
+ # the default options used for parsing XSLT stylesheets
78
+ DEFAULT_XSLT = RECOVER | NONET | NOENT | DTDLOAD | DTDATTR | NOCDATA | BIG_LINES
73
79
  # the default options used for parsing HTML documents
74
- DEFAULT_HTML = RECOVER | NOERROR | NOWARNING | NONET
80
+ DEFAULT_HTML = RECOVER | NOERROR | NOWARNING | NONET | BIG_LINES
81
+ # the default options used for parsing XML schemas
82
+ DEFAULT_SCHEMA = NONET | BIG_LINES
75
83
 
76
84
  attr_accessor :options
77
- def initialize options = STRICT
85
+
86
+ def initialize(options = STRICT)
78
87
  @options = options
79
88
  end
80
89
 
81
90
  constants.each do |constant|
82
91
  next if constant.to_sym == :STRICT
92
+
83
93
  class_eval %{
84
94
  def #{constant.downcase}
85
95
  @options |= #{constant}
@@ -106,14 +116,18 @@ module Nokogiri
106
116
  @options & RECOVER == STRICT
107
117
  end
108
118
 
109
- alias :to_i :options
119
+ def ==(other)
120
+ other.to_i == to_i
121
+ end
122
+
123
+ alias_method :to_i, :options
110
124
 
111
125
  def inspect
112
126
  options = []
113
127
  self.class.constants.each do |k|
114
128
  options << k.downcase if send(:"#{k.downcase}?")
115
129
  end
116
- super.sub(/>$/, " " + options.join(', ') + ">")
130
+ super.sub(/>$/, " " + options.join(", ") + ">")
117
131
  end
118
132
  end
119
133
  end
@@ -1,16 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
5
+ # :nodoc: all
3
6
  module PP
4
7
  module CharacterData
5
- def pretty_print pp # :nodoc:
6
- nice_name = self.class.name.split('::').last
7
- pp.group(2, "#(#{nice_name} ", ')') do
8
- pp.pp text
8
+ def pretty_print(pp)
9
+ nice_name = self.class.name.split("::").last
10
+ pp.group(2, "#(#{nice_name} ", ")") do
11
+ pp.pp(text)
9
12
  end
10
13
  end
11
14
 
12
- def inspect # :nodoc:
13
- "#<#{self.class.name}:#{sprintf("0x%x",object_id)} #{text.inspect}>"
15
+ def inspect
16
+ "#<#{self.class.name}:#{format("0x%x", object_id)} #{text.inspect}>"
14
17
  end
15
18
  end
16
19
  end
@@ -1,53 +1,52 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
5
+ # :nodoc: all
3
6
  module PP
4
7
  module Node
5
- def inspect # :nodoc:
6
- attributes = inspect_attributes.reject { |x|
7
- begin
8
- attribute = send x
9
- !attribute || (attribute.respond_to?(:empty?) && attribute.empty?)
10
- rescue NoMethodError
11
- true
12
- end
13
- }.map { |attribute|
14
- "#{attribute.to_s.sub(/_\w+/, 's')}=#{send(attribute).inspect}"
15
- }.join ' '
16
- "#<#{self.class.name}:#{sprintf("0x%x", object_id)} #{attributes}>"
8
+ def inspect
9
+ attributes = inspect_attributes.reject do |x|
10
+ attribute = send(x)
11
+ !attribute || (attribute.respond_to?(:empty?) && attribute.empty?)
12
+ rescue NoMethodError
13
+ true
14
+ end.map do |attribute|
15
+ "#{attribute.to_s.sub(/_\w+/, "s")}=#{send(attribute).inspect}"
16
+ end.join(" ")
17
+ "#<#{self.class.name}:#{format("0x%x", object_id)} #{attributes}>"
17
18
  end
18
19
 
19
- def pretty_print pp # :nodoc:
20
- nice_name = self.class.name.split('::').last
21
- pp.group(2, "#(#{nice_name}:#{sprintf("0x%x", object_id)} {", '})') do
22
-
20
+ def pretty_print(pp)
21
+ nice_name = self.class.name.split("::").last
22
+ pp.group(2, "#(#{nice_name}:#{format("0x%x", object_id)} {", "})") do
23
23
  pp.breakable
24
- attrs = inspect_attributes.map { |t|
24
+ attrs = inspect_attributes.map do |t|
25
25
  [t, send(t)] if respond_to?(t)
26
- }.compact.find_all { |x|
26
+ end.compact.find_all do |x|
27
27
  if x.last
28
- if [:attribute_nodes, :children].include? x.first
28
+ if [:attribute_nodes, :children].include?(x.first)
29
29
  !x.last.empty?
30
30
  else
31
31
  true
32
32
  end
33
33
  end
34
- }
34
+ end
35
35
 
36
36
  pp.seplist(attrs) do |v|
37
- if [:attribute_nodes, :children].include? v.first
38
- pp.group(2, "#{v.first.to_s.sub(/_\w+$/, 's')} = [", "]") do
37
+ if [:attribute_nodes, :children].include?(v.first)
38
+ pp.group(2, "#{v.first.to_s.sub(/_\w+$/, "s")} = [", "]") do
39
39
  pp.breakable
40
40
  pp.seplist(v.last) do |item|
41
- pp.pp item
41
+ pp.pp(item)
42
42
  end
43
43
  end
44
44
  else
45
- pp.text "#{v.first} = "
46
- pp.pp v.last
45
+ pp.text("#{v.first} = ")
46
+ pp.pp(v.last)
47
47
  end
48
48
  end
49
49
  pp.breakable
50
-
51
50
  end
52
51
  end
53
52
  end
@@ -1,2 +1,4 @@
1
- require 'nokogiri/xml/pp/node'
2
- require 'nokogiri/xml/pp/character_data'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "pp/node"
4
+ require_relative "pp/character_data"
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
3
5
  class ProcessingInstruction < Node
4
- def initialize document, name, content
6
+ def initialize(document, name, content) # rubocop:disable Style/RedundantInitialize
5
7
  end
6
8
  end
7
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
3
5
  ###
@@ -7,18 +9,18 @@ module Nokogiri
7
9
  #
8
10
  # Here is an example of usage:
9
11
  #
10
- # reader = Nokogiri::XML::Reader(<<-eoxml)
11
- # <x xmlns:tenderlove='http://tenderlovemaking.com/'>
12
- # <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
13
- # </x>
14
- # eoxml
12
+ # reader = Nokogiri::XML::Reader(<<-eoxml)
13
+ # <x xmlns:tenderlove='http://tenderlovemaking.com/'>
14
+ # <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
15
+ # </x>
16
+ # eoxml
15
17
  #
16
- # reader.each do |node|
18
+ # reader.each do |node|
17
19
  #
18
- # # node is an instance of Nokogiri::XML::Reader
19
- # puts node.name
20
+ # # node is an instance of Nokogiri::XML::Reader
21
+ # puts node.name
20
22
  #
21
- # end
23
+ # end
22
24
  #
23
25
  # Note that Nokogiri::XML::Reader#each can only be called once!! Once
24
26
  # the cursor moves through the entire document, you must parse the
@@ -69,41 +71,32 @@ module Nokogiri
69
71
  # A list of errors encountered while parsing
70
72
  attr_accessor :errors
71
73
 
72
- # The encoding for the document
73
- attr_reader :encoding
74
-
75
74
  # The XML source
76
75
  attr_reader :source
77
76
 
78
- alias :self_closing? :empty_element?
77
+ alias_method :self_closing?, :empty_element?
79
78
 
80
- def initialize source, url = nil, encoding = nil # :nodoc:
79
+ def initialize(source, url = nil, encoding = nil) # :nodoc:
81
80
  @source = source
82
81
  @errors = []
83
82
  @encoding = encoding
84
83
  end
85
84
  private :initialize
86
85
 
87
- ###
88
- # Get a list of attributes for the current node.
86
+ # Get the attributes and namespaces of the current node as a Hash.
87
+ #
88
+ # This is the union of Reader#attribute_hash and Reader#namespaces
89
+ #
90
+ # [Returns]
91
+ # (Hash<String, String>) Attribute names and values, and namespace prefixes and hrefs.
89
92
  def attributes
90
- Hash[attribute_nodes.map { |node|
91
- [node.name, node.to_s]
92
- }].merge(namespaces || {})
93
- end
94
-
95
- ###
96
- # Get a list of attributes for the current node
97
- def attribute_nodes
98
- nodes = attr_nodes
99
- nodes.each { |v| v.instance_variable_set(:@_r, self) }
100
- nodes
93
+ attribute_hash.merge(namespaces)
101
94
  end
102
95
 
103
96
  ###
104
97
  # Move the cursor through the document yielding the cursor to the block
105
98
  def each
106
- while cursor = self.read
99
+ while (cursor = read)
107
100
  yield cursor
108
101
  end
109
102
  end
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
3
5
  class << self
4
6
  ###
5
7
  # Create a new Nokogiri::XML::RelaxNG document from +string_or_io+.
6
8
  # See Nokogiri::XML::RelaxNG for an example.
7
- def RelaxNG string_or_io
8
- RelaxNG.new(string_or_io)
9
+ def RelaxNG(string_or_io, options = ParseOptions::DEFAULT_SCHEMA)
10
+ RelaxNG.new(string_or_io, options)
9
11
  end
10
12
  end
11
13
 
@@ -26,6 +28,10 @@ module Nokogiri
26
28
  # end
27
29
  #
28
30
  # The list of errors are Nokogiri::XML::SyntaxError objects.
31
+ #
32
+ # NOTE: RelaxNG input is always treated as TRUSTED documents, meaning that they will cause the
33
+ # underlying parsing libraries to access network resources. This is counter to Nokogiri's
34
+ # "untrusted by default" security policy, but is a limitation of the underlying libraries.
29
35
  class RelaxNG < Nokogiri::XML::Schema
30
36
  end
31
37
  end