nokogiri 1.10.3 → 1.13.2

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 (223) 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 +11 -60
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +752 -423
  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 +120 -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 +191 -89
  19. data/ext/nokogiri/test_global_handlers.c +40 -0
  20. data/ext/nokogiri/xml_attr.c +15 -15
  21. data/ext/nokogiri/xml_attribute_decl.c +18 -18
  22. data/ext/nokogiri/xml_cdata.c +13 -18
  23. data/ext/nokogiri/xml_comment.c +19 -26
  24. data/ext/nokogiri/xml_document.c +291 -219
  25. data/ext/nokogiri/xml_document_fragment.c +12 -16
  26. data/ext/nokogiri/xml_dtd.c +56 -50
  27. data/ext/nokogiri/xml_element_content.c +31 -26
  28. data/ext/nokogiri/xml_element_decl.c +22 -22
  29. data/ext/nokogiri/xml_encoding_handler.c +43 -18
  30. data/ext/nokogiri/xml_entity_decl.c +32 -30
  31. data/ext/nokogiri/xml_entity_reference.c +16 -18
  32. data/ext/nokogiri/xml_namespace.c +60 -51
  33. data/ext/nokogiri/xml_node.c +1001 -610
  34. data/ext/nokogiri/xml_node_set.c +174 -162
  35. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  36. data/ext/nokogiri/xml_reader.c +226 -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 +105 -86
  40. data/ext/nokogiri/xml_sax_push_parser.c +36 -27
  41. data/ext/nokogiri/xml_schema.c +112 -33
  42. data/ext/nokogiri/xml_syntax_error.c +42 -21
  43. data/ext/nokogiri/xml_text.c +13 -17
  44. data/ext/nokogiri/xml_xpath_context.c +223 -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 +52 -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 +99 -103
  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 +14 -15
  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 +88 -0
  116. data/lib/nokogiri/html5/document_fragment.rb +83 -0
  117. data/lib/nokogiri/html5/node.rb +96 -0
  118. data/lib/nokogiri/html5.rb +477 -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 +221 -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 +95 -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 +219 -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 +8 -4
  138. data/lib/nokogiri/xml/node.rb +876 -376
  139. data/lib/nokogiri/xml/node_set.rb +47 -54
  140. data/lib/nokogiri/xml/notation.rb +13 -0
  141. data/lib/nokogiri/xml/parse_options.rb +21 -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 +23 -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 +37 -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 +5 -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 +37 -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/0004-use-glibc-strlen.patch +53 -0
  169. data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
  170. data/patches/libxml2/0006-update-automake-files-for-arm64.patch +3040 -0
  171. data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +61 -0
  172. data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
  173. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +3037 -0
  174. data/ports/archives/libxml2-2.9.13.tar.xz +0 -0
  175. data/ports/archives/libxslt-1.1.35.tar.xz +0 -0
  176. metadata +207 -137
  177. data/ext/nokogiri/html_document.c +0 -170
  178. data/ext/nokogiri/html_document.h +0 -10
  179. data/ext/nokogiri/html_element_description.c +0 -279
  180. data/ext/nokogiri/html_element_description.h +0 -10
  181. data/ext/nokogiri/html_entity_lookup.c +0 -32
  182. data/ext/nokogiri/html_entity_lookup.h +0 -8
  183. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  184. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  185. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  186. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  187. data/ext/nokogiri/xml_attr.h +0 -9
  188. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  189. data/ext/nokogiri/xml_cdata.h +0 -9
  190. data/ext/nokogiri/xml_comment.h +0 -9
  191. data/ext/nokogiri/xml_document.h +0 -23
  192. data/ext/nokogiri/xml_document_fragment.h +0 -10
  193. data/ext/nokogiri/xml_dtd.h +0 -10
  194. data/ext/nokogiri/xml_element_content.h +0 -10
  195. data/ext/nokogiri/xml_element_decl.h +0 -9
  196. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  197. data/ext/nokogiri/xml_entity_decl.h +0 -10
  198. data/ext/nokogiri/xml_entity_reference.h +0 -9
  199. data/ext/nokogiri/xml_io.c +0 -61
  200. data/ext/nokogiri/xml_io.h +0 -11
  201. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  202. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  203. data/ext/nokogiri/xml_namespace.h +0 -14
  204. data/ext/nokogiri/xml_node.h +0 -13
  205. data/ext/nokogiri/xml_node_set.h +0 -12
  206. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  207. data/ext/nokogiri/xml_reader.h +0 -10
  208. data/ext/nokogiri/xml_relax_ng.h +0 -9
  209. data/ext/nokogiri/xml_sax_parser.h +0 -39
  210. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  211. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  212. data/ext/nokogiri/xml_schema.h +0 -9
  213. data/ext/nokogiri/xml_syntax_error.h +0 -13
  214. data/ext/nokogiri/xml_text.h +0 -9
  215. data/ext/nokogiri/xml_xpath_context.h +0 -10
  216. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  217. data/lib/nokogiri/html/document_fragment.rb +0 -49
  218. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  219. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  220. data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
  221. data/patches/libxslt/0001-Fix-security-framework-bypass.patch +0 -120
  222. data/ports/archives/libxml2-2.9.9.tar.gz +0 -0
  223. 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,7 +25,7 @@ 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
