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 
     | 
    
         
            +
            }
         
     |