libxml-ruby 2.9.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/HISTORY +811 -790
- data/LICENSE +20 -20
- data/MANIFEST +166 -166
- data/README.rdoc +188 -184
- data/Rakefile +1 -1
- data/ext/libxml/libxml.c +80 -80
- data/ext/libxml/ruby_libxml.h +75 -75
- data/ext/libxml/ruby_xml.c +0 -84
- data/ext/libxml/ruby_xml.h +0 -10
- data/ext/libxml/ruby_xml_attr.h +12 -12
- data/ext/libxml/ruby_xml_attr_decl.c +153 -153
- data/ext/libxml/ruby_xml_attr_decl.h +11 -11
- data/ext/libxml/ruby_xml_attributes.c +275 -275
- data/ext/libxml/ruby_xml_attributes.h +15 -15
- data/ext/libxml/ruby_xml_document.c +21 -27
- data/ext/libxml/ruby_xml_document.h +11 -11
- data/ext/libxml/ruby_xml_dtd.c +2 -13
- data/ext/libxml/ruby_xml_dtd.h +9 -9
- data/ext/libxml/ruby_xml_error.c +996 -996
- data/ext/libxml/ruby_xml_error.h +12 -12
- data/ext/libxml/ruby_xml_html_parser.c +89 -92
- data/ext/libxml/ruby_xml_html_parser.h +10 -10
- data/ext/libxml/ruby_xml_html_parser_context.h +10 -10
- data/ext/libxml/ruby_xml_html_parser_options.c +46 -46
- data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
- data/ext/libxml/ruby_xml_input_cbg.h +20 -20
- data/ext/libxml/ruby_xml_io.c +0 -1
- data/ext/libxml/ruby_xml_io.h +10 -10
- data/ext/libxml/ruby_xml_namespace.c +153 -153
- data/ext/libxml/ruby_xml_namespace.h +10 -10
- data/ext/libxml/ruby_xml_namespaces.c +293 -293
- data/ext/libxml/ruby_xml_namespaces.h +9 -9
- data/ext/libxml/ruby_xml_node.c +100 -143
- data/ext/libxml/ruby_xml_node.h +13 -11
- data/ext/libxml/ruby_xml_parser.c +91 -94
- data/ext/libxml/ruby_xml_parser.h +12 -12
- data/ext/libxml/ruby_xml_parser_context.h +10 -10
- data/ext/libxml/ruby_xml_parser_options.c +66 -66
- data/ext/libxml/ruby_xml_parser_options.h +12 -12
- data/ext/libxml/ruby_xml_reader.c +45 -37
- data/ext/libxml/ruby_xml_reader.h +17 -17
- data/ext/libxml/ruby_xml_relaxng.h +10 -10
- data/ext/libxml/ruby_xml_sax2_handler.c +3 -3
- data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
- data/ext/libxml/ruby_xml_sax_parser.c +116 -120
- data/ext/libxml/ruby_xml_sax_parser.h +10 -10
- data/ext/libxml/ruby_xml_schema.h +809 -809
- data/ext/libxml/ruby_xml_schema_attribute.c +109 -109
- data/ext/libxml/ruby_xml_schema_attribute.h +15 -15
- data/ext/libxml/ruby_xml_schema_element.c +94 -94
- data/ext/libxml/ruby_xml_schema_element.h +14 -14
- data/ext/libxml/ruby_xml_schema_facet.c +52 -52
- data/ext/libxml/ruby_xml_schema_facet.h +13 -13
- data/ext/libxml/ruby_xml_schema_type.c +259 -259
- data/ext/libxml/ruby_xml_schema_type.h +9 -9
- data/ext/libxml/ruby_xml_version.h +9 -9
- data/ext/libxml/ruby_xml_writer.c +1136 -1136
- data/ext/libxml/ruby_xml_writer.h +10 -10
- data/ext/libxml/ruby_xml_xinclude.c +16 -16
- data/ext/libxml/ruby_xml_xinclude.h +11 -11
- data/ext/libxml/ruby_xml_xpath.c +42 -36
- data/ext/libxml/ruby_xml_xpath.h +13 -13
- data/ext/libxml/ruby_xml_xpath_context.c +1 -1
- data/ext/libxml/ruby_xml_xpath_context.h +9 -9
- data/ext/libxml/ruby_xml_xpath_expression.c +81 -81
- data/ext/libxml/ruby_xml_xpath_expression.h +10 -10
- data/ext/libxml/ruby_xml_xpath_object.c +5 -2
- data/ext/libxml/ruby_xml_xpath_object.h +17 -17
- data/ext/libxml/ruby_xml_xpointer.c +99 -99
- data/ext/libxml/ruby_xml_xpointer.h +11 -11
- data/ext/vc/libxml_ruby.sln +17 -15
- data/lib/libxml.rb +1 -6
- data/lib/libxml/node.rb +2 -78
- data/lib/libxml/parser.rb +0 -266
- data/lib/libxml/sax_parser.rb +0 -17
- data/lib/libxml/schema.rb +66 -66
- data/lib/libxml/schema/attribute.rb +19 -19
- data/lib/libxml/schema/element.rb +27 -27
- data/lib/libxml/schema/type.rb +29 -29
- data/script/benchmark/depixelate +634 -634
- data/script/benchmark/hamlet.xml +9054 -9054
- data/script/benchmark/parsecount +170 -170
- data/script/benchmark/throughput +41 -41
- data/script/test +6 -6
- data/test/c14n/given/example-1.xml +14 -14
- data/test/c14n/given/example-2.xml +11 -11
- data/test/c14n/given/example-3.xml +18 -18
- data/test/c14n/given/example-4.xml +9 -9
- data/test/c14n/given/example-5.xml +12 -12
- data/test/c14n/given/example-6.xml +2 -2
- data/test/c14n/given/example-7.xml +11 -11
- data/test/c14n/given/example-8.xml +11 -11
- data/test/c14n/given/example-8.xpath +9 -9
- data/test/c14n/result/1-1-without-comments/example-1 +3 -3
- data/test/c14n/result/1-1-without-comments/example-2 +10 -10
- data/test/c14n/result/1-1-without-comments/example-3 +13 -13
- data/test/c14n/result/1-1-without-comments/example-4 +8 -8
- data/test/c14n/result/1-1-without-comments/example-5 +2 -2
- data/test/c14n/result/with-comments/example-1 +5 -5
- data/test/c14n/result/with-comments/example-2 +10 -10
- data/test/c14n/result/with-comments/example-3 +13 -13
- data/test/c14n/result/with-comments/example-4 +8 -8
- data/test/c14n/result/with-comments/example-5 +3 -3
- data/test/c14n/result/without-comments/example-1 +3 -3
- data/test/c14n/result/without-comments/example-2 +10 -10
- data/test/c14n/result/without-comments/example-3 +13 -13
- data/test/c14n/result/without-comments/example-4 +8 -8
- data/test/c14n/result/without-comments/example-5 +2 -2
- data/test/model/atom.xml +12 -12
- data/test/model/bands.iso-8859-1.xml +4 -4
- data/test/model/bands.utf-8.xml +4 -4
- data/test/model/bands.xml +4 -4
- data/test/model/books.xml +153 -153
- data/test/model/merge_bug_data.xml +58 -58
- data/test/model/ruby-lang.html +238 -238
- data/test/model/rubynet.xml +79 -79
- data/test/model/shiporder.rnc +28 -28
- data/test/model/shiporder.rng +86 -86
- data/test/model/shiporder.xml +22 -22
- data/test/model/shiporder.xsd +39 -39
- data/test/model/soap.xml +27 -27
- data/test/model/xinclude.xml +4 -4
- data/test/tc_attributes.rb +0 -6
- data/test/tc_error.rb +157 -158
- data/test/tc_node.rb +33 -17
- data/test/tc_node_edit.rb +0 -15
- data/test/tc_node_pi.rb +39 -39
- data/test/tc_parser.rb +0 -48
- data/test/tc_reader.rb +12 -53
- data/test/tc_writer.rb +447 -447
- data/test/tc_xpath.rb +1 -1
- data/test/test_helper.rb +2 -2
- metadata +3 -8
- data/ext/libxml/extconf.h +0 -4
- data/lib/libxml/ns.rb +0 -22
- data/lib/libxml/properties.rb +0 -23
- data/lib/libxml/reader.rb +0 -29
- data/lib/libxml/xpath_object.rb +0 -16
@@ -1,12 +1,12 @@
|
|
1
|
-
/* Please see the LICENSE file for copyright and distribution information */
|
2
|
-
|
3
|
-
#ifndef __RXML_PARSER__
|
4
|
-
#define __RXML_PARSER__
|
5
|
-
|
6
|
-
#define MAX_LIBXML_FEATURES_LEN 50
|
7
|
-
|
8
|
-
extern VALUE cXMLParser;
|
9
|
-
|
10
|
-
void rxml_init_parser();
|
11
|
-
|
12
|
-
#endif
|
1
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
2
|
+
|
3
|
+
#ifndef __RXML_PARSER__
|
4
|
+
#define __RXML_PARSER__
|
5
|
+
|
6
|
+
#define MAX_LIBXML_FEATURES_LEN 50
|
7
|
+
|
8
|
+
extern VALUE cXMLParser;
|
9
|
+
|
10
|
+
void rxml_init_parser();
|
11
|
+
|
12
|
+
#endif
|
@@ -1,10 +1,10 @@
|
|
1
|
-
/* Please see the LICENSE file for copyright and distribution information */
|
2
|
-
|
3
|
-
#ifndef __RXML_PARSER_CONTEXT__
|
4
|
-
#define __RXML_PARSER_CONTEXT__
|
5
|
-
|
6
|
-
extern VALUE cXMLParserContext;
|
7
|
-
|
8
|
-
void rxml_init_parser_context(void);
|
9
|
-
|
10
|
-
#endif
|
1
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
2
|
+
|
3
|
+
#ifndef __RXML_PARSER_CONTEXT__
|
4
|
+
#define __RXML_PARSER_CONTEXT__
|
5
|
+
|
6
|
+
extern VALUE cXMLParserContext;
|
7
|
+
|
8
|
+
void rxml_init_parser_context(void);
|
9
|
+
|
10
|
+
#endif
|
@@ -1,66 +1,66 @@
|
|
1
|
-
/* Please see the LICENSE file for copyright and distribution information */
|
2
|
-
|
3
|
-
#include <stdarg.h>
|
4
|
-
#include "ruby_libxml.h"
|
5
|
-
|
6
|
-
/* Document-class: LibXML::XML::Parser::Options
|
7
|
-
*
|
8
|
-
* Options that control the operation of the HTMLParser. The easiest
|
9
|
-
* way to set a parser's options is to use the methods
|
10
|
-
* XML::Parser.file, XML::Parser.io or XML::Parser.string.
|
11
|
-
* For additional control, see XML::Parser::Context#options=.
|
12
|
-
*/
|
13
|
-
|
14
|
-
VALUE mXMLParserOptions;
|
15
|
-
|
16
|
-
void rxml_init_parser_options(void)
|
17
|
-
{
|
18
|
-
mXMLParserOptions = rb_define_module_under(cXMLParser, "Options");
|
19
|
-
|
20
|
-
/* recover on errors */
|
21
|
-
rb_define_const(mXMLParserOptions, "RECOVER", INT2NUM(XML_PARSE_RECOVER));
|
22
|
-
/* substitute entities */
|
23
|
-
rb_define_const(mXMLParserOptions, "NOENT", INT2NUM(XML_PARSE_NOENT));
|
24
|
-
/* load the external subset */
|
25
|
-
rb_define_const(mXMLParserOptions, "DTDLOAD", INT2NUM(XML_PARSE_DTDLOAD));
|
26
|
-
/* default DTD attributes */
|
27
|
-
rb_define_const(mXMLParserOptions, "DTDATTR", INT2NUM(XML_PARSE_DTDATTR));
|
28
|
-
/* validate with the DTD */
|
29
|
-
rb_define_const(mXMLParserOptions, "DTDVALID", INT2NUM(XML_PARSE_DTDVALID));
|
30
|
-
/* suppress error reports */
|
31
|
-
rb_define_const(mXMLParserOptions, "NOERROR", INT2NUM(XML_PARSE_NOERROR));
|
32
|
-
/* suppress warning reports */
|
33
|
-
rb_define_const(mXMLParserOptions, "NOWARNING", INT2NUM(XML_PARSE_NOWARNING));
|
34
|
-
/* pedantic error reporting */
|
35
|
-
rb_define_const(mXMLParserOptions, "PEDANTIC", INT2NUM(XML_PARSE_PEDANTIC));
|
36
|
-
/* remove blank nodes */
|
37
|
-
rb_define_const(mXMLParserOptions, "NOBLANKS", INT2NUM(XML_PARSE_NOBLANKS));
|
38
|
-
/* use the SAX1 interface internally */
|
39
|
-
rb_define_const(mXMLParserOptions, "SAX1", INT2NUM(XML_PARSE_SAX1));
|
40
|
-
/* Implement XInclude substitition */
|
41
|
-
rb_define_const(mXMLParserOptions, "XINCLUDE", INT2NUM(XML_PARSE_XINCLUDE));
|
42
|
-
/* Forbid network access */
|
43
|
-
rb_define_const(mXMLParserOptions, "NONET", INT2NUM(XML_PARSE_NONET));
|
44
|
-
/* Do not reuse the context dictionnary */
|
45
|
-
rb_define_const(mXMLParserOptions, "NODICT", INT2NUM(XML_PARSE_NODICT));
|
46
|
-
/* remove redundant namespaces declarations */
|
47
|
-
rb_define_const(mXMLParserOptions, "NSCLEAN", INT2NUM(XML_PARSE_NSCLEAN));
|
48
|
-
/* merge CDATA as text nodes */
|
49
|
-
rb_define_const(mXMLParserOptions, "NOCDATA", INT2NUM(XML_PARSE_NOCDATA));
|
50
|
-
#if LIBXML_VERSION >= 20621
|
51
|
-
/* do not generate XINCLUDE START/END nodes */
|
52
|
-
rb_define_const(mXMLParserOptions, "NOXINCNODE", INT2NUM(XML_PARSE_NOXINCNODE));
|
53
|
-
#endif
|
54
|
-
#if LIBXML_VERSION >= 20700
|
55
|
-
/* compact small text nodes */
|
56
|
-
rb_define_const(mXMLParserOptions, "COMPACT", INT2NUM(XML_PARSE_COMPACT));
|
57
|
-
/* parse using XML-1.0 before update 5 */
|
58
|
-
rb_define_const(mXMLParserOptions, "PARSE_OLD10", INT2NUM(XML_PARSE_OLD10));
|
59
|
-
/* do not fixup XINCLUDE xml:base uris */
|
60
|
-
rb_define_const(mXMLParserOptions, "NOBASEFIX", INT2NUM(XML_PARSE_NOBASEFIX));
|
61
|
-
#endif
|
62
|
-
#if LIBXML_VERSION >= 20703
|
63
|
-
/* relax any hardcoded limit from the parser */
|
64
|
-
rb_define_const(mXMLParserOptions, "HUGE", INT2NUM(XML_PARSE_HUGE));
|
65
|
-
#endif
|
66
|
-
}
|
1
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
2
|
+
|
3
|
+
#include <stdarg.h>
|
4
|
+
#include "ruby_libxml.h"
|
5
|
+
|
6
|
+
/* Document-class: LibXML::XML::Parser::Options
|
7
|
+
*
|
8
|
+
* Options that control the operation of the HTMLParser. The easiest
|
9
|
+
* way to set a parser's options is to use the methods
|
10
|
+
* XML::Parser.file, XML::Parser.io or XML::Parser.string.
|
11
|
+
* For additional control, see XML::Parser::Context#options=.
|
12
|
+
*/
|
13
|
+
|
14
|
+
VALUE mXMLParserOptions;
|
15
|
+
|
16
|
+
void rxml_init_parser_options(void)
|
17
|
+
{
|
18
|
+
mXMLParserOptions = rb_define_module_under(cXMLParser, "Options");
|
19
|
+
|
20
|
+
/* recover on errors */
|
21
|
+
rb_define_const(mXMLParserOptions, "RECOVER", INT2NUM(XML_PARSE_RECOVER));
|
22
|
+
/* substitute entities */
|
23
|
+
rb_define_const(mXMLParserOptions, "NOENT", INT2NUM(XML_PARSE_NOENT));
|
24
|
+
/* load the external subset */
|
25
|
+
rb_define_const(mXMLParserOptions, "DTDLOAD", INT2NUM(XML_PARSE_DTDLOAD));
|
26
|
+
/* default DTD attributes */
|
27
|
+
rb_define_const(mXMLParserOptions, "DTDATTR", INT2NUM(XML_PARSE_DTDATTR));
|
28
|
+
/* validate with the DTD */
|
29
|
+
rb_define_const(mXMLParserOptions, "DTDVALID", INT2NUM(XML_PARSE_DTDVALID));
|
30
|
+
/* suppress error reports */
|
31
|
+
rb_define_const(mXMLParserOptions, "NOERROR", INT2NUM(XML_PARSE_NOERROR));
|
32
|
+
/* suppress warning reports */
|
33
|
+
rb_define_const(mXMLParserOptions, "NOWARNING", INT2NUM(XML_PARSE_NOWARNING));
|
34
|
+
/* pedantic error reporting */
|
35
|
+
rb_define_const(mXMLParserOptions, "PEDANTIC", INT2NUM(XML_PARSE_PEDANTIC));
|
36
|
+
/* remove blank nodes */
|
37
|
+
rb_define_const(mXMLParserOptions, "NOBLANKS", INT2NUM(XML_PARSE_NOBLANKS));
|
38
|
+
/* use the SAX1 interface internally */
|
39
|
+
rb_define_const(mXMLParserOptions, "SAX1", INT2NUM(XML_PARSE_SAX1));
|
40
|
+
/* Implement XInclude substitition */
|
41
|
+
rb_define_const(mXMLParserOptions, "XINCLUDE", INT2NUM(XML_PARSE_XINCLUDE));
|
42
|
+
/* Forbid network access */
|
43
|
+
rb_define_const(mXMLParserOptions, "NONET", INT2NUM(XML_PARSE_NONET));
|
44
|
+
/* Do not reuse the context dictionnary */
|
45
|
+
rb_define_const(mXMLParserOptions, "NODICT", INT2NUM(XML_PARSE_NODICT));
|
46
|
+
/* remove redundant namespaces declarations */
|
47
|
+
rb_define_const(mXMLParserOptions, "NSCLEAN", INT2NUM(XML_PARSE_NSCLEAN));
|
48
|
+
/* merge CDATA as text nodes */
|
49
|
+
rb_define_const(mXMLParserOptions, "NOCDATA", INT2NUM(XML_PARSE_NOCDATA));
|
50
|
+
#if LIBXML_VERSION >= 20621
|
51
|
+
/* do not generate XINCLUDE START/END nodes */
|
52
|
+
rb_define_const(mXMLParserOptions, "NOXINCNODE", INT2NUM(XML_PARSE_NOXINCNODE));
|
53
|
+
#endif
|
54
|
+
#if LIBXML_VERSION >= 20700
|
55
|
+
/* compact small text nodes */
|
56
|
+
rb_define_const(mXMLParserOptions, "COMPACT", INT2NUM(XML_PARSE_COMPACT));
|
57
|
+
/* parse using XML-1.0 before update 5 */
|
58
|
+
rb_define_const(mXMLParserOptions, "PARSE_OLD10", INT2NUM(XML_PARSE_OLD10));
|
59
|
+
/* do not fixup XINCLUDE xml:base uris */
|
60
|
+
rb_define_const(mXMLParserOptions, "NOBASEFIX", INT2NUM(XML_PARSE_NOBASEFIX));
|
61
|
+
#endif
|
62
|
+
#if LIBXML_VERSION >= 20703
|
63
|
+
/* relax any hardcoded limit from the parser */
|
64
|
+
rb_define_const(mXMLParserOptions, "HUGE", INT2NUM(XML_PARSE_HUGE));
|
65
|
+
#endif
|
66
|
+
}
|
@@ -1,12 +1,12 @@
|
|
1
|
-
/* Please see the LICENSE file for copyright and distribution information */
|
2
|
-
|
3
|
-
#ifndef __RXML_PARSER_OPTIONS__
|
4
|
-
#define __RXML_PARSER_OPTIONS__
|
5
|
-
|
6
|
-
#define MAX_LIBXML_FEATURES_LEN 50
|
7
|
-
|
8
|
-
extern VALUE mXMLParserOptions;
|
9
|
-
|
10
|
-
void rxml_init_parser_options();
|
11
|
-
|
12
|
-
#endif
|
1
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
2
|
+
|
3
|
+
#ifndef __RXML_PARSER_OPTIONS__
|
4
|
+
#define __RXML_PARSER_OPTIONS__
|
5
|
+
|
6
|
+
#define MAX_LIBXML_FEATURES_LEN 50
|
7
|
+
|
8
|
+
extern VALUE mXMLParserOptions;
|
9
|
+
|
10
|
+
void rxml_init_parser_options();
|
11
|
+
|
12
|
+
#endif
|
@@ -62,8 +62,8 @@ static void rxml_reader_free(xmlTextReaderPtr xreader)
|
|
62
62
|
static void rxml_reader_mark(xmlTextReaderPtr xreader)
|
63
63
|
{
|
64
64
|
xmlDocPtr xdoc = xmlTextReaderCurrentDoc(xreader);
|
65
|
-
VALUE
|
66
|
-
rb_gc_mark(
|
65
|
+
VALUE doc = (VALUE)xdoc->_private;
|
66
|
+
rb_gc_mark(doc);
|
67
67
|
}
|
68
68
|
|
69
69
|
static VALUE rxml_reader_wrap(xmlTextReaderPtr xreader)
|
@@ -311,24 +311,14 @@ static VALUE rxml_reader_move_to_attr_no(VALUE self, VALUE index)
|
|
311
311
|
*/
|
312
312
|
static VALUE rxml_reader_move_to_attr(VALUE self, VALUE val)
|
313
313
|
{
|
314
|
-
|
315
|
-
|
316
|
-
rb_warn("%s::move_to_attribute with a Fixnum argument is deprecated. "
|
317
|
-
"Please, consider move_to_attribute_no method instead.",
|
318
|
-
rb_class2name(cXMLReader));
|
319
|
-
return rxml_reader_move_to_attr_no(self, val);
|
320
|
-
}
|
321
|
-
else
|
322
|
-
{
|
323
|
-
int ret;
|
324
|
-
xmlTextReaderPtr xreader;
|
314
|
+
int ret;
|
315
|
+
xmlTextReaderPtr xreader;
|
325
316
|
|
326
|
-
|
327
|
-
|
328
|
-
|
317
|
+
xreader = rxml_text_reader_get(self);
|
318
|
+
ret = xmlTextReaderMoveToAttribute(xreader,
|
319
|
+
(const xmlChar *) StringValueCStr(val));
|
329
320
|
|
330
|
-
|
331
|
-
}
|
321
|
+
return INT2FIX(ret);
|
332
322
|
}
|
333
323
|
|
334
324
|
/*
|
@@ -991,26 +981,14 @@ static VALUE rxml_reader_lookup_namespace(VALUE self, VALUE prefix)
|
|
991
981
|
* reader.expand -> node
|
992
982
|
*
|
993
983
|
* Returns the current node and its full subtree. Note the returned node
|
994
|
-
* is valid ONLY until the next read call.
|
984
|
+
* is valid ONLY until the next read call. If you would like to preserve
|
985
|
+
* the node, or search it via xpath, call reader.doc first.
|
995
986
|
*/
|
996
987
|
static VALUE rxml_reader_expand(VALUE self)
|
997
988
|
{
|
998
989
|
xmlTextReaderPtr xreader = rxml_text_reader_get(self);
|
999
|
-
xmlNodePtr xnode =
|
990
|
+
xmlNodePtr xnode = xmlTextReaderExpand(xreader);
|
1000
991
|
|
1001
|
-
/* At this point we need to wrap the reader's document as explained above. */
|
1002
|
-
xmlDocPtr xdoc = xmlTextReaderCurrentDoc(xreader);
|
1003
|
-
|
1004
|
-
if (!xdoc)
|
1005
|
-
rb_raise(rb_eRuntimeError, "The reader does not have a document. Did you forget to call read?");
|
1006
|
-
|
1007
|
-
rxml_document_wrap(xdoc);
|
1008
|
-
|
1009
|
-
/* And now hook in a mark function */
|
1010
|
-
RDATA(self)->dmark = (RUBY_DATA_FUNC)rxml_reader_mark;
|
1011
|
-
|
1012
|
-
xnode = xmlTextReaderExpand(xreader);
|
1013
|
-
|
1014
992
|
if (!xnode)
|
1015
993
|
{
|
1016
994
|
return Qnil;
|
@@ -1021,6 +999,35 @@ static VALUE rxml_reader_expand(VALUE self)
|
|
1021
999
|
}
|
1022
1000
|
}
|
1023
1001
|
|
1002
|
+
/*
|
1003
|
+
* call-seq:
|
1004
|
+
* reader.document -> doc
|
1005
|
+
*
|
1006
|
+
* Hacking interface that provides access to the current document being accessed by the
|
1007
|
+
* reader. NOTE: as a result of this call, the reader will not destroy the associated XML
|
1008
|
+
* document. Instead, it will be destroyed when the returned document goes out of scope.
|
1009
|
+
*
|
1010
|
+
* Returns: document
|
1011
|
+
*/
|
1012
|
+
static VALUE rxml_reader_doc(VALUE self)
|
1013
|
+
{
|
1014
|
+
VALUE result = Qnil;
|
1015
|
+
xmlTextReaderPtr xreader = rxml_text_reader_get(self);
|
1016
|
+
xmlDocPtr xdoc = xmlTextReaderCurrentDoc(xreader);
|
1017
|
+
|
1018
|
+
if (!xdoc)
|
1019
|
+
rb_raise(rb_eRuntimeError, "The reader does not have a document. Did you forget to call read?");
|
1020
|
+
|
1021
|
+
result = rxml_document_wrap(xdoc);
|
1022
|
+
|
1023
|
+
// And now hook in a mark function to keep the document alive as long as the reader is valid
|
1024
|
+
RDATA(self)->dmark = (RUBY_DATA_FUNC)rxml_reader_mark;
|
1025
|
+
|
1026
|
+
return result;
|
1027
|
+
}
|
1028
|
+
|
1029
|
+
|
1030
|
+
|
1024
1031
|
#if LIBXML_VERSION >= 20618
|
1025
1032
|
/*
|
1026
1033
|
* call-seq:
|
@@ -1140,6 +1147,7 @@ void rxml_init_reader(void)
|
|
1140
1147
|
rb_define_method(cXMLReader, "column_number", rxml_reader_column_number, 0);
|
1141
1148
|
#endif
|
1142
1149
|
rb_define_method(cXMLReader, "depth", rxml_reader_depth, 0);
|
1150
|
+
rb_define_method(cXMLReader, "doc", rxml_reader_doc, 0);
|
1143
1151
|
rb_define_method(cXMLReader, "encoding", rxml_reader_encoding, 0);
|
1144
1152
|
rb_define_method(cXMLReader, "expand", rxml_reader_expand, 0);
|
1145
1153
|
rb_define_method(cXMLReader, "get_attribute", rxml_reader_get_attribute, 1);
|
@@ -1151,12 +1159,12 @@ void rxml_init_reader(void)
|
|
1151
1159
|
rb_define_method(cXMLReader, "line_number", rxml_reader_line_number, 0);
|
1152
1160
|
#endif
|
1153
1161
|
rb_define_method(cXMLReader, "local_name", rxml_reader_local_name, 0);
|
1154
|
-
rb_define_method(cXMLReader, "lookup_namespace",
|
1162
|
+
rb_define_method(cXMLReader, "lookup_namespace", rxml_reader_lookup_namespace, 1);
|
1155
1163
|
rb_define_method(cXMLReader, "move_to_attribute", rxml_reader_move_to_attr, 1);
|
1156
1164
|
rb_define_method(cXMLReader, "move_to_attribute_no", rxml_reader_move_to_attr_no, 1);
|
1157
1165
|
rb_define_method(cXMLReader, "move_to_attribute_ns", rxml_reader_move_to_attr_ns, 2);
|
1158
|
-
rb_define_method(cXMLReader, "move_to_first_attribute",
|
1159
|
-
rb_define_method(cXMLReader, "move_to_next_attribute",
|
1166
|
+
rb_define_method(cXMLReader, "move_to_first_attribute", rxml_reader_move_to_first_attr, 0);
|
1167
|
+
rb_define_method(cXMLReader, "move_to_next_attribute", rxml_reader_move_to_next_attr, 0);
|
1160
1168
|
rb_define_method(cXMLReader, "move_to_element", rxml_reader_move_to_element, 0);
|
1161
1169
|
rb_define_method(cXMLReader, "name", rxml_reader_name, 0);
|
1162
1170
|
rb_define_method(cXMLReader, "namespace_uri", rxml_reader_namespace_uri, 0);
|
@@ -1173,7 +1181,7 @@ void rxml_init_reader(void)
|
|
1173
1181
|
rb_define_method(cXMLReader, "read_outer_xml", rxml_reader_read_outer_xml, 0);
|
1174
1182
|
rb_define_method(cXMLReader, "read_state", rxml_reader_read_state, 0);
|
1175
1183
|
rb_define_method(cXMLReader, "read_string", rxml_reader_read_string, 0);
|
1176
|
-
rb_define_method(cXMLReader, "relax_ng_validate",
|
1184
|
+
rb_define_method(cXMLReader, "relax_ng_validate", rxml_reader_relax_ng_validate, 1);
|
1177
1185
|
rb_define_method(cXMLReader, "standalone", rxml_reader_standalone, 0);
|
1178
1186
|
#if LIBXML_VERSION >= 20620
|
1179
1187
|
rb_define_method(cXMLReader, "schema_validate", rxml_reader_schema_validate, 1);
|
@@ -1,17 +1,17 @@
|
|
1
|
-
/* Copyright (c) 2006 Apple Computer Inc.
|
2
|
-
* Please see the LICENSE file for copyright and distribution information. */
|
3
|
-
|
4
|
-
#ifndef __RXML_READER__
|
5
|
-
#define __RXML_READER__
|
6
|
-
|
7
|
-
#include <libxml/xmlreader.h>
|
8
|
-
#include <libxml/xmlschemas.h>
|
9
|
-
|
10
|
-
extern VALUE cXMLReader;
|
11
|
-
|
12
|
-
void rxml_init_reader(void);
|
13
|
-
|
14
|
-
/* Exported to be used by XML::Document#reader */
|
15
|
-
VALUE rxml_reader_new_walker(VALUE self, VALUE doc);
|
16
|
-
|
17
|
-
#endif /* __rxml_READER__ */
|
1
|
+
/* Copyright (c) 2006 Apple Computer Inc.
|
2
|
+
* Please see the LICENSE file for copyright and distribution information. */
|
3
|
+
|
4
|
+
#ifndef __RXML_READER__
|
5
|
+
#define __RXML_READER__
|
6
|
+
|
7
|
+
#include <libxml/xmlreader.h>
|
8
|
+
#include <libxml/xmlschemas.h>
|
9
|
+
|
10
|
+
extern VALUE cXMLReader;
|
11
|
+
|
12
|
+
void rxml_init_reader(void);
|
13
|
+
|
14
|
+
/* Exported to be used by XML::Document#reader */
|
15
|
+
VALUE rxml_reader_new_walker(VALUE self, VALUE doc);
|
16
|
+
|
17
|
+
#endif /* __rxml_READER__ */
|
@@ -1,10 +1,10 @@
|
|
1
|
-
#ifndef __RXML_RELAXNG__
|
2
|
-
#define __RXML_RELAXNG__
|
3
|
-
|
4
|
-
#include <libxml/relaxng.h>
|
5
|
-
|
6
|
-
extern VALUE cXMLRelaxNG;
|
7
|
-
|
8
|
-
void rxml_init_relaxng(void);
|
9
|
-
#endif
|
10
|
-
|
1
|
+
#ifndef __RXML_RELAXNG__
|
2
|
+
#define __RXML_RELAXNG__
|
3
|
+
|
4
|
+
#include <libxml/relaxng.h>
|
5
|
+
|
6
|
+
extern VALUE cXMLRelaxNG;
|
7
|
+
|
8
|
+
void rxml_init_relaxng(void);
|
9
|
+
#endif
|
10
|
+
|
@@ -184,8 +184,8 @@ static void start_document_callback(void *ctx)
|
|
184
184
|
|
185
185
|
static void start_element_ns_callback(void *ctx,
|
186
186
|
const xmlChar *xlocalname, const xmlChar *xprefix, const xmlChar *xURI,
|
187
|
-
|
188
|
-
|
187
|
+
int nb_namespaces, const xmlChar **xnamespaces,
|
188
|
+
int nb_attributes, int nb_defaulted, const xmlChar **xattributes)
|
189
189
|
{
|
190
190
|
VALUE handler = (VALUE) ctx;
|
191
191
|
VALUE attributes = rb_hash_new();
|
@@ -201,7 +201,7 @@ static void start_element_ns_callback(void *ctx,
|
|
201
201
|
for (i = 0;i < nb_attributes * 5; i+=5)
|
202
202
|
{
|
203
203
|
VALUE attrName = rxml_new_cstr(xattributes[i+0], NULL);
|
204
|
-
long attrLen = xattributes[i+4] - xattributes[i+3];
|
204
|
+
long attrLen = (long)(xattributes[i+4] - xattributes[i+3]);
|
205
205
|
VALUE attrValue = rxml_new_cstr_len(xattributes[i+3], attrLen, NULL);
|
206
206
|
rb_hash_aset(attributes, attrName, attrValue);
|
207
207
|
}
|
@@ -1,10 +1,10 @@
|
|
1
|
-
/* Please see the LICENSE file for copyright and distribution information */
|
2
|
-
|
3
|
-
#ifndef __RXML_SAX2_HANDLER__
|
4
|
-
#define __RXML_SAX2_HANDLER__
|
5
|
-
|
6
|
-
extern xmlSAXHandler rxml_sax_handler;
|
7
|
-
|
8
|
-
void rxml_init_sax2_handler(void);
|
9
|
-
|
10
|
-
#endif
|
1
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
2
|
+
|
3
|
+
#ifndef __RXML_SAX2_HANDLER__
|
4
|
+
#define __RXML_SAX2_HANDLER__
|
5
|
+
|
6
|
+
extern xmlSAXHandler rxml_sax_handler;
|
7
|
+
|
8
|
+
void rxml_init_sax2_handler(void);
|
9
|
+
|
10
|
+
#endif
|
@@ -1,120 +1,116 @@
|
|
1
|
-
/* Please see the LICENSE file for copyright and distribution information */
|
2
|
-
|
3
|
-
#include "ruby_libxml.h"
|
4
|
-
#include "ruby_xml_sax_parser.h"
|
5
|
-
|
6
|
-
/*
|
7
|
-
* Document-class: LibXML::XML::SaxParser
|
8
|
-
*
|
9
|
-
* XML::SaxParser provides a callback based API for parsing documents,
|
10
|
-
* in contrast to XML::Parser's tree based API and XML::Reader's stream
|
11
|
-
* based API.
|
12
|
-
*
|
13
|
-
* The XML::SaxParser API is fairly complex, not well standardized,
|
14
|
-
* and does not directly support validation making entity, namespace and
|
15
|
-
* base processing relatively hard.
|
16
|
-
*
|
17
|
-
* To use the XML::SaxParser, register a callback class via the
|
18
|
-
* XML::SaxParser#callbacks=. It is easiest to include the
|
19
|
-
* XML::SaxParser::Callbacks module in your class and override
|
20
|
-
* the methods as needed.
|
21
|
-
*
|
22
|
-
* Basic example:
|
23
|
-
*
|
24
|
-
* class MyCallbacks
|
25
|
-
* include XML::SaxParser::Callbacks
|
26
|
-
* def on_start_element(element, attributes)
|
27
|
-
* puts #Element started: #{element}"
|
28
|
-
* end
|
29
|
-
* end
|
30
|
-
*
|
31
|
-
* parser = XML::SaxParser.string(my_string)
|
32
|
-
* parser.callbacks = MyCallbacks.new
|
33
|
-
* parser.parse
|
34
|
-
*
|
35
|
-
* You can also parse strings (see XML::SaxParser.string) and
|
36
|
-
* io objects (see XML::SaxParser.io).
|
37
|
-
*/
|
38
|
-
|
39
|
-
VALUE cXMLSaxParser;
|
40
|
-
static ID CALLBACKS_ATTR;
|
41
|
-
static ID CONTEXT_ATTR;
|
42
|
-
|
43
|
-
|
44
|
-
/* ====== Parser =========== */
|
45
|
-
|
46
|
-
/*
|
47
|
-
* call-seq:
|
48
|
-
* parser.initialize(context) -> XML::Parser
|
49
|
-
*
|
50
|
-
* Creates a new XML::Parser from the specified
|
51
|
-
* XML::Parser::Context.
|
52
|
-
*/
|
53
|
-
static VALUE rxml_sax_parser_initialize(int argc, VALUE *argv, VALUE self)
|
54
|
-
{
|
55
|
-
VALUE context = Qnil;
|
56
|
-
|
57
|
-
rb_scan_args(argc, argv, "01", &context);
|
58
|
-
|
59
|
-
if (context == Qnil)
|
60
|
-
{
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
*
|
71
|
-
*
|
72
|
-
*
|
73
|
-
*
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
ctxt->sax
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
/* Instance Methods */
|
118
|
-
rb_define_method(cXMLSaxParser, "initialize", rxml_sax_parser_initialize, -1);
|
119
|
-
rb_define_method(cXMLSaxParser, "parse", rxml_sax_parser_parse, 0);
|
120
|
-
}
|
1
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
2
|
+
|
3
|
+
#include "ruby_libxml.h"
|
4
|
+
#include "ruby_xml_sax_parser.h"
|
5
|
+
|
6
|
+
/*
|
7
|
+
* Document-class: LibXML::XML::SaxParser
|
8
|
+
*
|
9
|
+
* XML::SaxParser provides a callback based API for parsing documents,
|
10
|
+
* in contrast to XML::Parser's tree based API and XML::Reader's stream
|
11
|
+
* based API.
|
12
|
+
*
|
13
|
+
* The XML::SaxParser API is fairly complex, not well standardized,
|
14
|
+
* and does not directly support validation making entity, namespace and
|
15
|
+
* base processing relatively hard.
|
16
|
+
*
|
17
|
+
* To use the XML::SaxParser, register a callback class via the
|
18
|
+
* XML::SaxParser#callbacks=. It is easiest to include the
|
19
|
+
* XML::SaxParser::Callbacks module in your class and override
|
20
|
+
* the methods as needed.
|
21
|
+
*
|
22
|
+
* Basic example:
|
23
|
+
*
|
24
|
+
* class MyCallbacks
|
25
|
+
* include XML::SaxParser::Callbacks
|
26
|
+
* def on_start_element(element, attributes)
|
27
|
+
* puts #Element started: #{element}"
|
28
|
+
* end
|
29
|
+
* end
|
30
|
+
*
|
31
|
+
* parser = XML::SaxParser.string(my_string)
|
32
|
+
* parser.callbacks = MyCallbacks.new
|
33
|
+
* parser.parse
|
34
|
+
*
|
35
|
+
* You can also parse strings (see XML::SaxParser.string) and
|
36
|
+
* io objects (see XML::SaxParser.io).
|
37
|
+
*/
|
38
|
+
|
39
|
+
VALUE cXMLSaxParser;
|
40
|
+
static ID CALLBACKS_ATTR;
|
41
|
+
static ID CONTEXT_ATTR;
|
42
|
+
|
43
|
+
|
44
|
+
/* ====== Parser =========== */
|
45
|
+
|
46
|
+
/*
|
47
|
+
* call-seq:
|
48
|
+
* parser.initialize(context) -> XML::Parser
|
49
|
+
*
|
50
|
+
* Creates a new XML::Parser from the specified
|
51
|
+
* XML::Parser::Context.
|
52
|
+
*/
|
53
|
+
static VALUE rxml_sax_parser_initialize(int argc, VALUE *argv, VALUE self)
|
54
|
+
{
|
55
|
+
VALUE context = Qnil;
|
56
|
+
|
57
|
+
rb_scan_args(argc, argv, "01", &context);
|
58
|
+
|
59
|
+
if (context == Qnil)
|
60
|
+
{
|
61
|
+
rb_raise(rb_eArgError, "An instance of a XML::Parser::Context must be passed to XML::SaxParser.new");
|
62
|
+
}
|
63
|
+
|
64
|
+
rb_ivar_set(self, CONTEXT_ATTR, context);
|
65
|
+
return self;
|
66
|
+
}
|
67
|
+
|
68
|
+
/*
|
69
|
+
* call-seq:
|
70
|
+
* parser.parse -> (true|false)
|
71
|
+
*
|
72
|
+
* Parse the input XML, generating callbacks to the object
|
73
|
+
* registered via the +callbacks+ attributesibute.
|
74
|
+
*/
|
75
|
+
static VALUE rxml_sax_parser_parse(VALUE self)
|
76
|
+
{
|
77
|
+
int status;
|
78
|
+
VALUE context = rb_ivar_get(self, CONTEXT_ATTR);
|
79
|
+
xmlParserCtxtPtr ctxt;
|
80
|
+
Data_Get_Struct(context, xmlParserCtxt, ctxt);
|
81
|
+
|
82
|
+
ctxt->sax2 = 1;
|
83
|
+
ctxt->userData = (void*)rb_ivar_get(self, CALLBACKS_ATTR);
|
84
|
+
|
85
|
+
if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler)
|
86
|
+
xmlFree(ctxt->sax);
|
87
|
+
|
88
|
+
ctxt->sax = (xmlSAXHandlerPtr) xmlMalloc(sizeof(rxml_sax_handler));
|
89
|
+
if (ctxt->sax == NULL)
|
90
|
+
rb_fatal("Not enough memory.");
|
91
|
+
memcpy(ctxt->sax, &rxml_sax_handler, sizeof(rxml_sax_handler));
|
92
|
+
|
93
|
+
status = xmlParseDocument(ctxt);
|
94
|
+
|
95
|
+
/* Now check the parsing result*/
|
96
|
+
if (status == -1 || !ctxt->wellFormed)
|
97
|
+
{
|
98
|
+
rxml_raise(&ctxt->lastError);
|
99
|
+
}
|
100
|
+
return Qtrue;
|
101
|
+
}
|
102
|
+
|
103
|
+
void rxml_init_sax_parser(void)
|
104
|
+
{
|
105
|
+
/* SaxParser */
|
106
|
+
cXMLSaxParser = rb_define_class_under(mXML, "SaxParser", rb_cObject);
|
107
|
+
|
108
|
+
/* Atributes */
|
109
|
+
CALLBACKS_ATTR = rb_intern("@callbacks");
|
110
|
+
CONTEXT_ATTR = rb_intern("@context");
|
111
|
+
rb_define_attr(cXMLSaxParser, "callbacks", 1, 1);
|
112
|
+
|
113
|
+
/* Instance Methods */
|
114
|
+
rb_define_method(cXMLSaxParser, "initialize", rxml_sax_parser_initialize, -1);
|
115
|
+
rb_define_method(cXMLSaxParser, "parse", rxml_sax_parser_parse, 0);
|
116
|
+
}
|