nokogiri 1.12.4-java → 1.13.2-java

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.

Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/README.md +9 -7
  4. data/bin/nokogiri +63 -50
  5. data/dependencies.yml +11 -62
  6. data/ext/java/nokogiri/Html4SaxPushParser.java +14 -19
  7. data/ext/java/nokogiri/XmlDocumentFragment.java +4 -3
  8. data/ext/java/nokogiri/XmlNamespace.java +0 -8
  9. data/ext/java/nokogiri/XmlNode.java +23 -2
  10. data/ext/java/nokogiri/XmlNodeSet.java +0 -4
  11. data/ext/java/nokogiri/XmlReader.java +12 -0
  12. data/ext/java/nokogiri/XmlSaxParserContext.java +31 -93
  13. data/ext/java/nokogiri/XmlSaxPushParser.java +17 -25
  14. data/ext/java/nokogiri/internals/NokogiriEntityResolver.java +1 -1
  15. data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +29 -8
  16. data/ext/java/nokogiri/internals/NokogiriHandler.java +6 -24
  17. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +9 -8
  18. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +10 -9
  19. data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +7 -6
  20. data/ext/java/nokogiri/internals/SaveContextVisitor.java +2 -0
  21. data/ext/java/nokogiri/internals/XmlDomParserContext.java +16 -25
  22. data/ext/nokogiri/extconf.rb +64 -37
  23. data/ext/nokogiri/xml_document.c +35 -35
  24. data/ext/nokogiri/xml_document_fragment.c +0 -2
  25. data/ext/nokogiri/xml_dtd.c +2 -2
  26. data/ext/nokogiri/xml_encoding_handler.c +25 -11
  27. data/ext/nokogiri/xml_node.c +638 -333
  28. data/ext/nokogiri/xml_reader.c +37 -11
  29. data/ext/nokogiri/xml_xpath_context.c +72 -49
  30. data/ext/nokogiri/xslt_stylesheet.c +107 -9
  31. data/lib/nokogiri/class_resolver.rb +67 -0
  32. data/lib/nokogiri/css/node.rb +9 -8
  33. data/lib/nokogiri/css/parser.rb +360 -341
  34. data/lib/nokogiri/css/parser.y +249 -244
  35. data/lib/nokogiri/css/parser_extras.rb +20 -20
  36. data/lib/nokogiri/css/syntax_error.rb +1 -0
  37. data/lib/nokogiri/css/tokenizer.rb +4 -3
  38. data/lib/nokogiri/css/tokenizer.rex +3 -2
  39. data/lib/nokogiri/css/xpath_visitor.rb +179 -82
  40. data/lib/nokogiri/css.rb +38 -6
  41. data/lib/nokogiri/decorators/slop.rb +8 -7
  42. data/lib/nokogiri/extension.rb +1 -1
  43. data/lib/nokogiri/gumbo.rb +1 -0
  44. data/lib/nokogiri/html.rb +16 -10
  45. data/lib/nokogiri/html4/builder.rb +1 -0
  46. data/lib/nokogiri/html4/document.rb +84 -75
  47. data/lib/nokogiri/html4/document_fragment.rb +11 -7
  48. data/lib/nokogiri/html4/element_description.rb +1 -0
  49. data/lib/nokogiri/html4/element_description_defaults.rb +426 -520
  50. data/lib/nokogiri/html4/entity_lookup.rb +2 -1
  51. data/lib/nokogiri/html4/sax/parser.rb +2 -1
  52. data/lib/nokogiri/html4/sax/parser_context.rb +1 -0
  53. data/lib/nokogiri/html4/sax/push_parser.rb +7 -7
  54. data/lib/nokogiri/html4.rb +11 -5
  55. data/lib/nokogiri/html5/document.rb +24 -10
  56. data/lib/nokogiri/html5/document_fragment.rb +5 -2
  57. data/lib/nokogiri/html5/node.rb +6 -3
  58. data/lib/nokogiri/html5.rb +68 -64
  59. data/lib/nokogiri/jruby/dependencies.rb +10 -9
  60. data/lib/nokogiri/nokogiri.jar +0 -0
  61. data/lib/nokogiri/syntax_error.rb +1 -0
  62. data/lib/nokogiri/version/constant.rb +2 -1
  63. data/lib/nokogiri/version/info.rb +19 -13
  64. data/lib/nokogiri/version.rb +1 -0
  65. data/lib/nokogiri/xml/attr.rb +5 -3
  66. data/lib/nokogiri/xml/attribute_decl.rb +2 -1
  67. data/lib/nokogiri/xml/builder.rb +32 -32
  68. data/lib/nokogiri/xml/cdata.rb +2 -1
  69. data/lib/nokogiri/xml/character_data.rb +1 -0
  70. data/lib/nokogiri/xml/document.rb +139 -103
  71. data/lib/nokogiri/xml/document_fragment.rb +41 -38
  72. data/lib/nokogiri/xml/dtd.rb +3 -2
  73. data/lib/nokogiri/xml/element_content.rb +1 -0
  74. data/lib/nokogiri/xml/element_decl.rb +2 -1
  75. data/lib/nokogiri/xml/entity_decl.rb +3 -2
  76. data/lib/nokogiri/xml/entity_reference.rb +1 -0
  77. data/lib/nokogiri/xml/namespace.rb +2 -0
  78. data/lib/nokogiri/xml/node/save_options.rb +7 -4
  79. data/lib/nokogiri/xml/node.rb +512 -348
  80. data/lib/nokogiri/xml/node_set.rb +46 -54
  81. data/lib/nokogiri/xml/notation.rb +12 -0
  82. data/lib/nokogiri/xml/parse_options.rb +11 -7
  83. data/lib/nokogiri/xml/pp/character_data.rb +8 -6
  84. data/lib/nokogiri/xml/pp/node.rb +24 -26
  85. data/lib/nokogiri/xml/pp.rb +1 -0
  86. data/lib/nokogiri/xml/processing_instruction.rb +2 -1
  87. data/lib/nokogiri/xml/reader.rb +17 -19
  88. data/lib/nokogiri/xml/relax_ng.rb +1 -0
  89. data/lib/nokogiri/xml/sax/document.rb +20 -19
  90. data/lib/nokogiri/xml/sax/parser.rb +36 -34
  91. data/lib/nokogiri/xml/sax/parser_context.rb +7 -3
  92. data/lib/nokogiri/xml/sax/push_parser.rb +5 -5
  93. data/lib/nokogiri/xml/sax.rb +1 -0
  94. data/lib/nokogiri/xml/schema.rb +7 -6
  95. data/lib/nokogiri/xml/searchable.rb +93 -62
  96. data/lib/nokogiri/xml/syntax_error.rb +4 -4
  97. data/lib/nokogiri/xml/text.rb +1 -0
  98. data/lib/nokogiri/xml/xpath/syntax_error.rb +2 -1
  99. data/lib/nokogiri/xml/xpath.rb +12 -0
  100. data/lib/nokogiri/xml/xpath_context.rb +2 -3
  101. data/lib/nokogiri/xml.rb +3 -3
  102. data/lib/nokogiri/xslt/stylesheet.rb +1 -0
  103. data/lib/nokogiri/xslt.rb +21 -13
  104. data/lib/nokogiri.rb +19 -16
  105. data/lib/xsd/xmlparser/nokogiri.rb +25 -24
  106. metadata +102 -30
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7622742928c0922dc547c7dae9e890589b08828654bbead397c7970ceb084c78
4
- data.tar.gz: 903b5117d4674e82ccb44a767ff11d4abcb04015cecdecceebc334e3bd8c49be
3
+ metadata.gz: 388536935155bd0dd3f6a365c7bf4c0d37bac048421eb7a337abf3e0a9c7c232
4
+ data.tar.gz: 5b69a9b5096f0cc34da36e1797442e55db6db24ba9dff7fd0b183550af89af7c
5
5
  SHA512:
