nokogiri 1.0.0 → 1.6.8.1
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/.autotest +26 -0
- data/.cross_rubies +9 -0
- data/.editorconfig +17 -0
- data/.gemtest +0 -0
- data/.travis.yml +51 -0
- data/CHANGELOG.rdoc +1160 -0
- data/CONTRIBUTING.md +42 -0
- data/C_CODING_STYLE.rdoc +33 -0
- data/Gemfile +22 -0
- data/LICENSE.txt +31 -0
- data/Manifest.txt +284 -40
- data/README.md +166 -0
- data/ROADMAP.md +111 -0
- data/Rakefile +310 -199
- data/STANDARD_RESPONSES.md +47 -0
- data/Y_U_NO_GEMSPEC.md +155 -0
- data/appveyor.yml +22 -0
- data/bin/nokogiri +118 -0
- data/build_all +45 -0
- data/dependencies.yml +29 -0
- data/ext/nokogiri/depend +358 -0
- data/ext/nokogiri/extconf.rb +664 -34
- data/ext/nokogiri/html_document.c +120 -33
- data/ext/nokogiri/html_document.h +1 -1
- data/ext/nokogiri/html_element_description.c +279 -0
- data/ext/nokogiri/html_element_description.h +10 -0
- data/ext/nokogiri/html_entity_lookup.c +32 -0
- data/ext/nokogiri/html_entity_lookup.h +8 -0
- data/ext/nokogiri/html_sax_parser_context.c +116 -0
- data/ext/nokogiri/html_sax_parser_context.h +11 -0
- data/ext/nokogiri/html_sax_push_parser.c +87 -0
- data/ext/nokogiri/html_sax_push_parser.h +9 -0
- data/ext/nokogiri/nokogiri.c +145 -0
- data/ext/nokogiri/nokogiri.h +131 -0
- data/ext/nokogiri/xml_attr.c +94 -0
- data/ext/nokogiri/xml_attr.h +9 -0
- data/ext/nokogiri/xml_attribute_decl.c +70 -0
- data/ext/nokogiri/xml_attribute_decl.h +9 -0
- data/ext/nokogiri/xml_cdata.c +23 -19
- data/ext/nokogiri/xml_cdata.h +1 -1
- data/ext/nokogiri/xml_comment.c +69 -0
- data/ext/nokogiri/xml_comment.h +9 -0
- data/ext/nokogiri/xml_document.c +501 -54
- data/ext/nokogiri/xml_document.h +14 -1
- data/ext/nokogiri/xml_document_fragment.c +48 -0
- data/ext/nokogiri/xml_document_fragment.h +10 -0
- data/ext/nokogiri/xml_dtd.c +109 -24
- 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 +52 -0
- data/ext/nokogiri/xml_entity_reference.h +9 -0
- data/ext/nokogiri/xml_io.c +60 -0
- data/ext/nokogiri/xml_io.h +11 -0
- data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
- data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
- data/ext/nokogiri/xml_namespace.c +117 -0
- data/ext/nokogiri/xml_namespace.h +13 -0
- data/ext/nokogiri/xml_node.c +1285 -315
- data/ext/nokogiri/xml_node.h +4 -6
- data/ext/nokogiri/xml_node_set.c +415 -54
- data/ext/nokogiri/xml_node_set.h +6 -2
- data/ext/nokogiri/xml_processing_instruction.c +56 -0
- data/ext/nokogiri/xml_processing_instruction.h +9 -0
- data/ext/nokogiri/xml_reader.c +316 -77
- data/ext/nokogiri/xml_reader.h +1 -1
- data/ext/nokogiri/xml_relax_ng.c +161 -0
- data/ext/nokogiri/xml_relax_ng.h +9 -0
- data/ext/nokogiri/xml_sax_parser.c +215 -80
- data/ext/nokogiri/xml_sax_parser.h +30 -1
- data/ext/nokogiri/xml_sax_parser_context.c +262 -0
- data/ext/nokogiri/xml_sax_parser_context.h +10 -0
- data/ext/nokogiri/xml_sax_push_parser.c +115 -0
- data/ext/nokogiri/xml_sax_push_parser.h +9 -0
- data/ext/nokogiri/xml_schema.c +205 -0
- data/ext/nokogiri/xml_schema.h +9 -0
- data/ext/nokogiri/xml_syntax_error.c +45 -175
- data/ext/nokogiri/xml_syntax_error.h +4 -2
- data/ext/nokogiri/xml_text.c +37 -14
- data/ext/nokogiri/xml_text.h +1 -1
- data/ext/nokogiri/xml_xpath_context.c +230 -13
- data/ext/nokogiri/xml_xpath_context.h +2 -1
- data/ext/nokogiri/xslt_stylesheet.c +196 -34
- data/ext/nokogiri/xslt_stylesheet.h +6 -1
- data/lib/nokogiri/css/node.rb +18 -61
- data/lib/nokogiri/css/parser.rb +725 -17
- data/lib/nokogiri/css/parser.y +126 -63
- data/lib/nokogiri/css/parser_extras.rb +91 -0
- data/lib/nokogiri/css/syntax_error.rb +7 -0
- data/lib/nokogiri/css/tokenizer.rb +148 -5
- data/lib/nokogiri/css/tokenizer.rex +31 -39
- data/lib/nokogiri/css/xpath_visitor.rb +109 -51
- data/lib/nokogiri/css.rb +24 -3
- data/lib/nokogiri/decorators/slop.rb +42 -0
- data/lib/nokogiri/html/builder.rb +27 -1
- data/lib/nokogiri/html/document.rb +329 -3
- data/lib/nokogiri/html/document_fragment.rb +39 -0
- data/lib/nokogiri/html/element_description.rb +23 -0
- data/lib/nokogiri/html/element_description_defaults.rb +671 -0
- data/lib/nokogiri/html/entity_lookup.rb +13 -0
- data/lib/nokogiri/html/sax/parser.rb +35 -4
- data/lib/nokogiri/html/sax/parser_context.rb +16 -0
- data/lib/nokogiri/html/sax/push_parser.rb +36 -0
- data/lib/nokogiri/html.rb +18 -76
- data/lib/nokogiri/syntax_error.rb +4 -0
- data/lib/nokogiri/version.rb +106 -1
- data/lib/nokogiri/xml/attr.rb +14 -0
- data/lib/nokogiri/xml/attribute_decl.rb +18 -0
- data/lib/nokogiri/xml/builder.rb +395 -31
- data/lib/nokogiri/xml/cdata.rb +4 -2
- data/lib/nokogiri/xml/character_data.rb +7 -0
- data/lib/nokogiri/xml/document.rb +267 -12
- data/lib/nokogiri/xml/document_fragment.rb +149 -0
- data/lib/nokogiri/xml/dtd.rb +27 -1
- 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/save_options.rb +61 -0
- data/lib/nokogiri/xml/node.rb +748 -109
- data/lib/nokogiri/xml/node_set.rb +200 -72
- data/lib/nokogiri/xml/parse_options.rb +120 -0
- data/lib/nokogiri/xml/pp/character_data.rb +18 -0
- data/lib/nokogiri/xml/pp/node.rb +56 -0
- data/lib/nokogiri/xml/pp.rb +2 -0
- data/lib/nokogiri/xml/processing_instruction.rb +8 -0
- data/lib/nokogiri/xml/reader.rb +102 -4
- data/lib/nokogiri/xml/relax_ng.rb +32 -0
- data/lib/nokogiri/xml/sax/document.rb +114 -2
- data/lib/nokogiri/xml/sax/parser.rb +97 -7
- data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
- data/lib/nokogiri/xml/sax.rb +2 -7
- data/lib/nokogiri/xml/schema.rb +63 -0
- data/lib/nokogiri/xml/searchable.rb +221 -0
- data/lib/nokogiri/xml/syntax_error.rb +27 -1
- data/lib/nokogiri/xml/text.rb +4 -1
- data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
- data/lib/nokogiri/xml/xpath.rb +4 -0
- data/lib/nokogiri/xml/xpath_context.rb +3 -1
- data/lib/nokogiri/xml.rb +45 -38
- data/lib/nokogiri/xslt/stylesheet.rb +19 -0
- data/lib/nokogiri/xslt.rb +47 -2
- data/lib/nokogiri.rb +117 -24
- data/lib/xsd/xmlparser/nokogiri.rb +102 -0
- data/patches/sort-patches-by-date +25 -0
- data/ports/archives/libxml2-2.9.4.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.29.tar.gz +0 -0
- data/suppressions/README.txt +1 -0
- data/suppressions/nokogiri_ree-1.8.7.358.supp +61 -0
- data/suppressions/nokogiri_ruby-1.8.7.370.supp +0 -0
- data/suppressions/nokogiri_ruby-1.9.2.320.supp +28 -0
- data/suppressions/nokogiri_ruby-1.9.3.327.supp +28 -0
- data/tasks/test.rb +100 -0
- data/test/css/test_nthiness.rb +73 -6
- data/test/css/test_parser.rb +184 -39
- data/test/css/test_tokenizer.rb +72 -19
- data/test/css/test_xpath_visitor.rb +44 -2
- data/test/decorators/test_slop.rb +20 -0
- data/test/files/2ch.html +108 -0
- data/test/files/GH_1042.html +18 -0
- data/test/files/address_book.rlx +12 -0
- data/test/files/address_book.xml +10 -0
- data/test/files/atom.xml +344 -0
- data/test/files/bar/bar.xsd +4 -0
- data/test/files/bogus.xml +0 -0
- data/test/files/dont_hurt_em_why.xml +422 -0
- data/test/files/encoding.html +82 -0
- data/test/files/encoding.xhtml +84 -0
- data/test/files/exslt.xml +8 -0
- data/test/files/exslt.xslt +35 -0
- data/test/files/foo/foo.xsd +4 -0
- data/test/files/metacharset.html +10 -0
- data/test/files/namespace_pressure_test.xml +1684 -0
- data/test/files/noencoding.html +47 -0
- data/test/files/po.xml +32 -0
- data/test/files/po.xsd +66 -0
- data/test/files/saml/saml20assertion_schema.xsd +283 -0
- data/test/files/saml/saml20protocol_schema.xsd +302 -0
- data/test/files/saml/xenc_schema.xsd +146 -0
- data/test/files/saml/xmldsig_schema.xsd +318 -0
- data/test/files/shift_jis.html +10 -0
- data/test/files/shift_jis.xml +5 -0
- data/test/files/shift_jis_no_charset.html +9 -0
- data/test/files/slow-xpath.xml +25509 -0
- data/test/files/snuggles.xml +3 -0
- data/test/files/staff.dtd +10 -0
- data/test/files/test_document_url/bar.xml +2 -0
- data/test/files/test_document_url/document.dtd +4 -0
- data/test/files/test_document_url/document.xml +6 -0
- data/test/files/tlm.html +2 -1
- data/test/files/to_be_xincluded.xml +2 -0
- data/test/files/valid_bar.xml +2 -0
- data/test/files/xinclude.xml +4 -0
- data/test/helper.rb +124 -13
- data/test/html/sax/test_parser.rb +118 -4
- data/test/html/sax/test_parser_context.rb +46 -0
- data/test/html/sax/test_push_parser.rb +87 -0
- data/test/html/test_builder.rb +94 -8
- data/test/html/test_document.rb +626 -11
- data/test/html/test_document_encoding.rb +145 -0
- data/test/html/test_document_fragment.rb +301 -0
- data/test/html/test_element_description.rb +105 -0
- data/test/html/test_named_characters.rb +14 -0
- data/test/html/test_node.rb +212 -0
- data/test/html/test_node_encoding.rb +85 -0
- data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +14 -0
- data/test/namespaces/test_namespaces_aliased_default.rb +24 -0
- data/test/namespaces/test_namespaces_in_builder_doc.rb +75 -0
- data/test/namespaces/test_namespaces_in_cloned_doc.rb +31 -0
- data/test/namespaces/test_namespaces_in_created_doc.rb +75 -0
- data/test/namespaces/test_namespaces_in_parsed_doc.rb +80 -0
- data/test/namespaces/test_namespaces_preservation.rb +31 -0
- data/test/test_convert_xpath.rb +2 -47
- data/test/test_css_cache.rb +45 -0
- data/test/test_encoding_handler.rb +48 -0
- data/test/test_memory_leak.rb +156 -0
- data/test/test_nokogiri.rb +103 -1
- data/test/test_soap4r_sax.rb +52 -0
- data/test/test_xslt_transforms.rb +293 -8
- data/test/xml/node/test_save_options.rb +28 -0
- data/test/xml/node/test_subclass.rb +44 -0
- data/test/xml/sax/test_parser.rb +309 -8
- data/test/xml/sax/test_parser_context.rb +115 -0
- data/test/xml/sax/test_push_parser.rb +157 -0
- data/test/xml/test_attr.rb +67 -0
- data/test/xml/test_attribute_decl.rb +86 -0
- data/test/xml/test_builder.rb +327 -2
- data/test/xml/test_c14n.rb +180 -0
- data/test/xml/test_cdata.rb +32 -2
- data/test/xml/test_comment.rb +40 -0
- data/test/xml/test_document.rb +846 -35
- data/test/xml/test_document_encoding.rb +31 -0
- data/test/xml/test_document_fragment.rb +271 -0
- data/test/xml/test_dtd.rb +153 -9
- data/test/xml/test_dtd_encoding.rb +31 -0
- 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 +122 -0
- data/test/xml/test_entity_reference.rb +251 -0
- data/test/xml/test_namespace.rb +96 -0
- data/test/xml/test_node.rb +1126 -105
- data/test/xml/test_node_attributes.rb +115 -0
- data/test/xml/test_node_encoding.rb +69 -0
- data/test/xml/test_node_inheritance.rb +32 -0
- data/test/xml/test_node_reparenting.rb +549 -0
- data/test/xml/test_node_set.rb +668 -9
- data/test/xml/test_parse_options.rb +64 -0
- data/test/xml/test_processing_instruction.rb +30 -0
- data/test/xml/test_reader.rb +589 -0
- data/test/xml/test_reader_encoding.rb +134 -0
- data/test/xml/test_relax_ng.rb +60 -0
- data/test/xml/test_schema.rb +142 -0
- data/test/xml/test_syntax_error.rb +30 -0
- data/test/xml/test_text.rb +49 -2
- data/test/xml/test_unparented_node.rb +440 -0
- data/test/xml/test_xinclude.rb +83 -0
- data/test/xml/test_xpath.rb +445 -0
- data/test/xslt/test_custom_functions.rb +133 -0
- data/test/xslt/test_exception_handling.rb +37 -0
- data/test_all +107 -0
- metadata +459 -115
- data/History.txt +0 -6
- data/README.ja.txt +0 -86
- data/README.txt +0 -87
- data/ext/nokogiri/html_sax_parser.c +0 -32
- data/ext/nokogiri/html_sax_parser.h +0 -11
- data/ext/nokogiri/native.c +0 -40
- data/ext/nokogiri/native.h +0 -51
- data/ext/nokogiri/xml_xpath.c +0 -46
- data/ext/nokogiri/xml_xpath.h +0 -11
- data/lib/nokogiri/css/generated_parser.rb +0 -653
- data/lib/nokogiri/css/generated_tokenizer.rb +0 -159
- data/lib/nokogiri/decorators/hpricot/node.rb +0 -58
- data/lib/nokogiri/decorators/hpricot/node_set.rb +0 -14
- data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +0 -17
- data/lib/nokogiri/decorators/hpricot.rb +0 -3
- data/lib/nokogiri/decorators.rb +0 -1
- data/lib/nokogiri/hpricot.rb +0 -47
- data/lib/nokogiri/xml/after_handler.rb +0 -18
- data/lib/nokogiri/xml/before_handler.rb +0 -32
- data/lib/nokogiri/xml/element.rb +0 -6
- data/lib/nokogiri/xml/entity_declaration.rb +0 -9
- data/nokogiri.gemspec +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 -7
- data/test/hpricot/test_alter.rb +0 -67
- data/test/hpricot/test_builder.rb +0 -27
- data/test/hpricot/test_parser.rb +0 -423
- data/test/hpricot/test_paths.rb +0 -15
- data/test/hpricot/test_preserved.rb +0 -78
- data/test/hpricot/test_xml.rb +0 -30
- data/test/test_reader.rb +0 -222
@@ -0,0 +1,48 @@
|
|
1
|
+
#include <xml_document_fragment.h>
|
2
|
+
|
3
|
+
/*
|
4
|
+
* call-seq:
|
5
|
+
* new(document)
|
6
|
+
*
|
7
|
+
* Create a new DocumentFragment element on the +document+
|
8
|
+
*/
|
9
|
+
static VALUE new(int argc, VALUE *argv, VALUE klass)
|
10
|
+
{
|
11
|
+
xmlDocPtr xml_doc;
|
12
|
+
xmlNodePtr node;
|
13
|
+
VALUE document;
|
14
|
+
VALUE rest;
|
15
|
+
VALUE rb_node;
|
16
|
+
|
17
|
+
rb_scan_args(argc, argv, "1*", &document, &rest);
|
18
|
+
|
19
|
+
Data_Get_Struct(document, xmlDoc, xml_doc);
|
20
|
+
|
21
|
+
node = xmlNewDocFragment(xml_doc->doc);
|
22
|
+
|
23
|
+
nokogiri_root_node(node);
|
24
|
+
|
25
|
+
rb_node = Nokogiri_wrap_xml_node(klass, node);
|
26
|
+
rb_obj_call_init(rb_node, argc, argv);
|
27
|
+
|
28
|
+
if(rb_block_given_p()) rb_yield(rb_node);
|
29
|
+
|
30
|
+
return rb_node;
|
31
|
+
}
|
32
|
+
|
33
|
+
VALUE cNokogiriXmlDocumentFragment;
|
34
|
+
void init_xml_document_fragment()
|
35
|
+
{
|
36
|
+
VALUE nokogiri = rb_define_module("Nokogiri");
|
37
|
+
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
38
|
+
VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
|
39
|
+
|
40
|
+
/*
|
41
|
+
* DocumentFragment represents a DocumentFragment node in an xml document.
|
42
|
+
*/
|
43
|
+
VALUE klass = rb_define_class_under(xml, "DocumentFragment", node);
|
44
|
+
|
45
|
+
cNokogiriXmlDocumentFragment = klass;
|
46
|
+
|
47
|
+
rb_define_singleton_method(klass, "new", new, -1);
|
48
|
+
}
|
data/ext/nokogiri/xml_dtd.c
CHANGED
@@ -6,22 +6,25 @@ static void notation_copier(void *payload, void *data, xmlChar *name)
|
|
6
6
|
VALUE klass = rb_const_get(mNokogiriXml, rb_intern("Notation"));
|
7
7
|
|
8
8
|
xmlNotationPtr c_notation = (xmlNotationPtr)payload;
|
9
|
+
VALUE notation;
|
10
|
+
VALUE argv[3];
|
11
|
+
argv[0] = (c_notation->name ? NOKOGIRI_STR_NEW2(c_notation->name) : Qnil);
|
12
|
+
argv[1] = (c_notation->PublicID ? NOKOGIRI_STR_NEW2(c_notation->PublicID) : Qnil);
|
13
|
+
argv[2] = (c_notation->SystemID ? NOKOGIRI_STR_NEW2(c_notation->SystemID) : Qnil);
|
9
14
|
|
10
|
-
|
11
|
-
c_notation->name ? rb_str_new2((const char *)c_notation->name) : Qnil,
|
12
|
-
c_notation->PublicID ? rb_str_new2((const char *)c_notation->PublicID) : Qnil,
|
13
|
-
c_notation->SystemID ? rb_str_new2((const char *)c_notation->SystemID) : Qnil);
|
15
|
+
notation = rb_class_new_instance(3, argv, klass);
|
14
16
|
|
15
|
-
rb_hash_aset(hash,
|
17
|
+
rb_hash_aset(hash, NOKOGIRI_STR_NEW2(name),notation);
|
16
18
|
}
|
17
19
|
|
18
|
-
static void element_copier(void *
|
20
|
+
static void element_copier(void *_payload, void *data, xmlChar *name)
|
19
21
|
{
|
20
22
|
VALUE hash = (VALUE)data;
|
23
|
+
xmlNodePtr payload = (xmlNodePtr)_payload;
|
21
24
|
|
22
|
-
VALUE element = Nokogiri_wrap_xml_node(
|
25
|
+
VALUE element = Nokogiri_wrap_xml_node(Qnil, payload);
|
23
26
|
|
24
|
-
rb_hash_aset(hash,
|
27
|
+
rb_hash_aset(hash, NOKOGIRI_STR_NEW2(name), element);
|
25
28
|
}
|
26
29
|
|
27
30
|
/*
|
@@ -33,11 +36,13 @@ static void element_copier(void *payload, void *data, xmlChar *name)
|
|
33
36
|
static VALUE entities(VALUE self)
|
34
37
|
{
|
35
38
|
xmlDtdPtr dtd;
|
39
|
+
VALUE hash;
|
40
|
+
|
36
41
|
Data_Get_Struct(self, xmlDtd, dtd);
|
37
42
|
|
38
43
|
if(!dtd->entities) return Qnil;
|
39
44
|
|
40
|
-
|
45
|
+
hash = rb_hash_new();
|
41
46
|
|
42
47
|
xmlHashScan((xmlHashTablePtr)dtd->entities, element_copier, (void *)hash);
|
43
48
|
|
@@ -46,40 +51,44 @@ static VALUE entities(VALUE self)
|
|
46
51
|
|
47
52
|
/*
|
48
53
|
* call-seq:
|
49
|
-
*
|
54
|
+
* notations
|
50
55
|
*
|
51
|
-
* Get a hash of the
|
56
|
+
* Get a hash of the notations for this DTD.
|
52
57
|
*/
|
53
|
-
static VALUE
|
58
|
+
static VALUE notations(VALUE self)
|
54
59
|
{
|
55
60
|
xmlDtdPtr dtd;
|
61
|
+
VALUE hash;
|
62
|
+
|
56
63
|
Data_Get_Struct(self, xmlDtd, dtd);
|
57
64
|
|
58
|
-
if(!dtd->
|
65
|
+
if(!dtd->notations) return Qnil;
|
59
66
|
|
60
|
-
|
67
|
+
hash = rb_hash_new();
|
61
68
|
|
62
|
-
xmlHashScan((xmlHashTablePtr)dtd->
|
69
|
+
xmlHashScan((xmlHashTablePtr)dtd->notations, notation_copier, (void *)hash);
|
63
70
|
|
64
71
|
return hash;
|
65
72
|
}
|
66
73
|
|
67
74
|
/*
|
68
75
|
* call-seq:
|
69
|
-
*
|
76
|
+
* attributes
|
70
77
|
*
|
71
|
-
* Get a hash of the
|
78
|
+
* Get a hash of the attributes for this DTD.
|
72
79
|
*/
|
73
|
-
static VALUE
|
80
|
+
static VALUE attributes(VALUE self)
|
74
81
|
{
|
75
82
|
xmlDtdPtr dtd;
|
83
|
+
VALUE hash;
|
84
|
+
|
76
85
|
Data_Get_Struct(self, xmlDtd, dtd);
|
77
86
|
|
78
|
-
|
87
|
+
hash = rb_hash_new();
|
79
88
|
|
80
|
-
|
89
|
+
if(!dtd->attributes) return hash;
|
81
90
|
|
82
|
-
xmlHashScan((xmlHashTablePtr)dtd->
|
91
|
+
xmlHashScan((xmlHashTablePtr)dtd->attributes, element_copier, (void *)hash);
|
83
92
|
|
84
93
|
return hash;
|
85
94
|
}
|
@@ -93,25 +102,101 @@ static VALUE notations(VALUE self)
|
|
93
102
|
static VALUE elements(VALUE self)
|
94
103
|
{
|
95
104
|
xmlDtdPtr dtd;
|
105
|
+
VALUE hash;
|
106
|
+
|
96
107
|
Data_Get_Struct(self, xmlDtd, dtd);
|
97
108
|
|
98
109
|
if(!dtd->elements) return Qnil;
|
99
110
|
|
100
|
-
|
111
|
+
hash = rb_hash_new();
|
101
112
|
|
102
113
|
xmlHashScan((xmlHashTablePtr)dtd->elements, element_copier, (void *)hash);
|
103
114
|
|
104
115
|
return hash;
|
105
116
|
}
|
106
117
|
|
118
|
+
/*
|
119
|
+
* call-seq:
|
120
|
+
* validate(document)
|
121
|
+
*
|
122
|
+
* Validate +document+ returning a list of errors
|
123
|
+
*/
|
124
|
+
static VALUE validate(VALUE self, VALUE document)
|
125
|
+
{
|
126
|
+
xmlDocPtr doc;
|
127
|
+
xmlDtdPtr dtd;
|
128
|
+
xmlValidCtxtPtr ctxt;
|
129
|
+
VALUE error_list;
|
130
|
+
|
131
|
+
Data_Get_Struct(self, xmlDtd, dtd);
|
132
|
+
Data_Get_Struct(document, xmlDoc, doc);
|
133
|
+
error_list = rb_ary_new();
|
134
|
+
|
135
|
+
ctxt = xmlNewValidCtxt();
|
136
|
+
|
137
|
+
xmlSetStructuredErrorFunc((void *)error_list, Nokogiri_error_array_pusher);
|
138
|
+
|
139
|
+
xmlValidateDtd(ctxt, doc, dtd);
|
140
|
+
|
141
|
+
xmlSetStructuredErrorFunc(NULL, NULL);
|
142
|
+
|
143
|
+
xmlFreeValidCtxt(ctxt);
|
144
|
+
|
145
|
+
return error_list;
|
146
|
+
}
|
147
|
+
|
148
|
+
/*
|
149
|
+
* call-seq:
|
150
|
+
* system_id
|
151
|
+
*
|
152
|
+
* Get the System ID for this DTD
|
153
|
+
*/
|
154
|
+
static VALUE system_id(VALUE self)
|
155
|
+
{
|
156
|
+
xmlDtdPtr dtd;
|
157
|
+
Data_Get_Struct(self, xmlDtd, dtd);
|
158
|
+
|
159
|
+
if(!dtd->SystemID) return Qnil;
|
160
|
+
|
161
|
+
return NOKOGIRI_STR_NEW2(dtd->SystemID);
|
162
|
+
}
|
163
|
+
|
164
|
+
/*
|
165
|
+
* call-seq:
|
166
|
+
* external_id
|
167
|
+
*
|
168
|
+
* Get the External ID for this DTD
|
169
|
+
*/
|
170
|
+
static VALUE external_id(VALUE self)
|
171
|
+
{
|
172
|
+
xmlDtdPtr dtd;
|
173
|
+
Data_Get_Struct(self, xmlDtd, dtd);
|
174
|
+
|
175
|
+
if(!dtd->ExternalID) return Qnil;
|
176
|
+
|
177
|
+
return NOKOGIRI_STR_NEW2(dtd->ExternalID);
|
178
|
+
}
|
179
|
+
|
180
|
+
VALUE cNokogiriXmlDtd;
|
181
|
+
|
107
182
|
void init_xml_dtd()
|
108
183
|
{
|
109
184
|
VALUE nokogiri = rb_define_module("Nokogiri");
|
110
185
|
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
111
|
-
VALUE
|
186
|
+
VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
|
187
|
+
|
188
|
+
/*
|
189
|
+
* Nokogiri::XML::DTD wraps DTD nodes in an XML document
|
190
|
+
*/
|
191
|
+
VALUE klass = rb_define_class_under(xml, "DTD", node);
|
192
|
+
|
193
|
+
cNokogiriXmlDtd = klass;
|
112
194
|
|
113
195
|
rb_define_method(klass, "notations", notations, 0);
|
114
196
|
rb_define_method(klass, "elements", elements, 0);
|
115
|
-
rb_define_method(klass, "attributes", attributes, 0);
|
116
197
|
rb_define_method(klass, "entities", entities, 0);
|
198
|
+
rb_define_method(klass, "validate", validate, 1);
|
199
|
+
rb_define_method(klass, "attributes", attributes, 0);
|
200
|
+
rb_define_method(klass, "system_id", system_id, 0);
|
201
|
+
rb_define_method(klass, "external_id", external_id, 0);
|
117
202
|
}
|
data/ext/nokogiri/xml_dtd.h
CHANGED
@@ -0,0 +1,123 @@
|
|
1
|
+
#include <xml_element_content.h>
|
2
|
+
|
3
|
+
VALUE cNokogiriXmlElementContent;
|
4
|
+
|
5
|
+
/*
|
6
|
+
* call-seq:
|
7
|
+
* name
|
8
|
+
*
|
9
|
+
* Get the require element +name+
|
10
|
+
*/
|
11
|
+
static VALUE get_name(VALUE self)
|
12
|
+
{
|
13
|
+
xmlElementContentPtr elem;
|
14
|
+
Data_Get_Struct(self, xmlElementContent, elem);
|
15
|
+
|
16
|
+
if(!elem->name) return Qnil;
|
17
|
+
return NOKOGIRI_STR_NEW2(elem->name);
|
18
|
+
}
|
19
|
+
|
20
|
+
/*
|
21
|
+
* call-seq:
|
22
|
+
* type
|
23
|
+
*
|
24
|
+
* Get the element content +type+. Possible values are PCDATA, ELEMENT, SEQ,
|
25
|
+
* or OR.
|
26
|
+
*/
|
27
|
+
static VALUE get_type(VALUE self)
|
28
|
+
{
|
29
|
+
xmlElementContentPtr elem;
|
30
|
+
Data_Get_Struct(self, xmlElementContent, elem);
|
31
|
+
|
32
|
+
return INT2NUM((long)elem->type);
|
33
|
+
}
|
34
|
+
|
35
|
+
/*
|
36
|
+
* call-seq:
|
37
|
+
* c1
|
38
|
+
*
|
39
|
+
* Get the first child.
|
40
|
+
*/
|
41
|
+
static VALUE get_c1(VALUE self)
|
42
|
+
{
|
43
|
+
xmlElementContentPtr elem;
|
44
|
+
Data_Get_Struct(self, xmlElementContent, elem);
|
45
|
+
|
46
|
+
if(!elem->c1) return Qnil;
|
47
|
+
return Nokogiri_wrap_element_content(rb_iv_get(self, "@document"), elem->c1);
|
48
|
+
}
|
49
|
+
|
50
|
+
/*
|
51
|
+
* call-seq:
|
52
|
+
* c2
|
53
|
+
*
|
54
|
+
* Get the first child.
|
55
|
+
*/
|
56
|
+
static VALUE get_c2(VALUE self)
|
57
|
+
{
|
58
|
+
xmlElementContentPtr elem;
|
59
|
+
Data_Get_Struct(self, xmlElementContent, elem);
|
60
|
+
|
61
|
+
if(!elem->c2) return Qnil;
|
62
|
+
return Nokogiri_wrap_element_content(rb_iv_get(self, "@document"), elem->c2);
|
63
|
+
}
|
64
|
+
|
65
|
+
/*
|
66
|
+
* call-seq:
|
67
|
+
* occur
|
68
|
+
*
|
69
|
+
* Get the element content +occur+ flag. Possible values are ONCE, OPT, MULT
|
70
|
+
* or PLUS.
|
71
|
+
*/
|
72
|
+
static VALUE get_occur(VALUE self)
|
73
|
+
{
|
74
|
+
xmlElementContentPtr elem;
|
75
|
+
Data_Get_Struct(self, xmlElementContent, elem);
|
76
|
+
|
77
|
+
return INT2NUM((long)elem->ocur);
|
78
|
+
}
|
79
|
+
|
80
|
+
/*
|
81
|
+
* call-seq:
|
82
|
+
* prefix
|
83
|
+
*
|
84
|
+
* Get the element content namespace +prefix+.
|
85
|
+
*/
|
86
|
+
static VALUE get_prefix(VALUE self)
|
87
|
+
{
|
88
|
+
xmlElementContentPtr elem;
|
89
|
+
Data_Get_Struct(self, xmlElementContent, elem);
|
90
|
+
|
91
|
+
if(!elem->prefix) return Qnil;
|
92
|
+
|
93
|
+
return NOKOGIRI_STR_NEW2(elem->prefix);
|
94
|
+
}
|
95
|
+
|
96
|
+
VALUE Nokogiri_wrap_element_content(VALUE doc, xmlElementContentPtr element)
|
97
|
+
{
|
98
|
+
VALUE elem = Data_Wrap_Struct(cNokogiriXmlElementContent, 0, 0, element);
|
99
|
+
|
100
|
+
/* Setting the document is necessary so that this does not get GC'd until */
|
101
|
+
/* the document is GC'd */
|
102
|
+
rb_iv_set(elem, "@document", doc);
|
103
|
+
|
104
|
+
return elem;
|
105
|
+
}
|
106
|
+
|
107
|
+
void init_xml_element_content()
|
108
|
+
{
|
109
|
+
VALUE nokogiri = rb_define_module("Nokogiri");
|
110
|
+
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
111
|
+
|
112
|
+
VALUE klass = rb_define_class_under(xml, "ElementContent", rb_cObject);
|
113
|
+
|
114
|
+
cNokogiriXmlElementContent = klass;
|
115
|
+
|
116
|
+
rb_define_method(klass, "name", get_name, 0);
|
117
|
+
rb_define_method(klass, "type", get_type, 0);
|
118
|
+
rb_define_method(klass, "occur", get_occur, 0);
|
119
|
+
rb_define_method(klass, "prefix", get_prefix, 0);
|
120
|
+
|
121
|
+
rb_define_private_method(klass, "c1", get_c1, 0);
|
122
|
+
rb_define_private_method(klass, "c2", get_c2, 0);
|
123
|
+
}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
#include <xml_element_decl.h>
|
2
|
+
|
3
|
+
static ID id_document;
|
4
|
+
|
5
|
+
/*
|
6
|
+
* call-seq:
|
7
|
+
* element_type
|
8
|
+
*
|
9
|
+
* The element_type
|
10
|
+
*/
|
11
|
+
static VALUE element_type(VALUE self)
|
12
|
+
{
|
13
|
+
xmlElementPtr node;
|
14
|
+
Data_Get_Struct(self, xmlElement, node);
|
15
|
+
return INT2NUM((long)node->etype);
|
16
|
+
}
|
17
|
+
|
18
|
+
/*
|
19
|
+
* call-seq:
|
20
|
+
* content
|
21
|
+
*
|
22
|
+
* The allowed content for this ElementDecl
|
23
|
+
*/
|
24
|
+
static VALUE content(VALUE self)
|
25
|
+
{
|
26
|
+
xmlElementPtr node;
|
27
|
+
Data_Get_Struct(self, xmlElement, node);
|
28
|
+
|
29
|
+
if(!node->content) return Qnil;
|
30
|
+
|
31
|
+
return Nokogiri_wrap_element_content(
|
32
|
+
rb_funcall(self, id_document, 0),
|
33
|
+
node->content
|
34
|
+
);
|
35
|
+
}
|
36
|
+
|
37
|
+
/*
|
38
|
+
* call-seq:
|
39
|
+
* prefix
|
40
|
+
*
|
41
|
+
* The namespace prefix for this ElementDecl
|
42
|
+
*/
|
43
|
+
static VALUE prefix(VALUE self)
|
44
|
+
{
|
45
|
+
xmlElementPtr node;
|
46
|
+
Data_Get_Struct(self, xmlElement, node);
|
47
|
+
|
48
|
+
if(!node->prefix) return Qnil;
|
49
|
+
|
50
|
+
return NOKOGIRI_STR_NEW2(node->prefix);
|
51
|
+
}
|
52
|
+
|
53
|
+
VALUE cNokogiriXmlElementDecl;
|
54
|
+
|
55
|
+
void init_xml_element_decl()
|
56
|
+
{
|
57
|
+
VALUE nokogiri = rb_define_module("Nokogiri");
|
58
|
+
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
59
|
+
VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
|
60
|
+
VALUE klass = rb_define_class_under(xml, "ElementDecl", node);
|
61
|
+
|
62
|
+
cNokogiriXmlElementDecl = klass;
|
63
|
+
|
64
|
+
rb_define_method(klass, "element_type", element_type, 0);
|
65
|
+
rb_define_method(klass, "content", content, 0);
|
66
|
+
rb_define_method(klass, "prefix", prefix, 0);
|
67
|
+
|
68
|
+
id_document = rb_intern("document");
|
69
|
+
}
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#include <xml_encoding_handler.h>
|
2
|
+
|
3
|
+
/*
|
4
|
+
* call-seq: Nokogiri::EncodingHandler.[](name)
|
5
|
+
*
|
6
|
+
* Get the encoding handler for +name+
|
7
|
+
*/
|
8
|
+
static VALUE get(VALUE klass, VALUE key)
|
9
|
+
{
|
10
|
+
xmlCharEncodingHandlerPtr handler;
|
11
|
+
|
12
|
+
handler = xmlFindCharEncodingHandler(StringValueCStr(key));
|
13
|
+
if(handler)
|
14
|
+
return Data_Wrap_Struct(klass, NULL, NULL, handler);
|
15
|
+
|
16
|
+
return Qnil;
|
17
|
+
}
|
18
|
+
|
19
|
+
/*
|
20
|
+
* call-seq: Nokogiri::EncodingHandler.delete(name)
|
21
|
+
*
|
22
|
+
* Delete the encoding alias named +name+
|
23
|
+
*/
|
24
|
+
static VALUE delete(VALUE klass, VALUE name)
|
25
|
+
{
|
26
|
+
if(xmlDelEncodingAlias(StringValueCStr(name))) return Qnil;
|
27
|
+
|
28
|
+
return Qtrue;
|
29
|
+
}
|
30
|
+
|
31
|
+
/*
|
32
|
+
* call-seq: Nokogiri::EncodingHandler.alias(from, to)
|
33
|
+
*
|
34
|
+
* Alias encoding handler with name +from+ to name +to+
|
35
|
+
*/
|
36
|
+
static VALUE alias(VALUE klass, VALUE from, VALUE to)
|
37
|
+
{
|
38
|
+
xmlAddEncodingAlias(StringValueCStr(from), StringValueCStr(to));
|
39
|
+
|
40
|
+
return to;
|
41
|
+
}
|
42
|
+
|
43
|
+
/*
|
44
|
+
* call-seq: Nokogiri::EncodingHandler.clear_aliases!
|
45
|
+
*
|
46
|
+
* Remove all encoding aliases.
|
47
|
+
*/
|
48
|
+
static VALUE clear_aliases(VALUE klass)
|
49
|
+
{
|
50
|
+
xmlCleanupEncodingAliases();
|
51
|
+
|
52
|
+
return klass;
|
53
|
+
}
|
54
|
+
|
55
|
+
/*
|
56
|
+
* call-seq: name
|
57
|
+
*
|
58
|
+
* Get the name of this EncodingHandler
|
59
|
+
*/
|
60
|
+
static VALUE name(VALUE self)
|
61
|
+
{
|
62
|
+
xmlCharEncodingHandlerPtr handler;
|
63
|
+
|
64
|
+
Data_Get_Struct(self, xmlCharEncodingHandler, handler);
|
65
|
+
|
66
|
+
return NOKOGIRI_STR_NEW2(handler->name);
|
67
|
+
}
|
68
|
+
|
69
|
+
void init_xml_encoding_handler()
|
70
|
+
{
|
71
|
+
VALUE nokogiri = rb_define_module("Nokogiri");
|
72
|
+
VALUE klass = rb_define_class_under(nokogiri, "EncodingHandler", rb_cObject);
|
73
|
+
|
74
|
+
rb_define_singleton_method(klass, "[]", get, 1);
|
75
|
+
rb_define_singleton_method(klass, "delete", delete, 1);
|
76
|
+
rb_define_singleton_method(klass, "alias", alias, 2);
|
77
|
+
rb_define_singleton_method(klass, "clear_aliases!", clear_aliases, 0);
|
78
|
+
rb_define_method(klass, "name", name, 0);
|
79
|
+
}
|
@@ -0,0 +1,110 @@
|
|
1
|
+
#include <xml_entity_decl.h>
|
2
|
+
|
3
|
+
/*
|
4
|
+
* call-seq:
|
5
|
+
* original_content
|
6
|
+
*
|
7
|
+
* Get the original_content before ref substitution
|
8
|
+
*/
|
9
|
+
static VALUE original_content(VALUE self)
|
10
|
+
{
|
11
|
+
xmlEntityPtr node;
|
12
|
+
Data_Get_Struct(self, xmlEntity, node);
|
13
|
+
|
14
|
+
if(!node->orig) return Qnil;
|
15
|
+
|
16
|
+
return NOKOGIRI_STR_NEW2(node->orig);
|
17
|
+
}
|
18
|
+
|
19
|
+
/*
|
20
|
+
* call-seq:
|
21
|
+
* content
|
22
|
+
*
|
23
|
+
* Get the content
|
24
|
+
*/
|
25
|
+
static VALUE get_content(VALUE self)
|
26
|
+
{
|
27
|
+
xmlEntityPtr node;
|
28
|
+
Data_Get_Struct(self, xmlEntity, node);
|
29
|
+
|
30
|
+
if(!node->content) return Qnil;
|
31
|
+
|
32
|
+
return NOKOGIRI_STR_NEW(node->content, node->length);
|
33
|
+
}
|
34
|
+
|
35
|
+
/*
|
36
|
+
* call-seq:
|
37
|
+
* entity_type
|
38
|
+
*
|
39
|
+
* Get the entity type
|
40
|
+
*/
|
41
|
+
static VALUE entity_type(VALUE self)
|
42
|
+
{
|
43
|
+
xmlEntityPtr node;
|
44
|
+
Data_Get_Struct(self, xmlEntity, node);
|
45
|
+
|
46
|
+
return INT2NUM((int)node->etype);
|
47
|
+
}
|
48
|
+
|
49
|
+
/*
|
50
|
+
* call-seq:
|
51
|
+
* external_id
|
52
|
+
*
|
53
|
+
* Get the external identifier for PUBLIC
|
54
|
+
*/
|
55
|
+
static VALUE external_id(VALUE self)
|
56
|
+
{
|
57
|
+
xmlEntityPtr node;
|
58
|
+
Data_Get_Struct(self, xmlEntity, node);
|
59
|
+
|
60
|
+
if(!node->ExternalID) return Qnil;
|
61
|
+
|
62
|
+
return NOKOGIRI_STR_NEW2(node->ExternalID);
|
63
|
+
}
|
64
|
+
|
65
|
+
/*
|
66
|
+
* call-seq:
|
67
|
+
* system_id
|
68
|
+
*
|
69
|
+
* Get the URI for a SYSTEM or PUBLIC Entity
|
70
|
+
*/
|
71
|
+
static VALUE system_id(VALUE self)
|
72
|
+
{
|
73
|
+
xmlEntityPtr node;
|
74
|
+
Data_Get_Struct(self, xmlEntity, node);
|
75
|
+
|
76
|
+
if(!node->SystemID) return Qnil;
|
77
|
+
|
78
|
+
return NOKOGIRI_STR_NEW2(node->SystemID);
|
79
|
+
}
|
80
|
+
|
81
|
+
VALUE cNokogiriXmlEntityDecl;
|
82
|
+
|
83
|
+
void init_xml_entity_decl()
|
84
|
+
{
|
85
|
+
VALUE nokogiri = rb_define_module("Nokogiri");
|
86
|
+
VALUE xml = rb_define_module_under(nokogiri, "XML");
|
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
|
+
|
92
|
+
rb_define_method(klass, "original_content", original_content, 0);
|
93
|
+
rb_define_method(klass, "content", get_content, 0);
|
94
|
+
rb_define_method(klass, "entity_type", entity_type, 0);
|
95
|
+
rb_define_method(klass, "external_id", external_id, 0);
|
96
|
+
rb_define_method(klass, "system_id", system_id, 0);
|
97
|
+
|
98
|
+
rb_const_set(cNokogiriXmlEntityDecl, rb_intern("INTERNAL_GENERAL"),
|
99
|
+
INT2NUM(XML_INTERNAL_GENERAL_ENTITY));
|
100
|
+
rb_const_set(cNokogiriXmlEntityDecl, rb_intern("EXTERNAL_GENERAL_PARSED"),
|
101
|
+
INT2NUM(XML_EXTERNAL_GENERAL_PARSED_ENTITY));
|
102
|
+
rb_const_set(cNokogiriXmlEntityDecl, rb_intern("EXTERNAL_GENERAL_UNPARSED"),
|
103
|
+
INT2NUM(XML_EXTERNAL_GENERAL_UNPARSED_ENTITY));
|
104
|
+
rb_const_set(cNokogiriXmlEntityDecl, rb_intern("INTERNAL_PARAMETER"),
|
105
|
+
INT2NUM(XML_INTERNAL_PARAMETER_ENTITY));
|
106
|
+
rb_const_set(cNokogiriXmlEntityDecl, rb_intern("EXTERNAL_PARAMETER"),
|
107
|
+
INT2NUM(XML_EXTERNAL_PARAMETER_ENTITY));
|
108
|
+
rb_const_set(cNokogiriXmlEntityDecl, rb_intern("INTERNAL_PREDEFINED"),
|
109
|
+
INT2NUM(XML_INTERNAL_PREDEFINED_ENTITY));
|
110
|
+
}
|