nokogiri 1.5.10 → 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 +7 -0
- data/Gemfile +5 -0
- data/LICENSE-DEPENDENCIES.md +1903 -0
- data/LICENSE.md +9 -0
- data/README.md +280 -0
- data/bin/nokogiri +84 -31
- data/dependencies.yml +73 -0
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +956 -100
- 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 +120 -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 +232 -87
- data/ext/nokogiri/nokogiri.h +188 -129
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +49 -40
- data/ext/nokogiri/xml_attribute_decl.c +18 -18
- data/ext/nokogiri/xml_cdata.c +24 -23
- data/ext/nokogiri/xml_comment.c +29 -21
- data/ext/nokogiri/xml_document.c +327 -223
- data/ext/nokogiri/xml_document_fragment.c +12 -16
- data/ext/nokogiri/xml_dtd.c +56 -50
- data/ext/nokogiri/xml_element_content.c +31 -26
- data/ext/nokogiri/xml_element_decl.c +22 -22
- data/ext/nokogiri/xml_encoding_handler.c +45 -20
- data/ext/nokogiri/xml_entity_decl.c +32 -30
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +74 -32
- data/ext/nokogiri/xml_node.c +1290 -680
- data/ext/nokogiri/xml_node_set.c +239 -208
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +227 -189
- data/ext/nokogiri/xml_relax_ng.c +52 -28
- data/ext/nokogiri/xml_sax_parser.c +123 -125
- data/ext/nokogiri/xml_sax_parser_context.c +138 -79
- data/ext/nokogiri/xml_sax_push_parser.c +88 -35
- data/ext/nokogiri/xml_schema.c +112 -33
- data/ext/nokogiri/xml_syntax_error.c +50 -23
- data/ext/nokogiri/xml_text.c +14 -18
- data/ext/nokogiri/xml_xpath_context.c +227 -140
- data/ext/nokogiri/xslt_stylesheet.c +162 -168
- 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 -58
- data/lib/nokogiri/css/parser.rb +327 -288
- data/lib/nokogiri/css/parser.y +67 -45
- data/lib/nokogiri/css/parser_extras.rb +52 -49
- data/lib/nokogiri/css/syntax_error.rb +3 -1
- data/lib/nokogiri/css/tokenizer.rb +107 -104
- data/lib/nokogiri/css/tokenizer.rex +7 -6
- data/lib/nokogiri/css/xpath_visitor.rb +263 -75
- data/lib/nokogiri/css.rb +50 -17
- data/lib/nokogiri/decorators/slop.rb +17 -8
- 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/html4/document.rb +331 -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 +578 -0
- data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
- data/lib/nokogiri/{html → html4}/sax/parser.rb +24 -15
- data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
- data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
- data/lib/nokogiri/html4.rb +46 -0
- data/lib/nokogiri/html5/document.rb +88 -0
- data/lib/nokogiri/html5/document_fragment.rb +83 -0
- data/lib/nokogiri/html5/node.rb +96 -0
- data/lib/nokogiri/html5.rb +477 -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 +221 -0
- data/lib/nokogiri/version.rb +3 -90
- data/lib/nokogiri/xml/attr.rb +6 -3
- data/lib/nokogiri/xml/attribute_decl.rb +3 -1
- data/lib/nokogiri/xml/builder.rb +96 -54
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +2 -0
- data/lib/nokogiri/xml/document.rb +234 -95
- data/lib/nokogiri/xml/document_fragment.rb +86 -36
- data/lib/nokogiri/xml/dtd.rb +16 -4
- 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 +20 -0
- data/lib/nokogiri/xml/namespace.rb +3 -0
- data/lib/nokogiri/xml/node/save_options.rb +8 -4
- data/lib/nokogiri/xml/node.rb +947 -502
- data/lib/nokogiri/xml/node_set.rb +168 -159
- data/lib/nokogiri/xml/notation.rb +13 -0
- data/lib/nokogiri/xml/parse_options.rb +40 -5
- 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 +23 -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 +43 -41
- 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 +259 -0
- data/lib/nokogiri/xml/syntax_error.rb +25 -1
- 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 -36
- data/lib/nokogiri/xslt/stylesheet.rb +3 -1
- data/lib/nokogiri/xslt.rb +18 -16
- data/lib/nokogiri.rb +69 -69
- data/lib/xsd/xmlparser/nokogiri.rb +26 -24
- 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/0004-use-glibc-strlen.patch +53 -0
- data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
- data/patches/libxml2/0006-update-automake-files-for-arm64.patch +2511 -0
- data/patches/libxml2/0007-Fix-XPath-recursion-limit.patch +31 -0
- data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +61 -0
- data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
- data/patches/libxslt/0001-update-automake-files-for-arm64.patch +2511 -0
- data/patches/libxslt/0002-Fix-xml2-config-check-in-configure-script.patch +19 -0
- data/ports/archives/libxml2-2.9.12.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
- metadata +382 -460
- data/.autotest +0 -26
- data/.gemtest +0 -0
- data/CHANGELOG.ja.rdoc +0 -785
- data/CHANGELOG.rdoc +0 -783
- data/C_CODING_STYLE.rdoc +0 -33
- data/Manifest.txt +0 -303
- data/README.ja.rdoc +0 -106
- data/README.rdoc +0 -175
- data/ROADMAP.md +0 -90
- data/Rakefile +0 -228
- data/STANDARD_RESPONSES.md +0 -47
- data/Y_U_NO_GEMSPEC.md +0 -155
- data/build_all +0 -105
- 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 -56
- 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 -13
- data/ext/nokogiri/xml_node.h +0 -13
- data/ext/nokogiri/xml_node_set.h +0 -14
- 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 -254
- data/lib/nokogiri/html/document_fragment.rb +0 -41
- data/lib/nokogiri/html/element_description_defaults.rb +0 -671
- data/lib/nokogiri/html/sax/parser_context.rb +0 -16
- data/lib/nokogiri/html/sax/push_parser.rb +0 -16
- data/tasks/cross_compile.rb +0 -150
- data/tasks/nokogiri.org.rb +0 -24
- data/tasks/test.rb +0 -95
- data/test/css/test_nthiness.rb +0 -159
- data/test/css/test_parser.rb +0 -341
- data/test/css/test_tokenizer.rb +0 -198
- data/test/css/test_xpath_visitor.rb +0 -91
- data/test/decorators/test_slop.rb +0 -16
- data/test/files/2ch.html +0 -108
- data/test/files/address_book.rlx +0 -12
- data/test/files/address_book.xml +0 -10
- data/test/files/bar/bar.xsd +0 -4
- 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/noencoding.html +0 -47
- data/test/files/po.xml +0 -32
- data/test/files/po.xsd +0 -66
- data/test/files/shift_jis.html +0 -10
- data/test/files/shift_jis.xml +0 -5
- 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 -850
- 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 -154
- data/test/html/sax/test_parser.rb +0 -141
- data/test/html/sax/test_parser_context.rb +0 -46
- data/test/html/test_builder.rb +0 -164
- data/test/html/test_document.rb +0 -552
- data/test/html/test_document_encoding.rb +0 -138
- data/test/html/test_document_fragment.rb +0 -261
- 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 -196
- data/test/html/test_node_encoding.rb +0 -27
- data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
- data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -66
- data/test/test_convert_xpath.rb +0 -135
- data/test/test_css_cache.rb +0 -45
- data/test/test_encoding_handler.rb +0 -46
- data/test/test_memory_leak.rb +0 -156
- data/test/test_nokogiri.rb +0 -132
- data/test/test_reader.rb +0 -555
- data/test/test_soap4r_sax.rb +0 -52
- data/test/test_xslt_transforms.rb +0 -254
- 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 -366
- data/test/xml/sax/test_parser_context.rb +0 -106
- data/test/xml/sax/test_push_parser.rb +0 -157
- data/test/xml/test_attr.rb +0 -64
- data/test/xml/test_attribute_decl.rb +0 -86
- data/test/xml/test_builder.rb +0 -306
- data/test/xml/test_c14n.rb +0 -151
- data/test/xml/test_cdata.rb +0 -48
- data/test/xml/test_comment.rb +0 -29
- data/test/xml/test_document.rb +0 -828
- data/test/xml/test_document_encoding.rb +0 -28
- data/test/xml/test_document_fragment.rb +0 -223
- data/test/xml/test_dtd.rb +0 -103
- data/test/xml/test_dtd_encoding.rb +0 -33
- 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 -245
- data/test/xml/test_namespace.rb +0 -95
- data/test/xml/test_node.rb +0 -1137
- data/test/xml/test_node_attributes.rb +0 -96
- data/test/xml/test_node_encoding.rb +0 -107
- data/test/xml/test_node_inheritance.rb +0 -32
- data/test/xml/test_node_reparenting.rb +0 -374
- data/test/xml/test_node_set.rb +0 -755
- data/test/xml/test_parse_options.rb +0 -64
- data/test/xml/test_processing_instruction.rb +0 -30
- data/test/xml/test_reader_encoding.rb +0 -142
- data/test/xml/test_relax_ng.rb +0 -60
- data/test/xml/test_schema.rb +0 -103
- data/test/xml/test_syntax_error.rb +0 -12
- data/test/xml/test_text.rb +0 -45
- data/test/xml/test_unparented_node.rb +0 -422
- data/test/xml/test_xinclude.rb +0 -83
- data/test/xml/test_xpath.rb +0 -295
- data/test/xslt/test_custom_functions.rb +0 -133
- data/test/xslt/test_exception_handling.rb +0 -37
- data/test_all +0 -81
@@ -0,0 +1,221 @@
|
|
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
|
+
Gem::Requirement.new(requirement).satisfied_by?(VersionInfo.instance.loaded_libxml_version)
|
195
|
+
end
|
196
|
+
|
197
|
+
# :nodoc:
|
198
|
+
def self.uses_gumbo?
|
199
|
+
uses_libxml? # TODO: replace with Gumbo functionality
|
200
|
+
end
|
201
|
+
|
202
|
+
# :nodoc:
|
203
|
+
def self.jruby?
|
204
|
+
VersionInfo.instance.jruby?
|
205
|
+
end
|
206
|
+
|
207
|
+
# :nodoc:
|
208
|
+
def self.libxml2_patches
|
209
|
+
if VersionInfo.instance.libxml2_using_packaged?
|
210
|
+
Nokogiri::VERSION_INFO["libxml"]["patches"]
|
211
|
+
else
|
212
|
+
[]
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
require_relative "../jruby/dependencies" if Nokogiri.jruby?
|
217
|
+
require_relative "../extension"
|
218
|
+
|
219
|
+
# Detailed version info about Nokogiri and the installed extension dependencies.
|
220
|
+
VERSION_INFO = VersionInfo.instance.to_hash
|
221
|
+
end
|
data/lib/nokogiri/version.rb
CHANGED
@@ -1,91 +1,4 @@
|
|
1
|
-
|
2
|
-
# The version of Nokogiri you are using
|
3
|
-
VERSION = '1.5.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.scan(/^(.*)(..)(..)$/).first.collect{ |j|
|
16
|
-
j.to_i
|
17
|
-
}.join(".")
|
18
|
-
end
|
19
|
-
|
20
|
-
def compiled_parser_version
|
21
|
-
LIBXML_VERSION
|
22
|
-
end
|
23
|
-
|
24
|
-
def libxml2?
|
25
|
-
defined?(LIBXML_VERSION)
|
26
|
-
end
|
27
|
-
|
28
|
-
def warnings
|
29
|
-
return [] unless libxml2?
|
30
|
-
|
31
|
-
if compiled_parser_version != loaded_parser_version
|
32
|
-
["Nokogiri was built against LibXML version #{compiled_parser_version}, but has dynamically loaded #{loaded_parser_version}"]
|
33
|
-
else
|
34
|
-
[]
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def to_hash
|
39
|
-
hash_info = {}
|
40
|
-
hash_info['warnings'] = []
|
41
|
-
hash_info['nokogiri'] = Nokogiri::VERSION
|
42
|
-
hash_info['ruby'] = {}
|
43
|
-
hash_info['ruby']['version'] = ::RUBY_VERSION
|
44
|
-
hash_info['ruby']['platform'] = ::RUBY_PLATFORM
|
45
|
-
hash_info['ruby']['description'] = ::RUBY_DESCRIPTION
|
46
|
-
hash_info['ruby']['engine'] = engine
|
47
|
-
hash_info['ruby']['jruby'] = jruby? if jruby?
|
48
|
-
|
49
|
-
if libxml2?
|
50
|
-
hash_info['libxml'] = {}
|
51
|
-
hash_info['libxml']['binding'] = 'extension'
|
52
|
-
hash_info['libxml']['compiled'] = compiled_parser_version
|
53
|
-
hash_info['libxml']['loaded'] = loaded_parser_version
|
54
|
-
hash_info['warnings'] = warnings
|
55
|
-
elsif jruby?
|
56
|
-
hash_info['xerces'] = Nokogiri::XERCES_VERSION
|
57
|
-
hash_info['nekohtml'] = Nokogiri::NEKO_VERSION
|
58
|
-
end
|
59
|
-
|
60
|
-
hash_info
|
61
|
-
end
|
62
|
-
|
63
|
-
def to_markdown
|
64
|
-
begin
|
65
|
-
require 'psych'
|
66
|
-
rescue LoadError
|
67
|
-
end
|
68
|
-
require 'yaml'
|
69
|
-
"# Nokogiri (#{Nokogiri::VERSION})\n" +
|
70
|
-
YAML.dump(to_hash).each_line.map { |line| " #{line}" }.join
|
71
|
-
end
|
72
|
-
|
73
|
-
# FIXME: maybe switch to singleton?
|
74
|
-
@@instance = new
|
75
|
-
@@instance.warnings.each do |warning|
|
76
|
-
warn "WARNING: #{warning}"
|
77
|
-
end
|
78
|
-
def self.instance; @@instance; end
|
79
|
-
end
|
80
|
-
|
81
|
-
# More complete version information about libxml
|
82
|
-
VERSION_INFO = VersionInfo.instance.to_hash
|
83
|
-
|
84
|
-
def self.uses_libxml? # :nodoc:
|
85
|
-
VersionInfo.instance.libxml2?
|
86
|
-
end
|
87
|
-
|
88
|
-
def self.jruby? # :nodoc:
|
89
|
-
VersionInfo.instance.jruby?
|
90
|
-
end
|
91
|
-
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
|
@@ -213,7 +250,7 @@ module Nokogiri
|
|
213
250
|
# xml.foo
|
214
251
|
# end
|
215
252
|
# end
|
216
|
-
#
|
253
|
+
#
|
217
254
|
# puts builder.to_xml
|
218
255
|
#
|
219
256
|
# Will output this xml:
|
@@ -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,13 +285,13 @@ 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
|
252
293
|
#
|
253
|
-
def self.with
|
294
|
+
def self.with(root, &block)
|
254
295
|
new({}, root, &block)
|
255
296
|
end
|
256
297
|
|
@@ -263,31 +304,28 @@ module Nokogiri
|
|
263
304
|
# Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
|
264
305
|
# ...
|
265
306
|
# end
|
266
|
-
def initialize
|
267
|
-
|
307
|
+
def initialize(options = {}, root = nil, &block)
|
268
308
|
if root
|
269
|
-
@doc
|
309
|
+
@doc = root.document
|
270
310
|
@parent = root
|
271
311
|
else
|
272
|
-
|
273
|
-
namespace[-1] = 'Document'
|
274
|
-
@doc = eval(namespace.join('::')).new
|
275
|
-
@parent = @doc
|
312
|
+
@parent = @doc = related_class("Document").new
|
276
313
|
end
|
277
314
|
|
278
|
-
@context
|
279
|
-
@arity
|
280
|
-
@ns
|
315
|
+
@context = nil
|
316
|
+
@arity = nil
|
317
|
+
@ns = nil
|
281
318
|
|
282
|
-
options
|
319
|
+
options = DEFAULT_DOCUMENT_OPTIONS.merge(options)
|
320
|
+
options.each do |k, v|
|
283
321
|
@doc.send(:"#{k}=", v)
|
284
322
|
end
|
285
323
|
|
286
|
-
return unless
|
324
|
+
return unless block
|
287
325
|
|
288
326
|
@arity = block.arity
|
289
327
|
if @arity <= 0
|
290
|
-
@context = eval(
|
328
|
+
@context = eval("self", block.binding)
|
291
329
|
instance_eval(&block)
|
292
330
|
else
|
293
331
|
yield self
|
@@ -298,26 +336,26 @@ module Nokogiri
|
|
298
336
|
|
299
337
|
###
|
300
338
|
# Create a Text Node with content of +string+
|
301
|
-
def text
|
302
|
-
insert
|
339
|
+
def text(string)
|
340
|
+
insert(@doc.create_text_node(string))
|
303
341
|
end
|
304
342
|
|
305
343
|
###
|
306
344
|
# Create a CDATA Node with content of +string+
|
307
|
-
def cdata
|
308
|
-
insert
|
345
|
+
def cdata(string)
|
346
|
+
insert(doc.create_cdata(string))
|
309
347
|
end
|
310
348
|
|
311
349
|
###
|
312
350
|
# Create a Comment Node with content of +string+
|
313
|
-
def comment
|
314
|
-
insert
|
351
|
+
def comment(string)
|
352
|
+
insert(doc.create_comment(string))
|
315
353
|
end
|
316
354
|
|
317
355
|
###
|
318
356
|
# Build a tag that is associated with namespace +ns+. Raises an
|
319
357
|
# ArgumentError if +ns+ has not been defined higher in the tree.
|
320
|
-
def []
|
358
|
+
def [](ns)
|
321
359
|
if @parent != @doc
|
322
360
|
@ns = @parent.namespace_definitions.find { |x| x.prefix == ns.to_s }
|
323
361
|
end
|
@@ -329,8 +367,8 @@ module Nokogiri
|
|
329
367
|
return self if @ns
|
330
368
|
end
|
331
369
|
|
332
|
-
@ns = { :
|
333
|
-
|
370
|
+
@ns = { pending: ns.to_s }
|
371
|
+
self
|
334
372
|
end
|
335
373
|
|
336
374
|
###
|
@@ -338,7 +376,7 @@ module Nokogiri
|
|
338
376
|
def to_xml(*args)
|
339
377
|
if Nokogiri.jruby?
|
340
378
|
options = args.first.is_a?(Hash) ? args.shift : {}
|
341
|
-
|
379
|
+
unless options[:save_with]
|
342
380
|
options[:save_with] = Node::SaveOptions::AS_BUILDER
|
343
381
|
end
|
344
382
|
args.insert(0, options)
|
@@ -348,23 +386,23 @@ module Nokogiri
|
|
348
386
|
|
349
387
|
###
|
350
388
|
# Append the given raw XML +string+ to the document
|
351
|
-
def <<
|
389
|
+
def <<(string)
|
352
390
|
@doc.fragment(string).children.each { |x| insert(x) }
|
353
391
|
end
|
354
392
|
|
355
|
-
def method_missing
|
356
|
-
if @context
|
393
|
+
def method_missing(method, *args, &block) # :nodoc:
|
394
|
+
if @context&.respond_to?(method)
|
357
395
|
@context.send(method, *args, &block)
|
358
396
|
else
|
359
|
-
node = @doc.create_element(method.to_s.sub(/[_!]$/,
|
397
|
+
node = @doc.create_element(method.to_s.sub(/[_!]$/, ""), *args) do |n|
|
360
398
|
# Set up the namespace
|
361
|
-
if @ns.is_a?
|
399
|
+
if @ns.is_a?(Nokogiri::XML::Namespace)
|
362
400
|
n.namespace = @ns
|
363
401
|
@ns = nil
|
364
402
|
end
|
365
|
-
|
403
|
+
end
|
366
404
|
|
367
|
-
if @ns.is_a?
|
405
|
+
if @ns.is_a?(Hash)
|
368
406
|
node.namespace = node.namespace_definitions.find { |x| x.prefix == @ns[:pending] }
|
369
407
|
if node.namespace.nil?
|
370
408
|
raise ArgumentError, "Namespace #{@ns[:pending]} has not been defined"
|
@@ -377,35 +415,39 @@ module Nokogiri
|
|
377
415
|
end
|
378
416
|
|
379
417
|
private
|
418
|
+
|
380
419
|
###
|
381
420
|
# Insert +node+ as a child of the current Node
|
382
421
|
def insert(node, &block)
|
383
|
-
node
|
384
|
-
if
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
422
|
+
node = @parent.add_child(node)
|
423
|
+
if block
|
424
|
+
begin
|
425
|
+
old_parent = @parent
|
426
|
+
@parent = node
|
427
|
+
@arity ||= block.arity
|
428
|
+
if @arity <= 0
|
429
|
+
instance_eval(&block)
|
430
|
+
else
|
431
|
+
yield(self)
|
432
|
+
end
|
433
|
+
ensure
|
434
|
+
@parent = old_parent
|
392
435
|
end
|
393
|
-
@parent = old_parent
|
394
436
|
end
|
395
437
|
NodeBuilder.new(node, self)
|
396
438
|
end
|
397
439
|
|
398
440
|
class NodeBuilder # :nodoc:
|
399
|
-
def initialize
|
441
|
+
def initialize(node, doc_builder)
|
400
442
|
@node = node
|
401
443
|
@doc_builder = doc_builder
|
402
444
|
end
|
403
445
|
|
404
|
-
def []=
|
446
|
+
def []=(k, v)
|
405
447
|
@node[k] = v
|
406
448
|
end
|
407
449
|
|
408
|
-
def []
|
450
|
+
def [](k)
|
409
451
|
@node[k]
|
410
452
|
end
|
411
453
|
|
@@ -413,22 +455,22 @@ module Nokogiri
|
|
413
455
|
opts = args.last.is_a?(Hash) ? args.pop : {}
|
414
456
|
case method.to_s
|
415
457
|
when /^(.*)!$/
|
416
|
-
@node[
|
458
|
+
@node["id"] = Regexp.last_match(1)
|
417
459
|
@node.content = args.first if args.first
|
418
460
|
when /^(.*)=/
|
419
|
-
@node[
|
461
|
+
@node[Regexp.last_match(1)] = args.first
|
420
462
|
else
|
421
|
-
@node[
|
422
|
-
((@node[
|
463
|
+
@node["class"] =
|
464
|
+
((@node["class"] || "").split(/\s/) + [method.to_s]).join(" ")
|
423
465
|
@node.content = args.first if args.first
|
424
466
|
end
|
425
467
|
|
426
468
|
# Assign any extra options
|
427
|
-
opts.each do |k,v|
|
428
|
-
@node[k.to_s] = ((@node[k.to_s] ||
|
469
|
+
opts.each do |k, v|
|
470
|
+
@node[k.to_s] = ((@node[k.to_s] || "").split(/\s/) + [v]).join(" ")
|
429
471
|
end
|
430
472
|
|
431
|
-
if
|
473
|
+
if block
|
432
474
|
old_parent = @doc_builder.parent
|
433
475
|
@doc_builder.parent = @node
|
434
476
|
value = @doc_builder.instance_eval(&block)
|
data/lib/nokogiri/xml/cdata.rb
CHANGED