nokogiri 1.2.3-x86-mswin32-60 → 1.4.5-x86-mswin32-60
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.
- data/.autotest +18 -7
- data/.gemtest +0 -0
- data/CHANGELOG.ja.rdoc +297 -3
- data/CHANGELOG.rdoc +289 -0
- data/Manifest.txt +148 -37
- data/README.ja.rdoc +20 -20
- data/README.rdoc +53 -22
- data/Rakefile +127 -211
- data/bin/nokogiri +54 -0
- data/ext/nokogiri/depend +358 -0
- data/ext/nokogiri/extconf.rb +89 -54
- data/ext/nokogiri/html_document.c +34 -27
- data/ext/nokogiri/html_document.h +1 -1
- data/ext/nokogiri/html_element_description.c +276 -0
- data/ext/nokogiri/html_element_description.h +10 -0
- data/ext/nokogiri/html_entity_lookup.c +7 -5
- data/ext/nokogiri/html_entity_lookup.h +1 -1
- data/ext/nokogiri/html_sax_parser_context.c +94 -0
- data/ext/nokogiri/html_sax_parser_context.h +11 -0
- data/ext/nokogiri/{native.c → nokogiri.c} +31 -7
- data/ext/nokogiri/{native.h → nokogiri.h} +68 -41
- data/ext/nokogiri/xml_attr.c +20 -9
- data/ext/nokogiri/xml_attr.h +1 -1
- data/ext/nokogiri/xml_attribute_decl.c +70 -0
- data/ext/nokogiri/xml_attribute_decl.h +9 -0
- data/ext/nokogiri/xml_cdata.c +21 -9
- data/ext/nokogiri/xml_cdata.h +1 -1
- data/ext/nokogiri/xml_comment.c +18 -6
- data/ext/nokogiri/xml_comment.h +1 -1
- data/ext/nokogiri/xml_document.c +247 -68
- data/ext/nokogiri/xml_document.h +5 -3
- data/ext/nokogiri/xml_document_fragment.c +15 -7
- data/ext/nokogiri/xml_document_fragment.h +1 -1
- data/ext/nokogiri/xml_dtd.c +110 -10
- data/ext/nokogiri/xml_dtd.h +3 -1
- data/ext/nokogiri/xml_element_content.c +123 -0
- data/ext/nokogiri/xml_element_content.h +10 -0
- data/ext/nokogiri/xml_element_decl.c +69 -0
- data/ext/nokogiri/xml_element_decl.h +9 -0
- data/ext/nokogiri/xml_encoding_handler.c +79 -0
- data/ext/nokogiri/xml_encoding_handler.h +8 -0
- data/ext/nokogiri/xml_entity_decl.c +110 -0
- data/ext/nokogiri/xml_entity_decl.h +10 -0
- data/ext/nokogiri/xml_entity_reference.c +16 -5
- data/ext/nokogiri/xml_entity_reference.h +1 -1
- data/ext/nokogiri/xml_io.c +40 -8
- data/ext/nokogiri/xml_io.h +2 -1
- data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
- data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
- data/ext/nokogiri/xml_namespace.c +84 -0
- data/ext/nokogiri/xml_namespace.h +13 -0
- data/ext/nokogiri/xml_node.c +782 -225
- data/ext/nokogiri/xml_node.h +2 -4
- data/ext/nokogiri/xml_node_set.c +253 -34
- data/ext/nokogiri/xml_node_set.h +2 -2
- data/ext/nokogiri/xml_processing_instruction.c +17 -5
- data/ext/nokogiri/xml_processing_instruction.h +1 -1
- data/ext/nokogiri/xml_reader.c +277 -85
- data/ext/nokogiri/xml_reader.h +1 -1
- data/ext/nokogiri/xml_relax_ng.c +168 -0
- data/ext/nokogiri/xml_relax_ng.h +9 -0
- data/ext/nokogiri/xml_sax_parser.c +183 -111
- data/ext/nokogiri/xml_sax_parser.h +30 -1
- data/ext/nokogiri/xml_sax_parser_context.c +199 -0
- data/ext/nokogiri/xml_sax_parser_context.h +10 -0
- data/ext/nokogiri/xml_sax_push_parser.c +42 -12
- data/ext/nokogiri/xml_sax_push_parser.h +1 -1
- data/ext/nokogiri/xml_schema.c +205 -0
- data/ext/nokogiri/xml_schema.h +9 -0
- data/ext/nokogiri/xml_syntax_error.c +28 -173
- data/ext/nokogiri/xml_syntax_error.h +2 -1
- data/ext/nokogiri/xml_text.c +16 -6
- data/ext/nokogiri/xml_text.h +1 -1
- data/ext/nokogiri/xml_xpath_context.c +104 -47
- data/ext/nokogiri/xml_xpath_context.h +1 -1
- data/ext/nokogiri/xslt_stylesheet.c +161 -19
- data/ext/nokogiri/xslt_stylesheet.h +1 -1
- data/lib/nokogiri.rb +47 -8
- data/lib/nokogiri/1.8/nokogiri.so +0 -0
- data/lib/nokogiri/1.9/nokogiri.so +0 -0
- data/lib/nokogiri/css.rb +6 -3
- data/lib/nokogiri/css/node.rb +14 -12
- data/lib/nokogiri/css/parser.rb +665 -62
- data/lib/nokogiri/css/parser.y +20 -10
- data/lib/nokogiri/css/parser_extras.rb +91 -0
- data/lib/nokogiri/css/tokenizer.rb +148 -5
- data/lib/nokogiri/css/tokenizer.rex +10 -9
- data/lib/nokogiri/css/xpath_visitor.rb +47 -44
- data/lib/nokogiri/decorators/slop.rb +8 -4
- data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
- data/lib/nokogiri/ffi/html/document.rb +28 -0
- data/lib/nokogiri/ffi/html/element_description.rb +81 -0
- data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
- data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
- data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
- data/lib/nokogiri/ffi/libxml.rb +420 -0
- data/lib/nokogiri/ffi/structs/common_node.rb +38 -0
- data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
- data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
- data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
- data/lib/nokogiri/ffi/structs/xml_attr.rb +20 -0
- data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
- data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
- data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
- data/lib/nokogiri/ffi/structs/xml_document.rb +117 -0
- data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
- data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
- data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
- data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
- data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
- data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
- data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
- data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
- data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
- data/lib/nokogiri/ffi/structs/xml_parser_context.rb +20 -0
- data/lib/nokogiri/ffi/structs/xml_parser_input.rb +19 -0
- data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
- data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
- data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +124 -0
- data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
- data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
- data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
- data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +38 -0
- data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
- data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
- data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
- data/lib/nokogiri/ffi/weak_bucket.rb +40 -0
- data/lib/nokogiri/ffi/xml/attr.rb +41 -0
- data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
- data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
- data/lib/nokogiri/ffi/xml/comment.rb +18 -0
- data/lib/nokogiri/ffi/xml/document.rb +174 -0
- data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
- data/lib/nokogiri/ffi/xml/dtd.rb +67 -0
- data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
- data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
- data/lib/nokogiri/ffi/xml/entity_decl.rb +36 -0
- data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
- data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
- data/lib/nokogiri/ffi/xml/node.rb +559 -0
- data/lib/nokogiri/ffi/xml/node_set.rb +150 -0
- data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
- data/lib/nokogiri/ffi/xml/reader.rb +236 -0
- data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
- data/lib/nokogiri/ffi/xml/sax/parser.rb +143 -0
- data/lib/nokogiri/ffi/xml/sax/parser_context.rb +79 -0
- data/lib/nokogiri/ffi/xml/sax/push_parser.rb +51 -0
- data/lib/nokogiri/ffi/xml/schema.rb +109 -0
- data/lib/nokogiri/ffi/xml/syntax_error.rb +98 -0
- data/lib/nokogiri/ffi/xml/text.rb +18 -0
- data/lib/nokogiri/ffi/xml/xpath.rb +9 -0
- data/lib/nokogiri/ffi/xml/xpath_context.rb +153 -0
- data/lib/nokogiri/ffi/xslt/stylesheet.rb +77 -0
- data/lib/nokogiri/html.rb +13 -47
- data/lib/nokogiri/html/builder.rb +27 -1
- data/lib/nokogiri/html/document.rb +201 -7
- data/lib/nokogiri/html/document_fragment.rb +41 -0
- data/lib/nokogiri/html/element_description.rb +23 -0
- data/lib/nokogiri/html/entity_lookup.rb +2 -0
- data/lib/nokogiri/html/sax/parser.rb +34 -3
- data/lib/nokogiri/html/sax/parser_context.rb +16 -0
- data/lib/nokogiri/nokogiri.rb +1 -0
- data/lib/nokogiri/version.rb +40 -1
- data/lib/nokogiri/version_warning.rb +14 -0
- data/lib/nokogiri/xml.rb +32 -53
- data/lib/nokogiri/xml/attr.rb +5 -0
- data/lib/nokogiri/xml/attribute_decl.rb +18 -0
- data/lib/nokogiri/xml/builder.rb +349 -29
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +7 -0
- data/lib/nokogiri/xml/document.rb +166 -14
- data/lib/nokogiri/xml/document_fragment.rb +76 -1
- data/lib/nokogiri/xml/dtd.rb +16 -3
- data/lib/nokogiri/xml/element_content.rb +36 -0
- data/lib/nokogiri/xml/element_decl.rb +13 -0
- data/lib/nokogiri/xml/entity_decl.rb +19 -0
- data/lib/nokogiri/xml/namespace.rb +13 -0
- data/lib/nokogiri/xml/node.rb +561 -166
- data/lib/nokogiri/xml/node/save_options.rb +22 -2
- data/lib/nokogiri/xml/node_set.rb +202 -40
- data/lib/nokogiri/xml/parse_options.rb +93 -0
- data/lib/nokogiri/xml/pp.rb +2 -0
- data/lib/nokogiri/xml/pp/character_data.rb +18 -0
- data/lib/nokogiri/xml/pp/node.rb +56 -0
- data/lib/nokogiri/xml/processing_instruction.rb +2 -0
- data/lib/nokogiri/xml/reader.rb +93 -8
- data/lib/nokogiri/xml/relax_ng.rb +32 -0
- data/lib/nokogiri/xml/sax.rb +1 -7
- data/lib/nokogiri/xml/sax/document.rb +107 -2
- data/lib/nokogiri/xml/sax/parser.rb +57 -7
- data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +13 -1
- data/lib/nokogiri/xml/schema.rb +63 -0
- data/lib/nokogiri/xml/syntax_error.rb +25 -1
- data/lib/nokogiri/xml/text.rb +4 -1
- data/lib/nokogiri/xml/xpath.rb +1 -1
- data/lib/nokogiri/xml/xpath/syntax_error.rb +3 -0
- data/lib/nokogiri/xml/xpath_context.rb +2 -0
- data/lib/nokogiri/xslt.rb +26 -2
- data/lib/nokogiri/xslt/stylesheet.rb +19 -0
- data/lib/xsd/xmlparser/nokogiri.rb +45 -9
- data/tasks/cross_compile.rb +173 -0
- data/tasks/test.rb +25 -69
- data/test/css/test_nthiness.rb +3 -4
- data/test/css/test_parser.rb +75 -20
- data/test/css/test_tokenizer.rb +23 -1
- data/test/css/test_xpath_visitor.rb +10 -1
- data/test/decorators/test_slop.rb +16 -0
- data/test/ffi/test_document.rb +35 -0
- data/test/files/2ch.html +108 -0
- data/test/files/address_book.rlx +12 -0
- data/test/files/address_book.xml +10 -0
- data/test/files/bar/bar.xsd +4 -0
- data/test/files/encoding.html +82 -0
- data/test/files/encoding.xhtml +84 -0
- data/test/files/foo/foo.xsd +4 -0
- data/test/files/po.xml +32 -0
- data/test/files/po.xsd +66 -0
- data/test/files/shift_jis.html +10 -0
- data/test/files/shift_jis.xml +5 -0
- data/test/files/snuggles.xml +3 -0
- data/test/files/staff.dtd +10 -0
- data/test/files/valid_bar.xml +2 -0
- data/test/helper.rb +101 -23
- data/test/html/sax/test_parser.rb +81 -2
- data/test/html/sax/test_parser_context.rb +48 -0
- data/test/html/test_builder.rb +39 -8
- data/test/html/test_document.rb +186 -23
- data/test/html/test_document_encoding.rb +78 -1
- data/test/html/test_document_fragment.rb +253 -0
- data/test/html/test_element_description.rb +98 -0
- data/test/html/test_named_characters.rb +1 -1
- data/test/html/test_node.rb +124 -36
- data/test/html/test_node_encoding.rb +27 -0
- data/test/test_convert_xpath.rb +1 -52
- data/test/test_css_cache.rb +2 -13
- data/test/test_encoding_handler.rb +46 -0
- data/test/test_memory_leak.rb +88 -19
- data/test/test_nokogiri.rb +38 -5
- data/test/test_reader.rb +188 -6
- data/test/test_soap4r_sax.rb +52 -0
- data/test/test_xslt_transforms.rb +183 -83
- data/test/xml/node/test_save_options.rb +1 -1
- data/test/xml/node/test_subclass.rb +44 -0
- data/test/xml/sax/test_parser.rb +175 -4
- data/test/xml/sax/test_parser_context.rb +113 -0
- data/test/xml/sax/test_push_parser.rb +90 -2
- data/test/xml/test_attr.rb +35 -1
- data/test/xml/test_attribute_decl.rb +82 -0
- data/test/xml/test_builder.rb +186 -1
- data/test/xml/test_cdata.rb +32 -1
- data/test/xml/test_comment.rb +13 -1
- data/test/xml/test_document.rb +415 -43
- data/test/xml/test_document_encoding.rb +1 -1
- data/test/xml/test_document_fragment.rb +173 -5
- data/test/xml/test_dtd.rb +61 -6
- data/test/xml/test_dtd_encoding.rb +3 -1
- data/test/xml/test_element_content.rb +56 -0
- data/test/xml/test_element_decl.rb +73 -0
- data/test/xml/test_entity_decl.rb +120 -0
- data/test/xml/test_entity_reference.rb +5 -1
- data/test/xml/test_namespace.rb +68 -0
- data/test/xml/test_node.rb +546 -201
- data/test/xml/test_node_attributes.rb +34 -0
- data/test/xml/test_node_encoding.rb +33 -3
- data/test/xml/test_node_reparenting.rb +321 -0
- data/test/xml/test_node_set.rb +538 -2
- data/test/xml/test_parse_options.rb +52 -0
- data/test/xml/test_processing_instruction.rb +6 -1
- data/test/xml/test_reader_encoding.rb +1 -1
- data/test/xml/test_relax_ng.rb +60 -0
- data/test/xml/test_schema.rb +94 -0
- data/test/xml/test_syntax_error.rb +12 -0
- data/test/xml/test_text.rb +35 -1
- data/test/xml/test_unparented_node.rb +5 -5
- data/test/xml/test_xpath.rb +142 -11
- data/test/xslt/test_custom_functions.rb +94 -0
- metadata +328 -92
- data/ext/nokogiri/html_sax_parser.c +0 -57
- data/ext/nokogiri/html_sax_parser.h +0 -11
- data/ext/nokogiri/iconv.dll +0 -0
- data/ext/nokogiri/libexslt.dll +0 -0
- data/ext/nokogiri/libxml2.dll +0 -0
- data/ext/nokogiri/libxslt.dll +0 -0
- data/ext/nokogiri/native.so +0 -0
- data/ext/nokogiri/xml_xpath.c +0 -53
- data/ext/nokogiri/xml_xpath.h +0 -11
- data/ext/nokogiri/zlib1.dll +0 -0
- data/lib/action-nokogiri.rb +0 -30
- data/lib/nokogiri/css/generated_parser.rb +0 -713
- data/lib/nokogiri/css/generated_tokenizer.rb +0 -144
- data/lib/nokogiri/decorators.rb +0 -2
- data/lib/nokogiri/decorators/hpricot.rb +0 -3
- data/lib/nokogiri/decorators/hpricot/node.rb +0 -56
- data/lib/nokogiri/decorators/hpricot/node_set.rb +0 -54
- data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +0 -28
- data/lib/nokogiri/hpricot.rb +0 -51
- data/lib/nokogiri/xml/comment.rb +0 -6
- data/lib/nokogiri/xml/element.rb +0 -6
- data/lib/nokogiri/xml/entity_declaration.rb +0 -9
- data/lib/nokogiri/xml/fragment_handler.rb +0 -34
- data/test/hpricot/files/basic.xhtml +0 -17
- data/test/hpricot/files/boingboing.html +0 -2266
- data/test/hpricot/files/cy0.html +0 -3653
- data/test/hpricot/files/immob.html +0 -400
- data/test/hpricot/files/pace_application.html +0 -1320
- data/test/hpricot/files/tenderlove.html +0 -16
- data/test/hpricot/files/uswebgen.html +0 -220
- data/test/hpricot/files/utf8.html +0 -1054
- data/test/hpricot/files/week9.html +0 -1723
- data/test/hpricot/files/why.xml +0 -19
- data/test/hpricot/load_files.rb +0 -11
- data/test/hpricot/test_alter.rb +0 -68
- data/test/hpricot/test_builder.rb +0 -20
- data/test/hpricot/test_parser.rb +0 -426
- data/test/hpricot/test_paths.rb +0 -15
- data/test/hpricot/test_preserved.rb +0 -77
- data/test/hpricot/test_xml.rb +0 -30
- data/test/test_gc.rb +0 -15
data/ext/nokogiri/xml_attr.h
CHANGED
@@ -0,0 +1,70 @@
|
|
1
|
+
#include <xml_attribute_decl.h>
|
2
|
+
|
3
|
+
/*
|
4
|
+
* call-seq:
|
5
|
+
* attribute_type
|
6
|
+
*
|
7
|
+
* The attribute_type for this AttributeDecl
|
8
|
+
*/
|
9
|
+
static VALUE attribute_type(VALUE self)
|
10
|
+
{
|
11
|
+
xmlAttributePtr node;
|
12
|
+
Data_Get_Struct(self, xmlAttribute, node);
|
13
|
+
return INT2NUM((long)node->atype);
|
14
|
+
}
|
15
|
+
|
16
|
+
/*
|
17
|
+
* call-seq:
|
18
|
+
* default
|
19
|
+
*
|
20
|
+
* The default value
|
21
|
+
*/
|
22
|
+
static VALUE default_value(VALUE self)
|
23
|
+
{
|
24
|
+
xmlAttributePtr node;
|
25
|
+
Data_Get_Struct(self, xmlAttribute, node);
|
26
|
+
|
27
|
+
if(node->defaultValue) return NOKOGIRI_STR_NEW2(node->defaultValue);
|
28
|
+
return Qnil;
|
29
|
+
}
|
30
|
+
|
31
|
+
/*
|
32
|
+
* call-seq:
|
33
|
+
* enumeration
|
34
|
+
*
|
35
|
+
* An enumeration of possible values
|
36
|
+
*/
|
37
|
+
static VALUE enumeration(VALUE self)
|
38
|
+
{
|
39
|
+
xmlAttributePtr node;
|
40
|
+
xmlEnumerationPtr enm;
|
41
|
+
VALUE list;
|
42
|
+
|
43
|
+
Data_Get_Struct(self, xmlAttribute, node);
|
44
|
+
|
45
|
+
list = rb_ary_new();
|
46
|
+
enm = node->tree;
|
47
|
+
|
48
|
+
while(enm) {
|
49
|
+
rb_ary_push(list, NOKOGIRI_STR_NEW2(enm->name));
|
50
|
+
enm = enm->next;
|
51
|
+
}
|
52
|
+
|
53
|
+
return list;
|
54
|
+
}
|
55
|
+
|
56
|
+
VALUE cNokogiriXmlAttributeDecl;
|
57
|
+
|
58
|
+
void init_xml_attribute_decl()
|
59
|
+
{
|
60
|
+
VALUE nokogiri = rb_define_module("Nokogiri");
|
61
|
+
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
62
|
+
VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
|
63
|
+
VALUE klass = rb_define_class_under(xml, "AttributeDecl", node);
|
64
|
+
|
65
|
+
cNokogiriXmlAttributeDecl = klass;
|
66
|
+
|
67
|
+
rb_define_method(klass, "attribute_type", attribute_type, 0);
|
68
|
+
rb_define_method(klass, "default", default_value, 0);
|
69
|
+
rb_define_method(klass, "enumeration", enumeration, 0);
|
70
|
+
}
|
data/ext/nokogiri/xml_cdata.c
CHANGED
@@ -4,20 +4,31 @@
|
|
4
4
|
* call-seq:
|
5
5
|
* new(document, content)
|
6
6
|
*
|
7
|
-
* Create a new
|
7
|
+
* Create a new CDATA element on the +document+ with +content+
|
8
8
|
*/
|
9
|
-
static VALUE new(
|
9
|
+
static VALUE new(int argc, VALUE *argv, VALUE klass)
|
10
10
|
{
|
11
11
|
xmlDocPtr xml_doc;
|
12
|
+
xmlNodePtr node;
|
13
|
+
VALUE doc;
|
14
|
+
VALUE content;
|
15
|
+
VALUE rest;
|
16
|
+
VALUE rb_node;
|
17
|
+
|
18
|
+
rb_scan_args(argc, argv, "2*", &doc, &content, &rest);
|
19
|
+
|
12
20
|
Data_Get_Struct(doc, xmlDoc, xml_doc);
|
13
21
|
|
14
|
-
|
15
|
-
xml_doc,
|
16
|
-
(const xmlChar *)StringValuePtr(content),
|
17
|
-
RSTRING_LEN(content)
|
22
|
+
node = xmlNewCDataBlock(
|
23
|
+
xml_doc->doc,
|
24
|
+
NIL_P(content) ? NULL : (const xmlChar *)StringValuePtr(content),
|
25
|
+
NIL_P(content) ? 0 : (int)RSTRING_LEN(content)
|
18
26
|
);
|
19
27
|
|
20
|
-
|
28
|
+
NOKOGIRI_ROOT_NODE(node);
|
29
|
+
|
30
|
+
rb_node = Nokogiri_wrap_xml_node(klass, node);
|
31
|
+
rb_obj_call_init(rb_node, argc, argv);
|
21
32
|
|
22
33
|
if(rb_block_given_p()) rb_yield(rb_node);
|
23
34
|
|
@@ -30,7 +41,8 @@ void init_xml_cdata()
|
|
30
41
|
VALUE nokogiri = rb_define_module("Nokogiri");
|
31
42
|
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
32
43
|
VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
|
33
|
-
VALUE
|
44
|
+
VALUE char_data = rb_define_class_under(xml, "CharacterData", node);
|
45
|
+
VALUE text = rb_define_class_under(xml, "Text", char_data);
|
34
46
|
|
35
47
|
/*
|
36
48
|
* CData represents a CData node in an xml document.
|
@@ -40,5 +52,5 @@ void init_xml_cdata()
|
|
40
52
|
|
41
53
|
cNokogiriXmlCData = klass;
|
42
54
|
|
43
|
-
rb_define_singleton_method(klass, "new", new,
|
55
|
+
rb_define_singleton_method(klass, "new", new, -1);
|
44
56
|
}
|
data/ext/nokogiri/xml_cdata.h
CHANGED
data/ext/nokogiri/xml_comment.c
CHANGED
@@ -6,17 +6,28 @@
|
|
6
6
|
*
|
7
7
|
* Create a new Comment element on the +document+ with +content+
|
8
8
|
*/
|
9
|
-
static VALUE new(
|
9
|
+
static VALUE new(int argc, VALUE *argv, VALUE klass)
|
10
10
|
{
|
11
11
|
xmlDocPtr xml_doc;
|
12
|
-
|
12
|
+
xmlNodePtr node;
|
13
|
+
VALUE document;
|
14
|
+
VALUE content;
|
15
|
+
VALUE rest;
|
16
|
+
VALUE rb_node;
|
13
17
|
|
14
|
-
|
18
|
+
rb_scan_args(argc, argv, "2*", &document, &content, &rest);
|
19
|
+
|
20
|
+
Data_Get_Struct(document, xmlDoc, xml_doc);
|
21
|
+
|
22
|
+
node = xmlNewDocComment(
|
15
23
|
xml_doc,
|
16
24
|
(const xmlChar *)StringValuePtr(content)
|
17
25
|
);
|
18
26
|
|
19
|
-
|
27
|
+
rb_node = Nokogiri_wrap_xml_node(klass, node);
|
28
|
+
rb_obj_call_init(rb_node, argc, argv);
|
29
|
+
|
30
|
+
NOKOGIRI_ROOT_NODE(node);
|
20
31
|
|
21
32
|
if(rb_block_given_p()) rb_yield(rb_node);
|
22
33
|
|
@@ -29,14 +40,15 @@ void init_xml_comment()
|
|
29
40
|
VALUE nokogiri = rb_define_module("Nokogiri");
|
30
41
|
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
31
42
|
VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
|
43
|
+
VALUE char_data = rb_define_class_under(xml, "CharacterData", node);
|
32
44
|
|
33
45
|
/*
|
34
46
|
* Comment represents a comment node in an xml document.
|
35
47
|
*/
|
36
|
-
VALUE klass = rb_define_class_under(xml, "Comment",
|
48
|
+
VALUE klass = rb_define_class_under(xml, "Comment", char_data);
|
37
49
|
|
38
50
|
|
39
51
|
cNokogiriXmlComment = klass;
|
40
52
|
|
41
|
-
rb_define_singleton_method(klass, "new", new,
|
53
|
+
rb_define_singleton_method(klass, "new", new, -1);
|
42
54
|
}
|
data/ext/nokogiri/xml_comment.h
CHANGED
data/ext/nokogiri/xml_document.c
CHANGED
@@ -1,28 +1,67 @@
|
|
1
1
|
#include <xml_document.h>
|
2
2
|
|
3
|
+
static int dealloc_node_i(xmlNodePtr key, xmlNodePtr node, xmlDocPtr doc)
|
4
|
+
{
|
5
|
+
switch(node->type) {
|
6
|
+
case XML_ATTRIBUTE_NODE:
|
7
|
+
xmlFreePropList((xmlAttrPtr)node);
|
8
|
+
break;
|
9
|
+
case XML_NAMESPACE_DECL:
|
10
|
+
xmlFree(node);
|
11
|
+
break;
|
12
|
+
default:
|
13
|
+
if(node->parent == NULL) {
|
14
|
+
xmlAddChild((xmlNodePtr)doc, node);
|
15
|
+
}
|
16
|
+
}
|
17
|
+
return ST_CONTINUE;
|
18
|
+
}
|
19
|
+
|
3
20
|
static void dealloc(xmlDocPtr doc)
|
4
21
|
{
|
22
|
+
xmlDeregisterNodeFunc func;
|
23
|
+
st_table *node_hash;
|
24
|
+
|
5
25
|
NOKOGIRI_DEBUG_START(doc);
|
26
|
+
func = xmlDeregisterNodeDefault(NULL);
|
6
27
|
|
7
|
-
|
8
|
-
xmlNodeSetPtr node_set = tuple->unlinkedNodes;
|
28
|
+
node_hash = DOC_UNLINKED_NODE_HASH(doc);
|
9
29
|
|
10
|
-
|
11
|
-
|
12
|
-
xmlAddChild((xmlNodePtr)doc, node_set->nodeTab[i]);
|
13
|
-
}
|
14
|
-
|
15
|
-
if (node_set->nodeTab != NULL)
|
16
|
-
xmlFree(node_set->nodeTab);
|
17
|
-
xmlFree(node_set);
|
30
|
+
st_foreach(node_hash, dealloc_node_i, (st_data_t)doc);
|
31
|
+
st_free_table(node_hash);
|
18
32
|
|
19
33
|
free(doc->_private);
|
20
34
|
doc->_private = NULL;
|
21
35
|
xmlFreeDoc(doc);
|
22
36
|
|
37
|
+
xmlDeregisterNodeDefault(func);
|
23
38
|
NOKOGIRI_DEBUG_END(doc);
|
24
39
|
}
|
25
40
|
|
41
|
+
static void recursively_remove_namespaces_from_node(xmlNodePtr node)
|
42
|
+
{
|
43
|
+
xmlNodePtr child ;
|
44
|
+
xmlAttrPtr property ;
|
45
|
+
|
46
|
+
xmlSetNs(node, NULL);
|
47
|
+
|
48
|
+
for (child = node->children ; child ; child = child->next)
|
49
|
+
recursively_remove_namespaces_from_node(child);
|
50
|
+
|
51
|
+
if (node->nsDef) {
|
52
|
+
xmlFreeNsList(node->nsDef);
|
53
|
+
node->nsDef = NULL;
|
54
|
+
}
|
55
|
+
|
56
|
+
if (node->properties != NULL) {
|
57
|
+
property = node->properties ;
|
58
|
+
while (property != NULL) {
|
59
|
+
if (property->ns) property->ns = NULL ;
|
60
|
+
property = property->next ;
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
26
65
|
/*
|
27
66
|
* call-seq:
|
28
67
|
* url
|
@@ -34,8 +73,7 @@ static VALUE url(VALUE self)
|
|
34
73
|
xmlDocPtr doc;
|
35
74
|
Data_Get_Struct(self, xmlDoc, doc);
|
36
75
|
|
37
|
-
if(doc->URL)
|
38
|
-
return NOKOGIRI_STR_NEW2(doc->URL, doc->encoding);
|
76
|
+
if(doc->URL) return NOKOGIRI_STR_NEW2(doc->URL);
|
39
77
|
|
40
78
|
return Qnil;
|
41
79
|
}
|
@@ -50,11 +88,37 @@ static VALUE set_root(VALUE self, VALUE root)
|
|
50
88
|
{
|
51
89
|
xmlDocPtr doc;
|
52
90
|
xmlNodePtr new_root;
|
91
|
+
xmlNodePtr old_root;
|
53
92
|
|
54
93
|
Data_Get_Struct(self, xmlDoc, doc);
|
94
|
+
|
95
|
+
old_root = NULL;
|
96
|
+
|
97
|
+
if(NIL_P(root)) {
|
98
|
+
old_root = xmlDocGetRootElement(doc);
|
99
|
+
|
100
|
+
if(old_root) {
|
101
|
+
xmlUnlinkNode(old_root);
|
102
|
+
NOKOGIRI_ROOT_NODE(old_root);
|
103
|
+
}
|
104
|
+
|
105
|
+
return root;
|
106
|
+
}
|
107
|
+
|
55
108
|
Data_Get_Struct(root, xmlNode, new_root);
|
56
109
|
|
110
|
+
|
111
|
+
/* If the new root's document is not the same as the current document,
|
112
|
+
* then we need to dup the node in to this document. */
|
113
|
+
if(new_root->doc != doc) {
|
114
|
+
old_root = xmlDocGetRootElement(doc);
|
115
|
+
if (!(new_root = xmlDocCopyNode(new_root, doc, 1))) {
|
116
|
+
rb_raise(rb_eRuntimeError, "Could not reparent node (xmlDocCopyNode)");
|
117
|
+
}
|
118
|
+
}
|
119
|
+
|
57
120
|
xmlDocSetRootElement(doc, new_root);
|
121
|
+
if(old_root) NOKOGIRI_ROOT_NODE(old_root);
|
58
122
|
return root;
|
59
123
|
}
|
60
124
|
|
@@ -67,12 +131,30 @@ static VALUE set_root(VALUE self, VALUE root)
|
|
67
131
|
static VALUE root(VALUE self)
|
68
132
|
{
|
69
133
|
xmlDocPtr doc;
|
134
|
+
xmlNodePtr root;
|
135
|
+
|
70
136
|
Data_Get_Struct(self, xmlDoc, doc);
|
71
137
|
|
72
|
-
|
138
|
+
root = xmlDocGetRootElement(doc);
|
73
139
|
|
74
140
|
if(!root) return Qnil;
|
75
|
-
return Nokogiri_wrap_xml_node(root) ;
|
141
|
+
return Nokogiri_wrap_xml_node(Qnil, root) ;
|
142
|
+
}
|
143
|
+
|
144
|
+
/*
|
145
|
+
* call-seq:
|
146
|
+
* encoding= encoding
|
147
|
+
*
|
148
|
+
* Set the encoding string for this Document
|
149
|
+
*/
|
150
|
+
static VALUE set_encoding(VALUE self, VALUE encoding)
|
151
|
+
{
|
152
|
+
xmlDocPtr doc;
|
153
|
+
Data_Get_Struct(self, xmlDoc, doc);
|
154
|
+
|
155
|
+
doc->encoding = xmlStrdup((xmlChar *)StringValuePtr(encoding));
|
156
|
+
|
157
|
+
return encoding;
|
76
158
|
}
|
77
159
|
|
78
160
|
/*
|
@@ -87,7 +169,22 @@ static VALUE encoding(VALUE self)
|
|
87
169
|
Data_Get_Struct(self, xmlDoc, doc);
|
88
170
|
|
89
171
|
if(!doc->encoding) return Qnil;
|
90
|
-
return NOKOGIRI_STR_NEW2(doc->encoding
|
172
|
+
return NOKOGIRI_STR_NEW2(doc->encoding);
|
173
|
+
}
|
174
|
+
|
175
|
+
/*
|
176
|
+
* call-seq:
|
177
|
+
* version
|
178
|
+
*
|
179
|
+
* Get the XML version for this Document
|
180
|
+
*/
|
181
|
+
static VALUE version(VALUE self)
|
182
|
+
{
|
183
|
+
xmlDocPtr doc;
|
184
|
+
Data_Get_Struct(self, xmlDoc, doc);
|
185
|
+
|
186
|
+
if(!doc->version) return Qnil;
|
187
|
+
return NOKOGIRI_STR_NEW2(doc->version);
|
91
188
|
}
|
92
189
|
|
93
190
|
/*
|
@@ -102,40 +199,41 @@ static VALUE read_io( VALUE klass,
|
|
102
199
|
VALUE encoding,
|
103
200
|
VALUE options )
|
104
201
|
{
|
105
|
-
const char * c_url = (url
|
106
|
-
const char * c_enc = (encoding
|
202
|
+
const char * c_url = NIL_P(url) ? NULL : StringValuePtr(url);
|
203
|
+
const char * c_enc = NIL_P(encoding) ? NULL : StringValuePtr(encoding);
|
107
204
|
VALUE error_list = rb_ary_new();
|
205
|
+
VALUE document;
|
206
|
+
xmlDocPtr doc;
|
108
207
|
|
109
|
-
xmlInitParser();
|
110
208
|
xmlResetLastError();
|
111
209
|
xmlSetStructuredErrorFunc((void *)error_list, Nokogiri_error_array_pusher);
|
112
210
|
|
113
|
-
|
211
|
+
doc = xmlReadIO(
|
114
212
|
(xmlInputReadCallback)io_read_callback,
|
115
213
|
(xmlInputCloseCallback)io_close_callback,
|
116
214
|
(void *)io,
|
117
215
|
c_url,
|
118
216
|
c_enc,
|
119
|
-
NUM2INT(options)
|
217
|
+
(int)NUM2INT(options)
|
120
218
|
);
|
121
219
|
xmlSetStructuredErrorFunc(NULL, NULL);
|
122
220
|
|
123
221
|
if(doc == NULL) {
|
222
|
+
xmlErrorPtr error;
|
223
|
+
|
124
224
|
xmlFreeDoc(doc);
|
125
225
|
|
126
|
-
|
226
|
+
error = xmlGetLastError();
|
127
227
|
if(error)
|
128
|
-
|
129
|
-
Nokogiri_wrap_xml_syntax_error((VALUE)NULL, error)
|
130
|
-
);
|
228
|
+
rb_exc_raise(Nokogiri_wrap_xml_syntax_error((VALUE)NULL, error));
|
131
229
|
else
|
132
230
|
rb_raise(rb_eRuntimeError, "Could not parse document");
|
133
231
|
|
134
232
|
return Qnil;
|
135
233
|
}
|
136
234
|
|
137
|
-
|
138
|
-
|
235
|
+
document = Nokogiri_wrap_xml_document(klass, doc);
|
236
|
+
rb_iv_set(document, "@errors", error_list);
|
139
237
|
return document;
|
140
238
|
}
|
141
239
|
|
@@ -152,33 +250,34 @@ static VALUE read_memory( VALUE klass,
|
|
152
250
|
VALUE options )
|
153
251
|
{
|
154
252
|
const char * c_buffer = StringValuePtr(string);
|
155
|
-
const char * c_url = (url
|
156
|
-
const char * c_enc = (encoding
|
157
|
-
int len = RSTRING_LEN(string);
|
253
|
+
const char * c_url = NIL_P(url) ? NULL : StringValuePtr(url);
|
254
|
+
const char * c_enc = NIL_P(encoding) ? NULL : StringValuePtr(encoding);
|
255
|
+
int len = (int)RSTRING_LEN(string);
|
158
256
|
VALUE error_list = rb_ary_new();
|
257
|
+
VALUE document;
|
258
|
+
xmlDocPtr doc;
|
159
259
|
|
160
|
-
xmlInitParser();
|
161
260
|
xmlResetLastError();
|
162
261
|
xmlSetStructuredErrorFunc((void *)error_list, Nokogiri_error_array_pusher);
|
163
|
-
|
262
|
+
doc = xmlReadMemory(c_buffer, len, c_url, c_enc, (int)NUM2INT(options));
|
164
263
|
xmlSetStructuredErrorFunc(NULL, NULL);
|
165
264
|
|
166
265
|
if(doc == NULL) {
|
266
|
+
xmlErrorPtr error;
|
267
|
+
|
167
268
|
xmlFreeDoc(doc);
|
168
269
|
|
169
|
-
|
270
|
+
error = xmlGetLastError();
|
170
271
|
if(error)
|
171
|
-
|
172
|
-
Nokogiri_wrap_xml_syntax_error((VALUE)NULL, error)
|
173
|
-
);
|
272
|
+
rb_exc_raise(Nokogiri_wrap_xml_syntax_error((VALUE)NULL, error));
|
174
273
|
else
|
175
274
|
rb_raise(rb_eRuntimeError, "Could not parse document");
|
176
275
|
|
177
276
|
return Qnil;
|
178
277
|
}
|
179
278
|
|
180
|
-
|
181
|
-
|
279
|
+
document = Nokogiri_wrap_xml_document(klass, doc);
|
280
|
+
rb_iv_set(document, "@errors", error_list);
|
182
281
|
return document;
|
183
282
|
}
|
184
283
|
|
@@ -191,62 +290,135 @@ static VALUE read_memory( VALUE klass,
|
|
191
290
|
*/
|
192
291
|
static VALUE duplicate_node(int argc, VALUE *argv, VALUE self)
|
193
292
|
{
|
293
|
+
xmlDocPtr doc, dup;
|
194
294
|
VALUE level;
|
195
295
|
|
196
296
|
if(rb_scan_args(argc, argv, "01", &level) == 0)
|
197
|
-
level = INT2NUM(1);
|
297
|
+
level = INT2NUM((long)1);
|
198
298
|
|
199
|
-
xmlDocPtr doc, dup;
|
200
299
|
Data_Get_Struct(self, xmlDoc, doc);
|
201
300
|
|
202
|
-
dup = xmlCopyDoc(doc, NUM2INT(level));
|
301
|
+
dup = xmlCopyDoc(doc, (int)NUM2INT(level));
|
203
302
|
if(dup == NULL) return Qnil;
|
204
303
|
|
205
304
|
dup->type = doc->type;
|
206
|
-
|
207
|
-
return Nokogiri_wrap_xml_document(cNokogiriXmlDocument, dup);
|
208
|
-
else
|
209
|
-
return Nokogiri_wrap_xml_document(cNokogiriHtmlDocument, dup);
|
305
|
+
return Nokogiri_wrap_xml_document(rb_obj_class(self), dup);
|
210
306
|
}
|
211
307
|
|
212
308
|
/*
|
213
309
|
* call-seq:
|
214
|
-
* new
|
310
|
+
* new(version = default)
|
215
311
|
*
|
216
|
-
* Create a new document
|
312
|
+
* Create a new document with +version+ (defaults to "1.0")
|
217
313
|
*/
|
218
314
|
static VALUE new(int argc, VALUE *argv, VALUE klass)
|
219
315
|
{
|
220
|
-
|
221
|
-
|
222
|
-
|
316
|
+
xmlDocPtr doc;
|
317
|
+
VALUE version, rest, rb_doc ;
|
318
|
+
|
319
|
+
rb_scan_args(argc, argv, "0*", &rest);
|
320
|
+
version = rb_ary_entry(rest, (long)0);
|
321
|
+
if (NIL_P(version)) version = rb_str_new2("1.0");
|
223
322
|
|
224
|
-
|
225
|
-
|
323
|
+
doc = xmlNewDoc((xmlChar *)StringValuePtr(version));
|
324
|
+
rb_doc = Nokogiri_wrap_xml_document(klass, doc);
|
325
|
+
rb_obj_call_init(rb_doc, argc, argv);
|
326
|
+
return rb_doc ;
|
226
327
|
}
|
227
328
|
|
228
329
|
/*
|
229
330
|
* call-seq:
|
230
|
-
*
|
331
|
+
* remove_namespaces!
|
332
|
+
*
|
333
|
+
* Remove all namespaces from all nodes in the document.
|
334
|
+
*
|
335
|
+
* This could be useful for developers who either don't understand namespaces
|
336
|
+
* or don't care about them.
|
337
|
+
*
|
338
|
+
* The following example shows a use case, and you can decide for yourself
|
339
|
+
* whether this is a good thing or not:
|
340
|
+
*
|
341
|
+
* doc = Nokogiri::XML <<-EOXML
|
342
|
+
* <root>
|
343
|
+
* <car xmlns:part="http://general-motors.com/">
|
344
|
+
* <part:tire>Michelin Model XGV</part:tire>
|
345
|
+
* </car>
|
346
|
+
* <bicycle xmlns:part="http://schwinn.com/">
|
347
|
+
* <part:tire>I'm a bicycle tire!</part:tire>
|
348
|
+
* </bicycle>
|
349
|
+
* </root>
|
350
|
+
* EOXML
|
351
|
+
*
|
352
|
+
* doc.xpath("//tire").to_s # => ""
|
353
|
+
* doc.xpath("//part:tire", "part" => "http://general-motors.com/").to_s # => "<part:tire>Michelin Model XGV</part:tire>"
|
354
|
+
* doc.xpath("//part:tire", "part" => "http://schwinn.com/").to_s # => "<part:tire>I'm a bicycle tire!</part:tire>"
|
355
|
+
*
|
356
|
+
* doc.remove_namespaces!
|
357
|
+
*
|
358
|
+
* doc.xpath("//tire").to_s # => "<tire>Michelin Model XGV</tire><tire>I'm a bicycle tire!</tire>"
|
359
|
+
* doc.xpath("//part:tire", "part" => "http://general-motors.com/").to_s # => ""
|
360
|
+
* doc.xpath("//part:tire", "part" => "http://schwinn.com/").to_s # => ""
|
231
361
|
*
|
232
|
-
*
|
362
|
+
* For more information on why this probably is *not* a good thing in general,
|
363
|
+
* please direct your browser to
|
364
|
+
* http://tenderlovemaking.com/2009/04/23/namespaces-in-xml/
|
233
365
|
*/
|
234
|
-
|
366
|
+
VALUE remove_namespaces_bang(VALUE self)
|
235
367
|
{
|
236
|
-
|
237
|
-
|
368
|
+
xmlDocPtr doc ;
|
369
|
+
Data_Get_Struct(self, xmlDoc, doc);
|
370
|
+
|
371
|
+
recursively_remove_namespaces_from_node((xmlNodePtr)doc);
|
372
|
+
return self;
|
238
373
|
}
|
239
374
|
|
240
|
-
/*
|
241
|
-
*
|
242
|
-
*
|
375
|
+
/* call-seq: doc.create_entity(name, type, external_id, system_id, content)
|
376
|
+
*
|
377
|
+
* Create a new entity named +name+.
|
243
378
|
*
|
244
|
-
*
|
379
|
+
* +type+ is an integer representing the type of entity to be created, and it
|
380
|
+
* defaults to Nokogiri::XML::EntityDecl::INTERNAL_GENERAL. See
|
381
|
+
* the constants on Nokogiri::XML::EntityDecl for more information.
|
382
|
+
*
|
383
|
+
* +external_id+, +system_id+, and +content+ set the External ID, System ID,
|
384
|
+
* and content respectively. All of these parameters are optional.
|
245
385
|
*/
|
246
|
-
static VALUE
|
386
|
+
static VALUE create_entity(int argc, VALUE *argv, VALUE self)
|
247
387
|
{
|
248
|
-
|
249
|
-
|
388
|
+
VALUE name;
|
389
|
+
VALUE type;
|
390
|
+
VALUE external_id;
|
391
|
+
VALUE system_id;
|
392
|
+
VALUE content;
|
393
|
+
xmlEntityPtr ptr;
|
394
|
+
xmlDocPtr doc ;
|
395
|
+
|
396
|
+
Data_Get_Struct(self, xmlDoc, doc);
|
397
|
+
|
398
|
+
rb_scan_args(argc, argv, "14", &name, &type, &external_id, &system_id,
|
399
|
+
&content);
|
400
|
+
|
401
|
+
xmlResetLastError();
|
402
|
+
ptr = xmlAddDocEntity(
|
403
|
+
doc,
|
404
|
+
(xmlChar *)(NIL_P(name) ? NULL : StringValuePtr(name)),
|
405
|
+
(int) (NIL_P(type) ? XML_INTERNAL_GENERAL_ENTITY : NUM2INT(type)),
|
406
|
+
(xmlChar *)(NIL_P(external_id) ? NULL : StringValuePtr(external_id)),
|
407
|
+
(xmlChar *)(NIL_P(system_id) ? NULL : StringValuePtr(system_id)),
|
408
|
+
(xmlChar *)(NIL_P(content) ? NULL : StringValuePtr(content))
|
409
|
+
);
|
410
|
+
|
411
|
+
if(NULL == ptr) {
|
412
|
+
xmlErrorPtr error = xmlGetLastError();
|
413
|
+
if(error)
|
414
|
+
rb_exc_raise(Nokogiri_wrap_xml_syntax_error((VALUE)NULL, error));
|
415
|
+
else
|
416
|
+
rb_raise(rb_eRuntimeError, "Could not create entity");
|
417
|
+
|
418
|
+
return Qnil;
|
419
|
+
}
|
420
|
+
|
421
|
+
return Nokogiri_wrap_xml_node(cNokogiriXmlEntityDecl, (xmlNodePtr)ptr);
|
250
422
|
}
|
251
423
|
|
252
424
|
VALUE cNokogiriXmlDocument ;
|
@@ -266,34 +438,41 @@ void init_xml_document()
|
|
266
438
|
rb_define_singleton_method(klass, "read_memory", read_memory, 4);
|
267
439
|
rb_define_singleton_method(klass, "read_io", read_io, 4);
|
268
440
|
rb_define_singleton_method(klass, "new", new, -1);
|
269
|
-
rb_define_singleton_method(klass, "substitute_entities=", substitute_entities_set, 1);
|
270
|
-
rb_define_singleton_method(klass, "load_external_subsets=", load_external_subsets_set, 1);
|
271
441
|
|
272
442
|
rb_define_method(klass, "root", root, 0);
|
273
443
|
rb_define_method(klass, "root=", set_root, 1);
|
274
444
|
rb_define_method(klass, "encoding", encoding, 0);
|
445
|
+
rb_define_method(klass, "encoding=", set_encoding, 1);
|
446
|
+
rb_define_method(klass, "version", version, 0);
|
275
447
|
rb_define_method(klass, "dup", duplicate_node, -1);
|
276
448
|
rb_define_method(klass, "url", url, 0);
|
449
|
+
rb_define_method(klass, "create_entity", create_entity, -1);
|
450
|
+
rb_define_method(klass, "remove_namespaces!", remove_namespaces_bang, 0);
|
277
451
|
}
|
278
452
|
|
279
453
|
|
280
454
|
/* this takes klass as a param because it's used for HtmlDocument, too. */
|
281
455
|
VALUE Nokogiri_wrap_xml_document(VALUE klass, xmlDocPtr doc)
|
282
456
|
{
|
283
|
-
VALUE rb_doc = Qnil;
|
284
457
|
nokogiriTuplePtr tuple = (nokogiriTuplePtr)malloc(sizeof(nokogiriTuple));
|
285
458
|
|
286
|
-
rb_doc = Data_Wrap_Struct(
|
459
|
+
VALUE rb_doc = Data_Wrap_Struct(
|
287
460
|
klass ? klass : cNokogiriXmlDocument,
|
288
461
|
0,
|
289
462
|
dealloc,
|
290
463
|
doc
|
291
464
|
);
|
465
|
+
|
466
|
+
VALUE cache = rb_ary_new();
|
292
467
|
rb_iv_set(rb_doc, "@decorators", Qnil);
|
468
|
+
rb_iv_set(rb_doc, "@node_cache", cache);
|
293
469
|
|
294
470
|
tuple->doc = (void *)rb_doc;
|
295
|
-
tuple->unlinkedNodes =
|
471
|
+
tuple->unlinkedNodes = st_init_numtable_with_size(128);
|
472
|
+
tuple->node_cache = cache;
|
296
473
|
doc->_private = tuple ;
|
297
474
|
|
475
|
+
rb_obj_call_init(rb_doc, 0, NULL);
|
476
|
+
|
298
477
|
return rb_doc ;
|
299
478
|
}
|