6
- metadata.gz: cacd709443f6da7d40dc5fe4810345e63ede7ff37f5a36196c2b934523cb8eb589eec07c07ac5c542e7047f1ec0a9804ad265e490759d58f4506d086a490ca9f
7
- data.tar.gz: 9457959a40c7e1474a75fd618a25029c407ef88b32a77a9521f7665184f61c835859c201ce664c82c38b39185ef9dc682d991cdc0ae648fbbfbb9bca138815e9
6
+ metadata.gz: d754a68385de24737f08e27bbabfecb2d190c952c5b54232897b5d2c0448237f78b49755ff86e7b21bb73e619c80c04e09444a0f319fe9f899aef6834fa984e9
7
+ data.tar.gz: 97cc334429dc36e3aee37feb17dd0a52c5f1b17e9694c7c94abb09295ef5aafa8fb582f70e234f0b3fee50dcadae2d685266093823ebad01e2c197b9d1f1e1d5
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  gemspec
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 (C) and xerces (Java).
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://api.dependabot.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&version-scheme=semver)](https://dependabot.com/compatibility-score/?dependency-name=nokogiri&package-manager=bundler)
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://api.dependabot.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&version-scheme=semver)](https://dependabot.com/compatibility-score/?dependency-name=nokogiri&package-manager=bundler)
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.5
109
- - JRuby >= 9.2.0.0
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
- As of v1.11.0, Nokogiri ships pre-compiled, "native" gems for the following platforms:
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.2 or higher
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
- require 'optparse'
3
- require 'open-uri'
4
- require 'uri'
5
- require 'rubygems'
6
- require 'nokogiri'
7
- autoload :IRB, 'irb'
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::CLI
15
- class << self
16
- # Specify the console engine, defaulted to IRB.
17
- #
18
- # call-seq:
19
- # require 'pry'
20
- # Nokogiri::CLI.console = Pry
21
- attr_writer :console
22
-
23
- def console
24
- case @console
25
- when Symbol
26
- Kernel.const_get(@console)
27
- else
28
- @console
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
- attr_accessor :rcfile
38
+ self.rcfile = File.expand_path("~/.nokogirirc")
39
+ self.console = :IRB
33
40
  end
