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.
- checksums.yaml +4 -4
- data/Gemfile +5 -0
- data/LICENSE-DEPENDENCIES.md +1173 -884
- data/LICENSE.md +1 -1
- data/README.md +178 -96
- data/bin/nokogiri +63 -50
- data/dependencies.yml +11 -60
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +752 -423
- data/ext/nokogiri/gumbo.c +584 -0
- data/ext/nokogiri/html4_document.c +166 -0
- data/ext/nokogiri/html4_element_description.c +294 -0
- data/ext/nokogiri/html4_entity_lookup.c +37 -0
- data/ext/nokogiri/html4_sax_parser_context.c +120 -0
- data/ext/nokogiri/html4_sax_push_parser.c +95 -0
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +228 -91
- data/ext/nokogiri/nokogiri.h +191 -89
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +15 -15
- data/ext/nokogiri/xml_attribute_decl.c +18 -18
- data/ext/nokogiri/xml_cdata.c +13 -18
- data/ext/nokogiri/xml_comment.c +19 -26
- data/ext/nokogiri/xml_document.c +291 -219
- data/ext/nokogiri/xml_document_fragment.c +12 -16
- data/ext/nokogiri/xml_dtd.c +56 -50
- data/ext/nokogiri/xml_element_content.c +31 -26
- data/ext/nokogiri/xml_element_decl.c +22 -22
- data/ext/nokogiri/xml_encoding_handler.c +43 -18
- data/ext/nokogiri/xml_entity_decl.c +32 -30
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +60 -51
- data/ext/nokogiri/xml_node.c +1001 -610
- data/ext/nokogiri/xml_node_set.c +174 -162
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +226 -175
- data/ext/nokogiri/xml_relax_ng.c +52 -28
- data/ext/nokogiri/xml_sax_parser.c +112 -112
- data/ext/nokogiri/xml_sax_parser_context.c +105 -86
- data/ext/nokogiri/xml_sax_push_parser.c +36 -27
- data/ext/nokogiri/xml_schema.c +112 -33
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +13 -17
- data/ext/nokogiri/xml_xpath_context.c +223 -115
- data/ext/nokogiri/xslt_stylesheet.c +265 -173
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +101 -0
- data/gumbo-parser/THANKS +27 -0
- data/gumbo-parser/src/Makefile +34 -0
- data/gumbo-parser/src/README.md +41 -0
- data/gumbo-parser/src/ascii.c +75 -0
- data/gumbo-parser/src/ascii.h +115 -0
- data/gumbo-parser/src/attribute.c +42 -0
- data/gumbo-parser/src/attribute.h +17 -0
- data/gumbo-parser/src/char_ref.c +22225 -0
- data/gumbo-parser/src/char_ref.h +29 -0
- data/gumbo-parser/src/char_ref.rl +2154 -0
- data/gumbo-parser/src/error.c +626 -0
- data/gumbo-parser/src/error.h +148 -0
- data/gumbo-parser/src/foreign_attrs.c +104 -0
- data/gumbo-parser/src/foreign_attrs.gperf +27 -0
- data/gumbo-parser/src/gumbo.h +943 -0
- data/gumbo-parser/src/insertion_mode.h +33 -0
- data/gumbo-parser/src/macros.h +91 -0
- data/gumbo-parser/src/parser.c +4875 -0
- data/gumbo-parser/src/parser.h +41 -0
- data/gumbo-parser/src/replacement.h +33 -0
- data/gumbo-parser/src/string_buffer.c +103 -0
- data/gumbo-parser/src/string_buffer.h +68 -0
- data/gumbo-parser/src/string_piece.c +48 -0
- data/gumbo-parser/src/svg_attrs.c +174 -0
- data/gumbo-parser/src/svg_attrs.gperf +77 -0
- data/gumbo-parser/src/svg_tags.c +137 -0
- data/gumbo-parser/src/svg_tags.gperf +55 -0
- data/gumbo-parser/src/tag.c +222 -0
- data/gumbo-parser/src/tag_lookup.c +382 -0
- data/gumbo-parser/src/tag_lookup.gperf +169 -0
- data/gumbo-parser/src/tag_lookup.h +13 -0
- data/gumbo-parser/src/token_buffer.c +79 -0
- data/gumbo-parser/src/token_buffer.h +71 -0
- data/gumbo-parser/src/token_type.h +17 -0
- data/gumbo-parser/src/tokenizer.c +3463 -0
- data/gumbo-parser/src/tokenizer.h +112 -0
- data/gumbo-parser/src/tokenizer_states.h +339 -0
- data/gumbo-parser/src/utf8.c +245 -0
- data/gumbo-parser/src/utf8.h +164 -0
- data/gumbo-parser/src/util.c +68 -0
- data/gumbo-parser/src/util.h +30 -0
- data/gumbo-parser/src/vector.c +111 -0
- data/gumbo-parser/src/vector.h +45 -0
- data/lib/nokogiri/class_resolver.rb +67 -0
- data/lib/nokogiri/css/node.rb +10 -8
- data/lib/nokogiri/css/parser.rb +397 -377
- data/lib/nokogiri/css/parser.y +250 -245
- data/lib/nokogiri/css/parser_extras.rb +52 -49
- data/lib/nokogiri/css/syntax_error.rb +3 -1
- data/lib/nokogiri/css/tokenizer.rb +107 -104
- data/lib/nokogiri/css/tokenizer.rex +3 -2
- data/lib/nokogiri/css/xpath_visitor.rb +218 -91
- data/lib/nokogiri/css.rb +50 -17
- data/lib/nokogiri/decorators/slop.rb +9 -7
- data/lib/nokogiri/extension.rb +31 -0
- data/lib/nokogiri/gumbo.rb +15 -0
- data/lib/nokogiri/html.rb +38 -27
- data/lib/nokogiri/{html → html4}/builder.rb +4 -2
- data/lib/nokogiri/{html → html4}/document.rb +99 -103
- data/lib/nokogiri/html4/document_fragment.rb +54 -0
- data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
- data/lib/nokogiri/html4/element_description_defaults.rb +578 -0
- data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
- data/lib/nokogiri/{html → html4}/sax/parser.rb +14 -15
- data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
- data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
- data/lib/nokogiri/html4.rb +46 -0
- data/lib/nokogiri/html5/document.rb +88 -0
- data/lib/nokogiri/html5/document_fragment.rb +83 -0
- data/lib/nokogiri/html5/node.rb +96 -0
- data/lib/nokogiri/html5.rb +477 -0
- data/lib/nokogiri/jruby/dependencies.rb +21 -0
- data/lib/nokogiri/syntax_error.rb +2 -0
- data/lib/nokogiri/version/constant.rb +6 -0
- data/lib/nokogiri/version/info.rb +221 -0
- data/lib/nokogiri/version.rb +3 -108
- data/lib/nokogiri/xml/attr.rb +6 -3
- data/lib/nokogiri/xml/attribute_decl.rb +3 -1
- data/lib/nokogiri/xml/builder.rb +95 -53
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +2 -0
- data/lib/nokogiri/xml/document.rb +219 -86
- data/lib/nokogiri/xml/document_fragment.rb +46 -44
- data/lib/nokogiri/xml/dtd.rb +4 -2
- data/lib/nokogiri/xml/element_content.rb +2 -0
- data/lib/nokogiri/xml/element_decl.rb +3 -1
- data/lib/nokogiri/xml/entity_decl.rb +4 -2
- data/lib/nokogiri/xml/entity_reference.rb +2 -0
- data/lib/nokogiri/xml/namespace.rb +3 -0
- data/lib/nokogiri/xml/node/save_options.rb +8 -4
- data/lib/nokogiri/xml/node.rb +876 -376
- data/lib/nokogiri/xml/node_set.rb +47 -54
- data/lib/nokogiri/xml/notation.rb +13 -0
- data/lib/nokogiri/xml/parse_options.rb +21 -8
- data/lib/nokogiri/xml/pp/character_data.rb +9 -6
- data/lib/nokogiri/xml/pp/node.rb +25 -26
- data/lib/nokogiri/xml/pp.rb +4 -2
- data/lib/nokogiri/xml/processing_instruction.rb +3 -1
- data/lib/nokogiri/xml/reader.rb +23 -28
- data/lib/nokogiri/xml/relax_ng.rb +8 -2
- data/lib/nokogiri/xml/sax/document.rb +45 -49
- data/lib/nokogiri/xml/sax/parser.rb +37 -34
- data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
- data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
- data/lib/nokogiri/xml/sax.rb +6 -4
- data/lib/nokogiri/xml/schema.rb +19 -9
- data/lib/nokogiri/xml/searchable.rb +112 -72
- data/lib/nokogiri/xml/syntax_error.rb +5 -4
- data/lib/nokogiri/xml/text.rb +2 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
- data/lib/nokogiri/xml/xpath.rb +15 -4
- data/lib/nokogiri/xml/xpath_context.rb +3 -3
- data/lib/nokogiri/xml.rb +37 -37
- data/lib/nokogiri/xslt/stylesheet.rb +3 -1
- data/lib/nokogiri/xslt.rb +29 -20
- data/lib/nokogiri.rb +49 -65
- data/lib/xsd/xmlparser/nokogiri.rb +26 -24
- data/patches/libxml2/{0002-Remove-script-macro-support.patch → 0001-Remove-script-macro-support.patch} +0 -0
- data/patches/libxml2/{0003-Update-entities-to-remove-handling-of-ssi.patch → 0002-Update-entities-to-remove-handling-of-ssi.patch} +0 -0
- data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
- data/patches/libxml2/0004-use-glibc-strlen.patch +53 -0
- data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
- data/patches/libxml2/0006-update-automake-files-for-arm64.patch +3040 -0
- data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +61 -0
- data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
- data/patches/libxslt/0001-update-automake-files-for-arm64.patch +3037 -0
- data/ports/archives/libxml2-2.9.13.tar.xz +0 -0
- data/ports/archives/libxslt-1.1.35.tar.xz +0 -0
- metadata +207 -137
- data/ext/nokogiri/html_document.c +0 -170
- data/ext/nokogiri/html_document.h +0 -10
- data/ext/nokogiri/html_element_description.c +0 -279
- data/ext/nokogiri/html_element_description.h +0 -10
- data/ext/nokogiri/html_entity_lookup.c +0 -32
- data/ext/nokogiri/html_entity_lookup.h +0 -8
- data/ext/nokogiri/html_sax_parser_context.c +0 -116
- data/ext/nokogiri/html_sax_parser_context.h +0 -11
- data/ext/nokogiri/html_sax_push_parser.c +0 -87
- data/ext/nokogiri/html_sax_push_parser.h +0 -9
- data/ext/nokogiri/xml_attr.h +0 -9
- data/ext/nokogiri/xml_attribute_decl.h +0 -9
- data/ext/nokogiri/xml_cdata.h +0 -9
- data/ext/nokogiri/xml_comment.h +0 -9
- data/ext/nokogiri/xml_document.h +0 -23
- data/ext/nokogiri/xml_document_fragment.h +0 -10
- data/ext/nokogiri/xml_dtd.h +0 -10
- data/ext/nokogiri/xml_element_content.h +0 -10
- data/ext/nokogiri/xml_element_decl.h +0 -9
- data/ext/nokogiri/xml_encoding_handler.h +0 -8
- data/ext/nokogiri/xml_entity_decl.h +0 -10
- data/ext/nokogiri/xml_entity_reference.h +0 -9
- data/ext/nokogiri/xml_io.c +0 -61
- data/ext/nokogiri/xml_io.h +0 -11
- data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
- data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
- data/ext/nokogiri/xml_namespace.h +0 -14
- data/ext/nokogiri/xml_node.h +0 -13
- data/ext/nokogiri/xml_node_set.h +0 -12
- data/ext/nokogiri/xml_processing_instruction.h +0 -9
- data/ext/nokogiri/xml_reader.h +0 -10
- data/ext/nokogiri/xml_relax_ng.h +0 -9
- data/ext/nokogiri/xml_sax_parser.h +0 -39
- data/ext/nokogiri/xml_sax_parser_context.h +0 -10
- data/ext/nokogiri/xml_sax_push_parser.h +0 -9
- data/ext/nokogiri/xml_schema.h +0 -9
- data/ext/nokogiri/xml_syntax_error.h +0 -13
- data/ext/nokogiri/xml_text.h +0 -9
- data/ext/nokogiri/xml_xpath_context.h +0 -10
- data/ext/nokogiri/xslt_stylesheet.h +0 -14
- data/lib/nokogiri/html/document_fragment.rb +0 -49
- data/lib/nokogiri/html/element_description_defaults.rb +0 -671
- data/lib/nokogiri/html/sax/parser_context.rb +0 -16
- data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
- data/patches/libxslt/0001-Fix-security-framework-bypass.patch +0 -120
- data/ports/archives/libxml2-2.9.9.tar.gz +0 -0
- 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
|
-
|
16
|
+
alias_method :clone, :dup
|
15
17
|
|
16
18
|
# Create a NodeSet with +document+ defaulting to +list+
|
17
|
-
def initialize
|
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
|
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
|
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
|
60
|
-
first.before
|
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
|
66
|
-
last.after
|
67
|
+
def after(datum)
|
68
|
+
last.after(datum)
|
67
69
|
end
|
68
70
|
|
69
|
-
|
70
|
-
|
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
|
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
|
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
|
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
|
-
|
124
|
+
alias_method :%, :at
|
130
125
|
|
131
126
|
###
|
132
127
|
# Filter this list for nodes that match +expr+
|
133
|
-
def filter
|
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
|
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
|
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
|
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
|
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 ||
|
210
|
+
node[k] = v || yield(node)
|
216
211
|
end
|
217
212
|
end
|
218
213
|
|
219
214
|
self
|
220
215
|
end
|
221
|
-
|
222
|
-
|
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
|
227
|
-
each { |el| el.delete
|
221
|
+
def remove_attr(name)
|
222
|
+
each { |el| el.delete(name) }
|
228
223
|
self
|
229
224
|
end
|
230
|
-
|
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
|
-
|
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
|
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
|
270
|
-
map { |node| node.wrap
|
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
|
276
|
+
def to_html(*args)
|
282
277
|
if Nokogiri.jruby?
|
283
278
|
options = args.first.is_a?(Hash) ? args.shift : {}
|
284
|
-
|
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
|
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
|
295
|
+
def to_xml(*args)
|
301
296
|
map { |x| x.to_xml(*args) }.join
|
302
297
|
end
|
303
298
|
|
304
|
-
|
305
|
-
|
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
|
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
|
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 ==
|
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
|
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
|
-
|
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.
|
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',
|
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',
|
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
|
-
|
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
|
-
|
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
|
6
|
-
nice_name = self.class.name.split(
|
7
|
-
pp.group(2, "#(#{nice_name} ",
|
8
|
-
pp.pp
|
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
|
13
|
-
"#<#{self.class.name}:#{
|
15
|
+
def inspect
|
16
|
+
"#<#{self.class.name}:#{format("0x%x", object_id)} #{text.inspect}>"
|
14
17
|
end
|
15
18
|
end
|
16
19
|
end
|
data/lib/nokogiri/xml/pp/node.rb
CHANGED
@@ -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
|
6
|
-
attributes = inspect_attributes.reject
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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
|
20
|
-
nice_name = self.class.name.split(
|
21
|
-
pp.group(2, "#(#{nice_name}:#{
|
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
|
24
|
+
attrs = inspect_attributes.map do |t|
|
25
25
|
[t, send(t)] if respond_to?(t)
|
26
|
-
|
26
|
+
end.compact.find_all do |x|
|
27
27
|
if x.last
|
28
|
-
if [:attribute_nodes, :children].include?
|
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?
|
38
|
-
pp.group(2, "#{v.first.to_s.sub(/_\w+$/,
|
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
|
41
|
+
pp.pp(item)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
else
|
45
|
-
pp.text
|
46
|
-
pp.pp
|
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
|
data/lib/nokogiri/xml/pp.rb
CHANGED
data/lib/nokogiri/xml/reader.rb
CHANGED
@@ -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
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
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
|
-
#
|
18
|
+
# reader.each do |node|
|
17
19
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
+
# # node is an instance of Nokogiri::XML::Reader
|
21
|
+
# puts node.name
|
20
22
|
#
|
21
|
-
#
|
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
|
-
|
77
|
+
alias_method :self_closing?, :empty_element?
|
79
78
|
|
80
|
-
def initialize
|
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
|
-
#
|
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
|
-
|
91
|
-
[node.name
|
92
|
-
|
93
|
-
|
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 =
|
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
|
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
|