nokogiri 1.10.10 → 1.13.9
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 +13 -64
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +761 -424
- 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 +119 -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 +199 -88
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +17 -17
- data/ext/nokogiri/xml_attribute_decl.c +21 -21
- data/ext/nokogiri/xml_cdata.c +14 -19
- data/ext/nokogiri/xml_comment.c +19 -26
- data/ext/nokogiri/xml_document.c +296 -220
- data/ext/nokogiri/xml_document_fragment.c +12 -16
- data/ext/nokogiri/xml_dtd.c +64 -58
- data/ext/nokogiri/xml_element_content.c +31 -26
- data/ext/nokogiri/xml_element_decl.c +25 -25
- data/ext/nokogiri/xml_encoding_handler.c +43 -18
- data/ext/nokogiri/xml_entity_decl.c +37 -35
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +98 -53
- data/ext/nokogiri/xml_node.c +1065 -653
- data/ext/nokogiri/xml_node_set.c +178 -166
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +277 -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 +112 -86
- data/ext/nokogiri/xml_sax_push_parser.c +36 -27
- data/ext/nokogiri/xml_schema.c +98 -48
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +14 -18
- data/ext/nokogiri/xml_xpath_context.c +226 -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 +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 +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 +103 -105
- 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 +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 +46 -0
- data/lib/nokogiri/html5/document.rb +91 -0
- data/lib/nokogiri/html5/document_fragment.rb +83 -0
- data/lib/nokogiri/html5/node.rb +100 -0
- data/lib/nokogiri/html5.rb +478 -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 +222 -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 +74 -33
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +2 -0
- data/lib/nokogiri/xml/document.rb +224 -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 +10 -5
- data/lib/nokogiri/xml/node.rb +884 -378
- data/lib/nokogiri/xml/node_set.rb +51 -54
- data/lib/nokogiri/xml/notation.rb +13 -0
- data/lib/nokogiri/xml/parse_options.rb +22 -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 +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 +38 -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 +6 -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 +38 -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/{0004-libxml2.la-is-in-top_builddir.patch → 0003-libxml2.la-is-in-top_builddir.patch} +1 -1
- data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -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.10.3.tar.xz +0 -0
- data/ports/archives/libxslt-1.1.37.tar.xz +0 -0
- metadata +189 -142
- 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/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
@@ -0,0 +1,222 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "singleton"
|
4
|
+
require "shellwords"
|
5
|
+
|
6
|
+
module Nokogiri
|
7
|
+
class VersionInfo # :nodoc:
|
8
|
+
include Singleton
|
9
|
+
|
10
|
+
def jruby?
|
11
|
+
::JRUBY_VERSION if ::RUBY_PLATFORM == "java"
|
12
|
+
end
|
13
|
+
|
14
|
+
def windows?
|
15
|
+
::RUBY_PLATFORM =~ /mingw|mswin/
|
16
|
+
end
|
17
|
+
|
18
|
+
def ruby_minor
|
19
|
+
Gem::Version.new(::RUBY_VERSION).segments[0..1].join(".")
|
20
|
+
end
|
21
|
+
|
22
|
+
def engine
|
23
|
+
defined?(::RUBY_ENGINE) ? ::RUBY_ENGINE : "mri"
|
24
|
+
end
|
25
|
+
|
26
|
+
def loaded_libxml_version
|
27
|
+
Gem::Version.new(Nokogiri::LIBXML_LOADED_VERSION
|
28
|
+
.scan(/^(\d+)(\d\d)(\d\d)(?!\d)/).first
|
29
|
+
.collect(&:to_i)
|
30
|
+
.join("."))
|
31
|
+
end
|
32
|
+
|
33
|
+
def compiled_libxml_version
|
34
|
+
Gem::Version.new(Nokogiri::LIBXML_COMPILED_VERSION)
|
35
|
+
end
|
36
|
+
|
37
|
+
def loaded_libxslt_version
|
38
|
+
Gem::Version.new(Nokogiri::LIBXSLT_LOADED_VERSION
|
39
|
+
.scan(/^(\d+)(\d\d)(\d\d)(?!\d)/).first
|
40
|
+
.collect(&:to_i)
|
41
|
+
.join("."))
|
42
|
+
end
|
43
|
+
|
44
|
+
def compiled_libxslt_version
|
45
|
+
Gem::Version.new(Nokogiri::LIBXSLT_COMPILED_VERSION)
|
46
|
+
end
|
47
|
+
|
48
|
+
def libxml2?
|
49
|
+
defined?(Nokogiri::LIBXML_COMPILED_VERSION)
|
50
|
+
end
|
51
|
+
|
52
|
+
def libxml2_has_iconv?
|
53
|
+
defined?(Nokogiri::LIBXML_ICONV_ENABLED) && Nokogiri::LIBXML_ICONV_ENABLED
|
54
|
+
end
|
55
|
+
|
56
|
+
def libxslt_has_datetime?
|
57
|
+
defined?(Nokogiri::LIBXSLT_DATETIME_ENABLED) && Nokogiri::LIBXSLT_DATETIME_ENABLED
|
58
|
+
end
|
59
|
+
|
60
|
+
def libxml2_using_packaged?
|
61
|
+
libxml2? && Nokogiri::PACKAGED_LIBRARIES
|
62
|
+
end
|
63
|
+
|
64
|
+
def libxml2_using_system?
|
65
|
+
libxml2? && !libxml2_using_packaged?
|
66
|
+
end
|
67
|
+
|
68
|
+
def libxml2_precompiled?
|
69
|
+
libxml2_using_packaged? && Nokogiri::PRECOMPILED_LIBRARIES
|
70
|
+
end
|
71
|
+
|
72
|
+
def warnings
|
73
|
+
warnings = []
|
74
|
+
|
75
|
+
if libxml2?
|
76
|
+
if compiled_libxml_version != loaded_libxml_version
|
77
|
+
warnings << "Nokogiri was built against libxml version #{compiled_libxml_version}, but has dynamically loaded #{loaded_libxml_version}"
|
78
|
+
end
|
79
|
+
|
80
|
+
if compiled_libxslt_version != loaded_libxslt_version
|
81
|
+
warnings << "Nokogiri was built against libxslt version #{compiled_libxslt_version}, but has dynamically loaded #{loaded_libxslt_version}"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
warnings
|
86
|
+
end
|
87
|
+
|
88
|
+
def to_hash
|
89
|
+
header_directory = File.expand_path(File.join(File.dirname(__FILE__), "../../../ext/nokogiri"))
|
90
|
+
|
91
|
+
{}.tap do |vi|
|
92
|
+
vi["warnings"] = []
|
93
|
+
vi["nokogiri"] = {}.tap do |nokogiri|
|
94
|
+
nokogiri["version"] = Nokogiri::VERSION
|
95
|
+
|
96
|
+
unless jruby?
|
97
|
+
# enable gems like nokogumbo to build with the following in their extconf.rb:
|
98
|
+
#
|
99
|
+
# append_cflags(Nokogiri::VERSION_INFO["nokogiri"]["cppflags"])
|
100
|
+
# append_ldflags(Nokogiri::VERSION_INFO["nokogiri"]["ldflags"])
|
101
|
+
#
|
102
|
+
cppflags = ["-I#{header_directory.shellescape}"]
|
103
|
+
ldflags = []
|
104
|
+
|
105
|
+
if libxml2_using_packaged?
|
106
|
+
cppflags << "-I#{File.join(header_directory, "include").shellescape}"
|
107
|
+
cppflags << "-I#{File.join(header_directory, "include/libxml2").shellescape}"
|
108
|
+
|
109
|
+
if windows?
|
110
|
+
# on windows, nokogumbo needs to link against nokogiri.so to resolve symbols. see #2167
|
111
|
+
lib_directory = File.expand_path(File.join(File.dirname(__FILE__), "../#{ruby_minor}"))
|
112
|
+
unless File.exist?(lib_directory)
|
113
|
+
lib_directory = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
114
|
+
end
|
115
|
+
ldflags << "-L#{lib_directory.shellescape}"
|
116
|
+
ldflags << "-l:nokogiri.so"
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
nokogiri["cppflags"] = cppflags
|
121
|
+
nokogiri["ldflags"] = ldflags
|
122
|
+
end
|
123
|
+
end
|
124
|
+
vi["ruby"] = {}.tap do |ruby|
|
125
|
+
ruby["version"] = ::RUBY_VERSION
|
126
|
+
ruby["platform"] = ::RUBY_PLATFORM
|
127
|
+
ruby["gem_platform"] = ::Gem::Platform.local.to_s
|
128
|
+
ruby["description"] = ::RUBY_DESCRIPTION
|
129
|
+
ruby["engine"] = engine
|
130
|
+
ruby["jruby"] = jruby? if jruby?
|
131
|
+
end
|
132
|
+
|
133
|
+
if libxml2?
|
134
|
+
vi["libxml"] = {}.tap do |libxml|
|
135
|
+
if libxml2_using_packaged?
|
136
|
+
libxml["source"] = "packaged"
|
137
|
+
libxml["precompiled"] = libxml2_precompiled?
|
138
|
+
libxml["patches"] = Nokogiri::LIBXML2_PATCHES
|
139
|
+
|
140
|
+
# this is for nokogumbo and shouldn't be forever
|
141
|
+
libxml["libxml2_path"] = header_directory
|
142
|
+
else
|
143
|
+
libxml["source"] = "system"
|
144
|
+
end
|
145
|
+
libxml["memory_management"] = Nokogiri::LIBXML_MEMORY_MANAGEMENT
|
146
|
+
libxml["iconv_enabled"] = libxml2_has_iconv?
|
147
|
+
libxml["compiled"] = compiled_libxml_version.to_s
|
148
|
+
libxml["loaded"] = loaded_libxml_version.to_s
|
149
|
+
end
|
150
|
+
|
151
|
+
vi["libxslt"] = {}.tap do |libxslt|
|
152
|
+
if libxml2_using_packaged?
|
153
|
+
libxslt["source"] = "packaged"
|
154
|
+
libxslt["precompiled"] = libxml2_precompiled?
|
155
|
+
libxslt["patches"] = Nokogiri::LIBXSLT_PATCHES
|
156
|
+
else
|
157
|
+
libxslt["source"] = "system"
|
158
|
+
end
|
159
|
+
libxslt["datetime_enabled"] = libxslt_has_datetime?
|
160
|
+
libxslt["compiled"] = compiled_libxslt_version.to_s
|
161
|
+
libxslt["loaded"] = loaded_libxslt_version.to_s
|
162
|
+
end
|
163
|
+
|
164
|
+
vi["warnings"] = warnings
|
165
|
+
end
|
166
|
+
|
167
|
+
if defined?(Nokogiri::OTHER_LIBRARY_VERSIONS)
|
168
|
+
# see extconf for how this string is assembled: "lib1name:lib1version,lib2name:lib2version"
|
169
|
+
vi["other_libraries"] = Hash[*Nokogiri::OTHER_LIBRARY_VERSIONS.split(/[,:]/)]
|
170
|
+
elsif jruby?
|
171
|
+
vi["other_libraries"] = {}.tap do |ol|
|
172
|
+
ol["xerces"] = Nokogiri::XERCES_VERSION
|
173
|
+
ol["nekohtml"] = Nokogiri::NEKO_VERSION
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def to_markdown
|
180
|
+
require "yaml"
|
181
|
+
"# Nokogiri (#{Nokogiri::VERSION})\n" +
|
182
|
+
YAML.dump(to_hash).each_line.map { |line| " #{line}" }.join
|
183
|
+
end
|
184
|
+
|
185
|
+
instance.warnings.each do |warning|
|
186
|
+
warn "WARNING: #{warning}"
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
# :nodoc:
|
191
|
+
def self.uses_libxml?(requirement = nil)
|
192
|
+
return false unless VersionInfo.instance.libxml2?
|
193
|
+
return true unless requirement
|
194
|
+
|
195
|
+
Gem::Requirement.new(requirement).satisfied_by?(VersionInfo.instance.loaded_libxml_version)
|
196
|
+
end
|
197
|
+
|
198
|
+
# :nodoc:
|
199
|
+
def self.uses_gumbo?
|
200
|
+
uses_libxml? # TODO: replace with Gumbo functionality
|
201
|
+
end
|
202
|
+
|
203
|
+
# :nodoc:
|
204
|
+
def self.jruby?
|
205
|
+
VersionInfo.instance.jruby?
|
206
|
+
end
|
207
|
+
|
208
|
+
# :nodoc:
|
209
|
+
def self.libxml2_patches
|
210
|
+
if VersionInfo.instance.libxml2_using_packaged?
|
211
|
+
Nokogiri::VERSION_INFO["libxml"]["patches"]
|
212
|
+
else
|
213
|
+
[]
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
require_relative "../jruby/dependencies" if Nokogiri.jruby?
|
218
|
+
require_relative "../extension"
|
219
|
+
|
220
|
+
# Detailed version info about Nokogiri and the installed extension dependencies.
|
221
|
+
VERSION_INFO = VersionInfo.instance.to_hash
|
222
|
+
end
|
data/lib/nokogiri/version.rb
CHANGED
@@ -1,109 +1,4 @@
|
|
1
|
-
|
2
|
-
# The version of Nokogiri you are using
|
3
|
-
VERSION = "1.10.10"
|
1
|
+
# frozen_string_literal: true
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
::JRUBY_VERSION if RUBY_PLATFORM == "java"
|
8
|
-
end
|
9
|
-
|
10
|
-
def engine
|
11
|
-
defined?(RUBY_ENGINE) ? RUBY_ENGINE : "mri"
|
12
|
-
end
|
13
|
-
|
14
|
-
def loaded_parser_version
|
15
|
-
LIBXML_PARSER_VERSION.
|
16
|
-
scan(/^(\d+)(\d\d)(\d\d)(?!\d)/).first.
|
17
|
-
collect(&:to_i).
|
18
|
-
join(".")
|
19
|
-
end
|
20
|
-
|
21
|
-
def compiled_parser_version
|
22
|
-
LIBXML_VERSION
|
23
|
-
end
|
24
|
-
|
25
|
-
def libxml2?
|
26
|
-
defined?(LIBXML_VERSION)
|
27
|
-
end
|
28
|
-
|
29
|
-
def libxml2_using_system?
|
30
|
-
!libxml2_using_packaged?
|
31
|
-
end
|
32
|
-
|
33
|
-
def libxml2_using_packaged?
|
34
|
-
NOKOGIRI_USE_PACKAGED_LIBRARIES
|
35
|
-
end
|
36
|
-
|
37
|
-
def warnings
|
38
|
-
return [] unless libxml2?
|
39
|
-
|
40
|
-
if compiled_parser_version != loaded_parser_version
|
41
|
-
["Nokogiri was built against LibXML version #{compiled_parser_version}, but has dynamically loaded #{loaded_parser_version}"]
|
42
|
-
else
|
43
|
-
[]
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def to_hash
|
48
|
-
hash_info = {}
|
49
|
-
hash_info["warnings"] = []
|
50
|
-
hash_info["nokogiri"] = Nokogiri::VERSION
|
51
|
-
hash_info["ruby"] = {}
|
52
|
-
hash_info["ruby"]["version"] = ::RUBY_VERSION
|
53
|
-
hash_info["ruby"]["platform"] = ::RUBY_PLATFORM
|
54
|
-
hash_info["ruby"]["description"] = ::RUBY_DESCRIPTION
|
55
|
-
hash_info["ruby"]["engine"] = engine
|
56
|
-
hash_info["ruby"]["jruby"] = jruby? if jruby?
|
57
|
-
|
58
|
-
if libxml2?
|
59
|
-
hash_info["libxml"] = {}
|
60
|
-
hash_info["libxml"]["binding"] = "extension"
|
61
|
-
if libxml2_using_packaged?
|
62
|
-
hash_info["libxml"]["source"] = "packaged"
|
63
|
-
hash_info["libxml"]["libxml2_path"] = NOKOGIRI_LIBXML2_PATH
|
64
|
-
hash_info["libxml"]["libxslt_path"] = NOKOGIRI_LIBXSLT_PATH
|
65
|
-
hash_info["libxml"]["libxml2_patches"] = NOKOGIRI_LIBXML2_PATCHES
|
66
|
-
hash_info["libxml"]["libxslt_patches"] = NOKOGIRI_LIBXSLT_PATCHES
|
67
|
-
else
|
68
|
-
hash_info["libxml"]["source"] = "system"
|
69
|
-
end
|
70
|
-
hash_info["libxml"]["compiled"] = compiled_parser_version
|
71
|
-
hash_info["libxml"]["loaded"] = loaded_parser_version
|
72
|
-
hash_info["warnings"] = warnings
|
73
|
-
elsif jruby?
|
74
|
-
hash_info["xerces"] = Nokogiri::XERCES_VERSION
|
75
|
-
hash_info["nekohtml"] = Nokogiri::NEKO_VERSION
|
76
|
-
end
|
77
|
-
|
78
|
-
hash_info
|
79
|
-
end
|
80
|
-
|
81
|
-
def to_markdown
|
82
|
-
begin
|
83
|
-
require "psych"
|
84
|
-
rescue LoadError
|
85
|
-
end
|
86
|
-
require "yaml"
|
87
|
-
"# Nokogiri (#{Nokogiri::VERSION})\n" +
|
88
|
-
YAML.dump(to_hash).each_line.map { |line| " #{line}" }.join
|
89
|
-
end
|
90
|
-
|
91
|
-
# FIXME: maybe switch to singleton?
|
92
|
-
@@instance = new
|
93
|
-
@@instance.warnings.each do |warning|
|
94
|
-
warn "WARNING: #{warning}"
|
95
|
-
end
|
96
|
-
def self.instance; @@instance; end
|
97
|
-
end
|
98
|
-
|
99
|
-
# More complete version information about libxml
|
100
|
-
VERSION_INFO = VersionInfo.instance.to_hash
|
101
|
-
|
102
|
-
def self.uses_libxml? # :nodoc:
|
103
|
-
VersionInfo.instance.libxml2?
|
104
|
-
end
|
105
|
-
|
106
|
-
def self.jruby? # :nodoc:
|
107
|
-
VersionInfo.instance.jruby?
|
108
|
-
end
|
109
|
-
end
|
3
|
+
require_relative "version/constant"
|
4
|
+
require_relative "version/info"
|
data/lib/nokogiri/xml/attr.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
3
5
|
class Attr < Node
|
4
|
-
|
5
|
-
|
6
|
-
|
6
|
+
alias_method :value, :content
|
7
|
+
alias_method :to_s, :content
|
8
|
+
alias_method :content=, :value=
|
7
9
|
|
8
10
|
private
|
11
|
+
|
9
12
|
def inspect_attributes
|
10
13
|
[:name, :namespace, :value]
|
11
14
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
3
5
|
###
|
@@ -11,7 +13,7 @@ module Nokogiri
|
|
11
13
|
undef_method :line if method_defined?(:line)
|
12
14
|
|
13
15
|
def inspect
|
14
|
-
"#<#{self.class.name}:#{
|
16
|
+
"#<#{self.class.name}:#{format("0x%x", object_id)} #{to_s.inspect}>"
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
data/lib/nokogiri/xml/builder.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
3
5
|
###
|
@@ -195,6 +197,41 @@ module Nokogiri
|
|
195
197
|
#
|
196
198
|
# Note the "foo:object" tag.
|
197
199
|
#
|
200
|
+
# === Namespace inheritance
|
201
|
+
#
|
202
|
+
# In the Builder context, children will inherit their parent's namespace. This is the same
|
203
|
+
# behavior as if the underlying {XML::Document} set +namespace_inheritance+ to +true+:
|
204
|
+
#
|
205
|
+
# result = Nokogiri::XML::Builder.new do |xml|
|
206
|
+
# xml["soapenv"].Envelope("xmlns:soapenv" => "http://schemas.xmlsoap.org/soap/envelope/") do
|
207
|
+
# xml.Header
|
208
|
+
# end
|
209
|
+
# end
|
210
|
+
# result.doc.to_xml
|
211
|
+
# # => <?xml version="1.0" encoding="utf-8"?>
|
212
|
+
# # <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
|
213
|
+
# # <soapenv:Header/>
|
214
|
+
# # </soapenv:Envelope>
|
215
|
+
#
|
216
|
+
# Users may turn this behavior off by passing a keyword argument +namespace_inheritance:false+
|
217
|
+
# to the initializer:
|
218
|
+
#
|
219
|
+
# result = Nokogiri::XML::Builder.new(namespace_inheritance: false) do |xml|
|
220
|
+
# xml["soapenv"].Envelope("xmlns:soapenv" => "http://schemas.xmlsoap.org/soap/envelope/") do
|
221
|
+
# xml.Header
|
222
|
+
# xml["soapenv"].Body # users may explicitly opt into the namespace
|
223
|
+
# end
|
224
|
+
# end
|
225
|
+
# result.doc.to_xml
|
226
|
+
# # => <?xml version="1.0" encoding="utf-8"?>
|
227
|
+
# # <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
|
228
|
+
# # <Header/>
|
229
|
+
# # <soapenv:Body/>
|
230
|
+
# # </soapenv:Envelope>
|
231
|
+
#
|
232
|
+
# For more information on namespace inheritance, please see {XML::Document#namespace_inheritance}
|
233
|
+
#
|
234
|
+
#
|
198
235
|
# == Document Types
|
199
236
|
#
|
200
237
|
# To create a document type (DTD), access use the Builder#doc method to get
|
@@ -225,6 +262,10 @@ module Nokogiri
|
|
225
262
|
# </root>
|
226
263
|
#
|
227
264
|
class Builder
|
265
|
+
include Nokogiri::ClassResolver
|
266
|
+
|
267
|
+
DEFAULT_DOCUMENT_OPTIONS = { namespace_inheritance: true }
|
268
|
+
|
228
269
|
# The current Document object being built
|
229
270
|
attr_accessor :doc
|
230
271
|
|
@@ -244,8 +285,8 @@ module Nokogiri
|
|
244
285
|
#
|
245
286
|
# For example:
|
246
287
|
#
|
247
|
-
# doc = Nokogiri::XML(
|
248
|
-
# Nokogiri::XML::Builder.with(doc.
|
288
|
+
# doc = Nokogiri::XML(File.read('somedoc.xml'))
|
289
|
+
# Nokogiri::XML::Builder.with(doc.at_css('some_tag')) do |xml|
|
249
290
|
# # ... Use normal builder methods here ...
|
250
291
|
# xml.awesome # add the "awesome" tag below "some_tag"
|
251
292
|
# end
|
@@ -268,24 +309,19 @@ module Nokogiri
|
|
268
309
|
@doc = root.document
|
269
310
|
@parent = root
|
270
311
|
else
|
271
|
-
|
272
|
-
klass = begin
|
273
|
-
Object.const_get(klassname)
|
274
|
-
rescue NameError
|
275
|
-
Nokogiri::XML::Document
|
276
|
-
end
|
277
|
-
@parent = @doc = klass.new
|
312
|
+
@parent = @doc = related_class("Document").new
|
278
313
|
end
|
279
314
|
|
280
315
|
@context = nil
|
281
316
|
@arity = nil
|
282
317
|
@ns = nil
|
283
318
|
|
319
|
+
options = DEFAULT_DOCUMENT_OPTIONS.merge(options)
|
284
320
|
options.each do |k, v|
|
285
321
|
@doc.send(:"#{k}=", v)
|
286
322
|
end
|
287
323
|
|
288
|
-
return unless
|
324
|
+
return unless block
|
289
325
|
|
290
326
|
@arity = block.arity
|
291
327
|
if @arity <= 0
|
@@ -301,19 +337,19 @@ module Nokogiri
|
|
301
337
|
###
|
302
338
|
# Create a Text Node with content of +string+
|
303
339
|
def text(string)
|
304
|
-
insert
|
340
|
+
insert(@doc.create_text_node(string))
|
305
341
|
end
|
306
342
|
|
307
343
|
###
|
308
344
|
# Create a CDATA Node with content of +string+
|
309
345
|
def cdata(string)
|
310
|
-
insert
|
346
|
+
insert(doc.create_cdata(string))
|
311
347
|
end
|
312
348
|
|
313
349
|
###
|
314
350
|
# Create a Comment Node with content of +string+
|
315
351
|
def comment(string)
|
316
|
-
insert
|
352
|
+
insert(doc.create_comment(string))
|
317
353
|
end
|
318
354
|
|
319
355
|
###
|
@@ -327,12 +363,13 @@ module Nokogiri
|
|
327
363
|
|
328
364
|
@parent.ancestors.each do |a|
|
329
365
|
next if a == doc
|
366
|
+
|
330
367
|
@ns = a.namespace_definitions.find { |x| x.prefix == ns.to_s }
|
331
368
|
return self if @ns
|
332
369
|
end
|
333
370
|
|
334
|
-
@ns = { :
|
335
|
-
|
371
|
+
@ns = { pending: ns.to_s }
|
372
|
+
self
|
336
373
|
end
|
337
374
|
|
338
375
|
###
|
@@ -340,7 +377,7 @@ module Nokogiri
|
|
340
377
|
def to_xml(*args)
|
341
378
|
if Nokogiri.jruby?
|
342
379
|
options = args.first.is_a?(Hash) ? args.shift : {}
|
343
|
-
|
380
|
+
unless options[:save_with]
|
344
381
|
options[:save_with] = Node::SaveOptions::AS_BUILDER
|
345
382
|
end
|
346
383
|
args.insert(0, options)
|
@@ -355,22 +392,23 @@ module Nokogiri
|
|
355
392
|
end
|
356
393
|
|
357
394
|
def method_missing(method, *args, &block) # :nodoc:
|
358
|
-
if @context
|
395
|
+
if @context&.respond_to?(method)
|
359
396
|
@context.send(method, *args, &block)
|
360
397
|
else
|
361
|
-
node = @doc.create_element(method.to_s.sub(/[_!]$/, ""), *args)
|
398
|
+
node = @doc.create_element(method.to_s.sub(/[_!]$/, ""), *args) do |n|
|
362
399
|
# Set up the namespace
|
363
|
-
if @ns.is_a?
|
400
|
+
if @ns.is_a?(Nokogiri::XML::Namespace)
|
364
401
|
n.namespace = @ns
|
365
402
|
@ns = nil
|
366
403
|
end
|
367
|
-
|
404
|
+
end
|
368
405
|
|
369
|
-
if @ns.is_a?
|
406
|
+
if @ns.is_a?(Hash)
|
370
407
|
node.namespace = node.namespace_definitions.find { |x| x.prefix == @ns[:pending] }
|
371
408
|
if node.namespace.nil?
|
372
409
|
raise ArgumentError, "Namespace #{@ns[:pending]} has not been defined"
|
373
410
|
end
|
411
|
+
|
374
412
|
@ns = nil
|
375
413
|
end
|
376
414
|
|
@@ -384,16 +422,19 @@ module Nokogiri
|
|
384
422
|
# Insert +node+ as a child of the current Node
|
385
423
|
def insert(node, &block)
|
386
424
|
node = @parent.add_child(node)
|
387
|
-
if
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
425
|
+
if block
|
426
|
+
begin
|
427
|
+
old_parent = @parent
|
428
|
+
@parent = node
|
429
|
+
@arity ||= block.arity
|
430
|
+
if @arity <= 0
|
431
|
+
instance_eval(&block)
|
432
|
+
else
|
433
|
+
yield(self)
|
434
|
+
end
|
435
|
+
ensure
|
436
|
+
@parent = old_parent
|
395
437
|
end
|
396
|
-
@parent = old_parent
|
397
438
|
end
|
398
439
|
NodeBuilder.new(node, self)
|
399
440
|
end
|
@@ -416,10 +457,10 @@ module Nokogiri
|
|
416
457
|
opts = args.last.is_a?(Hash) ? args.pop : {}
|
417
458
|
case method.to_s
|
418
459
|
when /^(.*)!$/
|
419
|
-
@node["id"] =
|
460
|
+
@node["id"] = Regexp.last_match(1)
|
420
461
|
@node.content = args.first if args.first
|
421
462
|
when /^(.*)=/
|
422
|
-
@node[
|
463
|
+
@node[Regexp.last_match(1)] = args.first
|
423
464
|
else
|
424
465
|
@node["class"] =
|
425
466
|
((@node["class"] || "").split(/\s/) + [method.to_s]).join(" ")
|
@@ -431,7 +472,7 @@ module Nokogiri
|
|
431
472
|
@node[k.to_s] = ((@node[k.to_s] || "").split(/\s/) + [v]).join(" ")
|
432
473
|
end
|
433
474
|
|
434
|
-
if
|
475
|
+
if block
|
435
476
|
old_parent = @doc_builder.parent
|
436
477
|
@doc_builder.parent = @node
|
437
478
|
value = @doc_builder.instance_eval(&block)
|
data/lib/nokogiri/xml/cdata.rb
CHANGED