41
+ end
34
42
 
35
- self.rcfile = File.expand_path('~/.nokogirirc')
36
- self.console = :IRB
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 "Usage: nokogiri <uri|path> [options]"
42
- opts.separator ""
43
- opts.separator "Examples:"
44
- opts.separator " nokogiri https://www.ruby-lang.org/"
45
- opts.separator " nokogiri ./public/index.html"
46
- opts.separator " curl -s http://www.nokogiri.org | nokogiri -e'p $_.css(\"h1\").length'"
47
- opts.separator ""
48
- opts.separator "Options:"
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 = {:xml => Nokogiri::XML, :html => Nokogiri::HTML}[v]
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 || 'none'})") do |v|
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 = open(v) {|f| Nokogiri::XML::RelaxNG(f)}
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
- case uri = (URI(url) rescue url)
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
- @doc = parse_class.parse($stdin, nil, encoding)
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
- else
111
- if @script
112
- eval @script, binding, '<main>'
113
- else
114
- puts "Your document is stored in @doc..."
115
- Nokogiri::CLI.console.start
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
@@ -1,62 +1,12 @@
1
1
  libxml2:
2
- version: "2.9.12"
3
- sha256: "c8d6681e38c56f172892c85ddc0852e1fd4b53b4209e7f4ebf17f7e2eae71d92"
4
- # manually verified checksum:
5
- #
6
- # $ gpg --verify libxml2-2.9.12.tar.gz.asc ports/archives/libxml2-2.9.12.tar.gz
7
- # gpg: Signature made Thu 13 May 2021 02:59:16 PM EDT
8
- # gpg: using RSA key DB46681BB91ADCEA170FA2D415588B26596BEA5D
9
- # gpg: Good signature from "Daniel Veillard (Red Hat work email) <veillard@redhat.com>" [unknown]
10
- # gpg: aka "Daniel Veillard <Daniel.Veillard@w3.org>" [unknown]
11
- # gpg: WARNING: This key is not certified with a trusted signature!
12
- # gpg: There is no indication that the signature belongs to the owner.
13
- # Primary key fingerprint: C744 15BA 7C9C 7F78 F02E 1DC3 4606 B8A5 DE95 BC1F
14
- # Subkey fingerprint: DB46 681B B91A DCEA 170F A2D4 1558 8B26 596B EA5D
15
- #
16
- # using this pgp signature:
17
- #
18
- # -----BEGIN PGP SIGNATURE-----
19
- #
20
- # iQEzBAABCAAdFiEE20ZoG7ka3OoXD6LUFViLJllr6l0FAmCddwQACgkQFViLJllr
21
- # 6l11LQgAioRTdfmcC+uK/7+6HPtF/3c5zkX6j8VGYuvFBwZ0jayqMRBAl++fcpjE
22
- # JUU/JKebSZ/KCYjzyeOWK/i3Gq77iqm3UbZFB85rqu4a5P3gmj/4STWVyAx0KU3z
23
- # G3jKqDhJOt7c0acXb5lh2DngfDa1dn/VGcQcIXsqplNxNr4ET7MnSJjZ3nlxYfW2
24
- # E5vWBdPCMUeXDBl6MjYvw9XnGGBLUAaEJWoFToG6jKmVf4GAd9nza20jj5dtbcJq
25
- # QEOaSDKDr+f9h2NS8haOhJ9vOpy52PdeGzaFlbRkXarGXuAr8kITgATVs8FAqcgv
26
- # MoVhmrO5r2hJf0dCM9fZoYqzpMfmNA==
27
- # =KfJ9
28
- # -----END PGP SIGNATURE-----
29
- #
2
+ version: "2.9.13"
3
+ sha256: "276130602d12fe484ecc03447ee5e759d0465558fbc9d6bd144e3745306ebf0e"
4
+ # sha-256 hash provided in https://download.gnome.org/sources/libxml2/2.9/libxml2-2.9.13.sha256sum
30
5
 