28
30
  list = []
29
31
  [n, length].min.times { |i| list << self[i] }
@@ -46,7 +48,7 @@ module Nokogiri
46
48
  # 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
49
  def index(node = nil)
48
50
  if node
49
- warn "given block not used" if block_given?
51
+ warn("given block not used") if block_given?
50
52
  each_with_index { |member, j| return j if member == node }
51
53
  elsif block_given?
52
54
  each_with_index { |member, j| return j if yield(member) }
@@ -56,18 +58,18 @@ module Nokogiri
56
58
 
57
59
  ###
58
60
  # Insert +datum+ before the first Node in this NodeSet
59
- def before datum
60
- first.before datum
61
+ def before(datum)
62
+ first.before(datum)
61
63
  end
62
64
 
63
65
  ###
64
66
  # Insert +datum+ after the last Node in this NodeSet
65
- def after datum
66
- last.after datum
67
+ def after(datum)
68
+ last.after(datum)
67
69
  end
68
70
 
69
- alias :<< :push
70
- alias :remove :unlink
71
+ alias_method :<<, :push
72
+ alias_method :remove, :unlink
71
73
 
72
74
  ###
73
75
  # call-seq: css *rules, [namespace-bindings, custom-pseudo-class]
@@ -76,7 +78,7 @@ module Nokogiri
76
78
  # selectors. For example:
77
79
  #
78
80
  # For more information see Nokogiri::XML::Searchable#css
79
- def css *args
81
+ def css(*args)
80
82
  rules, handler, ns, _ = extract_params(args)
81
83
  paths = css_rules_to_xpath(rules, ns)
82
84
 
@@ -92,7 +94,7 @@ module Nokogiri
92
94
  # queries.
93
95
  #
94
96
  # For more information see Nokogiri::XML::Searchable#xpath
95
- def xpath *args
97
+ def xpath(*args)
96
98
  paths, handler, ns, binds = extract_params(args)
97
99
 
98
100
  inject(NodeSet.new(document)) do |set, node|
@@ -100,13 +102,6 @@ module Nokogiri
100
102
  end
101
103
  end
102
104
 
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
105
  ###
111
106
  # call-seq: search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class]
112
107
  #
@@ -119,18 +114,18 @@ module Nokogiri
119
114
  #
120
115
  # node_set.at(3) # same as node_set[3]
121
116
  #
122
- def at *args
117
+ def at(*args)
123
118
  if args.length == 1 && args.first.is_a?(Numeric)
124
119
  return self[args.first]
125
120
  end
126
121
 
127
122
  super(*args)
128
123
  end
129
- alias :% :at
124
+ alias_method :%, :at
130
125
 
131
126
  ###
132
127
  # Filter this list for nodes that match +expr+
