nokogiri 1.11.3-x86-linux → 1.12.0.rc1-x86-linux
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/LICENSE-DEPENDENCIES.md +243 -22
- data/LICENSE.md +1 -1
- data/README.md +6 -5
- data/dependencies.yml +12 -12
- data/ext/nokogiri/depend +35 -34
- data/ext/nokogiri/extconf.rb +181 -103
- data/ext/nokogiri/gumbo.c +611 -0
- data/ext/nokogiri/{html_document.c → html4_document.c} +8 -8
- data/ext/nokogiri/{html_element_description.c → html4_element_description.c} +20 -18
- data/ext/nokogiri/{html_entity_lookup.c → html4_entity_lookup.c} +7 -7
- data/ext/nokogiri/{html_sax_parser_context.c → html4_sax_parser_context.c} +5 -5
- data/ext/nokogiri/{html_sax_push_parser.c → html4_sax_push_parser.c} +4 -4
- data/ext/nokogiri/include/libxml2/libxml/c14n.h +6 -4
- data/ext/nokogiri/include/libxml2/libxml/parser.h +9 -7
- data/ext/nokogiri/include/libxml2/libxml/tree.h +3 -3
- data/ext/nokogiri/include/libxml2/libxml/xmlIO.h +2 -0
- data/ext/nokogiri/include/libxml2/libxml/xmlexports.h +39 -115
- data/ext/nokogiri/include/libxml2/libxml/xmlschemas.h +1 -1
- data/ext/nokogiri/include/libxml2/libxml/xmlversion.h +6 -6
- data/ext/nokogiri/include/libxml2/libxml/xpath.h +1 -3
- data/ext/nokogiri/libxml2_backwards_compat.c +30 -30
- data/ext/nokogiri/nokogiri.c +70 -38
- data/ext/nokogiri/nokogiri.h +16 -9
- data/ext/nokogiri/xml_document.c +13 -13
- data/ext/nokogiri/xml_element_content.c +2 -0
- data/ext/nokogiri/xml_encoding_handler.c +11 -6
- data/ext/nokogiri/xml_namespace.c +2 -0
- data/ext/nokogiri/xml_node.c +118 -110
- data/ext/nokogiri/xml_node_set.c +20 -20
- data/ext/nokogiri/xml_reader.c +2 -0
- data/ext/nokogiri/xml_sax_parser.c +6 -6
- data/ext/nokogiri/xml_sax_parser_context.c +2 -0
- data/ext/nokogiri/xml_schema.c +2 -0
- data/ext/nokogiri/xml_xpath_context.c +67 -65
- data/ext/nokogiri/xslt_stylesheet.c +2 -1
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +101 -0
- data/gumbo-parser/THANKS +27 -0
- data/lib/nokogiri.rb +31 -29
- data/lib/nokogiri/2.5/nokogiri.so +0 -0
- data/lib/nokogiri/2.6/nokogiri.so +0 -0
- data/lib/nokogiri/2.7/nokogiri.so +0 -0
- data/lib/nokogiri/3.0/nokogiri.so +0 -0
- data/lib/nokogiri/css.rb +14 -14
- data/lib/nokogiri/css/parser.rb +1 -1
- data/lib/nokogiri/css/parser.y +1 -1
- data/lib/nokogiri/css/syntax_error.rb +1 -1
- data/lib/nokogiri/extension.rb +2 -2
- data/lib/nokogiri/gumbo.rb +14 -0
- data/lib/nokogiri/html.rb +31 -27
- data/lib/nokogiri/html4.rb +40 -0
- data/lib/nokogiri/{html → html4}/builder.rb +2 -2
- data/lib/nokogiri/{html → html4}/document.rb +4 -4
- data/lib/nokogiri/{html → html4}/document_fragment.rb +3 -3
- data/lib/nokogiri/{html → html4}/element_description.rb +1 -1
- data/lib/nokogiri/{html → html4}/element_description_defaults.rb +1 -1
- data/lib/nokogiri/{html → html4}/entity_lookup.rb +1 -1
- data/lib/nokogiri/{html → html4}/sax/parser.rb +11 -14
- data/lib/nokogiri/html4/sax/parser_context.rb +19 -0
- data/lib/nokogiri/{html → html4}/sax/push_parser.rb +5 -5
- data/lib/nokogiri/html5.rb +473 -0
- data/lib/nokogiri/html5/document.rb +74 -0
- data/lib/nokogiri/html5/document_fragment.rb +80 -0
- data/lib/nokogiri/html5/node.rb +93 -0
- data/lib/nokogiri/version/constant.rb +1 -1
- data/lib/nokogiri/version/info.rb +12 -2
- data/lib/nokogiri/xml.rb +35 -36
- data/lib/nokogiri/xml/node.rb +6 -5
- data/lib/nokogiri/xml/parse_options.rb +2 -0
- data/lib/nokogiri/xml/pp.rb +2 -2
- data/lib/nokogiri/xml/sax.rb +4 -4
- data/lib/nokogiri/xml/sax/document.rb +24 -30
- data/lib/nokogiri/xml/xpath.rb +2 -2
- data/lib/nokogiri/xslt.rb +16 -16
- data/lib/nokogiri/xslt/stylesheet.rb +1 -1
- metadata +37 -37
- data/lib/nokogiri/html/sax/parser_context.rb +0 -17
@@ -0,0 +1,74 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright 2013-2021 Sam Ruby, Stephen Checkoway
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require_relative "../html4/document"
|
19
|
+
|
20
|
+
module Nokogiri
|
21
|
+
module HTML5
|
22
|
+
# @since v1.12.0
|
23
|
+
# @note HTML5 functionality is not available when running JRuby.
|
24
|
+
class Document < Nokogiri::HTML4::Document
|
25
|
+
def self.parse(string_or_io, url = nil, encoding = nil, **options, &block)
|
26
|
+
yield options if block_given?
|
27
|
+
string_or_io = '' unless string_or_io
|
28
|
+
|
29
|
+
if string_or_io.respond_to?(:encoding) && string_or_io.encoding.name != 'ASCII-8BIT'
|
30
|
+
encoding ||= string_or_io.encoding.name
|
31
|
+
end
|
32
|
+
|
33
|
+
if string_or_io.respond_to?(:read) && string_or_io.respond_to?(:path)
|
34
|
+
url ||= string_or_io.path
|
35
|
+
end
|
36
|
+
unless string_or_io.respond_to?(:read) || string_or_io.respond_to?(:to_str)
|
37
|
+
raise ArgumentError.new("not a string or IO object")
|
38
|
+
end
|
39
|
+
do_parse(string_or_io, url, encoding, options)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.read_io(io, url = nil, encoding = nil, **options)
|
43
|
+
raise ArgumentError.new("io object doesn't respond to :read") unless io.respond_to?(:read)
|
44
|
+
do_parse(io, url, encoding, options)
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.read_memory(string, url = nil, encoding = nil, **options)
|
48
|
+
raise ArgumentError.new("string object doesn't respond to :to_str") unless string.respond_to?(:to_str)
|
49
|
+
do_parse(string, url, encoding, options)
|
50
|
+
end
|
51
|
+
|
52
|
+
def fragment(tags = nil)
|
53
|
+
DocumentFragment.new(self, tags, self.root)
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_xml(options = {}, &block)
|
57
|
+
# Bypass XML::Document#to_xml which doesn't add
|
58
|
+
# XML::Node::SaveOptions::AS_XML like XML::Node#to_xml does.
|
59
|
+
XML::Node.instance_method(:to_xml).bind(self).call(options, &block)
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
def self.do_parse(string_or_io, url, encoding, options)
|
64
|
+
string = HTML5.read_and_encode(string_or_io, encoding)
|
65
|
+
max_attributes = options[:max_attributes] || Nokogiri::Gumbo::DEFAULT_MAX_ATTRIBUTES
|
66
|
+
max_errors = options[:max_errors] || options[:max_parse_errors] || Nokogiri::Gumbo::DEFAULT_MAX_ERRORS
|
67
|
+
max_depth = options[:max_tree_depth] || Nokogiri::Gumbo::DEFAULT_MAX_TREE_DEPTH
|
68
|
+
doc = Nokogiri::Gumbo.parse(string, url, max_attributes, max_errors, max_depth)
|
69
|
+
doc.encoding = 'UTF-8'
|
70
|
+
doc
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright 2013-2021 Sam Ruby, Stephen Checkoway
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require_relative "../html4/document_fragment"
|
19
|
+
|
20
|
+
module Nokogiri
|
21
|
+
module HTML5
|
22
|
+
# @since v1.12.0
|
23
|
+
# @note HTML5 functionality is not available when running JRuby.
|
24
|
+
class DocumentFragment < Nokogiri::HTML4::DocumentFragment
|
25
|
+
attr_accessor :document
|
26
|
+
attr_accessor :errors
|
27
|
+
|
28
|
+
# Create a document fragment.
|
29
|
+
def initialize(doc, tags = nil, ctx = nil, options = {})
|
30
|
+
self.document = doc
|
31
|
+
self.errors = []
|
32
|
+
return self unless tags
|
33
|
+
|
34
|
+
max_attributes = options[:max_attributes] || Nokogiri::Gumbo::DEFAULT_MAX_ATTRIBUTES
|
35
|
+
max_errors = options[:max_errors] || Nokogiri::Gumbo::DEFAULT_MAX_ERRORS
|
36
|
+
max_depth = options[:max_tree_depth] || Nokogiri::Gumbo::DEFAULT_MAX_TREE_DEPTH
|
37
|
+
tags = Nokogiri::HTML5.read_and_encode(tags, nil)
|
38
|
+
Nokogiri::Gumbo.fragment(self, tags, ctx, max_attributes, max_errors, max_depth)
|
39
|
+
end
|
40
|
+
|
41
|
+
def serialize(options = {}, &block)
|
42
|
+
# Bypass XML::Document.serialize which doesn't support options even
|
43
|
+
# though XML::Node.serialize does!
|
44
|
+
XML::Node.instance_method(:serialize).bind(self).call(options, &block)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Parse a document fragment from +tags+, returning a Nodeset.
|
48
|
+
def self.parse(tags, encoding = nil, options = {})
|
49
|
+
doc = HTML5::Document.new
|
50
|
+
tags = HTML5.read_and_encode(tags, encoding)
|
51
|
+
doc.encoding = "UTF-8"
|
52
|
+
new(doc, tags, nil, options)
|
53
|
+
end
|
54
|
+
|
55
|
+
def extract_params(params) # :nodoc:
|
56
|
+
handler = params.find do |param|
|
57
|
+
![Hash, String, Symbol].include?(param.class)
|
58
|
+
end
|
59
|
+
params -= [handler] if handler
|
60
|
+
|
61
|
+
hashes = []
|
62
|
+
while Hash === params.last || params.last.nil?
|
63
|
+
hashes << params.pop
|
64
|
+
break if params.empty?
|
65
|
+
end
|
66
|
+
ns, binds = hashes.reverse
|
67
|
+
|
68
|
+
ns ||=
|
69
|
+
begin
|
70
|
+
ns = {}
|
71
|
+
children.each { |child| ns.merge!(child.namespaces) }
|
72
|
+
ns
|
73
|
+
end
|
74
|
+
|
75
|
+
[params, handler, ns, binds]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
# vim: set shiftwidth=2 softtabstop=2 tabstop=8 expandtab:
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
3
|
+
# Copyright 2013-2021 Sam Ruby, Stephen Checkoway
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
#
|
17
|
+
|
18
|
+
require_relative "../xml/node"
|
19
|
+
|
20
|
+
module Nokogiri
|
21
|
+
module HTML5
|
22
|
+
# @since v1.12.0
|
23
|
+
# @note HTML5 functionality is not available when running JRuby.
|
24
|
+
module Node
|
25
|
+
def inner_html(options = {})
|
26
|
+
return super(options) unless document.is_a?(HTML5::Document)
|
27
|
+
result = options[:preserve_newline] && HTML5.prepend_newline?(self) ? String.new("\n") : String.new
|
28
|
+
result << children.map { |child| child.to_html(options) }.join
|
29
|
+
result
|
30
|
+
end
|
31
|
+
|
32
|
+
def write_to(io, *options)
|
33
|
+
return super(io, *options) unless document.is_a?(HTML5::Document)
|
34
|
+
options = options.first.is_a?(Hash) ? options.shift : {}
|
35
|
+
encoding = options[:encoding] || options[0]
|
36
|
+
if Nokogiri.jruby?
|
37
|
+
save_options = options[:save_with] || options[1]
|
38
|
+
indent_times = options[:indent] || 0
|
39
|
+
else
|
40
|
+
save_options = options[:save_with] || options[1] || XML::Node::SaveOptions::FORMAT
|
41
|
+
indent_times = options[:indent] || 2
|
42
|
+
end
|
43
|
+
indent_string = (options[:indent_text] || " ") * indent_times
|
44
|
+
|
45
|
+
config = XML::Node::SaveOptions.new(save_options.to_i)
|
46
|
+
yield config if block_given?
|
47
|
+
|
48
|
+
config_options = config.options
|
49
|
+
if config_options & (XML::Node::SaveOptions::AS_XML | XML::Node::SaveOptions::AS_XHTML) != 0
|
50
|
+
# Use Nokogiri's serializing code.
|
51
|
+
native_write_to(io, encoding, indent_string, config_options)
|
52
|
+
else
|
53
|
+
# Serialize including the current node.
|
54
|
+
encoding ||= document.encoding || Encoding::UTF_8
|
55
|
+
internal_ops = {
|
56
|
+
preserve_newline: options[:preserve_newline] || false,
|
57
|
+
}
|
58
|
+
HTML5.serialize_node_internal(self, io, encoding, internal_ops)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def fragment(tags)
|
63
|
+
return super(tags) unless document.is_a?(HTML5::Document)
|
64
|
+
DocumentFragment.new(document, tags, self)
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
# HTML elements can have attributes that contain colons.
|
70
|
+
# Nokogiri::XML::Node#[]= treats names with colons as a prefixed QName
|
71
|
+
# and tries to create an attribute in a namespace. This is especially
|
72
|
+
# annoying with attribute names like xml:lang since libxml2 will
|
73
|
+
# actually create the xml namespace if it doesn't exist already.
|
74
|
+
def add_child_node_and_reparent_attrs(node)
|
75
|
+
return super(node) unless document.is_a?(HTML5::Document)
|
76
|
+
# I'm not sure what this method is supposed to do. Reparenting
|
77
|
+
# namespaces is handled by libxml2, including child namespaces which
|
78
|
+
# this method wouldn't handle.
|
79
|
+
# https://github.com/sparklemotion/nokogiri/issues/1790
|
80
|
+
add_child_node(node)
|
81
|
+
# node.attribute_nodes.find_all { |a| a.namespace }.each do |attr|
|
82
|
+
# attr.remove
|
83
|
+
# ns = attr.namespace
|
84
|
+
# a["#{ns.prefix}:#{attr.name}"] = attr.value
|
85
|
+
# end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
# Monkey patch
|
89
|
+
XML::Node.prepend(HTML5::Node)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# vim: set shiftwidth=2 softtabstop=2 tabstop=8 expandtab:
|
@@ -52,6 +52,10 @@ module Nokogiri
|
|
52
52
|
defined?(Nokogiri::LIBXML_ICONV_ENABLED) && Nokogiri::LIBXML_ICONV_ENABLED
|
53
53
|
end
|
54
54
|
|
55
|
+
def libxslt_has_datetime?
|
56
|
+
defined?(Nokogiri::LIBXSLT_DATETIME_ENABLED) && Nokogiri::LIBXSLT_DATETIME_ENABLED
|
57
|
+
end
|
58
|
+
|
55
59
|
def libxml2_using_packaged?
|
56
60
|
libxml2? && Nokogiri::PACKAGED_LIBRARIES
|
57
61
|
end
|
@@ -137,6 +141,7 @@ module Nokogiri
|
|
137
141
|
else
|
138
142
|
libxml["source"] = "system"
|
139
143
|
end
|
144
|
+
libxml["memory_management"] = Nokogiri::LIBXML_MEMORY_MANAGEMENT
|
140
145
|
libxml["iconv_enabled"] = libxml2_has_iconv?
|
141
146
|
libxml["compiled"] = compiled_libxml_version.to_s
|
142
147
|
libxml["loaded"] = loaded_libxml_version.to_s
|
@@ -150,6 +155,7 @@ module Nokogiri
|
|
150
155
|
else
|
151
156
|
libxslt["source"] = "system"
|
152
157
|
end
|
158
|
+
libxslt["datetime_enabled"] = libxslt_has_datetime?
|
153
159
|
libxslt["compiled"] = compiled_libxslt_version.to_s
|
154
160
|
libxslt["loaded"] = loaded_libxslt_version.to_s
|
155
161
|
end
|
@@ -190,15 +196,19 @@ module Nokogiri
|
|
190
196
|
Gem::Requirement.new(requirement).satisfied_by?(VersionInfo.instance.loaded_libxml_version)
|
191
197
|
end
|
192
198
|
|
199
|
+
def self.uses_gumbo?
|
200
|
+
uses_libxml? # TODO: replace with Gumbo functionality
|
201
|
+
end
|
202
|
+
|
193
203
|
def self.jruby? # :nodoc:
|
194
204
|
VersionInfo.instance.jruby?
|
195
205
|
end
|
196
206
|
|
197
207
|
# Ensure constants used in this file are loaded - see #1896
|
198
208
|
if Nokogiri.jruby?
|
199
|
-
|
209
|
+
require_relative "../jruby/dependencies"
|
200
210
|
end
|
201
|
-
|
211
|
+
require_relative "../extension"
|
202
212
|
|
203
213
|
# More complete version information about libxml
|
204
214
|
VERSION_INFO = VersionInfo.instance.to_hash
|
data/lib/nokogiri/xml.rb
CHANGED
@@ -1,38 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require 'nokogiri/xml/pp'
|
3
|
-
require 'nokogiri/xml/parse_options'
|
4
|
-
require 'nokogiri/xml/sax'
|
5
|
-
require 'nokogiri/xml/searchable'
|
6
|
-
require 'nokogiri/xml/node'
|
7
|
-
require 'nokogiri/xml/attribute_decl'
|
8
|
-
require 'nokogiri/xml/element_decl'
|
9
|
-
require 'nokogiri/xml/element_content'
|
10
|
-
require 'nokogiri/xml/character_data'
|
11
|
-
require 'nokogiri/xml/namespace'
|
12
|
-
require 'nokogiri/xml/attr'
|
13
|
-
require 'nokogiri/xml/dtd'
|
14
|
-
require 'nokogiri/xml/cdata'
|
15
|
-
require 'nokogiri/xml/text'
|
16
|
-
require 'nokogiri/xml/document'
|
17
|
-
require 'nokogiri/xml/document_fragment'
|
18
|
-
require 'nokogiri/xml/processing_instruction'
|
19
|
-
require 'nokogiri/xml/node_set'
|
20
|
-
require 'nokogiri/xml/syntax_error'
|
21
|
-
require 'nokogiri/xml/xpath'
|
22
|
-
require 'nokogiri/xml/xpath_context'
|
23
|
-
require 'nokogiri/xml/builder'
|
24
|
-
require 'nokogiri/xml/reader'
|
25
|
-
require 'nokogiri/xml/notation'
|
26
|
-
require 'nokogiri/xml/entity_decl'
|
27
|
-
require 'nokogiri/xml/entity_reference'
|
28
|
-
require 'nokogiri/xml/schema'
|
29
|
-
require 'nokogiri/xml/relax_ng'
|
30
|
-
|
31
2
|
module Nokogiri
|
32
3
|
class << self
|
33
4
|
###
|
34
5
|
# Parse XML. Convenience method for Nokogiri::XML::Document.parse
|
35
|
-
def XML
|
6
|
+
def XML(thing, url = nil, encoding = nil, options = XML::ParseOptions::DEFAULT_XML, &block)
|
36
7
|
Nokogiri::XML::Document.parse(thing, url, encoding, options, &block)
|
37
8
|
end
|
38
9
|
end
|
@@ -41,20 +12,19 @@ module Nokogiri
|
|
41
12
|
# Original C14N 1.0 spec canonicalization
|
42
13
|
XML_C14N_1_0 = 0
|
43
14
|
# Exclusive C14N 1.0 spec canonicalization
|
44
|
-
XML_C14N_EXCLUSIVE_1_0 =
|
15
|
+
XML_C14N_EXCLUSIVE_1_0 = 1
|
45
16
|
# C14N 1.1 spec canonicalization
|
46
17
|
XML_C14N_1_1 = 2
|
47
18
|
class << self
|
48
19
|
###
|
49
20
|
# Parse an XML document using the Nokogiri::XML::Reader API. See
|
50
21
|
# Nokogiri::XML::Reader for mor information
|
51
|
-
def Reader
|
52
|
-
|
22
|
+
def Reader(string_or_io, url = nil, encoding = nil, options = ParseOptions::STRICT)
|
53
23
|
options = Nokogiri::XML::ParseOptions.new(options) if Integer === options
|
54
24
|
# Give the options to the user
|
55
25
|
yield options if block_given?
|
56
26
|
|
57
|
-
if string_or_io.respond_to?
|
27
|
+
if string_or_io.respond_to?(:read)
|
58
28
|
return Reader.from_io(string_or_io, url, encoding, options.to_i)
|
59
29
|
end
|
60
30
|
Reader.from_memory(string_or_io, url, encoding, options.to_i)
|
@@ -62,15 +32,44 @@ module Nokogiri
|
|
62
32
|
|
63
33
|
###
|
64
34
|
# Parse XML. Convenience method for Nokogiri::XML::Document.parse
|
65
|
-
def parse
|
35
|
+
def parse(thing, url = nil, encoding = nil, options = ParseOptions::DEFAULT_XML, &block)
|
66
36
|
Document.parse(thing, url, encoding, options, &block)
|
67
37
|
end
|
68
38
|
|
69
39
|
####
|
70
40
|
# Parse a fragment from +string+ in to a NodeSet.
|
71
|
-
def fragment
|
41
|
+
def fragment(string)
|
72
42
|
XML::DocumentFragment.parse(string)
|
73
43
|
end
|
74
44
|
end
|
75
45
|
end
|
76
46
|
end
|
47
|
+
|
48
|
+
require_relative "xml/pp"
|
49
|
+
require_relative "xml/parse_options"
|
50
|
+
require_relative "xml/sax"
|
51
|
+
require_relative "xml/searchable"
|
52
|
+
require_relative "xml/node"
|
53
|
+
require_relative "xml/attribute_decl"
|
54
|
+
require_relative "xml/element_decl"
|
55
|
+
require_relative "xml/element_content"
|
56
|
+
require_relative "xml/character_data"
|
57
|
+
require_relative "xml/namespace"
|
58
|
+
require_relative "xml/attr"
|
59
|
+
require_relative "xml/dtd"
|
60
|
+
require_relative "xml/cdata"
|
61
|
+
require_relative "xml/text"
|
62
|
+
require_relative "xml/document"
|
63
|
+
require_relative "xml/document_fragment"
|
64
|
+
require_relative "xml/processing_instruction"
|
65
|
+
require_relative "xml/node_set"
|
66
|
+
require_relative "xml/syntax_error"
|
67
|
+
require_relative "xml/xpath"
|
68
|
+
require_relative "xml/xpath_context"
|
69
|
+
require_relative "xml/builder"
|
70
|
+
require_relative "xml/reader"
|
71
|
+
require_relative "xml/notation"
|
72
|
+
require_relative "xml/entity_decl"
|
73
|
+
require_relative "xml/entity_reference"
|
74
|
+
require_relative "xml/schema"
|
75
|
+
require_relative "xml/relax_ng"
|
data/lib/nokogiri/xml/node.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
# frozen_string_literal: true
|
3
3
|
require "stringio"
|
4
|
-
require "nokogiri/xml/node/save_options"
|
5
4
|
|
6
5
|
module Nokogiri
|
7
6
|
module XML
|
@@ -837,7 +836,7 @@ module Nokogiri
|
|
837
836
|
node_set = in_context(contents, options.to_i)
|
838
837
|
if (node_set.empty? && (document.errors.length > error_count))
|
839
838
|
if options.recover?
|
840
|
-
fragment = Nokogiri::
|
839
|
+
fragment = Nokogiri::HTML4::DocumentFragment.parse contents
|
841
840
|
node_set = fragment.children
|
842
841
|
else
|
843
842
|
raise document.errors[error_count]
|
@@ -883,7 +882,7 @@ module Nokogiri
|
|
883
882
|
type == DOCUMENT_NODE
|
884
883
|
end
|
885
884
|
|
886
|
-
# Returns true if this is an
|
885
|
+
# Returns true if this is an HTML4::Document node
|
887
886
|
def html?
|
888
887
|
type == HTML_DOCUMENT_NODE
|
889
888
|
end
|
@@ -909,11 +908,11 @@ module Nokogiri
|
|
909
908
|
end
|
910
909
|
|
911
910
|
###
|
912
|
-
# Fetch the Nokogiri::
|
911
|
+
# Fetch the Nokogiri::HTML4::ElementDescription for this node. Returns
|
913
912
|
# nil on XML documents and on unknown tags.
|
914
913
|
def description
|
915
914
|
return nil if document.xml?
|
916
|
-
Nokogiri::
|
915
|
+
Nokogiri::HTML4::ElementDescription[name]
|
917
916
|
end
|
918
917
|
|
919
918
|
###
|
@@ -1235,3 +1234,5 @@ Requires a Node, NodeSet or String argument, and cannot accept a #{data.class}.
|
|
1235
1234
|
end
|
1236
1235
|
end
|
1237
1236
|
end
|
1237
|
+
|
1238
|
+
require_relative "node/save_options"
|