31
6
  libxslt:
32
- version: "1.1.34"
33
- sha256: "98b1bd46d6792925ad2dfe9a87452ea2adebf69dcb9919ffd55bf926a7f93f7f"
34
- # manually verified checksum:
35
- #
36
- # $ gpg --verify ~/Downloads/libxslt-1.1.34.tar.gz.asc ports/archives/libxslt-1.1.34.tar.gz
37
- # gpg: Signature made Wed 30 Oct 2019 04:02:48 PM EDT
38
- # gpg: using RSA key DB46681BB91ADCEA170FA2D415588B26596BEA5D
39
- # gpg: Good signature from "Daniel Veillard (Red Hat work email) <veillard@redhat.com>" [unknown]
40
- # gpg: aka "Daniel Veillard <Daniel.Veillard@w3.org>" [unknown]
41
- # gpg: WARNING: This key is not certified with a trusted signature!
42
- # gpg: There is no indication that the signature belongs to the owner.
43
- # Primary key fingerprint: C744 15BA 7C9C 7F78 F02E 1DC3 4606 B8A5 DE95 BC1F
44
- # Subkey fingerprint: DB46 681B B91A DCEA 170F A2D4 1558 8B26 596B EA5D
45
- #
46
- # using this pgp signature:
47
- #
48
- # -----BEGIN PGP SIGNATURE-----
49
- #
50
- # iQEzBAABCAAdFiEE20ZoG7ka3OoXD6LUFViLJllr6l0FAl257GgACgkQFViLJllr
51
- # 6l2vVggAjJEHmASiS56SxhPOsGqbfBihM66gQFoIymQfMu2430N1GSTkLsfbkJO8
52
- # 8yBX11NjzK/m9uxwshMW3rVCU7EpL3PUimN3reXdPiQj9hAOAWF1V3BZNevbQC2E
53
- # FCIraioukaidf8sjUG4/sGpK/gOcP/3hYoN0HUoBigCNJjDqhijxM3M3GJJtCASp
54
- # jL4CQbs2OmxW8ixOZbuWEESvFFHUgYRsdZjRVN+GRfSOvJjxypurmYwQ3RjO7JxL
55
- # 2FY8qKQ+xpeID8NV8F5OUEvWBjk1QS133VTqBZNlONdnEtV/og6jNu5k0O/Kvhup
56
- # caR+8TMErOcLr9OgDklO6DoYyAsf9Q==
57
- # =g4i4
58
- # -----END PGP SIGNATURE-----
59
- #
7
+ version: "1.1.35"
8
+ sha256: "8247f33e9a872c6ac859aa45018bc4c4d00b97e2feac9eebc10c93ce1f34dd79"
9
+ # sha-256 hash provided in https://download.gnome.org/sources/libxslt/1.1/libxslt-1.1.35.sha256sum
60
10
 
