libxml-ruby 4.1.2-x64-mingw-ucrt → 5.0.1-x64-mingw-ucrt
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 +17 -0
- data/README.rdoc +7 -16
- data/ext/libxml/ruby_libxml.h +43 -44
- data/ext/libxml/ruby_xml.c +0 -343
- data/ext/libxml/ruby_xml.h +9 -10
- data/ext/libxml/ruby_xml_attributes.h +2 -0
- data/ext/libxml/ruby_xml_document.c +6 -6
- data/ext/libxml/ruby_xml_document.h +11 -11
- data/ext/libxml/ruby_xml_dtd.c +85 -79
- data/ext/libxml/ruby_xml_encoding.h +20 -18
- data/ext/libxml/ruby_xml_error.c +9 -6
- data/ext/libxml/ruby_xml_error.h +2 -2
- data/ext/libxml/ruby_xml_html_parser_context.c +35 -21
- data/ext/libxml/ruby_xml_namespace.c +0 -3
- data/ext/libxml/ruby_xml_node.c +1394 -1398
- data/ext/libxml/ruby_xml_parser.h +1 -1
- data/ext/libxml/ruby_xml_parser_context.c +47 -39
- data/ext/libxml/ruby_xml_parser_options.c +9 -1
- data/ext/libxml/ruby_xml_parser_options.h +1 -1
- data/ext/libxml/ruby_xml_reader.c +15 -16
- data/ext/libxml/ruby_xml_sax2_handler.c +1 -1
- data/ext/libxml/ruby_xml_sax_parser.c +1 -9
- data/ext/libxml/ruby_xml_schema.c +4 -4
- data/ext/libxml/ruby_xml_version.h +5 -5
- data/ext/libxml/ruby_xml_writer.c +8 -8
- data/ext/libxml/ruby_xml_xpath.c +1 -1
- data/ext/libxml/ruby_xml_xpath_context.c +2 -2
- data/ext/libxml/ruby_xml_xpath_expression.c +1 -1
- data/lib/3.2/libxml_ruby.so +0 -0
- data/lib/3.3/libxml_ruby.so +0 -0
- data/lib/libxml/document.rb +15 -15
- data/lib/libxml/html_parser.rb +23 -23
- data/lib/libxml/parser.rb +26 -24
- data/test/test.rb +5 -0
- data/test/test_document.rb +8 -0
- data/test/test_document_write.rb +1 -4
- data/test/test_dtd.rb +5 -8
- data/test/test_encoding.rb +1 -4
- data/test/test_helper.rb +9 -2
- data/test/test_html_parser.rb +162 -162
- data/test/test_namespace.rb +1 -3
- data/test/test_node.rb +1 -3
- data/test/test_node_write.rb +1 -4
- data/test/test_parser.rb +26 -17
- data/test/test_reader.rb +4 -4
- data/test/test_sax_parser.rb +1 -1
- data/test/test_xml.rb +0 -99
- metadata +5 -3
- data/lib/3.1/libxml_ruby.so +0 -0
| @@ -39,31 +39,33 @@ static VALUE rxml_parser_context_alloc(VALUE klass) | |
| 39 39 | 
             
             *
         | 
| 40 40 | 
             
             * Parameters:
         | 
| 41 41 | 
             
             *
         | 
| 42 | 
            -
             *  document - An XML::Document instance | 
| 42 | 
            +
             *  document - An XML::Document instance
         | 
| 43 | 
            +
             *  options - A or'ed together list of LibXML::XML::Parser::Options values
         | 
| 43 44 | 
             
             */
         | 
