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,79 +1,112 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
|
+
|
3
|
+
VALUE cNokogiriEncodingHandler;
|
4
|
+
|
5
|
+
static void
|
6
|
+
xml_encoding_handler_dealloc(void *data)
|
7
|
+
{
|
8
|
+
/* make sure iconv handlers are cleaned up and freed */
|
9
|
+
xmlCharEncodingHandlerPtr c_handler = data;
|
10
|
+
xmlCharEncCloseFunc(c_handler);
|
11
|
+
}
|
12
|
+
|
13
|
+
static const rb_data_type_t xml_encoding_handler_type = {
|
14
|
+
.wrap_struct_name = "Nokogiri::EncodingHandler",
|
15
|
+
.function = {
|
16
|
+
.dfree = xml_encoding_handler_dealloc,
|
17
|
+
},
|
18
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
|
19
|
+
};
|
20
|
+
|
2
21
|
|
3
22
|
/*
|
4
23
|
* call-seq: Nokogiri::EncodingHandler.[](name)
|
5
24
|
*
|
6
25
|
* Get the encoding handler for +name+
|
7
26
|
*/
|
8
|
-
static VALUE
|
27
|
+
static VALUE
|
28
|
+
rb_xml_encoding_handler_s_get(VALUE klass, VALUE key)
|
9
29
|
{
|
10
30
|
xmlCharEncodingHandlerPtr handler;
|
11
31
|
|
12
32
|
handler = xmlFindCharEncodingHandler(StringValueCStr(key));
|
13
|
-
if(handler)
|
14
|
-
return
|
33
|
+
if (handler) {
|
34
|
+
return TypedData_Wrap_Struct(klass, &xml_encoding_handler_type, handler);
|
35
|
+
}
|
15
36
|
|
16
37
|
return Qnil;
|
17
38
|
}
|
18
39
|
|
40
|
+
|
19
41
|
/*
|
20
42
|
* call-seq: Nokogiri::EncodingHandler.delete(name)
|
21
43
|
*
|
22
44
|
* Delete the encoding alias named +name+
|
23
45
|
*/
|
24
|
-
static VALUE
|
46
|
+
static VALUE
|
47
|
+
rb_xml_encoding_handler_s_delete(VALUE klass, VALUE name)
|
25
48
|
{
|
26
|
-
if(xmlDelEncodingAlias(StringValueCStr(name))) return Qnil;
|
49
|
+
if (xmlDelEncodingAlias(StringValueCStr(name))) { return Qnil; }
|
27
50
|
|
28
51
|
return Qtrue;
|
29
52
|
}
|
30
53
|
|
54
|
+
|
31
55
|
/*
|
32
|
-
* call-seq: Nokogiri::EncodingHandler.alias(
|
56
|
+
* call-seq: Nokogiri::EncodingHandler.alias(real_name, alias_name)
|
33
57
|
*
|
34
|
-
* Alias encoding handler with name +
|
58
|
+
* Alias encoding handler with name +real_name+ to name +alias_name+
|
35
59
|
*/
|
36
|
-
static VALUE
|
60
|
+
static VALUE
|
61
|
+
rb_xml_encoding_handler_s_alias(VALUE klass, VALUE from, VALUE to)
|
37
62
|
{
|
38
63
|
xmlAddEncodingAlias(StringValueCStr(from), StringValueCStr(to));
|
39
64
|
|
40
65
|
return to;
|
41
66
|
}
|
42
67
|
|
68
|
+
|
43
69
|
/*
|
44
70
|
* call-seq: Nokogiri::EncodingHandler.clear_aliases!
|
45
71
|
*
|
46
72
|
* Remove all encoding aliases.
|
47
73
|
*/
|
48
|
-
static VALUE
|
74
|
+
static VALUE
|
75
|
+
rb_xml_encoding_handler_s_clear_aliases(VALUE klass)
|
49
76
|
{
|
50
77
|
xmlCleanupEncodingAliases();
|
51
78
|
|
52
79
|
return klass;
|
53
80
|
}
|
54
81
|
|
82
|
+
|
55
83
|
/*
|
56
84
|
* call-seq: name
|
57
85
|
*
|
58
86
|
* Get the name of this EncodingHandler
|
59
87
|
*/
|
60
|
-
static VALUE
|
88
|
+
static VALUE
|
89
|
+
rb_xml_encoding_handler_name(VALUE self)
|
61
90
|
{
|
62
91
|
xmlCharEncodingHandlerPtr handler;
|
63
92
|
|
64
|
-
|
93
|
+
TypedData_Get_Struct(self, xmlCharEncodingHandler, &xml_encoding_handler_type, handler);
|
65
94
|
|
66
95
|
return NOKOGIRI_STR_NEW2(handler->name);
|
67
96
|
}
|
68
97
|
|
69
|
-
|
98
|
+
|
99
|
+
void
|
100
|
+
noko_init_xml_encoding_handler(void)
|
70
101
|
{
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
rb_define_singleton_method(
|
76
|
-
rb_define_singleton_method(
|
77
|
-
rb_define_singleton_method(
|
78
|
-
|
102
|
+
cNokogiriEncodingHandler = rb_define_class_under(mNokogiri, "EncodingHandler", rb_cObject);
|
103
|
+
|
104
|
+
rb_undef_alloc_func(cNokogiriEncodingHandler);
|
105
|
+
|
106
|
+
rb_define_singleton_method(cNokogiriEncodingHandler, "[]", rb_xml_encoding_handler_s_get, 1);
|
107
|
+
rb_define_singleton_method(cNokogiriEncodingHandler, "delete", rb_xml_encoding_handler_s_delete, 1);
|
108
|
+
rb_define_singleton_method(cNokogiriEncodingHandler, "alias", rb_xml_encoding_handler_s_alias, 2);
|
109
|
+
rb_define_singleton_method(cNokogiriEncodingHandler, "clear_aliases!", rb_xml_encoding_handler_s_clear_aliases, 0);
|
110
|
+
|
111
|
+
rb_define_method(cNokogiriEncodingHandler, "name", rb_xml_encoding_handler_name, 0);
|
79
112
|
}
|
@@ -1,4 +1,6 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
|
+
|
3
|
+
VALUE cNokogiriXmlEntityDecl;
|
2
4
|
|
3
5
|
/*
|
4
6
|
* call-seq:
|
@@ -6,12 +8,13 @@
|
|
6
8
|
*
|
7
9
|
* Get the original_content before ref substitution
|
8
10
|
*/
|
9
|
-
static VALUE
|
11
|
+
static VALUE
|
12
|
+
original_content(VALUE self)
|
10
13
|
{
|
11
14
|
xmlEntityPtr node;
|
12
|
-
|
15
|
+
Noko_Node_Get_Struct(self, xmlEntity, node);
|
13
16
|
|
14
|
-
if(!node->orig) return Qnil;
|
17
|
+
if (!node->orig) { return Qnil; }
|
15
18
|
|
16
19
|
return NOKOGIRI_STR_NEW2(node->orig);
|
17
20
|
}
|
@@ -22,12 +25,13 @@ static VALUE original_content(VALUE self)
|
|
22
25
|
*
|
23
26
|
* Get the content
|
24
27
|
*/
|
25
|
-
static VALUE
|
28
|
+
static VALUE
|
29
|
+
get_content(VALUE self)
|
26
30
|
{
|
27
31
|
xmlEntityPtr node;
|
28
|
-
|
32
|
+
Noko_Node_Get_Struct(self, xmlEntity, node);
|
29
33
|
|
30
|
-
if(!node->content) return Qnil;
|
34
|
+
if (!node->content) { return Qnil; }
|
31
35
|
|
32
36
|
return NOKOGIRI_STR_NEW(node->content, node->length);
|
33
37
|
}
|
@@ -38,10 +42,11 @@ static VALUE get_content(VALUE self)
|
|
38
42
|
*
|
39
43
|
* Get the entity type
|
40
44
|
*/
|
41
|
-
static VALUE
|
45
|
+
static VALUE
|
46
|
+
entity_type(VALUE self)
|
42
47
|
{
|
43
48
|
xmlEntityPtr node;
|
44
|
-
|
49
|
+
Noko_Node_Get_Struct(self, xmlEntity, node);
|
45
50
|
|
46
51
|
return INT2NUM((int)node->etype);
|
47
52
|
}
|
@@ -52,12 +57,13 @@ static VALUE entity_type(VALUE self)
|
|
52
57
|
*
|
53
58
|
* Get the external identifier for PUBLIC
|
54
59
|
*/
|
55
|
-
static VALUE
|
60
|
+
static VALUE
|
61
|
+
external_id(VALUE self)
|
56
62
|
{
|
57
63
|
xmlEntityPtr node;
|
58
|
-
|
64
|
+
Noko_Node_Get_Struct(self, xmlEntity, node);
|
59
65
|
|
60
|
-
if(!node->ExternalID) return Qnil;
|
66
|
+
if (!node->ExternalID) { return Qnil; }
|
61
67
|
|
62
68
|
return NOKOGIRI_STR_NEW2(node->ExternalID);
|
63
69
|
}
|
@@ -68,43 +74,39 @@ static VALUE external_id(VALUE self)
|
|
68
74
|
*
|
69
75
|
* Get the URI for a SYSTEM or PUBLIC Entity
|
70
76
|
*/
|
71
|
-
static VALUE
|
77
|
+
static VALUE
|
78
|
+
system_id(VALUE self)
|
72
79
|
{
|
73
80
|
xmlEntityPtr node;
|
74
|
-
|
81
|
+
Noko_Node_Get_Struct(self, xmlEntity, node);
|
75
82
|
|
76
|
-
if(!node->SystemID) return Qnil;
|
83
|
+
if (!node->SystemID) { return Qnil; }
|
77
84
|
|
78
85
|
return NOKOGIRI_STR_NEW2(node->SystemID);
|
79
86
|
}
|
80
87
|
|
81
|
-
|
82
|
-
|
83
|
-
void init_xml_entity_decl()
|
88
|
+
void
|
89
|
+
noko_init_xml_entity_decl(void)
|
84
90
|
{
|
85
|
-
|
86
|
-
|
87
|
-
VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
|
88
|
-
VALUE klass = rb_define_class_under(xml, "EntityDecl", node);
|
89
|
-
|
90
|
-
cNokogiriXmlEntityDecl = klass;
|
91
|
+
assert(cNokogiriXmlNode);
|
92
|
+
cNokogiriXmlEntityDecl = rb_define_class_under(mNokogiriXml, "EntityDecl", cNokogiriXmlNode);
|
91
93
|
|
92
|
-
rb_define_method(
|
93
|
-
rb_define_method(
|
94
|
-
rb_define_method(
|
95
|
-
rb_define_method(
|
96
|
-
rb_define_method(
|
94
|
+
rb_define_method(cNokogiriXmlEntityDecl, "original_content", original_content, 0);
|
95
|
+
rb_define_method(cNokogiriXmlEntityDecl, "content", get_content, 0);
|
96
|
+
rb_define_method(cNokogiriXmlEntityDecl, "entity_type", entity_type, 0);
|
97
|
+
rb_define_method(cNokogiriXmlEntityDecl, "external_id", external_id, 0);
|
98
|
+
rb_define_method(cNokogiriXmlEntityDecl, "system_id", system_id, 0);
|
97
99
|
|
98
100
|
rb_const_set(cNokogiriXmlEntityDecl, rb_intern("INTERNAL_GENERAL"),
|
99
|
-
|
101
|
+
INT2NUM(XML_INTERNAL_GENERAL_ENTITY));
|
100
102
|
rb_const_set(cNokogiriXmlEntityDecl, rb_intern("EXTERNAL_GENERAL_PARSED"),
|
101
|
-
|
103
|
+
INT2NUM(XML_EXTERNAL_GENERAL_PARSED_ENTITY));
|
102
104
|
rb_const_set(cNokogiriXmlEntityDecl, rb_intern("EXTERNAL_GENERAL_UNPARSED"),
|
103
|
-
|
105
|
+
INT2NUM(XML_EXTERNAL_GENERAL_UNPARSED_ENTITY));
|
104
106
|
rb_const_set(cNokogiriXmlEntityDecl, rb_intern("INTERNAL_PARAMETER"),
|
105
|
-
|
107
|
+
INT2NUM(XML_INTERNAL_PARAMETER_ENTITY));
|
106
108
|
rb_const_set(cNokogiriXmlEntityDecl, rb_intern("EXTERNAL_PARAMETER"),
|
107
|
-
|
109
|
+
INT2NUM(XML_EXTERNAL_PARAMETER_ENTITY));
|
108
110
|
rb_const_set(cNokogiriXmlEntityDecl, rb_intern("INTERNAL_PREDEFINED"),
|
109
|
-
|
111
|
+
INT2NUM(XML_INTERNAL_PREDEFINED_ENTITY));
|
110
112
|
}
|
@@ -1,4 +1,6 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
|
+
|
3
|
+
VALUE cNokogiriXmlEntityReference;
|
2
4
|
|
3
5
|
/*
|
4
6
|
* call-seq:
|
@@ -6,7 +8,8 @@
|
|
6
8
|
*
|
7
9
|
* Create a new EntityReference element on the +document+ with +name+
|
8
10
|
*/
|
9
|
-
static VALUE
|
11
|
+
static VALUE
|
12
|
+
new (int argc, VALUE *argv, VALUE klass)
|
10
13
|
{
|
11
14
|
xmlDocPtr xml_doc;
|
12
15
|
xmlNodePtr node;
|
@@ -17,36 +20,31 @@ static VALUE new(int argc, VALUE *argv, VALUE klass)
|
|
17
20
|
|
18
21
|
rb_scan_args(argc, argv, "2*", &document, &name, &rest);
|
19
22
|
|
20
|
-
|
23
|
+
xml_doc = noko_xml_document_unwrap(document);
|
21
24
|
|
22
25
|
node = xmlNewReference(
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
+
xml_doc,
|
27
|
+
(const xmlChar *)StringValueCStr(name)
|
28
|
+
);
|
26
29
|
|
27
|
-
|
30
|
+
noko_xml_document_pin_node(node);
|
28
31
|
|
29
|
-
rb_node =
|
32
|
+
rb_node = noko_xml_node_wrap(klass, node);
|
30
33
|
rb_obj_call_init(rb_node, argc, argv);
|
31
34
|
|
32
|
-
if(rb_block_given_p()) rb_yield(rb_node);
|
35
|
+
if (rb_block_given_p()) { rb_yield(rb_node); }
|
33
36
|
|
34
37
|
return rb_node;
|
35
38
|
}
|
36
39
|
|
37
|
-
|
38
|
-
void
|
40
|
+
void
|
41
|
+
noko_init_xml_entity_reference(void)
|
39
42
|
{
|
40
|
-
|
41
|
-
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
42
|
-
VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
|
43
|
-
|
43
|
+
assert(cNokogiriXmlNode);
|
44
44
|
/*
|
45
45
|
* EntityReference represents an EntityReference node in an xml document.
|
46
46
|
*/
|
47
|
-
|
48
|
-
|
49
|
-
cNokogiriXmlEntityReference = klass;
|
47
|
+
cNokogiriXmlEntityReference = rb_define_class_under(mNokogiriXml, "EntityReference", cNokogiriXmlNode);
|
50
48
|
|
51
|
-
rb_define_singleton_method(
|
49
|
+
rb_define_singleton_method(cNokogiriXmlEntityReference, "new", new, -1);
|
52
50
|
}
|
@@ -1,111 +1,185 @@
|
|
1
|
-
#include <
|
1
|
+
#include <nokogiri.h>
|
2
|
+
|
3
|
+
/*
|
4
|
+
* The lifecycle of a Namespace node is more complicated than other Nodes, for two reasons:
|
5
|
+
*
|
6
|
+
* 1. the underlying C structure has a different layout than all the other node structs, with the
|
7
|
+
* `_private` member where we store a pointer to Ruby object data not being in first position.
|
8
|
+
* 2. xmlNs structures returned in an xmlNodeset from an XPath query are copies of the document's
|
9
|
+
* namespaces, and so do not share the same memory lifecycle as everything else in a document.
|
10
|
+
*
|
11
|
+
* As a result of 1, you may see special handling of XML_NAMESPACE_DECL node types throughout the
|
12
|
+
* Nokogiri C code, though I intend to wrap up that logic in ruby_object_{get,set} functions
|
13
|
+
* shortly.
|
14
|
+
*
|
15
|
+
* As a result of 2, you will see we have special handling in this file and in xml_node_set.c to
|
16
|
+
* carefully manage the memory lifecycle of xmlNs structs to match the Ruby object's GC
|
17
|
+
* lifecycle. In xml_node_set.c we have local versions of xmlXPathNodeSetDel() and
|
18
|
+
* xmlXPathFreeNodeSet() that avoid freeing xmlNs structs in the node set. In this file, we decide
|
19
|
+
* whether or not to call dealloc_namespace() depending on whether the xmlNs struct appears to be
|
20
|
+
* in an xmlNodeSet (and thus the result of an XPath query) or not.
|
21
|
+
*
|
22
|
+
* Yes, this is madness.
|
23
|
+
*/
|
2
24
|
|
3
25
|
VALUE cNokogiriXmlNamespace ;
|
4
26
|
|
5
|
-
static void
|
27
|
+
static void
|
28
|
+
_xml_namespace_dealloc(void *ptr)
|
6
29
|
{
|
7
30
|
/*
|
8
|
-
*
|
9
31
|
* this deallocator is only used for namespace nodes that are part of an xpath
|
10
|
-
* node set.
|
11
|
-
*
|
12
|
-
* see Nokogiri_wrap_xml_namespace() for more details.
|
13
|
-
*
|
32
|
+
* node set. see noko_xml_namespace_wrap().
|
14
33
|
*/
|
15
|
-
|
34
|
+
xmlNsPtr ns = ptr;
|
35
|
+
|
16
36
|
if (ns->href) {
|
17
|
-
xmlFree((
|
37
|
+
xmlFree(DISCARD_CONST_QUAL_XMLCHAR(ns->href));
|
18
38
|
}
|
19
39
|
if (ns->prefix) {
|
20
|
-
xmlFree((
|
40
|
+
xmlFree(DISCARD_CONST_QUAL_XMLCHAR(ns->prefix));
|
21
41
|
}
|
22
42
|
xmlFree(ns);
|
23
|
-
NOKOGIRI_DEBUG_END(ns) ;
|
24
43
|
}
|
25
44
|
|
45
|
+
#ifdef HAVE_RB_GC_LOCATION
|
46
|
+
static void
|
47
|
+
_xml_namespace_update_references(void *ptr)
|
48
|
+
{
|
49
|
+
xmlNsPtr ns = ptr;
|
50
|
+
if (ns->_private) {
|
51
|
+
ns->_private = (void *)rb_gc_location((VALUE)ns->_private);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
#else
|
55
|
+
# define _xml_namespace_update_references 0
|
56
|
+
#endif
|
57
|
+
|
58
|
+
static const rb_data_type_t nokogiri_xml_namespace_type_with_dealloc = {
|
59
|
+
.wrap_struct_name = "Nokogiri::XML::Namespace#with_dealloc",
|
60
|
+
.function = {
|
61
|
+
.dfree = _xml_namespace_dealloc,
|
62
|
+
.dcompact = _xml_namespace_update_references,
|
63
|
+
},
|
64
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
|
65
|
+
};
|
66
|
+
|
67
|
+
static const rb_data_type_t nokogiri_xml_namespace_type_without_dealloc = {
|
68
|
+
.wrap_struct_name = "Nokogiri::XML::Namespace#without_dealloc",
|
69
|
+
.function = {
|
70
|
+
.dcompact = _xml_namespace_update_references,
|
71
|
+
},
|
72
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_WB_PROTECTED,
|
73
|
+
};
|
26
74
|
|
27
75
|
/*
|
28
|
-
*
|
29
|
-
*
|
76
|
+
* :call-seq:
|
77
|
+
* prefix() → String or nil
|
78
|
+
*
|
79
|
+
* Return the prefix for this Namespace, or +nil+ if there is no prefix (e.g., default namespace).
|
80
|
+
*
|
81
|
+
* *Example*
|
82
|
+
*
|
83
|
+
* doc = Nokogiri::XML.parse(<<~XML)
|
84
|
+
* <?xml version="1.0"?>
|
85
|
+
* <root xmlns="http://nokogiri.org/ns/default" xmlns:noko="http://nokogiri.org/ns/noko">
|
86
|
+
* <child1 foo="abc" noko:bar="def"/>
|
87
|
+
* <noko:child2 foo="qwe" noko:bar="rty"/>
|
88
|
+
* </root>
|
89
|
+
* XML
|
90
|
+
*
|
91
|
+
* doc.root.elements.first.namespace.prefix
|
92
|
+
* # => nil
|
30
93
|
*
|
31
|
-
*
|
94
|
+
* doc.root.elements.last.namespace.prefix
|
95
|
+
* # => "noko"
|
32
96
|
*/
|
33
|
-
static VALUE
|
97
|
+
static VALUE
|
98
|
+
prefix(VALUE self)
|
34
99
|
{
|
35
100
|
xmlNsPtr ns;
|
36
101
|
|
37
|
-
|
38
|
-
if(!ns->prefix) return Qnil;
|
102
|
+
Noko_Namespace_Get_Struct(self, xmlNs, ns);
|
103
|
+
if (!ns->prefix) { return Qnil; }
|
39
104
|
|
40
105
|
return NOKOGIRI_STR_NEW2(ns->prefix);
|
41
106
|
}
|
42
107
|
|
43
108
|
/*
|
44
|
-
*
|
45
|
-
*
|
109
|
+
* :call-seq:
|
110
|
+
* href() → String
|
46
111
|
*
|
47
|
-
*
|
112
|
+
* Returns the URI reference for this Namespace.
|
113
|
+
*
|
114
|
+
* *Example*
|
115
|
+
*
|
116
|
+
* doc = Nokogiri::XML.parse(<<~XML)
|
117
|
+
* <?xml version="1.0"?>
|
118
|
+
* <root xmlns="http://nokogiri.org/ns/default" xmlns:noko="http://nokogiri.org/ns/noko">
|
119
|
+
* <child1 foo="abc" noko:bar="def"/>
|
120
|
+
* <noko:child2 foo="qwe" noko:bar="rty"/>
|
121
|
+
* </root>
|
122
|
+
* XML
|
123
|
+
*
|
124
|
+
* doc.root.elements.first.namespace.href
|
125
|
+
* # => "http://nokogiri.org/ns/default"
|
126
|
+
*
|
127
|
+
* doc.root.elements.last.namespace.href
|
128
|
+
* # => "http://nokogiri.org/ns/noko"
|
48
129
|
*/
|
49
|
-
static VALUE
|
130
|
+
static VALUE
|
131
|
+
href(VALUE self)
|
50
132
|
{
|
51
133
|
xmlNsPtr ns;
|
52
134
|
|
53
|
-
|
54
|
-
if(!ns->href) return Qnil;
|
135
|
+
Noko_Namespace_Get_Struct(self, xmlNs, ns);
|
136
|
+
if (!ns->href) { return Qnil; }
|
55
137
|
|
56
138
|
return NOKOGIRI_STR_NEW2(ns->href);
|
57
139
|
}
|
58
140
|
|
59
|
-
|
141
|
+
VALUE
|
142
|
+
noko_xml_namespace_wrap(xmlNsPtr c_namespace, xmlDocPtr c_document)
|
60
143
|
{
|
61
|
-
|
62
|
-
}
|
63
|
-
|
64
|
-
VALUE Nokogiri_wrap_xml_namespace(xmlDocPtr doc, xmlNsPtr node)
|
65
|
-
{
|
66
|
-
VALUE ns, document, node_cache;
|
67
|
-
|
68
|
-
assert(doc->type == XML_DOCUMENT_NODE || doc->type == XML_HTML_DOCUMENT_NODE);
|
144
|
+
VALUE rb_namespace;
|
69
145
|
|
70
|
-
if (
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
ns = Data_Wrap_Struct(cNokogiriXmlNamespace, 0, 0, node);
|
146
|
+
if (c_namespace->_private) {
|
147
|
+
return (VALUE)c_namespace->_private;
|
148
|
+
}
|
75
149
|
|
76
|
-
if (
|
77
|
-
|
150
|
+
if (c_document) {
|
151
|
+
rb_namespace = TypedData_Wrap_Struct(cNokogiriXmlNamespace,
|
152
|
+
&nokogiri_xml_namespace_type_without_dealloc,
|
153
|
+
c_namespace);
|
78
154
|
|
79
|
-
if (
|
80
|
-
|
81
|
-
|
82
|
-
* we need to make sure we manage this memory.
|
83
|
-
*
|
84
|
-
* see comments in xml_node_set.c for more details.
|
85
|
-
*/
|
86
|
-
ns = Data_Wrap_Struct(cNokogiriXmlNamespace, 0, dealloc_namespace, node);
|
87
|
-
} else {
|
88
|
-
ns = Data_Wrap_Struct(cNokogiriXmlNamespace, 0, 0, node);
|
89
|
-
node_cache = rb_iv_get(document, "@node_cache");
|
90
|
-
rb_ary_push(node_cache, ns);
|
155
|
+
if (DOC_RUBY_OBJECT_TEST(c_document)) {
|
156
|
+
rb_iv_set(rb_namespace, "@document", DOC_RUBY_OBJECT(c_document));
|
157
|
+
rb_ary_push(DOC_NODE_CACHE(c_document), rb_namespace);
|
91
158
|
}
|
92
|
-
|
93
|
-
|
159
|
+
} else {
|
160
|
+
rb_namespace = TypedData_Wrap_Struct(cNokogiriXmlNamespace,
|
161
|
+
&nokogiri_xml_namespace_type_with_dealloc,
|
162
|
+
c_namespace);
|
94
163
|
}
|
95
164
|
|
96
|
-
|
165
|
+
c_namespace->_private = (void *)rb_namespace;
|
97
166
|
|
98
|
-
return
|
167
|
+
return rb_namespace;
|
168
|
+
}
|
169
|
+
|
170
|
+
VALUE
|
171
|
+
noko_xml_namespace_wrap_xpath_copy(xmlNsPtr c_namespace)
|
172
|
+
{
|
173
|
+
return noko_xml_namespace_wrap(c_namespace, NULL);
|
99
174
|
}
|
100
175
|
|
101
|
-
void
|
176
|
+
void
|
177
|
+
noko_init_xml_namespace(void)
|
102
178
|
{
|
103
|
-
|
104
|
-
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
105
|
-
VALUE klass = rb_define_class_under(xml, "Namespace", rb_cObject);
|
179
|
+
cNokogiriXmlNamespace = rb_define_class_under(mNokogiriXml, "Namespace", rb_cObject);
|
106
180
|
|
107
|
-
cNokogiriXmlNamespace
|
181
|
+
rb_undef_alloc_func(cNokogiriXmlNamespace);
|
108
182
|
|
109
|
-
rb_define_method(
|
110
|
-
rb_define_method(
|
183
|
+
rb_define_method(cNokogiriXmlNamespace, "prefix", prefix, 0);
|
184
|
+
rb_define_method(cNokogiriXmlNamespace, "href", href, 0);
|
111
185
|
}
|