61
11
  zlib:
62
12
  version: "1.2.11"
@@ -64,11 +14,10 @@ zlib:
64
14
  # SHA-256 hash provided on http://zlib.net/
65
15
 
66
16
  libiconv:
67
- version: "1.15"
68
- sha256: "ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178"
69
- # gpg: Signature made Fri Feb 3 00:38:12 2017 CET
17
+ version: "1.16"
18
+ sha256: "e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04"
19
+ # gpg: Signature made Fri 26 Apr 2019 03:36:38 PM EDT
70
20
  # gpg: using RSA key 4F494A942E4616C2
71
- # gpg: Good signature from "Bruno Haible (Open Source Development) <bruno@clisp.org>" [unknown]
72
- # gpg: WARNING: This key is not certified with a trusted signature!
73
- # gpg: There is no indication that the signature belongs to the owner.
21
+ # gpg: Good signature from "Bruno Haible (Open Source Development) <bruno@clisp.org>" [expired]
22
+ # gpg: Note: This key has expired!
74
23
  # Primary key fingerprint: 68D9 4D8A AEEA D48A E7DC 5B90 4F49 4A94 2E46 16C2
@@ -1,31 +1,26 @@
1
1
  package nokogiri;
2
2
 
3
- import static nokogiri.XmlSaxPushParser.terminateExecution;
4
- import static nokogiri.internals.NokogiriHelpers.getNokogiriClass;
5
- import static org.jruby.runtime.Helpers.invoke;
6
-
7
- import java.io.ByteArrayInputStream;
8
- import java.io.InputStream;
9
- import java.io.IOException;
10
- import java.util.concurrent.Callable;
11
- import java.util.concurrent.ExecutionException;
12
- import java.util.concurrent.ExecutorService;
13
- import java.util.concurrent.Executors;
14
- import java.util.concurrent.Future;
15
- import java.util.concurrent.FutureTask;
16
- import java.util.concurrent.ThreadFactory;
17
-
18
- import nokogiri.internals.*;
19
-
3
+ import nokogiri.internals.ClosedStreamException;
4
+ import nokogiri.internals.NokogiriBlockingQueueInputStream;
5
+ import nokogiri.internals.NokogiriHelpers;
6
+ import nokogiri.internals.ParserContext;
20
7
  import org.jruby.Ruby;
21
8
  import org.jruby.RubyClass;
22
9
  import org.jruby.RubyObject;
23
10
  import org.jruby.anno.JRubyClass;
24
11
  import org.jruby.anno.JRubyMethod;
