libxml-ruby 2.9.0-x64-mingw32 → 3.0.0-x64-mingw32
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/2.4/libxml_ruby.so +0 -0
- data/lib/libs/libxml2-2.dll +0 -0
- data/lib/libs/zlib1.dll +0 -0
- 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 +4 -9
- data/ext/libxml/extconf.h +0 -4
- data/lib/2.3/libxml_ruby.so +0 -0
- 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 | 
            +
            }
         |