| 44 | 
            -
            static VALUE rxml_parser_context_document(VALUE  | 
| 45 | 
            +
            static VALUE rxml_parser_context_document(int argc, VALUE* argv, VALUE klass)
         | 
| 45 46 | 
             
            {
         | 
| 46 | 
            -
               | 
| 47 | 
            -
               | 
| 48 | 
            -
              xmlChar *buffer; 
         | 
| 49 | 
            -
              int length;
         | 
| 47 | 
            +
              VALUE document, options;
         | 
| 48 | 
            +
              rb_scan_args(argc, argv, "11", &document, &options);
         | 
| 50 49 |  | 
| 51 50 | 
             
              if (rb_obj_is_kind_of(document, cXMLDocument) == Qfalse)
         | 
| 52 51 | 
             
                rb_raise(rb_eTypeError, "Must pass an LibXML::XML::Document object");
         | 
| 53 52 |  | 
| 53 | 
            +
              xmlDocPtr xdoc;
         | 
| 54 | 
            +
              xmlChar *buffer;
         | 
| 55 | 
            +
              int length;
         | 
| 54 56 | 
             
              Data_Get_Struct(document, xmlDoc, xdoc);
         | 
| 55 57 | 
             
              xmlDocDumpFormatMemoryEnc(xdoc, &buffer, &length, (const char*)xdoc->encoding, 0);
         | 
| 56 58 |  | 
| 57 | 
            -
              ctxt = xmlCreateDocParserCtxt(buffer);
         | 
| 59 | 
            +
              xmlParserCtxtPtr ctxt = xmlCreateDocParserCtxt(buffer);
         | 
| 58 60 |  | 
| 59 61 | 
             
              if (!ctxt)
         | 
| 60 | 
            -
                rxml_raise( | 
| 62 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 61 63 |  | 
| 62 64 | 
             
              /* This is annoying, but xmlInitParserCtxt (called indirectly above) and 
         | 
| 63 65 | 
             
                 xmlCtxtUseOptionsInternal (called below) initialize slightly different
         | 
| 64 66 | 
             
                 context options, in particular XML_PARSE_NODICT which xmlInitParserCtxt
         | 
| 65 67 | 
             
                 sets to 0 and xmlCtxtUseOptionsInternal sets to 1.  So we have to call both. */
         | 
| 66 | 
            -
              xmlCtxtUseOptions(ctxt,  | 
| 68 | 
            +
              xmlCtxtUseOptions(ctxt, options == Qnil ? 0 : NUM2INT(options));
         | 
| 67 69 |  | 
| 68 70 | 
             
              return rxml_parser_context_wrap(ctxt);
         | 
| 69 71 | 
             
            }
         | 
| @@ -75,20 +77,24 @@ static VALUE rxml_parser_context_document(VALUE klass, VALUE document) | |
| 75 77 | 
             
             *
         | 
| 76 78 | 
             
             * Parameters:
         | 
| 77 79 | 
             
             *
         | 
| 78 | 
            -
             *  file - A filename or uri | 
| 80 | 
            +
             *  file - A filename or uri
         | 
| 81 | 
            +
             *  options - A or'ed together list of LibXML::XML::Parser::Options values
         | 
| 79 82 | 
             
            */
         | 
| 80 | 
            -
            static VALUE rxml_parser_context_file(VALUE  | 
| 83 | 
            +
            static VALUE rxml_parser_context_file(int argc, VALUE* argv, VALUE klass)
         | 
| 81 84 | 
             
            {
         | 
| 85 | 
            +
              VALUE file, options;
         | 
| 86 | 
            +
              rb_scan_args(argc, argv, "11", &file, &options);
         | 
| 87 | 
            +
             | 
| 82 88 | 
             
              xmlParserCtxtPtr ctxt = xmlCreateURLParserCtxt(StringValuePtr(file), 0);
         | 
| 83 89 |  | 
| 84 90 | 
             
              if (!ctxt)
         | 
| 85 | 
            -
                rxml_raise( | 
| 91 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 86 92 |  | 
| 87 93 | 
             
              /* This is annoying, but xmlInitParserCtxt (called indirectly above) and 
         | 
| 88 94 | 
             
                 xmlCtxtUseOptionsInternal (called below) initialize slightly different
         | 
| 89 95 | 
             
                 context options, in particular XML_PARSE_NODICT which xmlInitParserCtxt
         | 
| 90 96 | 
             
                 sets to 0 and xmlCtxtUseOptionsInternal sets to 1.  So we have to call both. */
         | 
| 91 | 
            -
              xmlCtxtUseOptions(ctxt,  | 
| 97 | 
            +
              xmlCtxtUseOptions(ctxt, options == Qnil ? 0 : NUM2INT(options));
         | 
| 92 98 |  | 
| 93 99 | 
             
              return rxml_parser_context_wrap(ctxt);
         | 
| 94 100 | 
             
            }
         | 
| @@ -100,26 +106,29 @@ static VALUE rxml_parser_context_file(VALUE klass, VALUE file) | |
| 100 106 | 
             
             *
         | 
| 101 107 | 
             
             * Parameters:
         | 
| 102 108 | 
             
             *
         | 
| 103 | 
            -
             *  string - A string that contains the data to parse | 
| 109 | 
            +
             *  string - A string that contains the data to parse
         | 
| 110 | 
            +
             *  options - A or'ed together list of LibXML::XML::Parser::Options values
         | 
| 104 111 | 
             
            */
         | 
| 105 | 
            -
            static VALUE rxml_parser_context_string(VALUE  | 
| 112 | 
            +
            static VALUE rxml_parser_context_string(int argc, VALUE* argv, VALUE klass)
         | 
| 106 113 | 
             
            {
         | 
| 107 | 
            -
               | 
| 114 | 
            +
              VALUE string, options;
         | 
| 115 | 
            +
              rb_scan_args(argc, argv, "11", &string, &options);
         | 
| 116 | 
            +
             | 
| 108 117 | 
             
              Check_Type(string, T_STRING);
         | 
| 109 118 |  | 
| 110 119 | 
             
              if (RSTRING_LEN(string) == 0)
         | 
| 111 120 | 
             
                rb_raise(rb_eArgError, "Must specify a string with one or more characters");
         | 
| 112 121 |  | 
| 113 | 
            -
              ctxt = xmlCreateMemoryParserCtxt(StringValuePtr(string), (int)RSTRING_LEN(string));
         | 
| 122 | 
            +
              xmlParserCtxtPtr ctxt = xmlCreateMemoryParserCtxt(StringValuePtr(string), (int)RSTRING_LEN(string));
         | 
| 114 123 |  | 
| 115 124 | 
             
              if (!ctxt)
         | 
| 116 | 
            -
                rxml_raise( | 
| 125 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 117 126 |  | 
| 118 127 | 
             
              /* This is annoying, but xmlInitParserCtxt (called indirectly above) and 
         | 
| 119 128 | 
             
                 xmlCtxtUseOptionsInternal (called below) initialize slightly different
         | 
| 120 129 | 
             
                 context options, in particular XML_PARSE_NODICT which xmlInitParserCtxt
         | 
| 121 130 | 
             
                 sets to 0 and xmlCtxtUseOptionsInternal sets to 1.  So we have to call both. */
         | 
| 122 | 
            -
              xmlCtxtUseOptions(ctxt,  | 
| 131 | 
            +
              xmlCtxtUseOptions(ctxt, options == Qnil ? 0 : NUM2INT(options));
         | 
| 123 132 |  | 
| 124 133 | 
             
              return rxml_parser_context_wrap(ctxt);
         | 
| 125 134 | 
             
            }
         | 
| @@ -131,45 +140,44 @@ static VALUE rxml_parser_context_string(VALUE klass, VALUE string) | |
| 131 140 | 
             
             *
         | 
| 132 141 | 
             
             * Parameters:
         | 
| 133 142 | 
             
             *
         | 
| 134 | 
            -
             *  io - A ruby IO object | 
| 143 | 
            +
             *  io - A ruby IO object
         | 
| 144 | 
            +
             *  options - A or'ed together list of LibXML::XML::Parser::Options values
         | 
| 135 145 | 
             
            */
         | 
| 136 | 
            -
            static VALUE rxml_parser_context_io(VALUE  | 
| 146 | 
            +
            static VALUE rxml_parser_context_io(int argc, VALUE* argv, VALUE klass)
         | 
| 137 147 | 
             
            {
         | 
| 138 | 
            -
              VALUE  | 
| 139 | 
            -
               | 
| 140 | 
            -
              xmlParserInputBufferPtr input;
         | 
| 141 | 
            -
              xmlParserInputPtr stream;
         | 
| 148 | 
            +
              VALUE io, options;
         | 
| 149 | 
            +
              rb_scan_args(argc, argv, "11", &io, &options);
         | 
| 142 150 |  | 
| 143 151 | 
             
              if (NIL_P(io))
         | 
| 144 152 | 
             
                rb_raise(rb_eTypeError, "Must pass in an IO object");
         | 
| 145 153 |  | 
| 146 | 
            -
              input = xmlParserInputBufferCreateIO((xmlInputReadCallback) rxml_read_callback, NULL,
         | 
| 154 | 
            +
              xmlParserInputBufferPtr input = xmlParserInputBufferCreateIO((xmlInputReadCallback) rxml_read_callback, NULL,
         | 
| 147 155 | 
             
                                                   (void*)io, XML_CHAR_ENCODING_NONE);
         | 
| 148 | 
            -
             | 
| 149 | 
            -
              ctxt = xmlNewParserCtxt();
         | 
| 156 | 
            +
             | 
| 157 | 
            +
              xmlParserCtxtPtr ctxt = xmlNewParserCtxt();
         | 
| 150 158 |  | 
| 151 159 | 
             
              if (!ctxt)
         | 
| 152 160 | 
             
              {
         | 
| 153 161 | 
             
                xmlFreeParserInputBuffer(input);
         | 
| 154 | 
            -
                rxml_raise( | 
| 162 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 155 163 | 
             
              }
         | 
| 156 164 |  | 
| 157 165 | 
             
              /* This is annoying, but xmlInitParserCtxt (called indirectly above) and 
         | 
| 158 166 | 
             
                 xmlCtxtUseOptionsInternal (called below) initialize slightly different
         | 
| 159 167 | 
             
                 context options, in particular XML_PARSE_NODICT which xmlInitParserCtxt
         | 
| 160 168 | 
             
                 sets to 0 and xmlCtxtUseOptionsInternal sets to 1.  So we have to call both. */
         | 
| 161 | 
            -
              xmlCtxtUseOptions(ctxt,  | 
| 169 | 
            +
              xmlCtxtUseOptions(ctxt, options == Qnil ? 0 : NUM2INT(options));
         | 
| 162 170 |  | 
| 163 | 
            -
              stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
         | 
| 171 | 
            +
              xmlParserInputPtr stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
         | 
| 164 172 |  | 
| 165 173 | 
             
              if (!stream)
         | 
| 166 174 | 
             
              {
         | 
| 167 175 | 
             
                xmlFreeParserInputBuffer(input);
         | 
| 168 176 | 
             
                xmlFreeParserCtxt(ctxt);
         | 
| 169 | 
            -
                rxml_raise( | 
| 177 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 170 178 | 
             
              }
         | 
| 171 179 | 
             
              inputPush(ctxt, stream);
         | 
| 172 | 
            -
              result = rxml_parser_context_wrap(ctxt);
         | 
| 180 | 
            +
              VALUE result = rxml_parser_context_wrap(ctxt);
         | 
| 173 181 |  | 
| 174 182 | 
             
              /* Attach io object to parser so it won't get freed.*/
         | 
| 175 183 | 
             
              rb_ivar_set(result, IO_ATTR, io);
         | 
| @@ -303,7 +311,7 @@ static VALUE rxml_parser_context_disable_cdata_set(VALUE self, VALUE value) | |
| 303 311 | 
             
              if (value)
         | 
| 304 312 | 
             
                ctxt->sax->cdataBlock = NULL;
         | 
| 305 313 | 
             
              else
         | 
| 306 | 
            -
                ctxt->sax->cdataBlock =  | 
| 314 | 
            +
                ctxt->sax->cdataBlock = xmlSAX2CDataBlock;
         | 
| 307 315 |  | 
| 308 316 | 
             
              return value;
         | 
| 309 317 | 
             
            }
         | 
| @@ -377,7 +385,7 @@ static VALUE rxml_parser_context_encoding_set(VALUE self, VALUE encoding) | |
| 377 385 | 
             
              result = xmlSwitchToEncoding(ctxt, hdlr);
         | 
| 378 386 |  | 
| 379 387 | 
             
              if (result != 0)
         | 
| 380 | 
            -
                rxml_raise( | 
| 388 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 381 389 |  | 
| 382 390 | 
             
              if (ctxt->encoding != NULL)
         | 
| 383 391 | 
             
                xmlFree((xmlChar *) ctxt->encoding);
         | 
| @@ -950,10 +958,10 @@ void rxml_init_parser_context(void) | |
| 950 958 | 
             
              cXMLParserContext = rb_define_class_under(cXMLParser, "Context", rb_cObject);
         | 
| 951 959 | 
             
              rb_define_alloc_func(cXMLParserContext, rxml_parser_context_alloc);
         | 
| 952 960 |  | 
| 953 | 
            -
              rb_define_singleton_method(cXMLParserContext, "document", rxml_parser_context_document, 1);
         | 
| 954 | 
            -
              rb_define_singleton_method(cXMLParserContext, "file", rxml_parser_context_file, 1);
         | 
| 955 | 
            -
              rb_define_singleton_method(cXMLParserContext, "io", rxml_parser_context_io, 1);
         | 
| 956 | 
            -
              rb_define_singleton_method(cXMLParserContext, "string", rxml_parser_context_string, 1);
         | 
| 961 | 
            +
              rb_define_singleton_method(cXMLParserContext, "document", rxml_parser_context_document, -1);
         | 
| 962 | 
            +
              rb_define_singleton_method(cXMLParserContext, "file", rxml_parser_context_file, -1);
         | 
| 963 | 
            +
              rb_define_singleton_method(cXMLParserContext, "io", rxml_parser_context_io, -1);
         | 
| 964 | 
            +
              rb_define_singleton_method(cXMLParserContext, "string", rxml_parser_context_string, -1);
         | 
| 957 965 |  | 
| 958 966 | 
             
              rb_define_method(cXMLParserContext, "base_uri", rxml_parser_context_base_uri_get, 0);
         | 
| 959 967 | 
             
              rb_define_method(cXMLParserContext, "base_uri=", rxml_parser_context_base_uri_set, 1);
         | 
| @@ -55,7 +55,7 @@ void rxml_init_parser_options(void) | |
| 55 55 | 
             
              /* compact small text nodes */
         | 
| 56 56 | 
             
              rb_define_const(mXMLParserOptions, "COMPACT", INT2NUM(XML_PARSE_COMPACT));
         | 
| 57 57 | 
             
              /* parse using XML-1.0 before update 5 */
         | 
| 58 | 
            -
              rb_define_const(mXMLParserOptions, " | 
| 58 | 
            +
              rb_define_const(mXMLParserOptions, "OLD10", INT2NUM(XML_PARSE_OLD10));
         | 
| 59 59 | 
             
              /* do not fixup XINCLUDE xml:base uris */
         | 
| 60 60 | 
             
              rb_define_const(mXMLParserOptions, "NOBASEFIX", INT2NUM(XML_PARSE_NOBASEFIX));
         | 
| 61 61 | 
             
            #endif
         | 
| @@ -63,4 +63,12 @@ void rxml_init_parser_options(void) | |
| 63 63 | 
             
              /* relax any hardcoded limit from the parser */
         | 
| 64 64 | 
             
              rb_define_const(mXMLParserOptions, "HUGE", INT2NUM(XML_PARSE_HUGE));
         | 
| 65 65 | 
             
            #endif
         | 
| 66 | 
            +
            #if LIBXML_VERSION >= 21106
         | 
| 67 | 
            +
              /* parse using SAX2 interface before 2.7.0 */
         | 
| 68 | 
            +
              rb_define_const(mXMLParserOptions, "OLDSAX", INT2NUM(XML_PARSE_OLDSAX));
         | 
| 69 | 
            +
              /* ignore internal document encoding hint */
         | 
| 70 | 
            +
              rb_define_const(mXMLParserOptions, "IGNORE_ENC", INT2NUM(XML_PARSE_IGNORE_ENC));
         | 
| 71 | 
            +
              /* Store big lines numbers in text PSVI field */
         | 
| 72 | 
            +
              rb_define_const(mXMLParserOptions, "BIG_LINES", INT2NUM(XML_PARSE_BIG_LINES));
         | 
| 73 | 
            +
            #endif
         | 
| 66 74 | 
             
            }
         | 
| @@ -4,6 +4,8 @@ | |
| 4 4 | 
             
            #include "ruby_libxml.h"
         | 
| 5 5 | 
             
            #include "ruby_xml_reader.h"
         | 
| 6 6 |  | 
| 7 | 
            +
            #include <errno.h>
         | 
| 8 | 
            +
             | 
| 7 9 | 
             
            #include <libxml/xmlreader.h>
         | 
| 8 10 | 
             
            #include <libxml/xmlschemas.h>
         | 
| 9 11 |  | 
| @@ -98,7 +100,7 @@ VALUE rxml_reader_document(VALUE klass, VALUE doc) | |
| 98 100 | 
             
              xreader = xmlReaderWalker(xdoc);
         | 
| 99 101 |  | 
| 100 102 | 
             
              if (xreader == NULL)
         | 
| 101 | 
            -
                rxml_raise( | 
| 103 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 102 104 |  | 
| 103 105 | 
             
              return rxml_reader_wrap(xreader);
         | 
| 104 106 | 
             
            }
         | 
| @@ -122,34 +124,31 @@ VALUE rxml_reader_document(VALUE klass, VALUE doc) | |
| 122 124 | 
             
             */
         | 
| 123 125 | 
             
            static VALUE rxml_reader_file(int argc, VALUE *argv, VALUE klass)
         | 
| 124 126 | 
             
            {
         | 
| 125 | 
            -
              xmlTextReaderPtr xreader;
         | 
| 126 127 | 
             
              VALUE path;
         | 
| 127 128 | 
             
              VALUE options;
         | 
| 128 129 |  | 
| 129 | 
            -
              const char *xencoding = NULL;
         | 
| 130 | 
            -
              int xoptions = 0;
         | 
| 131 | 
            -
             | 
| 132 130 | 
             
              rb_scan_args(argc, argv, "11", &path, &options);
         | 
| 133 131 | 
             
              Check_Type(path, T_STRING);
         | 
| 134 132 |  | 
| 133 | 
            +
              const char* xencoding = NULL;
         | 
| 134 | 
            +
              int xoptions = 0;
         | 
| 135 | 
            +
             | 
| 135 136 | 
             
              if (!NIL_P(options))
         | 
| 136 137 | 
             
              {
         | 
| 137 | 
            -
                VALUE encoding = Qnil;
         | 
| 138 | 
            -
                VALUE parserOptions = Qnil;
         | 
| 139 | 
            -
             | 
| 140 138 | 
             
                Check_Type(options, T_HASH);
         | 
| 141 139 |  | 
| 142 | 
            -
                encoding = rb_hash_aref(options, BASE_URI_SYMBOL);
         | 
| 140 | 
            +
                VALUE encoding = rb_hash_aref(options, BASE_URI_SYMBOL);
         | 
| 143 141 | 
             
                xencoding = NIL_P(encoding) ? NULL : xmlGetCharEncodingName(NUM2INT(encoding));
         | 
| 144 142 |  | 
| 145 | 
            -
                parserOptions = rb_hash_aref(options, OPTIONS_SYMBOL);
         | 
| 143 | 
            +
                VALUE parserOptions = rb_hash_aref(options, OPTIONS_SYMBOL);
         | 
| 146 144 | 
             
                xoptions = NIL_P(parserOptions) ? 0 : NUM2INT(parserOptions);
         | 
| 147 145 | 
             
              }
         | 
| 148 146 |  | 
| 149 | 
            -
              xreader = xmlReaderForFile(StringValueCStr(path), xencoding, xoptions);
         | 
| 147 | 
            +
              xmlTextReaderPtr xreader = xmlReaderForFile(StringValueCStr(path), xencoding, xoptions);
         | 
| 150 148 |  | 
| 149 | 
            +
              // Unfortunately libxml2 does not set xmlLastError and just returns a null reader
         | 
| 151 150 | 
             
              if (xreader == NULL)
         | 
| 152 | 
            -
                 | 
| 151 | 
            +
                rb_syserr_fail(ENOENT, StringValueCStr(path));
         | 
| 153 152 |  | 
| 154 153 | 
             
              return rxml_reader_wrap(xreader);
         | 
| 155 154 | 
             
            }
         | 
| @@ -207,7 +206,7 @@ static VALUE rxml_reader_io(int argc, VALUE *argv, VALUE klass) | |
| 207 206 | 
             
                                       xbaseurl, xencoding, xoptions);
         | 
| 208 207 |  | 
| 209 208 | 
             
              if (xreader == NULL)
         | 
| 210 | 
            -
                rxml_raise( | 
| 209 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 211 210 |  | 
| 212 211 | 
             
              result = rxml_reader_wrap(xreader);
         | 
| 213 212 |  | 
| @@ -269,7 +268,7 @@ static VALUE rxml_reader_string(int argc, VALUE *argv, VALUE klass) | |
| 269 268 | 
             
                                           xbaseurl, xencoding, xoptions);
         | 
| 270 269 |  | 
| 271 270 | 
             
              if (xreader == NULL)
         | 
| 272 | 
            -
                rxml_raise( | 
| 271 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 273 272 |  | 
| 274 273 | 
             
              return rxml_reader_wrap(xreader);
         | 
| 275 274 | 
             
            }
         | 
| @@ -472,7 +471,7 @@ static VALUE rxml_reader_read(VALUE self) | |
| 472 471 | 
             
              switch(result)
         | 
| 473 472 | 
             
              {
         | 
| 474 473 | 
             
                case -1:
         | 
| 475 | 
            -
                  rxml_raise( | 
| 474 | 
            +
                  rxml_raise(xmlGetLastError());
         | 
| 476 475 | 
             
                  return Qnil;
         | 
| 477 476 | 
             
                  break;
         | 
| 478 477 | 
             
                case 0:
         | 
| @@ -1048,7 +1047,7 @@ static VALUE | |
| 1048 1047 | 
             
            rxml_reader_byte_consumed(VALUE self)
         | 
| 1049 1048 | 
             
            {
         | 
| 1050 1049 | 
             
              xmlTextReaderPtr xreader = rxml_text_reader_get(self);
         | 
| 1051 | 
            -
              return  | 
| 1050 | 
            +
              return LONG2NUM(xmlTextReaderByteConsumed(xreader));
         | 
| 1052 1051 | 
             
            }
         | 
| 1053 1052 | 
             
            #endif
         | 
| 1054 1053 |  | 
| @@ -243,7 +243,7 @@ static void start_element_ns_callback(void *ctx, | |
| 243 243 | 
             
                         namespaces);
         | 
| 244 244 | 
             
            }
         | 
| 245 245 |  | 
| 246 | 
            -
            static void structured_error_callback(void *ctx,  | 
| 246 | 
            +
            static void structured_error_callback(void *ctx, const xmlError *xerror)
         | 
| 247 247 | 
             
            {
         | 
| 248 248 | 
             
              /* Older versions of Libxml will pass a NULL context from the sax parser.  Fixed on
         | 
| 249 249 | 
             
                 Feb 23, 2011.  See:
         | 
| @@ -74,23 +74,15 @@ static VALUE rxml_sax_parser_initialize(int argc, VALUE *argv, VALUE self) | |
| 74 74 | 
             
             */
         | 
| 75 75 | 
             
            static VALUE rxml_sax_parser_parse(VALUE self)
         | 
| 76 76 | 
             
            {
         | 
| 77 | 
            -
              int status;
         | 
| 78 77 | 
             
              VALUE context = rb_ivar_get(self, CONTEXT_ATTR);
         | 
| 79 78 | 
             
              xmlParserCtxtPtr ctxt;
         | 
| 80 79 | 
             
              Data_Get_Struct(context, xmlParserCtxt, ctxt);
         | 
| 81 80 |  | 
| 82 81 | 
             
              ctxt->sax2 = 1;
         | 
| 83 82 | 
             
            	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 83 | 
             
              memcpy(ctxt->sax, &rxml_sax_handler, sizeof(rxml_sax_handler));
         | 
| 92 84 |  | 
| 93 | 
            -
              status = xmlParseDocument(ctxt);
         | 
| 85 | 
            +
              int status = xmlParseDocument(ctxt);
         | 
| 94 86 |  | 
| 95 87 | 
             
              /* Now check the parsing result*/
         | 
| 96 88 | 
             
              if (status == -1 || !ctxt->wellFormed)
         | 
| @@ -143,7 +143,7 @@ static VALUE rxml_schema_init(VALUE class, xmlSchemaParserCtxtPtr xparser) | |
| 143 143 | 
             
              xmlSchemaFreeParserCtxt(xparser);
         | 
| 144 144 |  | 
| 145 145 | 
             
              if (!xschema)
         | 
| 146 | 
            -
                rxml_raise( | 
| 146 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 147 147 |  | 
| 148 148 | 
             
              return rxml_wrap_schema(xschema);
         | 
| 149 149 | 
             
            }
         | 
| @@ -163,7 +163,7 @@ static VALUE rxml_schema_init_from_uri(VALUE class, VALUE uri) | |
| 163 163 | 
             
              xmlResetLastError();
         | 
| 164 164 | 
             
              xparser = xmlSchemaNewParserCtxt(StringValuePtr(uri));
         | 
| 165 165 | 
             
              if (!xparser)
         | 
| 166 | 
            -
                rxml_raise( | 
| 166 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 167 167 |  | 
| 168 168 | 
             
              return rxml_schema_init(class, xparser);
         | 
| 169 169 | 
             
            }
         | 
| @@ -184,7 +184,7 @@ static VALUE rxml_schema_init_from_document(VALUE class, VALUE document) | |
| 184 184 | 
             
              xmlResetLastError();
         | 
| 185 185 | 
             
              xparser = xmlSchemaNewDocParserCtxt(xdoc);
         | 
| 186 186 | 
             
              if (!xparser)
         | 
| 187 | 
            -
                rxml_raise( | 
| 187 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 188 188 |  | 
| 189 189 | 
             
              return rxml_schema_init(class, xparser);
         | 
| 190 190 | 
             
            }
         | 
| @@ -204,7 +204,7 @@ static VALUE rxml_schema_init_from_string(VALUE class, VALUE schema_str) | |
| 204 204 | 
             
              xmlResetLastError();
         | 
| 205 205 | 
             
              xparser = xmlSchemaNewMemParserCtxt(StringValuePtr(schema_str), (int)strlen(StringValuePtr(schema_str)));
         | 
| 206 206 | 
             
              if (!xparser)
         | 
| 207 | 
            -
                rxml_raise( | 
| 207 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 208 208 |  | 
| 209 209 | 
             
              return rxml_schema_init(class, xparser);
         | 
| 210 210 | 
             
            }
         | 
| @@ -1,9 +1,9 @@ | |
| 1 1 | 
             
            /* Don't nuke this block!  It is used for automatically updating the
         | 
| 2 2 | 
             
             * versions below. VERSION = string formatting, VERNUM = numbered
         | 
| 3 3 | 
             
             * version for inline testing: increment both or none at all.*/
         | 
| 4 | 
            -
            #define RUBY_LIBXML_VERSION  " | 
| 5 | 
            -
            #define RUBY_LIBXML_VERNUM    | 
| 6 | 
            -
            #define RUBY_LIBXML_VER_MAJ    | 
| 7 | 
            -
            #define RUBY_LIBXML_VER_MIN    | 
| 8 | 
            -
            #define RUBY_LIBXML_VER_MIC    | 
| 4 | 
            +
            #define RUBY_LIBXML_VERSION  "5.0.1"
         | 
| 5 | 
            +
            #define RUBY_LIBXML_VERNUM   501
         | 
| 6 | 
            +
            #define RUBY_LIBXML_VER_MAJ   5
         | 
| 7 | 
            +
            #define RUBY_LIBXML_VER_MIN   0
         | 
| 8 | 
            +
            #define RUBY_LIBXML_VER_MIC   1
         | 
| 9 9 | 
             
            #define RUBY_LIBXML_VER_PATCH 0
         | 
| @@ -116,11 +116,11 @@ static VALUE rxml_writer_io(VALUE klass, VALUE io) | |
| 116 116 | 
             
                xmlCharEncodingHandlerPtr encodingHdlr = xmlFindCharEncodingHandler(rwo->encoding->name);
         | 
| 117 117 | 
             
                if (NULL == (out = xmlOutputBufferCreateIO(rxml_writer_write_callback, NULL, (void*)rwo, encodingHdlr)))
         | 
| 118 118 | 
             
                {
         | 
| 119 | 
            -
                    rxml_raise( | 
| 119 | 
            +
                    rxml_raise(xmlGetLastError());
         | 
| 120 120 | 
             
                }
         | 
| 121 121 | 
             
                if (NULL == (rwo->writer = xmlNewTextWriter(out)))
         | 
| 122 122 | 
             
                {
         | 
| 123 | 
            -
                    rxml_raise( | 
| 123 | 
            +
                    rxml_raise(xmlGetLastError());
         | 
| 124 124 | 
             
                }
         | 
| 125 125 |  | 
| 126 126 | 
             
                return rxml_writer_wrap(rwo);
         | 
| @@ -145,7 +145,7 @@ static VALUE rxml_writer_file(VALUE klass, VALUE filename) | |
| 145 145 | 
             
                rwo->output_type = RXMLW_OUTPUT_NONE;
         | 
| 146 146 | 
             
                if (NULL == (rwo->writer = xmlNewTextWriterFilename(StringValueCStr(filename), 0)))
         | 
| 147 147 | 
             
                {
         | 
| 148 | 
            -
                    rxml_raise( | 
| 148 | 
            +
                    rxml_raise(xmlGetLastError());
         | 
| 149 149 | 
             
                }
         | 
| 150 150 |  | 
| 151 151 | 
             
                return rxml_writer_wrap(rwo);
         | 
| @@ -167,12 +167,12 @@ static VALUE rxml_writer_string(VALUE klass) | |
| 167 167 | 
             
                rwo->output_type = RXMLW_OUTPUT_STRING;
         | 
| 168 168 | 
             
                if (NULL == (rwo->buffer = xmlBufferCreate()))
         | 
| 169 169 | 
             
                {
         | 
| 170 | 
            -
                    rxml_raise( | 
| 170 | 
            +
                    rxml_raise(xmlGetLastError());
         | 
| 171 171 | 
             
                }
         | 
| 172 172 | 
             
                if (NULL == (rwo->writer = xmlNewTextWriterMemory(rwo->buffer, 0)))
         | 
| 173 173 | 
             
                {
         | 
| 174 174 | 
             
                    xmlBufferFree(rwo->buffer);
         | 
| 175 | 
            -
                    rxml_raise( | 
| 175 | 
            +
                    rxml_raise(xmlGetLastError());
         | 
| 176 176 | 
             
                }
         | 
| 177 177 |  | 
| 178 178 | 
             
                return rxml_writer_wrap(rwo);
         | 
| @@ -196,7 +196,7 @@ static VALUE rxml_writer_doc(VALUE klass) | |
| 196 196 | 
             
                rwo->output_type = RXMLW_OUTPUT_DOC;
         | 
| 197 197 | 
             
                if (NULL == (rwo->writer = xmlNewTextWriterDoc(&doc, 0)))
         | 
| 198 198 | 
             
                {
         | 
| 199 | 
            -
                    rxml_raise( | 
| 199 | 
            +
                    rxml_raise(xmlGetLastError());
         | 
| 200 200 | 
             
                }
         | 
| 201 201 | 
             
                rwo->output = rxml_document_wrap(doc);
         | 
| 202 202 |  | 
| @@ -224,7 +224,7 @@ static VALUE rxml_writer_flush(int argc, VALUE* argv, VALUE self) | |
| 224 224 | 
             
                rwo = rxml_textwriter_get(self);
         | 
| 225 225 | 
             
                if (-1 == (ret = xmlTextWriterFlush(rwo->writer)))
         | 
| 226 226 | 
             
                {
         | 
| 227 | 
            -
                    rxml_raise( | 
| 227 | 
            +
                    rxml_raise(xmlGetLastError());
         | 
| 228 228 | 
             
                }
         | 
| 229 229 |  | 
| 230 230 | 
             
                if (NULL != rwo->buffer)
         | 
| @@ -260,7 +260,7 @@ static VALUE rxml_writer_result(VALUE self) | |
| 260 260 |  | 
| 261 261 | 
             
                if (bytesWritten == -1)
         | 
| 262 262 | 
             
                {
         | 
| 263 | 
            -
                    rxml_raise( | 
| 263 | 
            +
                    rxml_raise(xmlGetLastError());
         | 
| 264 264 | 
             
                }
         | 
| 265 265 |  | 
| 266 266 | 
             
                switch (rwo->output_type)
         | 
    
        data/ext/libxml/ruby_xml_xpath.c
    CHANGED
    
    | @@ -89,7 +89,7 @@ VALUE rxml_xpath_to_value(xmlXPathContextPtr xctxt, xmlXPathObjectPtr xobject) | |
| 89 89 | 
             
                /* xmlLastError is different than xctxt->lastError.  Use
         | 
| 90 90 | 
             
                 xmlLastError since it has the message set while xctxt->lastError
         | 
| 91 91 | 
             
                 does not. */
         | 
| 92 | 
            -
                 | 
| 92 | 
            +
                const xmlError *xerror = xmlGetLastError();
         | 
| 93 93 | 
             
                rxml_raise(xerror);
         | 
| 94 94 | 
             
              }
         | 
| 95 95 |  | 
| @@ -320,7 +320,7 @@ rxml_xpath_context_enable_cache(int argc,  VALUE *argv, VALUE self) | |
| 320 320 | 
             
              }
         | 
| 321 321 |  | 
| 322 322 | 
             
              if (xmlXPathContextSetCache(xctxt, 1, value, 0) == -1)
         | 
| 323 | 
            -
                rxml_raise( | 
| 323 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 324 324 |  | 
| 325 325 | 
             
              return self;
         | 
| 326 326 | 
             
            }
         | 
| @@ -338,7 +338,7 @@ rxml_xpath_context_disable_cache(VALUE self) | |
| 338 338 | 
             
              Data_Get_Struct(self, xmlXPathContext, xctxt);
         | 
| 339 339 |  | 
| 340 340 | 
             
              if (xmlXPathContextSetCache(xctxt, 0, 0, 0) == -1)
         | 
| 341 | 
            -
                rxml_raise( | 
| 341 | 
            +
                rxml_raise(xmlGetLastError());
         | 
| 342 342 |  | 
| 343 343 | 
             
              return self;
         | 
| 344 344 | 
             
            }
         | 
| Binary file | 
| Binary file | 
    
        data/lib/libxml/document.rb
    CHANGED
    
    | @@ -17,21 +17,21 @@ module LibXML | |
| 17 17 |  | 
| 18 18 | 
             
                  # call-seq:
         | 
| 19 19 | 
             
                  #    XML::Document.file(path) -> XML::Document
         | 
| 20 | 
            -
                  #    XML::Document.file(path, : | 
| 21 | 
            -
                  #                             : | 
| 20 | 
            +
                  #    XML::Document.file(path, encoding: XML::Encoding::UTF_8,
         | 
| 21 | 
            +
                  #                             options: XML::Parser::Options::NOENT) -> XML::Document
         | 
| 22 22 | 
             
                  #
         | 
| 23 23 | 
             
                  # Creates a new document from the specified file or uri.
         | 
| 24 24 | 
             
                  #
         | 
| 25 | 
            -
                  #  | 
| 26 | 
            -
                  # parsing is performed.  Valid options are:
         | 
| 25 | 
            +
                  # Parameters:
         | 
| 27 26 | 
             
                  #
         | 
| 27 | 
            +
                  #  path - Path to file
         | 
| 28 28 | 
             
                  #  encoding - The document encoding, defaults to nil. Valid values
         | 
| 29 29 | 
             
                  #             are the encoding constants defined on XML::Encoding.
         | 
| 30 30 | 
             
                  #  options - Parser options.  Valid values are the constants defined on
         | 
| 31 31 | 
             
                  #            XML::Parser::Options.  Mutliple options can be combined
         | 
| 32 32 | 
             
                  #            by using Bitwise OR (|).
         | 
| 33 | 
            -
                  def self.file( | 
| 34 | 
            -
                    Parser.file( | 
| 33 | 
            +
                  def self.file(path, encoding: nil, options: nil)
         | 
| 34 | 
            +
                    Parser.file(path, encoding: encoding, options: options).parse
         | 
| 35 35 | 
             
                  end
         | 
| 36 36 |  | 
| 37 37 | 
             
                  # call-seq:
         | 
| @@ -51,29 +51,29 @@ module LibXML | |
| 51 51 | 
             
                  #  options - Parser options.  Valid values are the constants defined on
         | 
| 52 52 | 
             
                  #            XML::Parser::Options.  Mutliple options can be combined
         | 
| 53 53 | 
             
                  #            by using Bitwise OR (|).
         | 
| 54 | 
            -
                  def self.io( | 
| 55 | 
            -
                    Parser.io( | 
| 54 | 
            +
                  def self.io(io, base_uri: nil, encoding: nil, options: nil)
         | 
| 55 | 
            +
                    Parser.io(io, base_uri: base_uri, encoding: encoding, options: options).parse
         | 
| 56 56 | 
             
                  end
         | 
| 57 57 |  | 
| 58 58 | 
             
                  # call-seq:
         | 
| 59 59 | 
             
                  #    XML::Document.string(string) -> XML::Document
         | 
| 60 | 
            -
                  #    XML::Document.string(string, : | 
| 61 | 
            -
                  # | 
| 62 | 
            -
                  # | 
| 60 | 
            +
                  #    XML::Document.string(string, encoding: XML::Encoding::UTF_8,
         | 
| 61 | 
            +
                  #                                 options: XML::Parser::Options::NOENT
         | 
| 62 | 
            +
                  #                                 base_uri: "http://libxml.org") -> XML::Document
         | 
| 63 63 | 
             
                  #
         | 
| 64 64 | 
             
                  # Creates a new document from the specified string.
         | 
| 65 65 | 
             
                  #
         | 
| 66 | 
            -
                  #  | 
| 67 | 
            -
                  # parsing is performed.  Valid options are:
         | 
| 66 | 
            +
                  # Parameters:
         | 
| 68 67 | 
             
                  #
         | 
| 68 | 
            +
                  #   string - String to parse
         | 
| 69 69 | 
             
                  #   base_uri - The base url for the parsed document.
         | 
| 70 70 | 
             
                  #   encoding - The document encoding, defaults to nil. Valid values
         | 
| 71 71 | 
             
                  #              are the encoding constants defined on XML::Encoding.
         | 
| 72 72 | 
             
                  #   options  - Parser options.  Valid values are the constants defined on
         | 
| 73 73 | 
             
                  #              XML::Parser::Options.  Mutliple options can be combined
         | 
| 74 74 | 
             
                  #              by using Bitwise OR (|).
         | 
| 75 | 
            -
                  def self.string(value, options  | 
| 76 | 
            -
                    Parser.string(value, options).parse
         | 
| 75 | 
            +
                  def self.string(value, base_uri: nil, encoding: nil, options: nil)
         | 
| 76 | 
            +
                    Parser.string(value, base_uri: base_uri, encoding: encoding, options: options).parse
         | 
| 77 77 | 
             
                  end
         | 
| 78 78 |  | 
| 79 79 | 
             
                  # Returns a new XML::XPathContext for the document.
         |