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
@@ -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(StringValuePtr(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(StringValuePtr(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(StringValuePtr(from), StringValuePtr(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
|
+
}
|
@@ -6,17 +6,28 @@
|
|
6
6
|
*
|
7
7
|
* Create a new EntityReference element on the +document+ with +name+
|
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 name;
|
15
|
+
VALUE rest;
|
16
|
+
VALUE rb_node;
|
13
17
|
|
14
|
-
|
18
|
+
rb_scan_args(argc, argv, "2*", &document, &name, &rest);
|
19
|
+
|
20
|
+
Data_Get_Struct(document, xmlDoc, xml_doc);
|
21
|
+
|
22
|
+
node = xmlNewReference(
|
15
23
|
xml_doc,
|
16
24
|
(const xmlChar *)StringValuePtr(name)
|
17
25
|
);
|
18
26
|
|
19
|
-
|
27
|
+
NOKOGIRI_ROOT_NODE(node);
|
28
|
+
|
29
|
+
rb_node = Nokogiri_wrap_xml_node(klass, node);
|
30
|
+
rb_obj_call_init(rb_node, argc, argv);
|
20
31
|
|
21
32
|
if(rb_block_given_p()) rb_yield(rb_node);
|
22
33
|
|
@@ -37,5 +48,5 @@ void init_xml_entity_reference()
|
|
37
48
|
|
38
49
|
cNokogiriXmlEntityReference = klass;
|
39
50
|
|
40
|
-
rb_define_singleton_method(klass, "new", new,
|
51
|
+
rb_define_singleton_method(klass, "new", new, -1);
|
41
52
|
}
|
data/ext/nokogiri/xml_io.c
CHANGED
@@ -1,24 +1,56 @@
|
|
1
1
|
#include <xml_io.h>
|
2
2
|
|
3
|
+
static ID id_read, id_write;
|
4
|
+
|
5
|
+
VALUE read_check(VALUE *args) {
|
6
|
+
return rb_funcall(args[0], id_read, 1, args[1]);
|
7
|
+
}
|
8
|
+
|
9
|
+
VALUE read_failed(void) {
|
10
|
+
return Qnil;
|
11
|
+
}
|
12
|
+
|
3
13
|
int io_read_callback(void * ctx, char * buffer, int len) {
|
4
|
-
VALUE
|
5
|
-
|
14
|
+
VALUE string, args[2];
|
15
|
+
size_t str_len, safe_len;
|
16
|
+
|
17
|
+
args[0] = (VALUE)ctx;
|
18
|
+
args[1] = INT2NUM(len);
|
19
|
+
|
20
|
+
string = rb_rescue(read_check, (VALUE)args, read_failed, 0);
|
6
21
|
|
7
|
-
if(
|
22
|
+
if(NIL_P(string)) return 0;
|
8
23
|
|
9
|
-
|
24
|
+
str_len = (size_t)RSTRING_LEN(string);
|
25
|
+
safe_len = str_len > (size_t)len ? (size_t)len : str_len;
|
26
|
+
memcpy(buffer, StringValuePtr(string), safe_len);
|
10
27
|
|
11
|
-
return
|
28
|
+
return safe_len;
|
29
|
+
}
|
30
|
+
|
31
|
+
VALUE write_check(VALUE *args) {
|
32
|
+
return rb_funcall(args[0], id_write, 1, args[1]);
|
33
|
+
}
|
34
|
+
|
35
|
+
VALUE write_failed(void) {
|
36
|
+
return Qnil;
|
12
37
|
}
|
13
38
|
|
14
39
|
int io_write_callback(void * ctx, char * buffer, int len) {
|
15
|
-
VALUE
|
16
|
-
VALUE string = rb_str_new(buffer, len);
|
40
|
+
VALUE args[2];
|
17
41
|
|
18
|
-
|
42
|
+
args[0] = (VALUE)ctx;
|
43
|
+
args[1] = rb_str_new(buffer, (long)len);
|
44
|
+
|
45
|
+
rb_rescue(write_check, (VALUE)args, write_failed, 0);
|
19
46
|
return len;
|
20
47
|
}
|
21
48
|
|
22
49
|
int io_close_callback(void * ctx) {
|
23
50
|
return 0;
|
24
51
|
}
|
52
|
+
|
53
|
+
void init_nokogiri_io() {
|
54
|
+
id_read = rb_intern("read");
|
55
|
+
id_write = rb_intern("write");
|
56
|
+
}
|
data/ext/nokogiri/xml_io.h
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
#ifndef NOKOGIRI_XML_IO
|
2
2
|
#define NOKOGIRI_XML_IO
|
3
3
|
|
4
|
-
#include <
|
4
|
+
#include <nokogiri.h>
|
5
5
|
|
6
6
|
int io_read_callback(void * ctx, char * buffer, int len);
|
7
7
|
int io_write_callback(void * ctx, char * buffer, int len);
|
8
8
|
int io_close_callback(void * ctx);
|
9
|
+
void init_nokogiri_io();
|
9
10
|
|
10
11
|
#endif
|
@@ -0,0 +1,112 @@
|
|
1
|
+
#ifndef HAVE_XMLFIRSTELEMENTCHILD
|
2
|
+
#include <libxml/tree.h>
|
3
|
+
/**
|
4
|
+
* xmlFirstElementChild:
|
5
|
+
* @parent: the parent node
|
6
|
+
*
|
7
|
+
* Finds the first child node of that element which is a Element node
|
8
|
+
* Note the handling of entities references is different than in
|
9
|
+
* the W3C DOM element traversal spec since we don't have back reference
|
10
|
+
* from entities content to entities references.
|
11
|
+
*
|
12
|
+
* Returns the first element child or NULL if not available
|
13
|
+
*/
|
14
|
+
xmlNodePtr
|
15
|
+
xmlFirstElementChild(xmlNodePtr parent) {
|
16
|
+
xmlNodePtr cur = NULL;
|
17
|
+
|
18
|
+
if (parent == NULL)
|
19
|
+
return(NULL);
|
20
|
+
switch (parent->type) {
|
21
|
+
case XML_ELEMENT_NODE:
|
22
|
+
case XML_ENTITY_NODE:
|
23
|
+
case XML_DOCUMENT_NODE:
|
24
|
+
case XML_HTML_DOCUMENT_NODE:
|
25
|
+
cur = parent->children;
|
26
|
+
break;
|
27
|
+
default:
|
28
|
+
return(NULL);
|
29
|
+
}
|
30
|
+
while (cur != NULL) {
|
31
|
+
if (cur->type == XML_ELEMENT_NODE)
|
32
|
+
return(cur);
|
33
|
+
cur = cur->next;
|
34
|
+
}
|
35
|
+
return(NULL);
|
36
|
+
}
|
37
|
+
|
38
|
+
/**
|
39
|
+
* xmlNextElementSibling:
|
40
|
+
* @node: the current node
|
41
|
+
*
|
42
|
+
* Finds the first closest next sibling of the node which is an
|
43
|
+
* element node.
|
44
|
+
* Note the handling of entities references is different than in
|
45
|
+
* the W3C DOM element traversal spec since we don't have back reference
|
46
|
+
* from entities content to entities references.
|
47
|
+
*
|
48
|
+
* Returns the next element sibling or NULL if not available
|
49
|
+
*/
|
50
|
+
xmlNodePtr
|
51
|
+
xmlNextElementSibling(xmlNodePtr node) {
|
52
|
+
if (node == NULL)
|
53
|
+
return(NULL);
|
54
|
+
switch (node->type) {
|
55
|
+
case XML_ELEMENT_NODE:
|
56
|
+
case XML_TEXT_NODE:
|
57
|
+
case XML_CDATA_SECTION_NODE:
|
58
|
+
case XML_ENTITY_REF_NODE:
|
59
|
+
case XML_ENTITY_NODE:
|
60
|
+
case XML_PI_NODE:
|
61
|
+
case XML_COMMENT_NODE:
|
62
|
+
case XML_DTD_NODE:
|
63
|
+
case XML_XINCLUDE_START:
|
64
|
+
case XML_XINCLUDE_END:
|
65
|
+
node = node->next;
|
66
|
+
break;
|
67
|
+
default:
|
68
|
+
return(NULL);
|
69
|
+
}
|
70
|
+
while (node != NULL) {
|
71
|
+
if (node->type == XML_ELEMENT_NODE)
|
72
|
+
return(node);
|
73
|
+
node = node->next;
|
74
|
+
}
|
75
|
+
return(NULL);
|
76
|
+
}
|
77
|
+
|
78
|
+
/**
|
79
|
+
* xmlLastElementChild:
|
80
|
+
* @parent: the parent node
|
81
|
+
*
|
82
|
+
* Finds the last child node of that element which is a Element node
|
83
|
+
* Note the handling of entities references is different than in
|
84
|
+
* the W3C DOM element traversal spec since we don't have back reference
|
85
|
+
* from entities content to entities references.
|
86
|
+
*
|
87
|
+
* Returns the last element child or NULL if not available
|
88
|
+
*/
|
89
|
+
xmlNodePtr
|
90
|
+
xmlLastElementChild(xmlNodePtr parent) {
|
91
|
+
xmlNodePtr cur = NULL;
|
92
|
+
|
93
|
+
if (parent == NULL)
|
94
|
+
return(NULL);
|
95
|
+
switch (parent->type) {
|
96
|
+
case XML_ELEMENT_NODE:
|
97
|
+
case XML_ENTITY_NODE:
|
98
|
+
case XML_DOCUMENT_NODE:
|
99
|
+
case XML_HTML_DOCUMENT_NODE:
|
100
|
+
cur = parent->last;
|
101
|
+
break;
|
102
|
+
default:
|
103
|
+
return(NULL);
|
104
|
+
}
|
105
|
+
while (cur != NULL) {
|
106
|
+
if (cur->type == XML_ELEMENT_NODE)
|
107
|
+
return(cur);
|
108
|
+
cur = cur->prev;
|
109
|
+
}
|
110
|
+
return(NULL);
|
111
|
+
}
|
112
|
+
#endif
|