nokogiri 1.12.5 → 1.13.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 +2 -0
- data/README.md +9 -7
- data/bin/nokogiri +63 -50
- data/dependencies.yml +5 -6
- data/ext/nokogiri/extconf.rb +47 -35
- data/ext/nokogiri/xml_document.c +35 -35
- data/ext/nokogiri/xml_document_fragment.c +0 -2
- data/ext/nokogiri/xml_dtd.c +2 -2
- data/ext/nokogiri/xml_encoding_handler.c +25 -11
- data/ext/nokogiri/xml_node.c +638 -333
- data/ext/nokogiri/xml_reader.c +37 -11
- data/ext/nokogiri/xml_xpath_context.c +72 -49
- data/gumbo-parser/src/parser.c +0 -11
- data/lib/nokogiri/class_resolver.rb +67 -0
- data/lib/nokogiri/css/node.rb +9 -8
- data/lib/nokogiri/css/parser.rb +11 -3
- data/lib/nokogiri/css/parser.y +10 -2
- data/lib/nokogiri/css/parser_extras.rb +20 -20
- data/lib/nokogiri/css/syntax_error.rb +1 -0
- data/lib/nokogiri/css/tokenizer.rb +2 -1
- data/lib/nokogiri/css/tokenizer.rex +2 -1
- data/lib/nokogiri/css/xpath_visitor.rb +174 -75
- data/lib/nokogiri/css.rb +38 -6
- data/lib/nokogiri/decorators/slop.rb +8 -7
- data/lib/nokogiri/extension.rb +1 -1
- data/lib/nokogiri/gumbo.rb +1 -0
- data/lib/nokogiri/html.rb +16 -10
- data/lib/nokogiri/html4/builder.rb +1 -0
- data/lib/nokogiri/html4/document.rb +84 -75
- data/lib/nokogiri/html4/document_fragment.rb +11 -7
- data/lib/nokogiri/html4/element_description.rb +1 -0
- data/lib/nokogiri/html4/element_description_defaults.rb +426 -520
- data/lib/nokogiri/html4/entity_lookup.rb +2 -1
- data/lib/nokogiri/html4/sax/parser.rb +2 -1
- data/lib/nokogiri/html4/sax/parser_context.rb +1 -0
- data/lib/nokogiri/html4/sax/push_parser.rb +7 -7
- data/lib/nokogiri/html4.rb +11 -5
- data/lib/nokogiri/html5/document.rb +24 -10
- data/lib/nokogiri/html5/document_fragment.rb +5 -2
- data/lib/nokogiri/html5/node.rb +6 -3
- data/lib/nokogiri/html5.rb +68 -64
- data/lib/nokogiri/jruby/dependencies.rb +10 -9
- data/lib/nokogiri/syntax_error.rb +1 -0
- data/lib/nokogiri/version/constant.rb +2 -1
- data/lib/nokogiri/version/info.rb +19 -13
- data/lib/nokogiri/version.rb +1 -0
- data/lib/nokogiri/xml/attr.rb +5 -3
- data/lib/nokogiri/xml/attribute_decl.rb +2 -1
- data/lib/nokogiri/xml/builder.rb +32 -32
- data/lib/nokogiri/xml/cdata.rb +2 -1
- data/lib/nokogiri/xml/character_data.rb +1 -0
- data/lib/nokogiri/xml/document.rb +139 -103
- data/lib/nokogiri/xml/document_fragment.rb +41 -38
- data/lib/nokogiri/xml/dtd.rb +3 -2
- data/lib/nokogiri/xml/element_content.rb +1 -0
- data/lib/nokogiri/xml/element_decl.rb +2 -1
- data/lib/nokogiri/xml/entity_decl.rb +3 -2
- data/lib/nokogiri/xml/entity_reference.rb +1 -0
- data/lib/nokogiri/xml/namespace.rb +2 -0
- data/lib/nokogiri/xml/node/save_options.rb +6 -3
- data/lib/nokogiri/xml/node.rb +512 -348
- data/lib/nokogiri/xml/node_set.rb +46 -54
- data/lib/nokogiri/xml/notation.rb +12 -0
- data/lib/nokogiri/xml/parse_options.rb +11 -7
- data/lib/nokogiri/xml/pp/character_data.rb +8 -6
- data/lib/nokogiri/xml/pp/node.rb +24 -26
- data/lib/nokogiri/xml/pp.rb +1 -0
- data/lib/nokogiri/xml/processing_instruction.rb +2 -1
- data/lib/nokogiri/xml/reader.rb +17 -19
- data/lib/nokogiri/xml/relax_ng.rb +1 -0
- data/lib/nokogiri/xml/sax/document.rb +20 -19
- data/lib/nokogiri/xml/sax/parser.rb +36 -34
- data/lib/nokogiri/xml/sax/parser_context.rb +7 -3
- data/lib/nokogiri/xml/sax/push_parser.rb +5 -5
- data/lib/nokogiri/xml/sax.rb +1 -0
- data/lib/nokogiri/xml/schema.rb +7 -6
- data/lib/nokogiri/xml/searchable.rb +42 -22
- data/lib/nokogiri/xml/syntax_error.rb +4 -4
- data/lib/nokogiri/xml/text.rb +1 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +2 -1
- data/lib/nokogiri/xml/xpath.rb +12 -0
- data/lib/nokogiri/xml/xpath_context.rb +2 -3
- data/lib/nokogiri/xml.rb +3 -3
- data/lib/nokogiri/xslt/stylesheet.rb +1 -0
- data/lib/nokogiri/xslt.rb +3 -2
- data/lib/nokogiri.rb +19 -16
- data/lib/xsd/xmlparser/nokogiri.rb +25 -24
- data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +61 -0
- data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
- metadata +101 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c950304946b5017c22d7759cc3d3c951e1d6496a183db4bb9bbc41be3443210e
|
4
|
+
data.tar.gz: 63524576ba0963bc308b25c1060c6595433b826b92d5041de641ce48adb6b274
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0438a3f9076166b31c7034cffe21397b0218caafe699517f6a1874c2538c983fefab6a18629128323581fcb1f830ded629cc10045f4f4a5bfdedad810070b135'
|
7
|
+
data.tar.gz: b0b49a679d96ec8eef33318a006db2d7c0e375475ca8a02ed6cd6ffc7e2dfc084623bceb66fea20e361f6bbd9b9726655fb8fd60a203bbc382d7018a5aaf463e
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# Nokogiri
|
4
4
|
|
5
|
-
Nokogiri (鋸) makes it easy and painless to work with XML and HTML from Ruby. It provides a sensible, easy-to-understand API for [reading](https://nokogiri.org/tutorials/parsing_an_html_xml_document.html), writing, [modifying](https://nokogiri.org/tutorials/modifying_an_html_xml_document.html), and [querying](https://nokogiri.org/tutorials/searching_a_xml_html_document.html) documents. It is fast and standards-compliant by relying on native parsers like libxml2 (
|
5
|
+
Nokogiri (鋸) makes it easy and painless to work with XML and HTML from Ruby. It provides a sensible, easy-to-understand API for [reading](https://nokogiri.org/tutorials/parsing_an_html_xml_document.html), writing, [modifying](https://nokogiri.org/tutorials/modifying_an_html_xml_document.html), and [querying](https://nokogiri.org/tutorials/searching_a_xml_html_document.html) documents. It is fast and standards-compliant by relying on native parsers like libxml2 (CRuby) and xerces (JRuby).
|
6
6
|
|
7
7
|
## Guiding Principles
|
8
8
|
|
@@ -30,7 +30,9 @@ Some guiding principles Nokogiri tries to follow:
|
|
30
30
|
[![Appveyor CI](https://ci.appveyor.com/api/projects/status/xj2pqwvlxwuwgr06/branch/main?svg=true)](https://ci.appveyor.com/project/flavorjones/nokogiri/branch/main)
|
31
31
|
|
32
32
|
[![Gem Version](https://badge.fury.io/rb/nokogiri.svg)](https://rubygems.org/gems/nokogiri)
|
33
|
-
[![SemVer compatibility](https://
|
33
|
+
[![SemVer compatibility](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&previous-version=1.11.7&new-version=1.12.5)](https://docs.github.com/en/code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/about-dependabot-security-updates#about-compatibility-scores)
|
34
|
+
|
35
|
+
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5344/badge)](https://bestpractices.coreinfrastructure.org/projects/5344)
|
34
36
|
[![Tidelift dependencies](https://tidelift.com/badges/package/rubygems/nokogiri)](https://tidelift.com/subscription/pkg/rubygems-nokogiri?utm_source=rubygems-nokogiri&utm_medium=referral&utm_campaign=readme)
|
35
37
|
|
36
38
|
|
@@ -78,7 +80,7 @@ Full information and description of our security policy is in [`SECURITY.md`](SE
|
|
78
80
|
|
79
81
|
### Semantic Versioning Policy
|
80
82
|
|
81
|
-
Nokogiri follows [Semantic Versioning](https://semver.org/) (since 2017 or so). [![Dependabot's SemVer compatibility score for Nokogiri](https://
|
83
|
+
Nokogiri follows [Semantic Versioning](https://semver.org/) (since 2017 or so). [![Dependabot's SemVer compatibility score for Nokogiri](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&previous-version=1.11.7&new-version=1.12.5)](https://docs.github.com/en/code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/about-dependabot-security-updates#about-compatibility-scores)
|
82
84
|
|
83
85
|
We bump `Major.Minor.Patch` versions following this guidance:
|
84
86
|
|
@@ -105,8 +107,8 @@ We bump `Major.Minor.Patch` versions following this guidance:
|
|
105
107
|
|
106
108
|
Requirements:
|
107
109
|
|
108
|
-
- Ruby >= 2.
|
109
|
-
- JRuby >= 9.
|
110
|
+
- Ruby >= 2.6
|
111
|
+
- JRuby >= 9.3.0.0
|
110
112
|
|
111
113
|
|
112
114
|
### Native Gems: Faster, more reliable installation
|
@@ -115,12 +117,12 @@ Requirements:
|
|
115
117
|
|
116
118
|
### Supported Platforms
|
117
119
|
|
118
|
-
|
120
|
+
Nokogiri ships pre-compiled, "native" gems for the following platforms:
|
119
121
|
|
120
122
|
- Linux: `x86-linux` and `x86_64-linux` (req: `glibc >= 2.17`), including musl platforms like Alpine
|
121
123
|
- Darwin/MacOS: `x86_64-darwin` and `arm64-darwin`
|
122
124
|
- Windows: `x86-mingw32` and `x64-mingw32`
|
123
|
-
- Java: any platform running JRuby 9.
|
125
|
+
- Java: any platform running JRuby 9.3 or higher
|
124
126
|
|
125
127
|
To determine whether your system supports one of these gems, look at the output of `bundle platform` or `ruby -e 'puts Gem::Platform.local.to_s'`.
|
126
128
|
|
data/bin/nokogiri
CHANGED
@@ -1,61 +1,77 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "optparse"
|
5
|
+
require "open-uri"
|
6
|
+
require "uri"
|
7
|
+
require "rubygems"
|
8
|
+
require "nokogiri"
|
9
|
+
autoload :IRB, "irb"
|
8
10
|
|
9
11
|
parse_class = Nokogiri
|
10
12
|
encoding = nil
|
11
13
|
|
12
14
|
# This module provides some tunables with the nokogiri CLI for use in
|
13
15
|
# your ~/.nokogirirc.
|
14
|
-
module Nokogiri
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
16
|
+
module Nokogiri
|
17
|
+
module CLI
|
18
|
+
class << self
|
19
|
+
# Specify the console engine, defaulted to IRB.
|
20
|
+
#
|
21
|
+
# call-seq:
|
22
|
+
# require 'pry'
|
23
|
+
# Nokogiri::CLI.console = Pry
|
24
|
+
attr_writer :console
|
25
|
+
|
26
|
+
def console
|
27
|
+
case @console
|
28
|
+
when Symbol
|
29
|
+
Kernel.const_get(@console)
|
30
|
+
else
|
31
|
+
@console
|
32
|
+
end
|
29
33
|
end
|
34
|
+
|
35
|
+
attr_accessor :rcfile
|
30
36
|
end
|
31
37
|
|
32
|
-
|
38
|
+
self.rcfile = File.expand_path("~/.nokogirirc")
|
39
|
+
self.console = :IRB
|
33
40
|
end
|
41
|
+
end
|
34
42
|
|
35
|
-
|
36
|
-
|
43
|
+
def safe_read(uri_or_path)
|
44
|
+
uri = URI.parse(uri_or_path)
|
45
|
+
case uri
|
46
|
+
when URI::HTTP
|
47
|
+
uri.read
|
48
|
+
when URI::File
|
49
|
+
File.read(uri.path)
|
50
|
+
else
|
51
|
+
File.read(uri_or_path)
|
52
|
+
end
|
37
53
|
end
|
38
54
|
|
39
55
|
opts = OptionParser.new do |opts|
|
40
56
|
opts.banner = "Nokogiri: an HTML, XML, SAX, and Reader parser"
|
41
|
-
opts.define_head
|
42
|
-
opts.separator
|
43
|
-
opts.separator
|
44
|
-
opts.separator
|
45
|
-
opts.separator
|
46
|
-
opts.separator
|
47
|
-
opts.separator
|
48
|
-
opts.separator
|
57
|
+
opts.define_head("Usage: nokogiri <uri|path> [options]")
|
58
|
+
opts.separator("")
|
59
|
+
opts.separator("Examples:")
|
60
|
+
opts.separator(" nokogiri https://www.ruby-lang.org/")
|
61
|
+
opts.separator(" nokogiri ./public/index.html")
|
62
|
+
opts.separator(" curl -s http://www.nokogiri.org | nokogiri -e'p $_.css(\"h1\").length'")
|
63
|
+
opts.separator("")
|
64
|
+
opts.separator("Options:")
|
49
65
|
|
50
66
|
opts.on("--type type", "Parse as type: xml or html (default: auto)", [:xml, :html]) do |v|
|
51
|
-
parse_class = {:
|
67
|
+
parse_class = { xml: Nokogiri::XML, html: Nokogiri::HTML }[v]
|
52
68
|
end
|
53
69
|
|
54
70
|
opts.on("-C file", "Specifies initialization file to load (default #{Nokogiri::CLI.rcfile})") do |v|
|
55
71
|
Nokogiri::CLI.rcfile = v
|
56
72
|
end
|
57
73
|
|
58
|
-
opts.on("-E", "--encoding encoding", "Read as encoding (default: #{encoding ||
|
74
|
+
opts.on("-E", "--encoding encoding", "Read as encoding (default: #{encoding || "none"})") do |v|
|
59
75
|
encoding = v
|
60
76
|
end
|
61
77
|
|
@@ -64,7 +80,7 @@ opts = OptionParser.new do |opts|
|
|
64
80
|
end
|
65
81
|
|
66
82
|
opts.on("--rng <uri|path>", "Validate using this rng file.") do |v|
|
67
|
-
@rng =
|
83
|
+
@rng = Nokogiri::XML::RelaxNG(safe_read(v))
|
68
84
|
end
|
69
85
|
|
70
86
|
opts.on_tail("-?", "--help", "Show this message") do
|
@@ -90,15 +106,10 @@ if File.file?(Nokogiri::CLI.rcfile)
|
|
90
106
|
load Nokogiri::CLI.rcfile
|
91
107
|
end
|
92
108
|
|
93
|
-
if url || $stdin.tty?
|
94
|
-
|
95
|
-
when URI::HTTP
|
96
|
-
@doc = parse_class.parse(uri.read, url, encoding)
|
97
|
-
else
|
98
|
-
@doc = parse_class.parse(open(url).read, nil, encoding)
|
99
|
-
end
|
109
|
+
@doc = if url || $stdin.tty?
|
110
|
+
parse_class.parse(safe_read(url), url, encoding)
|
100
111
|
else
|
101
|
-
|
112
|
+
parse_class.parse($stdin, nil, encoding)
|
102
113
|
end
|
103
114
|
|
104
115
|
$_ = @doc
|
@@ -107,12 +118,14 @@ if @rng
|
|
107
118
|
@rng.validate(@doc).each do |error|
|
108
119
|
puts error.message
|
109
120
|
end
|
110
|
-
|
111
|
-
|
112
|
-
eval
|
113
|
-
|
114
|
-
|
115
|
-
|
121
|
+
elsif @script
|
122
|
+
begin
|
123
|
+
eval(@script, binding, "<main>") # rubocop:disable Security/Eval
|
124
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
125
|
+
warn("ERROR: Exception raised while evaluating '#{@script}'")
|
126
|
+
raise e
|
116
127
|
end
|
128
|
+
else
|
129
|
+
puts "Your document is stored in @doc..."
|
130
|
+
Nokogiri::CLI.console.start
|
117
131
|
end
|
118
|
-
|
data/dependencies.yml
CHANGED
@@ -64,11 +64,10 @@ zlib:
|
|
64
64
|
# SHA-256 hash provided on http://zlib.net/
|
65
65
|
|
66
66
|
libiconv:
|
67
|
-
version: "1.
|
68
|
-
sha256: "
|
69
|
-
# gpg: Signature made Fri
|
67
|
+
version: "1.16"
|
68
|
+
sha256: "e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04"
|
69
|
+
# gpg: Signature made Fri 26 Apr 2019 03:36:38 PM EDT
|
70
70
|
# gpg: using RSA key 4F494A942E4616C2
|
71
|
-
# gpg: Good signature from "Bruno Haible (Open Source Development) <bruno@clisp.org>" [
|
72
|
-
# gpg:
|
73
|
-
# gpg: There is no indication that the signature belongs to the owner.
|
71
|
+
# gpg: Good signature from "Bruno Haible (Open Source Development) <bruno@clisp.org>" [expired]
|
72
|
+
# gpg: Note: This key has expired!
|
74
73
|
# Primary key fingerprint: 68D9 4D8A AEEA D48A E7DC 5B90 4F49 4A94 2E46 16C2
|
data/ext/nokogiri/extconf.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
|
+
# rubocop:disable Style/GlobalVars
|
4
|
+
|
5
|
+
ENV["RC_ARCHS"] = "" if RUBY_PLATFORM.include?("darwin")
|
3
6
|
|
4
7
|
require "mkmf"
|
5
8
|
require "rbconfig"
|
@@ -12,16 +15,14 @@ PACKAGE_ROOT_DIR = File.expand_path(File.join(File.dirname(__FILE__), "..", ".."
|
|
12
15
|
REQUIRED_LIBXML_VERSION = "2.6.21"
|
13
16
|
RECOMMENDED_LIBXML_VERSION = "2.9.3"
|
14
17
|
|
15
|
-
#
|
16
|
-
# Keep this version in sync with the one in the Rakefile !
|
17
|
-
REQUIRED_MINI_PORTILE_VERSION = "~> 2.6.1"
|
18
|
+
REQUIRED_MINI_PORTILE_VERSION = "~> 2.7.0" # keep this version in sync with the one in the gemspec
|
18
19
|
REQUIRED_PKG_CONFIG_VERSION = "~> 1.1"
|
19
20
|
|
20
21
|
# Keep track of what versions of what libraries we build against
|
21
22
|
OTHER_LIBRARY_VERSIONS = {}
|
22
23
|
|
23
24
|
NOKOGIRI_HELP_MESSAGE = <<~HELP
|
24
|
-
USAGE: ruby #{$
|
25
|
+
USAGE: ruby #{$PROGRAM_NAME} [options]
|
25
26
|
|
26
27
|
Flags that are always valid:
|
27
28
|
|
@@ -175,23 +176,23 @@ def config_system_libraries?
|
|
175
176
|
end
|
176
177
|
|
177
178
|
def windows?
|
178
|
-
RbConfig::CONFIG["target_os"]
|
179
|
+
RbConfig::CONFIG["target_os"].match?(/mingw|mswin/)
|
179
180
|
end
|
180
181
|
|
181
182
|
def solaris?
|
182
|
-
RbConfig::CONFIG["target_os"]
|
183
|
+
RbConfig::CONFIG["target_os"].include?("solaris")
|
183
184
|
end
|
184
185
|
|
185
186
|
def darwin?
|
186
|
-
RbConfig::CONFIG["target_os"]
|
187
|
+
RbConfig::CONFIG["target_os"].include?("darwin")
|
187
188
|
end
|
188
189
|
|
189
190
|
def openbsd?
|
190
|
-
RbConfig::CONFIG["target_os"]
|
191
|
+
RbConfig::CONFIG["target_os"].include?("openbsd")
|
191
192
|
end
|
192
193
|
|
193
194
|
def aix?
|
194
|
-
RbConfig::CONFIG["target_os"]
|
195
|
+
RbConfig::CONFIG["target_os"].include?("aix")
|
195
196
|
end
|
196
197
|
|
197
198
|
def nix?
|
@@ -284,17 +285,16 @@ ensure
|
|
284
285
|
end
|
285
286
|
|
286
287
|
def abort_could_not_find_library(lib)
|
287
|
-
|
288
|
+
callers = caller(1..2).join("\n")
|
289
|
+
abort("-----\n#{callers}\n#{lib} is missing. Please locate mkmf.log to investigate how it is failing.\n-----")
|
288
290
|
end
|
289
291
|
|
290
|
-
def chdir_for_build
|
292
|
+
def chdir_for_build(&block)
|
291
293
|
# When using rake-compiler-dock on Windows, the underlying Virtualbox shared
|
292
294
|
# folders don't support symlinks, but libiconv expects it for a build on
|
293
295
|
# Linux. We work around this limitation by using the temp dir for cooking.
|
294
|
-
build_dir = ENV["RCD_HOST_RUBY_PLATFORM"].to_s
|
295
|
-
Dir.chdir(build_dir)
|
296
|
-
yield
|
297
|
-
end
|
296
|
+
build_dir = /mingw|mswin|cygwin/.match?(ENV["RCD_HOST_RUBY_PLATFORM"].to_s) ? "/tmp" : "."
|
297
|
+
Dir.chdir(build_dir, &block)
|
298
298
|
end
|
299
299
|
|
300
300
|
def sh_export_path(path)
|
@@ -402,9 +402,9 @@ def iconv_configure_flags
|
|
402
402
|
abort_could_not_find_library("libiconv")
|
403
403
|
end
|
404
404
|
|
405
|
-
def process_recipe(name, version, static_p, cross_p, cacheable_p=true)
|
405
|
+
def process_recipe(name, version, static_p, cross_p, cacheable_p = true)
|
406
406
|
require "rubygems"
|
407
|
-
gem("mini_portile2", REQUIRED_MINI_PORTILE_VERSION)
|
407
|
+
gem("mini_portile2", REQUIRED_MINI_PORTILE_VERSION) # gemspec is not respected at install time
|
408
408
|
require "mini_portile2"
|
409
409
|
message("Using mini_portile version #{MiniPortile::VERSION}\n")
|
410
410
|
|
@@ -413,9 +413,13 @@ def process_recipe(name, version, static_p, cross_p, cacheable_p=true)
|
|
413
413
|
end
|
414
414
|
|
415
415
|
MiniPortile.new(name, version).tap do |recipe|
|
416
|
+
def recipe.port_path
|
417
|
+
"#{@target}/#{RUBY_PLATFORM}/#{@name}/#{@version}"
|
418
|
+
end
|
419
|
+
|
416
420
|
recipe.target = File.join(PACKAGE_ROOT_DIR, "ports") if cacheable_p
|
417
|
-
# Prefer host_alias over host in order to use
|
418
|
-
#
|
421
|
+
# Prefer host_alias over host in order to use the correct compiler prefix for cross build, but
|
422
|
+
# use host if not set.
|
419
423
|
recipe.host = RbConfig::CONFIG["host_alias"].empty? ? RbConfig::CONFIG["host"] : RbConfig::CONFIG["host_alias"]
|
420
424
|
recipe.configure_options << "--libdir=#{File.join(recipe.path, "lib")}"
|
421
425
|
|
@@ -462,7 +466,7 @@ def process_recipe(name, version, static_p, cross_p, cacheable_p=true)
|
|
462
466
|
end
|
463
467
|
|
464
468
|
if RbConfig::CONFIG["target_cpu"] == "universal"
|
465
|
-
|
469
|
+
["CFLAGS", "LDFLAGS"].each do |key|
|
466
470
|
unless env[key].include?("-arch")
|
467
471
|
env[key] = concat_flags(env[key], RbConfig::CONFIG["ARCH_FLAG"])
|
468
472
|
end
|
@@ -473,7 +477,7 @@ def process_recipe(name, version, static_p, cross_p, cacheable_p=true)
|
|
473
477
|
"#{key}=#{value.strip}"
|
474
478
|
end
|
475
479
|
|
476
|
-
checkpoint = "#{recipe.target}/#{recipe.name}-#{recipe.version}-#{
|
480
|
+
checkpoint = "#{recipe.target}/#{recipe.name}-#{recipe.version}-#{RUBY_PLATFORM}.installed"
|
477
481
|
if File.exist?(checkpoint) && !recipe.source_directory
|
478
482
|
message("Building Nokogiri with a packaged version of #{name}-#{version}.\n")
|
479
483
|
else
|
@@ -487,7 +491,7 @@ def process_recipe(name, version, static_p, cross_p, cacheable_p=true)
|
|
487
491
|
message("The following patches are being applied:\n")
|
488
492
|
|
489
493
|
recipe.patch_files.each do |patch|
|
490
|
-
message(" - %s\n"
|
494
|
+
message(format(" - %s\n", File.basename(patch)))
|
491
495
|
end
|
492
496
|
end
|
493
497
|
|
@@ -656,7 +660,7 @@ else
|
|
656
660
|
if cross_build_p || windows?
|
657
661
|
zlib_recipe = process_recipe("zlib", dependencies["zlib"]["version"], static_p, cross_build_p) do |recipe|
|
658
662
|
recipe.files = [{
|
659
|
-
url: "
|
663
|
+
url: "https://zlib.net/fossils/#{recipe.name}-#{recipe.version}.tar.gz",
|
660
664
|
sha256: dependencies["zlib"]["sha256"],
|
661
665
|
}]
|
662
666
|
if windows?
|
@@ -700,7 +704,7 @@ else
|
|
700
704
|
end
|
701
705
|
|
702
706
|
def compile
|
703
|
-
if
|
707
|
+
if /darwin/.match?(host)
|
704
708
|
execute("compile", "make AR=#{host}-libtool")
|
705
709
|
else
|
706
710
|
super
|
@@ -714,10 +718,13 @@ else
|
|
714
718
|
libiconv_recipe = process_recipe("libiconv", dependencies["libiconv"]["version"], static_p,
|
715
719
|
cross_build_p) do |recipe|
|
716
720
|
recipe.files = [{
|
717
|
-
url: "
|
721
|
+
url: "https://ftp.gnu.org/pub/gnu/libiconv/#{recipe.name}-#{recipe.version}.tar.gz",
|
718
722
|
sha256: dependencies["libiconv"]["sha256"],
|
719
723
|
}]
|
720
724
|
|
725
|
+
# The libiconv configure script doesn't accept "arm64" host string but "aarch64"
|
726
|
+
recipe.host = recipe.host.gsub("arm64-apple-darwin", "aarch64-apple-darwin")
|
727
|
+
|
721
728
|
cflags = concat_flags(ENV["CFLAGS"], "-O2", "-U_FORTIFY_SOURCE", "-g")
|
722
729
|
|
723
730
|
recipe.configure_options += [
|
@@ -741,12 +748,21 @@ else
|
|
741
748
|
Tools" to open the developer site, download the installer for your OS
|
742
749
|
version and run it.
|
743
750
|
-----
|
744
|
-
|
751
|
+
EOM
|
745
752
|
end
|
746
753
|
|
747
|
-
|
748
|
-
|
749
|
-
|
754
|
+
if zlib_recipe
|
755
|
+
append_cppflags("-I#{zlib_recipe.path}/include")
|
756
|
+
$LIBPATH = ["#{zlib_recipe.path}/lib"] | $LIBPATH
|
757
|
+
ensure_package_configuration(opt: "zlib", pc: "zlib", lib: "z",
|
758
|
+
headers: "zlib.h", func: "gzdopen")
|
759
|
+
end
|
760
|
+
|
761
|
+
if libiconv_recipe
|
762
|
+
append_cppflags("-I#{libiconv_recipe.path}/include")
|
763
|
+
$LIBPATH = ["#{libiconv_recipe.path}/lib"] | $LIBPATH
|
764
|
+
ensure_package_configuration(opt: "iconv", pc: "iconv", lib: "iconv",
|
765
|
+
headers: "iconv.h", func: "iconv_open")
|
750
766
|
end
|
751
767
|
|
752
768
|
libxml2_recipe = process_recipe("libxml2", dependencies["libxml2"]["version"], static_p, cross_build_p) do |recipe|
|
@@ -765,7 +781,6 @@ else
|
|
765
781
|
|
766
782
|
if zlib_recipe
|
767
783
|
recipe.configure_options << "--with-zlib=#{zlib_recipe.path}"
|
768
|
-
cflags = concat_flags(cflags, "-I#{zlib_recipe.path}/include")
|
769
784
|
end
|
770
785
|
|
771
786
|
if libiconv_recipe
|
@@ -834,9 +849,6 @@ else
|
|
834
849
|
append_cppflags("-DNOKOGIRI_PACKAGED_LIBRARIES")
|
835
850
|
append_cppflags("-DNOKOGIRI_PRECOMPILED_LIBRARIES") if cross_build_p
|
836
851
|
|
837
|
-
$LIBPATH = ["#{zlib_recipe.path}/lib"] | $LIBPATH if zlib_recipe
|
838
|
-
$LIBPATH = ["#{libiconv_recipe.path}/lib"] | $LIBPATH if libiconv_recipe
|
839
|
-
|
840
852
|
$libs = $libs.shellsplit.tap do |libs|
|
841
853
|
[libxml2_recipe, libxslt_recipe].each do |recipe|
|
842
854
|
libname = recipe.name[/\Alib(.+)\z/, 1]
|
@@ -929,7 +941,7 @@ libgumbo_recipe = process_recipe("libgumbo", "1.0.0-nokogiri", static_p, cross_b
|
|
929
941
|
|
930
942
|
env = { "CC" => gcc_cmd, "CFLAGS" => cflags }
|
931
943
|
if config_cross_build?
|
932
|
-
if
|
944
|
+
if /darwin/.match?(host)
|
933
945
|
env["AR"] = "#{host}-libtool"
|
934
946
|
env["ARFLAGS"] = "-o"
|
935
947
|
else
|
data/ext/nokogiri/xml_document.c
CHANGED
@@ -533,59 +533,59 @@ block_caller(void *ctx, xmlNodePtr c_node, xmlNodePtr c_parent_node)
|
|
533
533
|
static VALUE
|
534
534
|
rb_xml_document_canonicalize(int argc, VALUE *argv, VALUE self)
|
535
535
|
{
|
536
|
-
VALUE
|
537
|
-
VALUE
|
538
|
-
VALUE
|
539
|
-
xmlChar **
|
540
|
-
long ns_len, i;
|
536
|
+
VALUE rb_mode;
|
537
|
+
VALUE rb_namespaces;
|
538
|
+
VALUE rb_comments_p;
|
539
|
+
xmlChar **c_namespaces;
|
541
540
|
|
542
|
-
xmlDocPtr
|
543
|
-
xmlOutputBufferPtr
|
544
|
-
xmlC14NIsVisibleCallback
|
545
|
-
void *
|
541
|
+
xmlDocPtr c_doc;
|
542
|
+
xmlOutputBufferPtr c_obuf;
|
543
|
+
xmlC14NIsVisibleCallback c_callback_wrapper = NULL;
|
544
|
+
void *rb_callback = NULL;
|
546
545
|
|
547
546
|
VALUE rb_cStringIO;
|
548
|
-
VALUE
|
547
|
+
VALUE rb_io;
|
549
548
|
|
550
|
-
rb_scan_args(argc, argv, "03", &
|
549
|
+
rb_scan_args(argc, argv, "03", &rb_mode, &rb_namespaces, &rb_comments_p);
|
550
|
+
if (!NIL_P(rb_mode)) { Check_Type(rb_mode, T_FIXNUM); }
|
551
|
+
if (!NIL_P(rb_namespaces)) { Check_Type(rb_namespaces, T_ARRAY); }
|
551
552
|
|
552
|
-
Data_Get_Struct(self, xmlDoc,
|
553
|
+
Data_Get_Struct(self, xmlDoc, c_doc);
|
553
554
|
|
554
555
|
rb_cStringIO = rb_const_get_at(rb_cObject, rb_intern("StringIO"));
|
555
|
-
|
556
|
-
|
556
|
+
rb_io = rb_class_new_instance(0, 0, rb_cStringIO);
|
557
|
+
c_obuf = xmlAllocOutputBuffer(NULL);
|
557
558
|
|
558
|
-
|
559
|
-
|
560
|
-
|
559
|
+
c_obuf->writecallback = (xmlOutputWriteCallback)noko_io_write;
|
560
|
+
c_obuf->closecallback = (xmlOutputCloseCallback)noko_io_close;
|
561
|
+
c_obuf->context = (void *)rb_io;
|
561
562
|
|
562
563
|
if (rb_block_given_p()) {
|
563
|
-
|
564
|
-
|
564
|
+
c_callback_wrapper = block_caller;
|
565
|
+
rb_callback = (void *)rb_block_proc();
|
565
566
|
}
|
566
567
|
|
567
|
-
if (NIL_P(
|
568
|
-
|
568
|
+
if (NIL_P(rb_namespaces)) {
|
569
|
+
c_namespaces = NULL;
|
569
570
|
} else {
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
ns[i] = (xmlChar *)StringValueCStr(entry);
|
571
|
+
long ns_len = RARRAY_LEN(rb_namespaces);
|
572
|
+
c_namespaces = calloc((size_t)ns_len + 1, sizeof(xmlChar *));
|
573
|
+
for (int j = 0 ; j < ns_len ; j++) {
|
574
|
+
VALUE entry = rb_ary_entry(rb_namespaces, j);
|
575
|
+
c_namespaces[j] = (xmlChar *)StringValueCStr(entry);
|
576
576
|
}
|
577
577
|
}
|
578
578
|
|
579
|
+
xmlC14NExecute(c_doc, c_callback_wrapper, rb_callback,
|
580
|
+
(int)(NIL_P(rb_mode) ? 0 : NUM2INT(rb_mode)),
|
581
|
+
c_namespaces,
|
582
|
+
(int)RTEST(rb_comments_p),
|
583
|
+
c_obuf);
|
579
584
|
|
580
|
-
|
581
|
-
|
582
|
-
ns,
|
583
|
-
(int) RTEST(with_comments),
|
584
|
-
buf);
|
585
|
-
|
586
|
-
xmlOutputBufferClose(buf);
|
585
|
+
free(c_namespaces);
|
586
|
+
xmlOutputBufferClose(c_obuf);
|
587
587
|
|
588
|
-
return rb_funcall(
|
588
|
+
return rb_funcall(rb_io, rb_intern("string"), 0);
|
589
589
|
}
|
590
590
|
|
591
591
|
VALUE
|
data/ext/nokogiri/xml_dtd.c
CHANGED
@@ -57,9 +57,9 @@ entities(VALUE self)
|
|
57
57
|
|
58
58
|
/*
|
59
59
|
* call-seq:
|
60
|
-
* notations
|
60
|
+
* notations() → Hash<name(String)⇒Notation>
|
61
61
|
*
|
62
|
-
*
|
62
|
+
* [Returns] All the notations for this DTD in a Hash of Notation +name+ to Notation.
|
63
63
|
*/
|
64
64
|
static VALUE
|
65
65
|
notations(VALUE self)
|