25
- import org.jruby.exceptions.RaiseException;
26
12
  import org.jruby.runtime.ThreadContext;
27
13
  import org.jruby.runtime.builtin.IRubyObject;
28
14
 
15
+ import java.io.ByteArrayInputStream;
16
+ import java.io.IOException;
17
+ import java.io.InputStream;
18
+ import java.util.concurrent.*;
19
+
20
+ import static nokogiri.XmlSaxPushParser.terminateExecution;
21
+ import static nokogiri.internals.NokogiriHelpers.getNokogiriClass;
22
+ import static org.jruby.runtime.Helpers.invoke;
23
+
29
24
  /**
30
25
  * Class for Nokogiri::HTML4::SAX::PushParser
31
26
  *
@@ -134,7 +129,7 @@ public class Html4SaxPushParser extends RubyObject
134
129
 
135
130
  if (!options.recover && parserTask.getErrorCount() > errorCount0) {
136
131
  terminateTask(context.runtime);
137
- throw parserTask.getLastError();
132
+ throw parserTask.getLastError().toThrowable();
138
133
  }
139
134
 
140
135
  return this;
@@ -17,6 +17,7 @@ import org.jruby.RubyClass;
17
17
  import org.jruby.RubyString;
18
18
  import org.jruby.anno.JRubyClass;
19
19
  import org.jruby.anno.JRubyMethod;
20
+ import org.jruby.runtime.Block;
20
21
  import org.jruby.runtime.Helpers;
21
22
  import org.jruby.runtime.ThreadContext;
22
23
  import org.jruby.runtime.builtin.IRubyObject;
@@ -46,9 +47,9 @@ public class XmlDocumentFragment extends XmlNode
46
47
  super(ruby, klazz);
47
48
  }
48
49
 
49
- @JRubyMethod(name = "new", meta = true, required = 1, optional = 2)
50
+ @JRubyMethod(name = "new", meta = true, required = 1, optional = 3)
50
51
  public static IRubyObject
51
- rbNew(ThreadContext context, IRubyObject cls, IRubyObject[] args)
52
+ rbNew(ThreadContext context, IRubyObject cls, IRubyObject[] args, Block block)
52
53
  {
53
54
  if (args.length < 1) {
54
55
  throw context.runtime.newArgumentError(args.length, 1);
@@ -73,7 +74,7 @@ public class XmlDocumentFragment extends XmlNode
73
74
  fragment.setDocument(context, doc);
74
75
  fragment.setNode(context.runtime, doc.getDocument().createDocumentFragment());
75
76
 
76
- Helpers.invoke(context, fragment, "initialize", args);
77
+ Helpers.invoke(context, fragment, "initialize", args, block);
77
78
  return fragment;
78
79
  }
79
80
 
@@ -80,14 +80,6 @@ public class XmlNamespace extends RubyObject
80
80
  return href;
81
81
  }
82
82
 
83
- void
84
- deleteHref()
85
- {
86
- href = "http://www.w3.org/XML/1998/namespace";
87
- hrefRuby = null;
88
- attr.getOwnerElement().removeAttributeNode(attr);
89
- }
90
-
91
83
  public static XmlNamespace
92
84
  createFromAttr(Ruby runtime, Attr attr)
93
85
  {
@@ -36,6 +36,7 @@ import org.w3c.dom.NamedNodeMap;
36
36
  import org.w3c.dom.Node;
37
37
  import org.w3c.dom.NodeList;
38
38
  import org.w3c.dom.Text;
39
+ import org.w3c.dom.Comment;
39
40
 
40
41
  import nokogiri.internals.HtmlDomParserContext;
41
42
  import nokogiri.internals.NokogiriHelpers;
@@ -304,6 +305,14 @@ public class XmlNode extends RubyObject
304
305
  IRubyObject name = args[0];
305
306
  IRubyObject doc = args[1];
306
307
 
308
+ if (!(doc instanceof XmlNode)) {
309
+ throw context.runtime.newArgumentError("document must be a Nokogiri::XML::Node");
310
+ }
311
+ if (!(doc instanceof XmlDocument)) {
312
+ // TODO: deprecate allowing Node
313
+ context.runtime.getWarnings().warn("Passing a Node as the second parameter to Node.new is deprecated. Please pass a Document instead, or prefer an alternative constructor like Node#add_child. This will become an error in a future release of Nokogiri.");
314
+ }
315
+
307
316
  Document document = asXmlNode(context, doc).getOwnerDocument();
308
317
  if (document == null) {
309
318
  throw context.runtime.newArgumentError("node must have owner document");
@@ -1579,6 +1588,10 @@ public class XmlNode extends RubyObject
1579
1588
  return getNokogiriClass(context.runtime, "Nokogiri::XML::Node").getConstant(type);
1580
1589
  }
1581
1590
 
1591
+ /*
1592
+ * NOTE that the behavior of this function is very difference from the CRuby implementation, see
1593
+ * the docstring in ext/nokogiri/xml_node.c for details.
1594
+ */
1582
1595
  @JRubyMethod