133
- def filter expr
128
+ def filter(expr)
134
129
  find_all { |node| node.matches?(expr) }
135
130
  end
136
131
 
@@ -139,7 +134,7 @@ module Nokogiri
139
134
  # NodeSet.
140
135
  #
141
136
  # See Nokogiri::XML::Node#add_class for more information.
142
- def add_class name
137
+ def add_class(name)
143
138
  each do |el|
144
139
  el.add_class(name)
145
140
  end
@@ -151,7 +146,7 @@ module Nokogiri
151
146
  # NodeSet.
152
147
  #
153
148
  # See Nokogiri::XML::Node#append_class for more information.
154
- def append_class name
149
+ def append_class(name)
155
150
  each do |el|
156
151
  el.append_class(name)
157
152
  end
@@ -163,7 +158,7 @@ module Nokogiri
163
158
  # NodeSet.
164
159
  #
165
160
  # See Nokogiri::XML::Node#remove_class for more information.
166
- def remove_class name = nil
161
+ def remove_class(name = nil)
167
162
  each do |el|
168
163
  el.remove_class(name)
169
164
  end
@@ -203,31 +198,31 @@ module Nokogiri
203
198
  #
204
199
  # node_set.attr("class") { |node| node.name }
205
200
  #
206
- def attr key, value = nil, &block
201
+ def attr(key, value = nil, &block)
207
202
  unless key.is_a?(Hash) || (key && (value || block))
208
203
  return first ? first.attribute(key) : nil
209
204
  end
210
205
 
211
206
  hash = key.is_a?(Hash) ? key : { key => value }
212
207
 
213
- hash.each do |k,v|
208
+ hash.each do |k, v|
214
209
  each do |node|
215
- node[k] = v || block.call(node)
210
+ node[k] = v || yield(node)
216
211
  end
217
212
  end
218
213
 
219
214
  self
220
215
  end
221
- alias :set :attr
222
- alias :attribute :attr
216
+ alias_method :set, :attr
217
+ alias_method :attribute, :attr
223
218
 
224
219
  ###
225
220
  # Remove the attributed named +name+ from all Node objects in the NodeSet
226
- def remove_attr name
227
- each { |el| el.delete name }
221
+ def remove_attr(name)
222
+ each { |el| el.delete(name) }
228
223
  self
229
224
  end
230
- alias remove_attribute remove_attr
225
+ alias_method :remove_attribute, :remove_attr
231
226
 
232
227
  ###
233
228
  # Iterate over each node, yielding to +block+
@@ -254,20 +249,20 @@ module Nokogiri
254
249
  #
255
250
  # See Nokogiri::XML::Node#content for more information.
256
251
  def inner_text
257
- collect(&:inner_text).join('')
252
+ collect(&:inner_text).join("")
258
253
  end
259
- alias :text :inner_text
254
+ alias_method :text, :inner_text
260
255
 
261
256
  ###
262
257
  # Get the inner html of all contained Node objects
263
- def inner_html *args
264
- collect{|j| j.inner_html(*args) }.join('')
258
+ def inner_html(*args)
259
+ collect { |j| j.inner_html(*args) }.join("")
265
260
  end
266
261
 
267
262
  ###
268
263
  # Wrap this NodeSet with +html+
269
- def wrap html
270
- map { |node| node.wrap html }
264
+ def wrap(html)
265
+ map { |node| node.wrap(html) }
271
266
  end
272
267
 
273
268
  ###
@@ -278,10 +273,10 @@ module Nokogiri
278
273
 
279
274
  ###
280
275
  # Convert this NodeSet to HTML
281
- def to_html *args
276
+ def to_html(*args)
282
277
  if Nokogiri.jruby?
283
278
  options = args.first.is_a?(Hash) ? args.shift : {}
284
- if !options[:save_with]
279
+ unless options[:save_with]
285
280
  options[:save_with] = Node::SaveOptions::NO_DECLARATION | Node::SaveOptions::NO_EMPTY_TAGS | Node::SaveOptions::AS_HTML
286
281
  end
287
282
  args.insert(0, options)
