nokogiri 1.10.9 → 1.18.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of nokogiri might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +38 -0
- data/LICENSE-DEPENDENCIES.md +1632 -1022
- data/LICENSE.md +1 -1
- data/README.md +190 -95
- data/bin/nokogiri +63 -50
- data/dependencies.yml +34 -66
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +909 -422
- data/ext/nokogiri/gumbo.c +610 -0
- data/ext/nokogiri/html4_document.c +171 -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.c +40 -0
- data/ext/nokogiri/html4_sax_parser_context.c +98 -0
- data/ext/nokogiri/html4_sax_push_parser.c +96 -0
- data/ext/nokogiri/libxml2_polyfill.c +114 -0
- data/ext/nokogiri/nokogiri.c +258 -105
- data/ext/nokogiri/nokogiri.h +207 -90
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +18 -18
- data/ext/nokogiri/xml_attribute_decl.c +22 -22
- data/ext/nokogiri/xml_cdata.c +33 -33
- data/ext/nokogiri/xml_comment.c +19 -31
- data/ext/nokogiri/xml_document.c +499 -323
- data/ext/nokogiri/xml_document_fragment.c +17 -36
- data/ext/nokogiri/xml_dtd.c +65 -59
- 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 +1429 -723
- data/ext/nokogiri/xml_node_set.c +257 -225
- data/ext/nokogiri/xml_processing_instruction.c +18 -20
- data/ext/nokogiri/xml_reader.c +340 -231
- data/ext/nokogiri/xml_relax_ng.c +87 -99
- data/ext/nokogiri/xml_sax_parser.c +269 -176
- data/ext/nokogiri/xml_sax_parser_context.c +286 -152
- data/ext/nokogiri/xml_sax_push_parser.c +111 -64
- data/ext/nokogiri/xml_schema.c +132 -140
- data/ext/nokogiri/xml_syntax_error.c +52 -23
- data/ext/nokogiri/xml_text.c +37 -30
- data/ext/nokogiri/xml_xpath_context.c +373 -185
- data/ext/nokogiri/xslt_stylesheet.c +342 -191
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +129 -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 +658 -0
- data/gumbo-parser/src/error.h +152 -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 +953 -0
- data/gumbo-parser/src/parser.c +4932 -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 +14 -8
- data/lib/nokogiri/css/parser.rb +399 -377
- data/lib/nokogiri/css/parser.y +250 -245
- data/lib/nokogiri/css/parser_extras.rb +16 -71
- data/lib/nokogiri/css/selector_cache.rb +38 -0
- data/lib/nokogiri/css/syntax_error.rb +3 -1
- data/lib/nokogiri/css/tokenizer.rb +7 -5
- data/lib/nokogiri/css/tokenizer.rex +11 -9
- data/lib/nokogiri/css/xpath_visitor.rb +242 -96
- data/lib/nokogiri/css.rb +122 -17
- data/lib/nokogiri/decorators/slop.rb +11 -11
- 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 +235 -0
- data/lib/nokogiri/html4/document_fragment.rb +166 -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/html4/sax/parser.rb +48 -0
- data/lib/nokogiri/html4/sax/parser_context.rb +15 -0
- data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
- data/lib/nokogiri/html4.rb +42 -0
- data/lib/nokogiri/html5/builder.rb +40 -0
- data/lib/nokogiri/html5/document.rb +199 -0
- data/lib/nokogiri/html5/document_fragment.rb +200 -0
- data/lib/nokogiri/html5/node.rb +103 -0
- data/lib/nokogiri/html5.rb +368 -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 +83 -35
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +2 -0
- data/lib/nokogiri/xml/document.rb +359 -130
- data/lib/nokogiri/xml/document_fragment.rb +170 -54
- 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 +1168 -420
- data/lib/nokogiri/xml/node_set.rb +145 -67
- 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 +47 -30
- data/lib/nokogiri/xml/pp.rb +4 -2
- data/lib/nokogiri/xml/processing_instruction.rb +4 -1
- data/lib/nokogiri/xml/reader.rb +68 -41
- data/lib/nokogiri/xml/relax_ng.rb +60 -17
- data/lib/nokogiri/xml/sax/document.rb +198 -111
- data/lib/nokogiri/xml/sax/parser.rb +144 -67
- data/lib/nokogiri/xml/sax/parser_context.rb +119 -6
- data/lib/nokogiri/xml/sax/push_parser.rb +9 -5
- data/lib/nokogiri/xml/sax.rb +54 -4
- data/lib/nokogiri/xml/schema.rb +116 -39
- data/lib/nokogiri/xml/searchable.rb +139 -95
- data/lib/nokogiri/xml/syntax_error.rb +29 -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 +15 -4
- data/lib/nokogiri/xml.rb +45 -55
- data/lib/nokogiri/xslt/stylesheet.rb +32 -8
- data/lib/nokogiri/xslt.rb +103 -30
- data/lib/nokogiri.rb +59 -75
- data/lib/xsd/xmlparser/nokogiri.rb +32 -29
- 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/libxml2/0019-xpath-Use-separate-static-hash-table-for-standard-fu.patch +244 -0
- data/patches/libxslt/0001-update-config.guess-and-config.sub-for-libxslt.patch +224 -0
- data/ports/archives/libxml2-2.13.6.tar.xz +0 -0
- data/ports/archives/libxslt-1.1.42.tar.xz +0 -0
- metadata +123 -295
- 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.rb +0 -62
- 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/libxml2/0004-libxml2.la-is-in-top_builddir.patch +0 -25
- data/patches/libxml2/0005-Fix-infinite-loop-in-xmlStringLenDecodeEntities.patch +0 -32
- 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
@@ -0,0 +1,166 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nokogiri
|
4
|
+
module HTML4
|
5
|
+
class DocumentFragment < Nokogiri::XML::DocumentFragment
|
6
|
+
#
|
7
|
+
# :call-seq:
|
8
|
+
# parse(input) { |options| ... } → HTML4::DocumentFragment
|
9
|
+
# parse(input, encoding:, options:) { |options| ... } → HTML4::DocumentFragment
|
10
|
+
#
|
11
|
+
# Parse \HTML4 fragment input from a String, and return a new HTML4::DocumentFragment. This
|
12
|
+
# method creates a new, empty HTML4::Document to contain the fragment.
|
13
|
+
#
|
14
|
+
# [Required Parameters]
|
15
|
+
# - +input+ (String | IO) The content to be parsed.
|
16
|
+
#
|
17
|
+
# [Optional Keyword Arguments]
|
18
|
+
# - +encoding:+ (String) The name of the encoding that should be used when processing the
|
19
|
+
# document. When not provided, the encoding will be determined based on the document
|
20
|
+
# content.
|
21
|
+
#
|
22
|
+
# - +options:+ (Nokogiri::XML::ParseOptions) Configuration object that determines some
|
23
|
+
# behaviors during parsing. See ParseOptions for more information. The default value is
|
24
|
+
# +ParseOptions::DEFAULT_HTML+.
|
25
|
+
#
|
26
|
+
# [Yields]
|
27
|
+
# If a block is given, a Nokogiri::XML::ParseOptions object is yielded to the block which
|
28
|
+
# can be configured before parsing. See ParseOptions for more information.
|
29
|
+
#
|
30
|
+
# [Returns] HTML4::DocumentFragment
|
31
|
+
#
|
32
|
+
# *Example:* Parsing a string
|
33
|
+
#
|
34
|
+
# fragment = HTML4::DocumentFragment.parse("<div>Hello World</div>")
|
35
|
+
#
|
36
|
+
# *Example:* Parsing an IO
|
37
|
+
#
|
38
|
+
# fragment = File.open("fragment.html") do |file|
|
39
|
+
# HTML4::DocumentFragment.parse(file)
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# *Example:* Specifying encoding
|
43
|
+
#
|
44
|
+
# fragment = HTML4::DocumentFragment.parse(input, encoding: "EUC-JP")
|
45
|
+
#
|
46
|
+
# *Example:* Setting parse options dynamically
|
47
|
+
#
|
48
|
+
# HTML4::DocumentFragment.parse("<div>Hello World") do |options|
|
49
|
+
# options.huge.pedantic
|
50
|
+
# end
|
51
|
+
#
|
52
|
+
def self.parse(
|
53
|
+
input,
|
54
|
+
encoding_ = nil, options_ = XML::ParseOptions::DEFAULT_HTML,
|
55
|
+
encoding: encoding_, options: options_,
|
56
|
+
&block
|
57
|
+
)
|
58
|
+
# TODO: this method should take a context node.
|
59
|
+
doc = HTML4::Document.new
|
60
|
+
|
61
|
+
if input.respond_to?(:read)
|
62
|
+
# Handle IO-like objects (IO, File, StringIO, etc.)
|
63
|
+
# The _read_ method of these objects doesn't accept an +encoding+ parameter.
|
64
|
+
# Encoding is usually set when the IO object is created or opened,
|
65
|
+
# or by using the _set_encoding_ method.
|
66
|
+
#
|
67
|
+
# 1. If +encoding+ is provided and the object supports _set_encoding_,
|
68
|
+
# set the encoding before reading.
|
69
|
+
# 2. Read the content from the IO-like object.
|
70
|
+
#
|
71
|
+
# Note: After reading, the content's encoding will be:
|
72
|
+
# - The encoding set by _set_encoding_ if it was called
|
73
|
+
# - The default encoding of the IO object otherwise
|
74
|
+
#
|
75
|
+
# For StringIO specifically, _set_encoding_ affects only the internal string,
|
76
|
+
# not how the data is read out.
|
77
|
+
input.set_encoding(encoding) if encoding && input.respond_to?(:set_encoding)
|
78
|
+
input = input.read
|
79
|
+
end
|
80
|
+
|
81
|
+
encoding ||= if input.respond_to?(:encoding)
|
82
|
+
encoding = input.encoding
|
83
|
+
if encoding == ::Encoding::ASCII_8BIT
|
84
|
+
"UTF-8"
|
85
|
+
else
|
86
|
+
encoding.name
|
87
|
+
end
|
88
|
+
else
|
89
|
+
"UTF-8"
|
90
|
+
end
|
91
|
+
|
92
|
+
doc.encoding = encoding
|
93
|
+
|
94
|
+
new(doc, input, options: options, &block)
|
95
|
+
end
|
96
|
+
|
97
|
+
#
|
98
|
+
# :call-seq:
|
99
|
+
# new(document) { |options| ... } → HTML4::DocumentFragment
|
100
|
+
# new(document, input) { |options| ... } → HTML4::DocumentFragment
|
101
|
+
# new(document, input, context:, options:) { |options| ... } → HTML4::DocumentFragment
|
102
|
+
#
|
103
|
+
# Parse \HTML4 fragment input from a String, and return a new HTML4::DocumentFragment.
|
104
|
+
#
|
105
|
+
# 💡 It's recommended to use either HTML4::DocumentFragment.parse or XML::Node#parse rather
|
106
|
+
# than call this method directly.
|
107
|
+
#
|
108
|
+
# [Required Parameters]
|
109
|
+
# - +document+ (HTML4::Document) The parent document to associate the returned fragment with.
|
110
|
+
#
|
111
|
+
# [Optional Parameters]
|
112
|
+
# - +input+ (String) The content to be parsed.
|
113
|
+
#
|
114
|
+
# [Optional Keyword Arguments]
|
115
|
+
# - +context:+ (Nokogiri::XML::Node) The <b>context node</b> for the subtree created. See
|
116
|
+
# below for more information.
|
117
|
+
#
|
118
|
+
# - +options:+ (Nokogiri::XML::ParseOptions) Configuration object that determines some
|
119
|
+
# behaviors during parsing. See ParseOptions for more information. The default value is
|
120
|
+
# +ParseOptions::DEFAULT_HTML+.
|
121
|
+
#
|
122
|
+
# [Yields]
|
123
|
+
# If a block is given, a Nokogiri::XML::ParseOptions object is yielded to the block which
|
124
|
+
# can be configured before parsing. See ParseOptions for more information.
|
125
|
+
#
|
126
|
+
# [Returns] HTML4::DocumentFragment
|
127
|
+
#
|
128
|
+
# === Context \Node
|
129
|
+
#
|
130
|
+
# If a context node is specified using +context:+, then the fragment will be created by
|
131
|
+
# calling XML::Node#parse on that node, so the parser will behave as if that Node is the
|
132
|
+
# parent of the fragment subtree.
|
133
|
+
#
|
134
|
+
def initialize(
|
135
|
+
document, input = nil,
|
136
|
+
context_ = nil, options_ = XML::ParseOptions::DEFAULT_HTML,
|
137
|
+
context: context_, options: options_
|
138
|
+
) # rubocop:disable Lint/MissingSuper
|
139
|
+
return self unless input
|
140
|
+
|
141
|
+
options = Nokogiri::XML::ParseOptions.new(options) if Integer === options
|
142
|
+
@parse_options = options
|
143
|
+
yield options if block_given?
|
144
|
+
|
145
|
+
if context
|
146
|
+
preexisting_errors = document.errors.dup
|
147
|
+
node_set = context.parse("<div>#{input}</div>", options)
|
148
|
+
node_set.first.children.each { |child| child.parent = self } unless node_set.empty?
|
149
|
+
self.errors = document.errors - preexisting_errors
|
150
|
+
else
|
151
|
+
# This is a horrible hack, but I don't care
|
152
|
+
path = if /^\s*?<body/i.match?(input)
|
153
|
+
"/html/body"
|
154
|
+
else
|
155
|
+
"/html/body/node()"
|
156
|
+
end
|
157
|
+
|
158
|
+
temp_doc = HTML4::Document.parse("<html><body>#{input}", nil, document.encoding, options)
|
159
|
+
temp_doc.xpath(path).each { |child| child.parent = self }
|
160
|
+
self.errors = temp_doc.errors
|
161
|
+
end
|
162
|
+
children
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|