nokogiri 1.8.5 → 1.15.3
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 +40 -18
- data/LICENSE-DEPENDENCIES.md +1636 -1024
- data/LICENSE.md +5 -28
- data/README.md +203 -90
- data/bin/nokogiri +63 -50
- data/dependencies.yml +33 -61
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +867 -417
- data/ext/nokogiri/gumbo.c +594 -0
- data/ext/nokogiri/html4_document.c +165 -0
- data/ext/nokogiri/html4_element_description.c +299 -0
- data/ext/nokogiri/html4_entity_lookup.c +37 -0
- data/ext/nokogiri/html4_sax_parser_context.c +108 -0
- data/ext/nokogiri/html4_sax_push_parser.c +95 -0
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +251 -105
- data/ext/nokogiri/nokogiri.h +215 -90
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +42 -37
- data/ext/nokogiri/xml_attribute_decl.c +22 -22
- data/ext/nokogiri/xml_cdata.c +40 -31
- data/ext/nokogiri/xml_comment.c +20 -27
- data/ext/nokogiri/xml_document.c +401 -237
- data/ext/nokogiri/xml_document_fragment.c +13 -17
- data/ext/nokogiri/xml_dtd.c +64 -58
- data/ext/nokogiri/xml_element_content.c +63 -55
- data/ext/nokogiri/xml_element_decl.c +31 -31
- data/ext/nokogiri/xml_encoding_handler.c +54 -21
- data/ext/nokogiri/xml_entity_decl.c +37 -35
- data/ext/nokogiri/xml_entity_reference.c +17 -19
- data/ext/nokogiri/xml_namespace.c +136 -62
- data/ext/nokogiri/xml_node.c +1387 -678
- data/ext/nokogiri/xml_node_set.c +246 -216
- data/ext/nokogiri/xml_processing_instruction.c +18 -20
- data/ext/nokogiri/xml_reader.c +347 -212
- data/ext/nokogiri/xml_relax_ng.c +86 -77
- data/ext/nokogiri/xml_sax_parser.c +149 -124
- data/ext/nokogiri/xml_sax_parser_context.c +145 -103
- data/ext/nokogiri/xml_sax_push_parser.c +64 -36
- data/ext/nokogiri/xml_schema.c +138 -81
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +36 -26
- data/ext/nokogiri/xml_xpath_context.c +366 -178
- data/ext/nokogiri/xslt_stylesheet.c +335 -189
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +111 -0
- data/gumbo-parser/THANKS +27 -0
- data/gumbo-parser/src/Makefile +34 -0
- data/gumbo-parser/src/README.md +41 -0
- data/gumbo-parser/src/ascii.c +75 -0
- data/gumbo-parser/src/ascii.h +115 -0
- data/gumbo-parser/src/attribute.c +42 -0
- data/gumbo-parser/src/attribute.h +17 -0
- data/gumbo-parser/src/char_ref.c +22225 -0
- data/gumbo-parser/src/char_ref.h +29 -0
- data/gumbo-parser/src/char_ref.rl +2154 -0
- data/gumbo-parser/src/error.c +630 -0
- data/gumbo-parser/src/error.h +148 -0
- data/gumbo-parser/src/foreign_attrs.c +103 -0
- data/gumbo-parser/src/foreign_attrs.gperf +27 -0
- data/gumbo-parser/src/insertion_mode.h +33 -0
- data/gumbo-parser/src/macros.h +91 -0
- data/gumbo-parser/src/nokogiri_gumbo.h +944 -0
- data/gumbo-parser/src/parser.c +4891 -0
- data/gumbo-parser/src/parser.h +41 -0
- data/gumbo-parser/src/replacement.h +33 -0
- data/gumbo-parser/src/string_buffer.c +103 -0
- data/gumbo-parser/src/string_buffer.h +68 -0
- data/gumbo-parser/src/string_piece.c +48 -0
- data/gumbo-parser/src/svg_attrs.c +174 -0
- data/gumbo-parser/src/svg_attrs.gperf +77 -0
- data/gumbo-parser/src/svg_tags.c +137 -0
- data/gumbo-parser/src/svg_tags.gperf +55 -0
- data/gumbo-parser/src/tag.c +223 -0
- data/gumbo-parser/src/tag_lookup.c +382 -0
- data/gumbo-parser/src/tag_lookup.gperf +170 -0
- data/gumbo-parser/src/tag_lookup.h +13 -0
- data/gumbo-parser/src/token_buffer.c +79 -0
- data/gumbo-parser/src/token_buffer.h +71 -0
- data/gumbo-parser/src/token_type.h +17 -0
- data/gumbo-parser/src/tokenizer.c +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 +66 -0
- data/gumbo-parser/src/util.h +34 -0
- data/gumbo-parser/src/vector.c +111 -0
- data/gumbo-parser/src/vector.h +45 -0
- data/lib/nokogiri/class_resolver.rb +67 -0
- data/lib/nokogiri/css/node.rb +10 -8
- data/lib/nokogiri/css/parser.rb +397 -377
- data/lib/nokogiri/css/parser.y +250 -245
- data/lib/nokogiri/css/parser_extras.rb +54 -49
- data/lib/nokogiri/css/syntax_error.rb +3 -1
- data/lib/nokogiri/css/tokenizer.rb +107 -104
- data/lib/nokogiri/css/tokenizer.rex +3 -2
- data/lib/nokogiri/css/xpath_visitor.rb +224 -95
- data/lib/nokogiri/css.rb +56 -17
- data/lib/nokogiri/decorators/slop.rb +9 -7
- data/lib/nokogiri/encoding_handler.rb +57 -0
- data/lib/nokogiri/extension.rb +32 -0
- data/lib/nokogiri/gumbo.rb +15 -0
- data/lib/nokogiri/html.rb +38 -27
- data/lib/nokogiri/{html → html4}/builder.rb +4 -2
- data/lib/nokogiri/html4/document.rb +214 -0
- data/lib/nokogiri/html4/document_fragment.rb +54 -0
- data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
- data/lib/nokogiri/html4/element_description_defaults.rb +2040 -0
- data/lib/nokogiri/html4/encoding_reader.rb +121 -0
- data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
- data/lib/nokogiri/{html → html4}/sax/parser.rb +17 -16
- data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
- data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
- data/lib/nokogiri/html4.rb +47 -0
- data/lib/nokogiri/html5/document.rb +168 -0
- data/lib/nokogiri/html5/document_fragment.rb +90 -0
- data/lib/nokogiri/html5/node.rb +103 -0
- data/lib/nokogiri/html5.rb +392 -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 +223 -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 +98 -54
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +2 -0
- data/lib/nokogiri/xml/document.rb +312 -126
- data/lib/nokogiri/xml/document_fragment.rb +104 -48
- data/lib/nokogiri/xml/dtd.rb +4 -2
- data/lib/nokogiri/xml/element_content.rb +12 -2
- data/lib/nokogiri/xml/element_decl.rb +6 -2
- data/lib/nokogiri/xml/entity_decl.rb +7 -3
- data/lib/nokogiri/xml/entity_reference.rb +2 -0
- data/lib/nokogiri/xml/namespace.rb +45 -0
- data/lib/nokogiri/xml/node/save_options.rb +23 -8
- data/lib/nokogiri/xml/node.rb +1093 -411
- data/lib/nokogiri/xml/node_set.rb +173 -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 +42 -30
- data/lib/nokogiri/xml/pp.rb +4 -2
- data/lib/nokogiri/xml/processing_instruction.rb +4 -1
- data/lib/nokogiri/xml/reader.rb +21 -28
- data/lib/nokogiri/xml/relax_ng.rb +8 -2
- data/lib/nokogiri/xml/sax/document.rb +45 -49
- data/lib/nokogiri/xml/sax/parser.rb +39 -36
- data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
- data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
- data/lib/nokogiri/xml/sax.rb +6 -4
- data/lib/nokogiri/xml/schema.rb +19 -9
- data/lib/nokogiri/xml/searchable.rb +120 -72
- data/lib/nokogiri/xml/syntax_error.rb +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 +101 -22
- data/lib/nokogiri.rb +59 -75
- data/lib/xsd/xmlparser/nokogiri.rb +29 -25
- data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
- data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
- data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
- data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
- data/patches/libxml2/0010-update-config.guess-and-config.sub-for-libxml2.patch +224 -0
- data/patches/libxml2/0011-rip-out-libxml2-s-libc_single_threaded-support.patch +30 -0
- data/patches/libxslt/0001-update-config.guess-and-config.sub-for-libxslt.patch +224 -0
- data/ports/archives/libxml2-2.11.4.tar.xz +0 -0
- data/ports/archives/libxslt-1.1.38.tar.xz +0 -0
- metadata +126 -399
- data/.autotest +0 -22
- data/.cross_rubies +0 -8
- data/.editorconfig +0 -17
- data/.gemtest +0 -0
- data/.travis.yml +0 -63
- data/CHANGELOG.md +0 -1368
- data/CONTRIBUTING.md +0 -42
- data/C_CODING_STYLE.rdoc +0 -33
- data/Gemfile-libxml-ruby +0 -3
- data/Manifest.txt +0 -370
- data/ROADMAP.md +0 -111
- data/Rakefile +0 -348
- data/SECURITY.md +0 -19
- data/STANDARD_RESPONSES.md +0 -47
- data/Y_U_NO_GEMSPEC.md +0 -155
- data/appveyor.yml +0 -29
- data/build_all +0 -44
- 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 -15
- data/ext/nokogiri/xml_node.h +0 -13
- data/ext/nokogiri/xml_node_set.h +0 -12
- data/ext/nokogiri/xml_processing_instruction.h +0 -9
- data/ext/nokogiri/xml_reader.h +0 -10
- data/ext/nokogiri/xml_relax_ng.h +0 -9
- data/ext/nokogiri/xml_sax_parser.h +0 -39
- data/ext/nokogiri/xml_sax_parser_context.h +0 -10
- data/ext/nokogiri/xml_sax_push_parser.h +0 -9
- data/ext/nokogiri/xml_schema.h +0 -9
- data/ext/nokogiri/xml_syntax_error.h +0 -13
- data/ext/nokogiri/xml_text.h +0 -9
- data/ext/nokogiri/xml_xpath_context.h +0 -10
- data/ext/nokogiri/xslt_stylesheet.h +0 -14
- data/lib/nokogiri/html/document.rb +0 -335
- data/lib/nokogiri/html/document_fragment.rb +0 -49
- data/lib/nokogiri/html/element_description_defaults.rb +0 -671
- data/lib/nokogiri/html/sax/parser_context.rb +0 -16
- data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
- data/patches/libxml2/0002-Fix-nullptr-deref-with-XPath-logic-ops.patch +0 -54
- data/patches/libxml2/0003-Fix-infinite-loop-in-LZMA-decompression.patch +0 -50
- data/patches/sort-patches-by-date +0 -25
- data/ports/archives/libxml2-2.9.8.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.32.tar.gz +0 -0
- data/suppressions/README.txt +0 -1
- data/suppressions/nokogiri_ruby-2.supp +0 -10
- data/tasks/test.rb +0 -100
- data/test/css/test_nthiness.rb +0 -226
- data/test/css/test_parser.rb +0 -386
- data/test/css/test_tokenizer.rb +0 -215
- data/test/css/test_xpath_visitor.rb +0 -96
- data/test/decorators/test_slop.rb +0 -23
- data/test/files/2ch.html +0 -108
- data/test/files/GH_1042.html +0 -18
- data/test/files/address_book.rlx +0 -12
- data/test/files/address_book.xml +0 -10
- data/test/files/atom.xml +0 -344
- data/test/files/bar/bar.xsd +0 -4
- data/test/files/bogus.xml +0 -0
- data/test/files/dont_hurt_em_why.xml +0 -422
- data/test/files/encoding.html +0 -82
- data/test/files/encoding.xhtml +0 -84
- data/test/files/exslt.xml +0 -8
- data/test/files/exslt.xslt +0 -35
- data/test/files/foo/foo.xsd +0 -4
- data/test/files/metacharset.html +0 -10
- data/test/files/namespace_pressure_test.xml +0 -1684
- data/test/files/noencoding.html +0 -47
- data/test/files/po.xml +0 -32
- data/test/files/po.xsd +0 -66
- data/test/files/saml/saml20assertion_schema.xsd +0 -283
- data/test/files/saml/saml20protocol_schema.xsd +0 -302
- data/test/files/saml/xenc_schema.xsd +0 -146
- data/test/files/saml/xmldsig_schema.xsd +0 -318
- data/test/files/shift_jis.html +0 -10
- data/test/files/shift_jis.xml +0 -5
- data/test/files/shift_jis_no_charset.html +0 -9
- data/test/files/slow-xpath.xml +0 -25509
- data/test/files/snuggles.xml +0 -3
- data/test/files/staff.dtd +0 -10
- data/test/files/staff.xml +0 -59
- data/test/files/staff.xslt +0 -32
- data/test/files/test_document_url/bar.xml +0 -2
- data/test/files/test_document_url/document.dtd +0 -4
- data/test/files/test_document_url/document.xml +0 -6
- data/test/files/tlm.html +0 -851
- data/test/files/to_be_xincluded.xml +0 -2
- data/test/files/valid_bar.xml +0 -2
- data/test/files/xinclude.xml +0 -4
- data/test/helper.rb +0 -271
- data/test/html/sax/test_parser.rb +0 -168
- data/test/html/sax/test_parser_context.rb +0 -46
- data/test/html/sax/test_parser_text.rb +0 -163
- data/test/html/sax/test_push_parser.rb +0 -87
- data/test/html/test_attributes.rb +0 -85
- data/test/html/test_builder.rb +0 -164
- data/test/html/test_document.rb +0 -712
- data/test/html/test_document_encoding.rb +0 -143
- data/test/html/test_document_fragment.rb +0 -310
- data/test/html/test_element_description.rb +0 -105
- data/test/html/test_named_characters.rb +0 -14
- data/test/html/test_node.rb +0 -212
- data/test/html/test_node_encoding.rb +0 -91
- data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
- data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
- data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
- data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
- data/test/namespaces/test_namespaces_preservation.rb +0 -31
- data/test/test_convert_xpath.rb +0 -135
- data/test/test_css_cache.rb +0 -47
- data/test/test_encoding_handler.rb +0 -48
- data/test/test_memory_leak.rb +0 -156
- data/test/test_nokogiri.rb +0 -138
- data/test/test_soap4r_sax.rb +0 -52
- data/test/test_xslt_transforms.rb +0 -314
- data/test/xml/node/test_save_options.rb +0 -28
- data/test/xml/node/test_subclass.rb +0 -44
- data/test/xml/sax/test_parser.rb +0 -402
- data/test/xml/sax/test_parser_context.rb +0 -115
- data/test/xml/sax/test_parser_text.rb +0 -202
- data/test/xml/sax/test_push_parser.rb +0 -265
- data/test/xml/test_attr.rb +0 -74
- data/test/xml/test_attribute_decl.rb +0 -86
- data/test/xml/test_builder.rb +0 -341
- data/test/xml/test_c14n.rb +0 -180
- data/test/xml/test_cdata.rb +0 -54
- data/test/xml/test_comment.rb +0 -40
- data/test/xml/test_document.rb +0 -982
- data/test/xml/test_document_encoding.rb +0 -31
- data/test/xml/test_document_fragment.rb +0 -298
- data/test/xml/test_dtd.rb +0 -187
- data/test/xml/test_dtd_encoding.rb +0 -31
- data/test/xml/test_element_content.rb +0 -56
- data/test/xml/test_element_decl.rb +0 -73
- data/test/xml/test_entity_decl.rb +0 -122
- data/test/xml/test_entity_reference.rb +0 -262
- data/test/xml/test_namespace.rb +0 -96
- data/test/xml/test_node.rb +0 -1325
- data/test/xml/test_node_attributes.rb +0 -115
- data/test/xml/test_node_encoding.rb +0 -75
- data/test/xml/test_node_inheritance.rb +0 -32
- data/test/xml/test_node_reparenting.rb +0 -592
- data/test/xml/test_node_set.rb +0 -809
- data/test/xml/test_parse_options.rb +0 -64
- data/test/xml/test_processing_instruction.rb +0 -30
- data/test/xml/test_reader.rb +0 -620
- data/test/xml/test_reader_encoding.rb +0 -134
- data/test/xml/test_relax_ng.rb +0 -60
- data/test/xml/test_schema.rb +0 -142
- data/test/xml/test_syntax_error.rb +0 -36
- data/test/xml/test_text.rb +0 -60
- data/test/xml/test_unparented_node.rb +0 -483
- data/test/xml/test_xinclude.rb +0 -83
- data/test/xml/test_xpath.rb +0 -470
- data/test/xslt/test_custom_functions.rb +0 -133
- data/test/xslt/test_exception_handling.rb +0 -37
@@ -1,3 +1,6 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
1
4
|
module Nokogiri
|
2
5
|
module XML
|
3
6
|
####
|
@@ -11,10 +14,10 @@ module Nokogiri
|
|
11
14
|
# The Document this NodeSet is associated with
|
12
15
|
attr_accessor :document
|
13
16
|
|
14
|
-
|
17
|
+
alias_method :clone, :dup
|
15
18
|
|
16
19
|
# Create a NodeSet with +document+ defaulting to +list+
|
17
|
-
def initialize
|
20
|
+
def initialize(document, list = [])
|
18
21
|
@document = document
|
19
22
|
document.decorate(self)
|
20
23
|
list.each { |x| self << x }
|
@@ -23,8 +26,9 @@ module Nokogiri
|
|
23
26
|
|
24
27
|
###
|
25
28
|
# Get the first element of the NodeSet.
|
26
|
-
def first
|
29
|
+
def first(n = nil)
|
27
30
|
return self[0] unless n
|
31
|
+
|
28
32
|
list = []
|
29
33
|
[n, length].min.times { |i| list << self[i] }
|
30
34
|
list
|
@@ -44,9 +48,9 @@ module Nokogiri
|
|
44
48
|
|
45
49
|
###
|
46
50
|
# Returns the index of the first node in self that is == to +node+ or meets the given block. Returns nil if no match is found.
|
47
|
-
def index(node = nil
|
51
|
+
def index(node = nil)
|
48
52
|
if node
|
49
|
-
warn
|
53
|
+
warn("given block not used") if block_given?
|
50
54
|
each_with_index { |member, j| return j if member == node }
|
51
55
|
elsif block_given?
|
52
56
|
each_with_index { |member, j| return j if yield(member) }
|
@@ -56,18 +60,18 @@ module Nokogiri
|
|
56
60
|
|
57
61
|
###
|
58
62
|
# Insert +datum+ before the first Node in this NodeSet
|
59
|
-
def before
|
60
|
-
first.before
|
63
|
+
def before(datum)
|
64
|
+
first.before(datum)
|
61
65
|
end
|
62
66
|
|
63
67
|
###
|
64
68
|
# Insert +datum+ after the last Node in this NodeSet
|
65
|
-
def after
|
66
|
-
last.after
|
69
|
+
def after(datum)
|
70
|
+
last.after(datum)
|
67
71
|
end
|
68
72
|
|
69
|
-
|
70
|
-
|
73
|
+
alias_method :<<, :push
|
74
|
+
alias_method :remove, :unlink
|
71
75
|
|
72
76
|
###
|
73
77
|
# call-seq: css *rules, [namespace-bindings, custom-pseudo-class]
|
@@ -76,7 +80,7 @@ module Nokogiri
|
|
76
80
|
# selectors. For example:
|
77
81
|
#
|
78
82
|
# For more information see Nokogiri::XML::Searchable#css
|
79
|
-
def css
|
83
|
+
def css(*args)
|
80
84
|
rules, handler, ns, _ = extract_params(args)
|
81
85
|
paths = css_rules_to_xpath(rules, ns)
|
82
86
|
|
@@ -92,7 +96,7 @@ module Nokogiri
|
|
92
96
|
# queries.
|
93
97
|
#
|
94
98
|
# For more information see Nokogiri::XML::Searchable#xpath
|
95
|
-
def xpath
|
99
|
+
def xpath(*args)
|
96
100
|
paths, handler, ns, binds = extract_params(args)
|
97
101
|
|
98
102
|
inject(NodeSet.new(document)) do |set, node|
|
@@ -100,13 +104,6 @@ module Nokogiri
|
|
100
104
|
end
|
101
105
|
end
|
102
106
|
|
103
|
-
###
|
104
|
-
# Search this NodeSet's nodes' immediate children using CSS selector +selector+
|
105
|
-
def > selector
|
106
|
-
ns = document.root.namespaces
|
107
|
-
xpath CSS.xpath_for(selector, :prefix => "./", :ns => ns).first
|
108
|
-
end
|
109
|
-
|
110
107
|
###
|
111
108
|
# call-seq: search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class]
|
112
109
|
#
|
@@ -119,18 +116,18 @@ module Nokogiri
|
|
119
116
|
#
|
120
117
|
# node_set.at(3) # same as node_set[3]
|
121
118
|
#
|
122
|
-
def at
|
119
|
+
def at(*args)
|
123
120
|
if args.length == 1 && args.first.is_a?(Numeric)
|
124
121
|
return self[args.first]
|
125
122
|
end
|
126
123
|
|
127
124
|
super(*args)
|
128
125
|
end
|
129
|
-
|
126
|
+
alias_method :%, :at
|
130
127
|
|
131
128
|
###
|
132
129
|
# Filter this list for nodes that match +expr+
|
133
|
-
def filter
|
130
|
+
def filter(expr)
|
134
131
|
find_all { |node| node.matches?(expr) }
|
135
132
|
end
|
136
133
|
|
@@ -139,7 +136,7 @@ module Nokogiri
|
|
139
136
|
# NodeSet.
|
140
137
|
#
|
141
138
|
# See Nokogiri::XML::Node#add_class for more information.
|
142
|
-
def add_class
|
139
|
+
def add_class(name)
|
143
140
|
each do |el|
|
144
141
|
el.add_class(name)
|
145
142
|
end
|
@@ -151,7 +148,7 @@ module Nokogiri
|
|
151
148
|
# NodeSet.
|
152
149
|
#
|
153
150
|
# See Nokogiri::XML::Node#append_class for more information.
|
154
|
-
def append_class
|
151
|
+
def append_class(name)
|
155
152
|
each do |el|
|
156
153
|
el.append_class(name)
|
157
154
|
end
|
@@ -163,7 +160,7 @@ module Nokogiri
|
|
163
160
|
# NodeSet.
|
164
161
|
#
|
165
162
|
# See Nokogiri::XML::Node#remove_class for more information.
|
166
|
-
def remove_class
|
163
|
+
def remove_class(name = nil)
|
167
164
|
each do |el|
|
168
165
|
el.remove_class(name)
|
169
166
|
end
|
@@ -171,38 +168,73 @@ module Nokogiri
|
|
171
168
|
end
|
172
169
|
|
173
170
|
###
|
174
|
-
# Set
|
175
|
-
#
|
176
|
-
|
177
|
-
|
178
|
-
|
171
|
+
# Set attributes on each Node in the NodeSet, or get an
|
172
|
+
# attribute from the first Node in the NodeSet.
|
173
|
+
#
|
174
|
+
# To get an attribute from the first Node in a NodeSet:
|
175
|
+
#
|
176
|
+
# node_set.attr("href") # => "https://www.nokogiri.org"
|
177
|
+
#
|
178
|
+
# Note that an empty NodeSet will return nil when +#attr+ is called as a getter.
|
179
|
+
#
|
180
|
+
# To set an attribute on each node, +key+ can either be an
|
181
|
+
# attribute name, or a Hash of attribute names and values. When
|
182
|
+
# called as a setter, +#attr+ returns the NodeSet.
|
183
|
+
#
|
184
|
+
# If +key+ is an attribute name, then either +value+ or +block+
|
185
|
+
# must be passed.
|
186
|
+
#
|
187
|
+
# If +key+ is a Hash then attributes will be set for each
|
188
|
+
# key/value pair:
|
189
|
+
#
|
190
|
+
# node_set.attr("href" => "https://www.nokogiri.org", "class" => "member")
|
191
|
+
#
|
192
|
+
# If +value+ is passed, it will be used as the attribute value
|
193
|
+
# for all nodes:
|
194
|
+
#
|
195
|
+
# node_set.attr("href", "https://www.nokogiri.org")
|
196
|
+
#
|
197
|
+
# If +block+ is passed, it will be called on each Node object in
|
198
|
+
# the NodeSet and the return value used as the attribute value
|
199
|
+
# for that node:
|
200
|
+
#
|
201
|
+
# node_set.attr("class") { |node| node.name }
|
202
|
+
#
|
203
|
+
def attr(key, value = nil, &block)
|
204
|
+
unless key.is_a?(Hash) || (key && (value || block))
|
205
|
+
return first&.attribute(key)
|
179
206
|
end
|
180
207
|
|
181
208
|
hash = key.is_a?(Hash) ? key : { key => value }
|
182
209
|
|
183
|
-
hash.each
|
210
|
+
hash.each do |k, v|
|
211
|
+
each do |node|
|
212
|
+
node[k] = v || yield(node)
|
213
|
+
end
|
214
|
+
end
|
184
215
|
|
185
216
|
self
|
186
217
|
end
|
187
|
-
|
188
|
-
|
218
|
+
alias_method :set, :attr
|
219
|
+
alias_method :attribute, :attr
|
189
220
|
|
190
221
|
###
|
191
222
|
# Remove the attributed named +name+ from all Node objects in the NodeSet
|
192
|
-
def remove_attr
|
193
|
-
each { |el| el.delete
|
223
|
+
def remove_attr(name)
|
224
|
+
each { |el| el.delete(name) }
|
194
225
|
self
|
195
226
|
end
|
196
|
-
|
227
|
+
alias_method :remove_attribute, :remove_attr
|
197
228
|
|
198
229
|
###
|
199
230
|
# Iterate over each node, yielding to +block+
|
200
|
-
def each
|
231
|
+
def each
|
201
232
|
return to_enum unless block_given?
|
202
233
|
|
203
234
|
0.upto(length - 1) do |x|
|
204
235
|
yield self[x]
|
205
236
|
end
|
237
|
+
self
|
206
238
|
end
|
207
239
|
|
208
240
|
###
|
@@ -219,24 +251,82 @@ module Nokogiri
|
|
219
251
|
#
|
220
252
|
# See Nokogiri::XML::Node#content for more information.
|
221
253
|
def inner_text
|
222
|
-
collect(&:inner_text).join(
|
254
|
+
collect(&:inner_text).join("")
|
223
255
|
end
|
224
|
-
|
256
|
+
alias_method :text, :inner_text
|
225
257
|
|
226
258
|
###
|
227
259
|
# Get the inner html of all contained Node objects
|
228
|
-
def inner_html
|
229
|
-
collect{|j| j.inner_html(*args) }.join(
|
260
|
+
def inner_html(*args)
|
261
|
+
collect { |j| j.inner_html(*args) }.join("")
|
230
262
|
end
|
231
263
|
|
232
|
-
|
233
|
-
#
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
264
|
+
# :call-seq:
|
265
|
+
# wrap(markup) -> self
|
266
|
+
# wrap(node) -> self
|
267
|
+
#
|
268
|
+
# Wrap each member of this NodeSet with the node parsed from +markup+ or a dup of the +node+.
|
269
|
+
#
|
270
|
+
# [Parameters]
|
271
|
+
# - *markup* (String)
|
272
|
+
# Markup that is parsed, once per member of the NodeSet, and used as the wrapper. Each
|
273
|
+
# node's parent, if it exists, is used as the context node for parsing; otherwise the
|
274
|
+
# associated document is used. If the parsed fragment has multiple roots, the first root
|
275
|
+
# node is used as the wrapper.
|
276
|
+
# - *node* (Nokogiri::XML::Node)
|
277
|
+
# An element that is `#dup`ed and used as the wrapper.
|
278
|
+
#
|
279
|
+
# [Returns] +self+, to support chaining.
|
280
|
+
#
|
281
|
+
# ⚠ Note that if a +String+ is passed, the markup will be parsed <b>once per node</b> in the
|
282
|
+
# NodeSet. You can avoid this overhead in cases where you know exactly the wrapper you wish to
|
283
|
+
# use by passing a +Node+ instead.
|
284
|
+
#
|
285
|
+
# Also see Node#wrap
|
286
|
+
#
|
287
|
+
# *Example* with a +String+ argument:
|
288
|
+
#
|
289
|
+
# doc = Nokogiri::HTML5(<<~HTML)
|
290
|
+
# <html><body>
|
291
|
+
# <a>a</a>
|
292
|
+
# <a>b</a>
|
293
|
+
# <a>c</a>
|
294
|
+
# <a>d</a>
|
295
|
+
# </body></html>
|
296
|
+
# HTML
|
297
|
+
# doc.css("a").wrap("<div></div>")
|
298
|
+
# doc.to_html
|
299
|
+
# # => <html><head></head><body>
|
300
|
+
# # <div><a>a</a></div>
|
301
|
+
# # <div><a>b</a></div>
|
302
|
+
# # <div><a>c</a></div>
|
303
|
+
# # <div><a>d</a></div>
|
304
|
+
# # </body></html>
|
305
|
+
#
|
306
|
+
# *Example* with a +Node+ argument
|
307
|
+
#
|
308
|
+
# 💡 Note that this is faster than the equivalent call passing a +String+ because it avoids
|
309
|
+
# having to reparse the wrapper markup for each node.
|
310
|
+
#
|
311
|
+
# doc = Nokogiri::HTML5(<<~HTML)
|
312
|
+
# <html><body>
|
313
|
+
# <a>a</a>
|
314
|
+
# <a>b</a>
|
315
|
+
# <a>c</a>
|
316
|
+
# <a>d</a>
|
317
|
+
# </body></html>
|
318
|
+
# HTML
|
319
|
+
# doc.css("a").wrap(doc.create_element("div"))
|
320
|
+
# doc.to_html
|
321
|
+
# # => <html><head></head><body>
|
322
|
+
# # <div><a>a</a></div>
|
323
|
+
# # <div><a>b</a></div>
|
324
|
+
# # <div><a>c</a></div>
|
325
|
+
# # <div><a>d</a></div>
|
326
|
+
# # </body></html>
|
327
|
+
#
|
328
|
+
def wrap(node_or_tags)
|
329
|
+
map { |node| node.wrap(node_or_tags) }
|
240
330
|
self
|
241
331
|
end
|
242
332
|
|
@@ -248,38 +338,43 @@ module Nokogiri
|
|
248
338
|
|
249
339
|
###
|
250
340
|
# Convert this NodeSet to HTML
|
251
|
-
def to_html
|
341
|
+
def to_html(*args)
|
252
342
|
if Nokogiri.jruby?
|
253
343
|
options = args.first.is_a?(Hash) ? args.shift : {}
|
254
|
-
|
255
|
-
options[:save_with] = Node::SaveOptions::NO_DECLARATION | Node::SaveOptions::NO_EMPTY_TAGS | Node::SaveOptions::AS_HTML
|
256
|
-
end
|
344
|
+
options[:save_with] ||= Node::SaveOptions::DEFAULT_HTML
|
257
345
|
args.insert(0, options)
|
258
346
|
end
|
259
|
-
|
347
|
+
if empty?
|
348
|
+
encoding = (args.first.is_a?(Hash) ? args.first[:encoding] : nil)
|
349
|
+
encoding ||= document.encoding
|
350
|
+
encoding.nil? ? "" : "".encode(encoding)
|
351
|
+
else
|
352
|
+
map { |x| x.to_html(*args) }.join
|
353
|
+
end
|
260
354
|
end
|
261
355
|
|
262
356
|
###
|
263
357
|
# Convert this NodeSet to XHTML
|
264
|
-
def to_xhtml
|
358
|
+
def to_xhtml(*args)
|
265
359
|
map { |x| x.to_xhtml(*args) }.join
|
266
360
|
end
|
267
361
|
|
268
362
|
###
|
269
363
|
# Convert this NodeSet to XML
|
270
|
-
def to_xml
|
364
|
+
def to_xml(*args)
|
271
365
|
map { |x| x.to_xml(*args) }.join
|
272
366
|
end
|
273
367
|
|
274
|
-
|
275
|
-
|
368
|
+
alias_method :size, :length
|
369
|
+
alias_method :to_ary, :to_a
|
276
370
|
|
277
371
|
###
|
278
372
|
# Removes the last element from set and returns it, or +nil+ if
|
279
373
|
# the set is empty
|
280
374
|
def pop
|
281
375
|
return nil if length == 0
|
282
|
-
|
376
|
+
|
377
|
+
delete(last)
|
283
378
|
end
|
284
379
|
|
285
380
|
###
|
@@ -287,16 +382,18 @@ module Nokogiri
|
|
287
382
|
# +nil+ if the set is empty.
|
288
383
|
def shift
|
289
384
|
return nil if length == 0
|
290
|
-
|
385
|
+
|
386
|
+
delete(first)
|
291
387
|
end
|
292
388
|
|
293
389
|
###
|
294
390
|
# Equality -- Two NodeSets are equal if the contain the same number
|
295
391
|
# of elements and if each element is equal to the corresponding
|
296
392
|
# element in the other NodeSet
|
297
|
-
def ==
|
393
|
+
def ==(other)
|
298
394
|
return false unless other.is_a?(Nokogiri::XML::NodeSet)
|
299
395
|
return false unless length == other.length
|
396
|
+
|
300
397
|
each_with_index do |node, i|
|
301
398
|
return false unless node == other[i]
|
302
399
|
end
|
@@ -320,7 +417,7 @@ module Nokogiri
|
|
320
417
|
def reverse
|
321
418
|
node_set = NodeSet.new(document)
|
322
419
|
(length - 1).downto(0) do |x|
|
323
|
-
node_set.push
|
420
|
+
node_set.push(self[x])
|
324
421
|
end
|
325
422
|
node_set
|
326
423
|
end
|
@@ -328,14 +425,23 @@ module Nokogiri
|
|
328
425
|
###
|
329
426
|
# Return a nicely formated string representation
|
330
427
|
def inspect
|
331
|
-
"[#{map(&:inspect).join
|
428
|
+
"[#{map(&:inspect).join(", ")}]"
|
332
429
|
end
|
333
430
|
|
334
|
-
|
431
|
+
alias_method :+, :|
|
335
432
|
|
336
|
-
#
|
337
|
-
|
433
|
+
#
|
434
|
+
# :call-seq: deconstruct() → Array
|
435
|
+
#
|
436
|
+
# Returns the members of this NodeSet as an array, to use in pattern matching.
|
437
|
+
#
|
438
|
+
# ⚡ This is an experimental feature, available since v1.14.0
|
439
|
+
#
|
440
|
+
def deconstruct
|
441
|
+
to_a
|
442
|
+
end
|
338
443
|
|
444
|
+
IMPLIED_XPATH_CONTEXTS = [".//", "self::"].freeze # :nodoc:
|
339
445
|
end
|
340
446
|
end
|
341
447
|
end
|
@@ -1,6 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
5
|
+
# Struct representing an {XML Schema Notation}[https://www.w3.org/TR/xml/#Notations]
|
3
6
|
class Notation < Struct.new(:name, :public_id, :system_id)
|
7
|
+
# dead comment to ensure rdoc processing
|
8
|
+
|
9
|
+
# :attr: name (String)
|
10
|
+
# The name for the element.
|
11
|
+
|
12
|
+
# :attr: public_id (String)
|
13
|
+
# The URI corresponding to the public identifier
|
14
|
+
|
15
|
+
# :attr: system_id (String,nil)
|
16
|
+
# The URI corresponding to the system identifier
|
4
17
|
end
|
5
18
|
end
|
6
19
|
end
|