@@ -291,25 +286,25 @@ module Nokogiri
291
286
 
292
287
  ###
293
288
  # Convert this NodeSet to XHTML
294
- def to_xhtml *args
289
+ def to_xhtml(*args)
295
290
  map { |x| x.to_xhtml(*args) }.join
296
291
  end
297
292
 
298
293
  ###
299
294
  # Convert this NodeSet to XML
300
- def to_xml *args
295
+ def to_xml(*args)
301
296
  map { |x| x.to_xml(*args) }.join
302
297
  end
303
298
 
304
- alias :size :length
305
- alias :to_ary :to_a
299
+ alias_method :size, :length
300
+ alias_method :to_ary, :to_a
306
301
 
307
302
  ###
308
303
  # Removes the last element from set and returns it, or +nil+ if
309
304
  # the set is empty
310
305
  def pop
311
306
  return nil if length == 0
312
- delete last
307
+ delete(last)
313
308
  end
314
309
 
315
310
  ###
@@ -317,14 +312,14 @@ module Nokogiri
317
312
  # +nil+ if the set is empty.
318
313
  def shift
319
314
  return nil if length == 0
320
- delete first
315
+ delete(first)
321
316
  end
322
317
 
323
318
  ###
324
319
  # Equality -- Two NodeSets are equal if the contain the same number
325
320
  # of elements and if each element is equal to the corresponding
326
321
  # element in the other NodeSet
327
- def == other
322
+ def ==(other)
328
323
  return false unless other.is_a?(Nokogiri::XML::NodeSet)
329
324
  return false unless length == other.length
330
325
  each_with_index do |node, i|
@@ -350,7 +345,7 @@ module Nokogiri
350
345
  def reverse
351
346
  node_set = NodeSet.new(document)
352
347
  (length - 1).downto(0) do |x|
353
- node_set.push self[x]
348
+ node_set.push(self[x])
354
349
  end
355
350
  node_set
356
351
  end
@@ -358,14 +353,12 @@ module Nokogiri
358
353
  ###
359
354
  # Return a nicely formated string representation
360
355
  def inspect
361
- "[#{map(&:inspect).join ', '}]"
356
+ "[#{map(&:inspect).join(", ")}]"
362
357
  end
363
358
 
364
- alias :+ :|
365
-
366
- # @private
367
- IMPLIED_XPATH_CONTEXTS = [ './/'.freeze, 'self::'.freeze ].freeze # :nodoc:
359
+ alias_method :+, :|
368
360
 
361
+ IMPLIED_XPATH_CONTEXTS = [".//", "self::"].freeze # :nodoc:
369
362
  end
370
363
  end
371
364
  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,14 +69,21 @@ 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
 
@@ -106,14 +115,18 @@ module Nokogiri
106
115
  @options & RECOVER == STRICT
107
116
  end
108
117
 
109
- alias :to_i :options
118
+ def ==(other)
119
+ other.to_i == to_i
120
+ end
121
+
122
+ alias_method :to_i, :options
110
123
 
111
124
  def inspect
112
125
  options = []
113
126
  self.class.constants.each do |k|
114
127
  options << k.downcase if send(:"#{k.downcase}?")
115
128
  end
116
- super.sub(/>$/, " " + options.join(', ') + ">")
129
+ super.sub(/>$/, " " + options.join(", ") + ">")
117
130
  end
118
131
  end
119
132
  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)
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,34 @@ 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 of the current node as a Hash
87
+ #
88
+ # [Returns] (Hash<String, String>) Attribute names and values
89
89
  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
90
+ attrs_hash = attribute_nodes.each_with_object({}) do |node, hash|
91
+ hash[node.name] = node.to_s
92
+ end
93
+ ns = namespaces
94
+ attrs_hash.merge!(ns) if ns
95
+ attrs_hash
101
96
  end
102
97
 
103
98
  ###
104
99
  # Move the cursor through the document yielding the cursor to the block
105
100
  def each
106
- while cursor = self.read
101
+ while (cursor = read)
107
102
  yield cursor
108
103
  end
109
104
  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