libxml-ruby 4.1.2 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HISTORY +14 -0
- 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 +3 -3
- 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/libxml/document.rb +13 -13
- 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_write.rb +1 -4
- data/test/test_dtd.rb +1 -4
- 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 +4 -3
@@ -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.0"
|
5
|
+
#define RUBY_LIBXML_VERNUM 500
|
6
|
+
#define RUBY_LIBXML_VER_MAJ 5
|
7
|
+
#define RUBY_LIBXML_VER_MIN 0
|
8
|
+
#define RUBY_LIBXML_VER_MIC 0
|
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
|
}
|
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:
|
@@ -57,23 +57,23 @@ module LibXML
|
|
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.
|