1583
1596
  public IRubyObject
1584
1597
  line(ThreadContext context)
@@ -1586,7 +1599,10 @@ public class XmlNode extends RubyObject
1586
1599
  Node root = getOwnerDocument();
1587
1600
  int[] counter = new int[1];
1588
1601
  count(root, counter);
1589
- return RubyFixnum.newFixnum(context.runtime, counter[0] + 1);
1602
+ // offset of 2:
1603
+ // - one because humans start counting at 1 not zero
1604
+ // - one to account for the XML declaration present in the output
1605
+ return RubyFixnum.newFixnum(context.runtime, counter[0] + 2);
1590
1606
  }
1591
1607
 
1592
1608
  private boolean
@@ -1599,9 +1615,14 @@ public class XmlNode extends RubyObject
1599
1615
  NodeList list = node.getChildNodes();
1600
1616
  for (int jchild = 0; jchild < list.getLength(); jchild++) {
1601
1617
  Node child = list.item(jchild);
1618
+ String text = null;
1602
1619
 
1603
1620
  if (child instanceof Text) {
1604
- String text = ((Text)child).getData();
1621
+ text = ((Text)child).getData();
1622
+ } else if (child instanceof Comment) {
1623
+ text = ((Comment)child).getData();
1624
+ }
1625
+ if (text != null) {
1605
1626
  int textLength = text.length();
1606
1627
  for (int jchar = 0; jchar < textLength; jchar++) {
1607
1628
  if (text.charAt(jchar) == '\n') {
@@ -190,10 +190,6 @@ public class XmlNodeSet extends RubyObject implements NodeList
190
190
  result[last++] = n;
191
191
  }
192
192
 
193
- if (nodeOrNamespace instanceof XmlNamespace) {
194
- ((XmlNamespace) nodeOrNamespace).deleteHref();
195
- }
196
-
197
193
  nodes = Arrays.copyOf(result, last);
198
194
 
199
195
  if (nodes.length < orig.length) {
@@ -184,6 +184,18 @@ public class XmlReader extends RubyObject
184
184
  return RubyBoolean.newBoolean(context.getRuntime(), !readerNode.hasChildren);
185
185
  }
186
186
 
187
+ @JRubyMethod
188
+ public IRubyObject
189
+ encoding(ThreadContext context)
190
+ {
191
+ IRubyObject constructor_encoding = getInstanceVariable("@encoding");
192
+ if (!constructor_encoding.isNil()) {
193
+ return constructor_encoding;
194
+ }
195
+ // TODO: get the parser's detected encoding
196
+ return context.getRuntime().getNil();
197
+ }
198
+
187
199
  @JRubyMethod(meta = true, rest = true)
188
200
  public static IRubyObject
189
201
  from_io(ThreadContext context, IRubyObject cls, IRubyObject args[])