nokogiri 1.10.7 → 1.16.0
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 +42 -0
- data/LICENSE-DEPENDENCIES.md +1632 -1022
- data/LICENSE.md +1 -1
- data/README.md +188 -96
- data/bin/nokogiri +63 -50
- data/dependencies.yml +34 -66
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +862 -421
- data/ext/nokogiri/gumbo.c +594 -0
- data/ext/nokogiri/html4_document.c +165 -0
- data/ext/nokogiri/html4_element_description.c +299 -0
- data/ext/nokogiri/html4_entity_lookup.c +37 -0
- data/ext/nokogiri/html4_sax_parser_context.c +108 -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 +251 -105
- data/ext/nokogiri/nokogiri.h +222 -90
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +17 -17
- data/ext/nokogiri/xml_attribute_decl.c +22 -22
- data/ext/nokogiri/xml_cdata.c +39 -31
- data/ext/nokogiri/xml_comment.c +20 -27
- data/ext/nokogiri/xml_document.c +408 -243
- data/ext/nokogiri/xml_document_fragment.c +13 -17
- data/ext/nokogiri/xml_dtd.c +64 -58
- data/ext/nokogiri/xml_element_content.c +63 -55
- data/ext/nokogiri/xml_element_decl.c +31 -31
- data/ext/nokogiri/xml_encoding_handler.c +54 -21
- data/ext/nokogiri/xml_entity_decl.c +37 -35
- data/ext/nokogiri/xml_entity_reference.c +17 -19
- data/ext/nokogiri/xml_namespace.c +131 -61
- data/ext/nokogiri/xml_node.c +1343 -674
- data/ext/nokogiri/xml_node_set.c +246 -216
- data/ext/nokogiri/xml_processing_instruction.c +18 -20
- data/ext/nokogiri/xml_reader.c +305 -213
- data/ext/nokogiri/xml_relax_ng.c +87 -78
- data/ext/nokogiri/xml_sax_parser.c +149 -124
- data/ext/nokogiri/xml_sax_parser_context.c +149 -103
- data/ext/nokogiri/xml_sax_push_parser.c +65 -37
- data/ext/nokogiri/xml_schema.c +138 -82
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +35 -26
- data/ext/nokogiri/xml_xpath_context.c +363 -178
- data/ext/nokogiri/xslt_stylesheet.c +335 -189
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +126 -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 +630 -0
- data/gumbo-parser/src/error.h +148 -0
- data/gumbo-parser/src/foreign_attrs.c +103 -0
- data/gumbo-parser/src/foreign_attrs.gperf +27 -0
- data/gumbo-parser/src/insertion_mode.h +33 -0
- data/gumbo-parser/src/macros.h +91 -0
- data/gumbo-parser/src/nokogiri_gumbo.h +944 -0
- data/gumbo-parser/src/parser.c +4891 -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 +223 -0
- data/gumbo-parser/src/tag_lookup.c +382 -0
- data/gumbo-parser/src/tag_lookup.gperf +170 -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 +3464 -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 +66 -0
- data/gumbo-parser/src/util.h +34 -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 +54 -49
- data/lib/nokogiri/css/syntax_error.rb +3 -1
- data/lib/nokogiri/css/tokenizer.rb +5 -3
- data/lib/nokogiri/css/tokenizer.rex +3 -2
- data/lib/nokogiri/css/xpath_visitor.rb +205 -96
- data/lib/nokogiri/css.rb +56 -17
- data/lib/nokogiri/decorators/slop.rb +9 -7
- data/lib/nokogiri/encoding_handler.rb +57 -0
- data/lib/nokogiri/extension.rb +32 -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/html4/document.rb +214 -0
- 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 +2040 -0
- data/lib/nokogiri/html4/encoding_reader.rb +121 -0
- data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
- data/lib/nokogiri/{html → html4}/sax/parser.rb +17 -16
- 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 +47 -0
- data/lib/nokogiri/html5/document.rb +168 -0
- data/lib/nokogiri/html5/document_fragment.rb +90 -0
- data/lib/nokogiri/html5/node.rb +103 -0
- data/lib/nokogiri/html5.rb +326 -0
- data/lib/nokogiri/jruby/dependencies.rb +3 -0
- data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
- data/lib/nokogiri/syntax_error.rb +2 -0
- data/lib/nokogiri/version/constant.rb +6 -0
- data/lib/nokogiri/version/info.rb +224 -0
- data/lib/nokogiri/version.rb +3 -108
- data/lib/nokogiri/xml/attr.rb +55 -3
- data/lib/nokogiri/xml/attribute_decl.rb +6 -2
- data/lib/nokogiri/xml/builder.rb +75 -34
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +2 -0
- data/lib/nokogiri/xml/document.rb +312 -127
- data/lib/nokogiri/xml/document_fragment.rb +93 -48
- data/lib/nokogiri/xml/dtd.rb +4 -2
- data/lib/nokogiri/xml/element_content.rb +12 -2
- data/lib/nokogiri/xml/element_decl.rb +6 -2
- data/lib/nokogiri/xml/entity_decl.rb +7 -3
- data/lib/nokogiri/xml/entity_reference.rb +2 -0
- data/lib/nokogiri/xml/namespace.rb +44 -0
- data/lib/nokogiri/xml/node/save_options.rb +23 -8
- data/lib/nokogiri/xml/node.rb +1096 -419
- data/lib/nokogiri/xml/node_set.rb +137 -61
- data/lib/nokogiri/xml/notation.rb +13 -0
- data/lib/nokogiri/xml/parse_options.rb +145 -52
- data/lib/nokogiri/xml/pp/character_data.rb +9 -6
- data/lib/nokogiri/xml/pp/node.rb +42 -30
- data/lib/nokogiri/xml/pp.rb +4 -2
- data/lib/nokogiri/xml/processing_instruction.rb +4 -1
- data/lib/nokogiri/xml/reader.rb +21 -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 +39 -36
- 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 +120 -72
- data/lib/nokogiri/xml/syntax_error.rb +7 -5
- 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 +39 -38
- data/lib/nokogiri/xslt/stylesheet.rb +3 -1
- data/lib/nokogiri/xslt.rb +101 -22
- data/lib/nokogiri.rb +59 -75
- data/lib/xsd/xmlparser/nokogiri.rb +29 -25
- data/patches/libxml2/{0004-libxml2.la-is-in-top_builddir.patch → 0003-libxml2.la-is-in-top_builddir.patch} +1 -1
- data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
- data/patches/libxml2/0010-update-config.guess-and-config.sub-for-libxml2.patch +224 -0
- data/patches/libxml2/0011-rip-out-libxml2-s-libc_single_threaded-support.patch +30 -0
- data/patches/libxslt/0001-update-config.guess-and-config.sub-for-libxslt.patch +224 -0
- data/ports/archives/libxml2-2.12.3.tar.xz +0 -0
- data/ports/archives/libxslt-1.1.39.tar.xz +0 -0
- metadata +121 -291
- 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.rb +0 -335
- 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/ports/archives/libxml2-2.9.10.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
- /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
@@ -1,27 +1,40 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
1
4
|
module Nokogiri
|
2
5
|
module XML
|
3
6
|
class DocumentFragment < Nokogiri::XML::Node
|
7
|
+
####
|
8
|
+
# Create a Nokogiri::XML::DocumentFragment from +tags+
|
9
|
+
def self.parse(tags, options = ParseOptions::DEFAULT_XML, &block)
|
10
|
+
new(XML::Document.new, tags, nil, options, &block)
|
11
|
+
end
|
12
|
+
|
4
13
|
##
|
5
14
|
# Create a new DocumentFragment from +tags+.
|
6
15
|
#
|
7
16
|
# If +ctx+ is present, it is used as a context node for the
|
8
17
|
# subtree created, e.g., namespaces will be resolved relative
|
9
18
|
# to +ctx+.
|
10
|
-
def initialize
|
19
|
+
def initialize(document, tags = nil, ctx = nil, options = ParseOptions::DEFAULT_XML) # rubocop:disable Lint/MissingSuper
|
11
20
|
return self unless tags
|
12
21
|
|
22
|
+
options = Nokogiri::XML::ParseOptions.new(options) if Integer === options
|
23
|
+
yield options if block_given?
|
24
|
+
|
13
25
|
children = if ctx
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
26
|
+
# Fix for issue#490
|
27
|
+
if Nokogiri.jruby?
|
28
|
+
# fix for issue #770
|
29
|
+
ctx.parse("<root #{namespace_declarations(ctx)}>#{tags}</root>", options).children
|
30
|
+
else
|
31
|
+
ctx.parse(tags, options)
|
32
|
+
end
|
33
|
+
else
|
34
|
+
wrapper_doc = XML::Document.parse("<root>#{tags}</root>", nil, nil, options)
|
35
|
+
self.errors = wrapper_doc.errors
|
36
|
+
wrapper_doc.xpath("/root/node()")
|
37
|
+
end
|
25
38
|
children.each { |child| child.parent = self }
|
26
39
|
end
|
27
40
|
|
@@ -39,7 +52,7 @@ module Nokogiri
|
|
39
52
|
###
|
40
53
|
# return the name for DocumentFragment
|
41
54
|
def name
|
42
|
-
|
55
|
+
"#document-fragment"
|
43
56
|
end
|
44
57
|
|
45
58
|
###
|
@@ -51,12 +64,10 @@ module Nokogiri
|
|
51
64
|
###
|
52
65
|
# Convert this DocumentFragment to html
|
53
66
|
# See Nokogiri::XML::NodeSet#to_html
|
54
|
-
def to_html
|
67
|
+
def to_html(*args)
|
55
68
|
if Nokogiri.jruby?
|
56
69
|
options = args.first.is_a?(Hash) ? args.shift : {}
|
57
|
-
|
58
|
-
options[:save_with] = Node::SaveOptions::NO_DECLARATION | Node::SaveOptions::NO_EMPTY_TAGS | Node::SaveOptions::AS_HTML
|
59
|
-
end
|
70
|
+
options[:save_with] ||= Node::SaveOptions::DEFAULT_HTML
|
60
71
|
args.insert(0, options)
|
61
72
|
end
|
62
73
|
children.to_html(*args)
|
@@ -65,12 +76,10 @@ module Nokogiri
|
|
65
76
|
###
|
66
77
|
# Convert this DocumentFragment to xhtml
|
67
78
|
# See Nokogiri::XML::NodeSet#to_xhtml
|
68
|
-
def to_xhtml
|
79
|
+
def to_xhtml(*args)
|
69
80
|
if Nokogiri.jruby?
|
70
81
|
options = args.first.is_a?(Hash) ? args.shift : {}
|
71
|
-
|
72
|
-
options[:save_with] = Node::SaveOptions::NO_DECLARATION | Node::SaveOptions::NO_EMPTY_TAGS | Node::SaveOptions::AS_XHTML
|
73
|
-
end
|
82
|
+
options[:save_with] ||= Node::SaveOptions::DEFAULT_XHTML
|
74
83
|
args.insert(0, options)
|
75
84
|
end
|
76
85
|
children.to_xhtml(*args)
|
@@ -79,7 +88,7 @@ module Nokogiri
|
|
79
88
|
###
|
80
89
|
# Convert this DocumentFragment to xml
|
81
90
|
# See Nokogiri::XML::NodeSet#to_xml
|
82
|
-
def to_xml
|
91
|
+
def to_xml(*args)
|
83
92
|
children.to_xml(*args)
|
84
93
|
end
|
85
94
|
|
@@ -90,7 +99,7 @@ module Nokogiri
|
|
90
99
|
# selectors. For example:
|
91
100
|
#
|
92
101
|
# For more information see Nokogiri::XML::Searchable#css
|
93
|
-
def css
|
102
|
+
def css(*args)
|
94
103
|
if children.any?
|
95
104
|
children.css(*args) # 'children' is a smell here
|
96
105
|
else
|
@@ -109,51 +118,87 @@ module Nokogiri
|
|
109
118
|
# Search this fragment for +paths+. +paths+ must be one or more XPath or CSS queries.
|
110
119
|
#
|
111
120
|
# For more information see Nokogiri::XML::Searchable#search
|
112
|
-
def search
|
121
|
+
def search(*rules)
|
113
122
|
rules, handler, ns, binds = extract_params(rules)
|
114
123
|
|
115
124
|
rules.inject(NodeSet.new(document)) do |set, rule|
|
116
|
-
set
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
125
|
+
set + if Searchable::LOOKS_LIKE_XPATH.match?(rule)
|
126
|
+
xpath(*[rule, ns, handler, binds].compact)
|
127
|
+
else
|
128
|
+
children.css(*[rule, ns, handler].compact) # 'children' is a smell here
|
129
|
+
end
|
121
130
|
end
|
122
131
|
end
|
123
132
|
|
124
|
-
|
125
|
-
|
126
|
-
class << self
|
127
|
-
####
|
128
|
-
# Create a Nokogiri::XML::DocumentFragment from +tags+
|
129
|
-
def parse tags
|
130
|
-
self.new(XML::Document.new, tags)
|
131
|
-
end
|
132
|
-
end
|
133
|
+
alias_method :serialize, :to_s
|
133
134
|
|
134
135
|
# A list of Nokogiri::XML::SyntaxError found when parsing a document
|
135
136
|
def errors
|
136
137
|
document.errors
|
137
138
|
end
|
138
139
|
|
139
|
-
def errors=
|
140
|
+
def errors=(things) # :nodoc:
|
140
141
|
document.errors = things
|
141
142
|
end
|
142
143
|
|
144
|
+
def fragment(data)
|
145
|
+
document.fragment(data)
|
146
|
+
end
|
147
|
+
|
148
|
+
#
|
149
|
+
# :call-seq: deconstruct() → Array
|
150
|
+
#
|
151
|
+
# Returns the root nodes of this document fragment as an array, to use in pattern matching.
|
152
|
+
#
|
153
|
+
# 💡 Note that text nodes are returned as well as elements. If you wish to operate only on
|
154
|
+
# root elements, you should deconstruct the array returned by
|
155
|
+
# <tt>DocumentFragment#elements</tt>.
|
156
|
+
#
|
157
|
+
# *Example*
|
158
|
+
#
|
159
|
+
# frag = Nokogiri::HTML5.fragment(<<~HTML)
|
160
|
+
# <div>Start</div>
|
161
|
+
# This is a <a href="#jump">shortcut</a> for you.
|
162
|
+
# <div>End</div>
|
163
|
+
# HTML
|
164
|
+
#
|
165
|
+
# frag.deconstruct
|
166
|
+
# # => [#(Element:0x35c { name = "div", children = [ #(Text "Start")] }),
|
167
|
+
# # #(Text "\n" + "This is a "),
|
168
|
+
# # #(Element:0x370 {
|
169
|
+
# # name = "a",
|
170
|
+
# # attributes = [ #(Attr:0x384 { name = "href", value = "#jump" })],
|
171
|
+
# # children = [ #(Text "shortcut")]
|
172
|
+
# # }),
|
173
|
+
# # #(Text " for you.\n"),
|
174
|
+
# # #(Element:0x398 { name = "div", children = [ #(Text "End")] }),
|
175
|
+
# # #(Text "\n")]
|
176
|
+
#
|
177
|
+
# *Example* only the elements, not the text nodes.
|
178
|
+
#
|
179
|
+
# frag.elements.deconstruct
|
180
|
+
# # => [#(Element:0x35c { name = "div", children = [ #(Text "Start")] }),
|
181
|
+
# # #(Element:0x370 {
|
182
|
+
# # name = "a",
|
183
|
+
# # attributes = [ #(Attr:0x384 { name = "href", value = "#jump" })],
|
184
|
+
# # children = [ #(Text "shortcut")]
|
185
|
+
# # }),
|
186
|
+
# # #(Element:0x398 { name = "div", children = [ #(Text "End")] })]
|
187
|
+
#
|
188
|
+
# Since v1.14.0
|
189
|
+
#
|
190
|
+
def deconstruct
|
191
|
+
children.to_a
|
192
|
+
end
|
193
|
+
|
143
194
|
private
|
144
195
|
|
145
196
|
# fix for issue 770
|
146
|
-
def namespace_declarations
|
197
|
+
def namespace_declarations(ctx)
|
147
198
|
ctx.namespace_scopes.map do |namespace|
|
148
199
|
prefix = namespace.prefix.nil? ? "" : ":#{namespace.prefix}"
|
149
|
-
%
|
150
|
-
end.join
|
151
|
-
end
|
152
|
-
|
153
|
-
def coerce data
|
154
|
-
return super unless String === data
|
155
|
-
|
156
|
-
document.fragment(data).children
|
200
|
+
%{xmlns#{prefix}="#{namespace.href}"}
|
201
|
+
end.join(" ")
|
157
202
|
end
|
158
203
|
end
|
159
204
|
end
|
data/lib/nokogiri/xml/dtd.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
3
5
|
class DTD < Nokogiri::XML::Node
|
@@ -19,13 +21,13 @@ module Nokogiri
|
|
19
21
|
end
|
20
22
|
|
21
23
|
def html_dtd?
|
22
|
-
name.casecmp(
|
24
|
+
name.casecmp("html").zero?
|
23
25
|
end
|
24
26
|
|
25
27
|
def html5_dtd?
|
26
28
|
html_dtd? &&
|
27
29
|
external_id.nil? &&
|
28
|
-
(system_id.nil? || system_id ==
|
30
|
+
(system_id.nil? || system_id == "about:legacy-compat")
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
3
5
|
###
|
@@ -9,9 +11,11 @@ module Nokogiri
|
|
9
11
|
# ]>
|
10
12
|
# </root>
|
11
13
|
#
|
12
|
-
# ElementContent represents the tree inside the <!ELEMENT> tag shown above
|
13
|
-
#
|
14
|
+
# ElementContent represents the binary tree inside the <!ELEMENT> tag shown above that lists the
|
15
|
+
# possible content for the div1 tag.
|
14
16
|
class ElementContent
|
17
|
+
include Nokogiri::XML::PP::Node
|
18
|
+
|
15
19
|
# Possible definitions of type
|
16
20
|
PCDATA = 1
|
17
21
|
ELEMENT = 2
|
@@ -31,6 +35,12 @@ module Nokogiri
|
|
31
35
|
def children
|
32
36
|
[c1, c2].compact
|
33
37
|
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def inspect_attributes
|
42
|
+
[:prefix, :name, :type, :occur, :children]
|
43
|
+
end
|
34
44
|
end
|
35
45
|
end
|
36
46
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
3
5
|
class ElementDecl < Nokogiri::XML::Node
|
@@ -5,8 +7,10 @@ module Nokogiri
|
|
5
7
|
undef_method :namespace_definitions
|
6
8
|
undef_method :line if method_defined?(:line)
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
+
private
|
11
|
+
|
12
|
+
def inspect_attributes
|
13
|
+
[:to_s]
|
10
14
|
end
|
11
15
|
end
|
12
16
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
3
5
|
class EntityDecl < Nokogiri::XML::Node
|
@@ -7,12 +9,14 @@ module Nokogiri
|
|
7
9
|
undef_method :namespace_definitions
|
8
10
|
undef_method :line if method_defined?(:line)
|
9
11
|
|
10
|
-
def self.new
|
12
|
+
def self.new(name, doc, *args)
|
11
13
|
doc.create_entity(name, *args)
|
12
14
|
end
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
+
private
|
17
|
+
|
18
|
+
def inspect_attributes
|
19
|
+
[:to_s]
|
16
20
|
end
|
17
21
|
end
|
18
22
|
end
|
@@ -1,10 +1,54 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
1
4
|
module Nokogiri
|
2
5
|
module XML
|
3
6
|
class Namespace
|
4
7
|
include Nokogiri::XML::PP::Node
|
5
8
|
attr_reader :document
|
6
9
|
|
10
|
+
#
|
11
|
+
# :call-seq: deconstruct_keys(array_of_names) → Hash
|
12
|
+
#
|
13
|
+
# Returns a hash describing the Namespace, to use in pattern matching.
|
14
|
+
#
|
15
|
+
# Valid keys and their values:
|
16
|
+
# - +prefix+ → (String, nil) The namespace's prefix, or +nil+ if there is no prefix (e.g., default namespace).
|
17
|
+
# - +href+ → (String) The namespace's URI
|
18
|
+
#
|
19
|
+
# *Example*
|
20
|
+
#
|
21
|
+
# doc = Nokogiri::XML.parse(<<~XML)
|
22
|
+
# <?xml version="1.0"?>
|
23
|
+
# <root xmlns="http://nokogiri.org/ns/default" xmlns:noko="http://nokogiri.org/ns/noko">
|
24
|
+
# <child1 foo="abc" noko:bar="def"/>
|
25
|
+
# <noko:child2 foo="qwe" noko:bar="rty"/>
|
26
|
+
# </root>
|
27
|
+
# XML
|
28
|
+
#
|
29
|
+
# doc.root.elements.first.namespace
|
30
|
+
# # => #(Namespace:0x35c { href = "http://nokogiri.org/ns/default" })
|
31
|
+
#
|
32
|
+
# doc.root.elements.first.namespace.deconstruct_keys([:prefix, :href])
|
33
|
+
# # => {:prefix=>nil, :href=>"http://nokogiri.org/ns/default"}
|
34
|
+
#
|
35
|
+
# doc.root.elements.last.namespace
|
36
|
+
# # => #(Namespace:0x370 {
|
37
|
+
# # prefix = "noko",
|
38
|
+
# # href = "http://nokogiri.org/ns/noko"
|
39
|
+
# # })
|
40
|
+
#
|
41
|
+
# doc.root.elements.last.namespace.deconstruct_keys([:prefix, :href])
|
42
|
+
# # => {:prefix=>"noko", :href=>"http://nokogiri.org/ns/noko"}
|
43
|
+
#
|
44
|
+
# Since v1.14.0
|
45
|
+
#
|
46
|
+
def deconstruct_keys(keys)
|
47
|
+
{ prefix: prefix, href: href }
|
48
|
+
end
|
49
|
+
|
7
50
|
private
|
51
|
+
|
8
52
|
def inspect_attributes
|
9
53
|
[:prefix, :href]
|
10
54
|
end
|
@@ -1,8 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
3
5
|
class Node
|
4
6
|
###
|
5
|
-
# Save options for serializing nodes
|
7
|
+
# Save options for serializing nodes.
|
8
|
+
# See the method group entitled Node@Serialization+and+Generating+Output for usage.
|
6
9
|
class SaveOptions
|
7
10
|
# Format serialized xml
|
8
11
|
FORMAT = 1
|
@@ -21,28 +24,32 @@ module Nokogiri
|
|
21
24
|
|
22
25
|
if Nokogiri.jruby?
|
23
26
|
# Save builder created document
|
24
|
-
AS_BUILDER
|
27
|
+
AS_BUILDER = 128
|
25
28
|
# the default for XML documents
|
26
29
|
DEFAULT_XML = AS_XML # https://github.com/sparklemotion/nokogiri/issues/#issue/415
|
27
30
|
# the default for HTML document
|
28
31
|
DEFAULT_HTML = NO_DECLARATION | NO_EMPTY_TAGS | AS_HTML
|
32
|
+
# the default for XHTML document
|
33
|
+
DEFAULT_XHTML = NO_DECLARATION | AS_XHTML
|
29
34
|
else
|
30
35
|
# the default for XML documents
|
31
36
|
DEFAULT_XML = FORMAT | AS_XML
|
32
37
|
# the default for HTML document
|
33
38
|
DEFAULT_HTML = FORMAT | NO_DECLARATION | NO_EMPTY_TAGS | AS_HTML
|
39
|
+
# the default for XHTML document
|
40
|
+
DEFAULT_XHTML = FORMAT | NO_DECLARATION | AS_XHTML
|
34
41
|
end
|
35
|
-
# the default for XHTML document
|
36
|
-
DEFAULT_XHTML = FORMAT | NO_DECLARATION | NO_EMPTY_TAGS | AS_XHTML
|
37
42
|
|
38
43
|
# Integer representation of the SaveOptions
|
39
44
|
attr_reader :options
|
40
45
|
|
41
46
|
# Create a new SaveOptions object with +options+
|
42
|
-
def initialize
|
47
|
+
def initialize(options = 0)
|
48
|
+
@options = options
|
49
|
+
end
|
43
50
|
|
44
51
|
constants.each do |constant|
|
45
|
-
class_eval
|
52
|
+
class_eval <<~RUBY, __FILE__, __LINE__ + 1
|
46
53
|
def #{constant.downcase}
|
47
54
|
@options |= #{constant}
|
48
55
|
self
|
@@ -51,10 +58,18 @@ module Nokogiri
|
|
51
58
|
def #{constant.downcase}?
|
52
59
|
#{constant} & @options == #{constant}
|
53
60
|
end
|
54
|
-
|
61
|
+
RUBY
|
55
62
|
end
|
56
63
|
|
57
|
-
|
64
|
+
alias_method :to_i, :options
|
65
|
+
|
66
|
+
def inspect
|
67
|
+
options = []
|
68
|
+
self.class.constants.each do |k|
|
69
|
+
options << k.downcase if send(:"#{k.downcase}?")
|
70
|
+
end
|
71
|
+
super.sub(/>$/, " " + options.join(", ") + ">")
|
72
|
+
end
|
58
73
|
end
|
59
74
|
end
|
60
75
|
end
|