libxml-ruby 0.9.4-x86-mswin32-60 → 0.9.5-x86-mswin32-60
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.
- data/CHANGES +22 -0
- data/README +3 -1
- data/ext/libxml/cbg.c +86 -76
- data/ext/libxml/extconf.rb +2 -1
- data/ext/libxml/libxml.c +899 -885
- data/ext/libxml/ruby_libxml.h +65 -70
- data/ext/libxml/ruby_xml_attr.c +485 -500
- data/ext/libxml/ruby_xml_attributes.c +107 -106
- data/ext/libxml/ruby_xml_document.c +355 -356
- data/ext/libxml/ruby_xml_dtd.c +119 -117
- data/ext/libxml/ruby_xml_error.c +1112 -581
- data/ext/libxml/ruby_xml_html_parser.c +35 -34
- data/ext/libxml/ruby_xml_input.c +182 -187
- data/ext/libxml/ruby_xml_input_cbg.c +197 -179
- data/ext/libxml/ruby_xml_node.c +1529 -1566
- data/ext/libxml/ruby_xml_node.h +2 -2
- data/ext/libxml/ruby_xml_ns.c +150 -156
- data/ext/libxml/ruby_xml_parser.c +37 -36
- data/ext/libxml/ruby_xml_parser_context.c +657 -659
- data/ext/libxml/ruby_xml_reader.c +203 -209
- data/ext/libxml/ruby_xml_relaxng.c +29 -25
- data/ext/libxml/ruby_xml_sax_parser.c +33 -32
- data/ext/libxml/ruby_xml_schema.c +165 -161
- data/ext/libxml/ruby_xml_state.c +19 -21
- data/ext/libxml/ruby_xml_xinclude.c +24 -25
- data/ext/libxml/ruby_xml_xpath.c +108 -108
- data/ext/libxml/ruby_xml_xpath_context.c +305 -293
- data/ext/libxml/ruby_xml_xpath_expression.c +24 -24
- data/ext/libxml/ruby_xml_xpath_object.c +89 -96
- data/ext/libxml/ruby_xml_xpointer.c +107 -109
- data/ext/libxml/ruby_xml_xpointer.h +13 -13
- data/ext/libxml/version.h +2 -2
- data/ext/mingw/Rakefile +1 -1
- data/ext/mingw/libxml_ruby.dll.a +0 -0
- data/ext/mingw/libxml_ruby.so +0 -0
- data/ext/vc/libxml_ruby.vcproj +1 -1
- data/lib/libxml/error.rb +4 -4
- data/test/tc_node_edit.rb +14 -2
- data/test/tc_node_text.rb +9 -9
- metadata +2 -2
@@ -8,8 +8,8 @@
|
|
8
8
|
|
9
9
|
/*
|
10
10
|
* Document-class: LibXML::XML::XPath::Expression
|
11
|
-
*
|
12
|
-
* The XML::XPath::Expression class is used to compile
|
11
|
+
*
|
12
|
+
* The XML::XPath::Expression class is used to compile
|
13
13
|
* XPath expressions so they can be parsed only once
|
14
14
|
* but reused multiple times.
|
15
15
|
*
|
@@ -23,47 +23,47 @@
|
|
23
23
|
|
24
24
|
VALUE cXMLXPathExpression;
|
25
25
|
|
26
|
-
static void
|
27
|
-
|
26
|
+
static void rxml_xpath_expression_free(xmlXPathCompExprPtr expr)
|
27
|
+
{
|
28
28
|
xmlXPathFreeCompExpr(expr);
|
29
29
|
}
|
30
30
|
|
31
|
-
static VALUE
|
32
|
-
|
33
|
-
return Data_Wrap_Struct(cXMLXPathExpression,
|
34
|
-
|
35
|
-
rxml_xpath_expression_free,
|
36
|
-
NULL);
|
31
|
+
static VALUE rxml_xpath_expression_alloc(VALUE klass)
|
32
|
+
{
|
33
|
+
return Data_Wrap_Struct(cXMLXPathExpression, NULL,
|
34
|
+
rxml_xpath_expression_free, NULL);
|
37
35
|
}
|
38
36
|
|
39
37
|
/* call-seq:
|
40
38
|
* XPath::Expression.new(expression) -> XPath::Expression
|
41
|
-
*
|
42
|
-
* Compiled XPatch expression. Work faster when find called many times
|
39
|
+
*
|
40
|
+
* Compiled XPatch expression. Work faster when find called many times
|
43
41
|
* same expression.
|
44
42
|
*
|
45
43
|
* doc = XML::Document.string('<header><first>hi</first></header>')
|
46
44
|
* expr = XPath::Expression.new('//first')
|
47
45
|
* nodes = doc.find(expr)
|
48
46
|
*/
|
49
|
-
static VALUE
|
50
|
-
|
51
|
-
xmlXPathCompExprPtr compexpr = xmlXPathCompile(StringValueCStr(expression));
|
47
|
+
static VALUE rxml_xpath_expression_initialize(VALUE self, VALUE expression)
|
48
|
+
{
|
49
|
+
xmlXPathCompExprPtr compexpr = xmlXPathCompile(StringValueCStr(expression));
|
52
50
|
|
53
|
-
if (compexpr == NULL)
|
54
|
-
|
55
|
-
|
51
|
+
if (compexpr == NULL)
|
52
|
+
{
|
53
|
+
xmlErrorPtr xerror = xmlGetLastError();
|
54
|
+
rxml_raise(xerror);
|
56
55
|
}
|
57
56
|
|
58
|
-
DATA_PTR(self) = compexpr;
|
57
|
+
DATA_PTR( self) = compexpr;
|
59
58
|
return self;
|
60
59
|
}
|
61
60
|
|
62
|
-
void
|
63
|
-
|
61
|
+
void ruby_init_xml_xpath_expression(void)
|
62
|
+
{
|
64
63
|
cXMLXPathExpression = rb_define_class_under(mXPath, "Expression", rb_cObject);
|
65
64
|
rb_define_alloc_func(cXMLXPathExpression, rxml_xpath_expression_alloc);
|
66
|
-
rb_define_singleton_method(
|
67
|
-
|
68
|
-
rb_define_method(cXMLXPathExpression, "initialize",
|
65
|
+
rb_define_singleton_method(cXMLXPathExpression, "compile",
|
66
|
+
rb_class_new_instance, 1);
|
67
|
+
rb_define_method(cXMLXPathExpression, "initialize",
|
68
|
+
rxml_xpath_expression_initialize, 1);
|
69
69
|
}
|
@@ -6,14 +6,12 @@
|
|
6
6
|
* Document-class: LibXML::XML::XPath::Object
|
7
7
|
*
|
8
8
|
* A collection of nodes returned from the evaluation of an XML::XPath
|
9
|
-
* or XML::XPointer expression.
|
9
|
+
* or XML::XPointer expression.
|
10
10
|
*
|
11
11
|
*/
|
12
12
|
VALUE cXMLXPathObject;
|
13
13
|
|
14
|
-
|
15
|
-
static xmlDocPtr
|
16
|
-
rxml_xpath_object_doc(xmlXPathObjectPtr xpop)
|
14
|
+
static xmlDocPtr rxml_xpath_object_doc(xmlXPathObjectPtr xpop)
|
17
15
|
{
|
18
16
|
xmlDocPtr result = NULL;
|
19
17
|
xmlNodePtr *nodes = NULL;
|
@@ -32,117 +30,114 @@ rxml_xpath_object_doc(xmlXPathObjectPtr xpop)
|
|
32
30
|
return (*nodes)->doc;
|
33
31
|
}
|
34
32
|
|
35
|
-
static void
|
36
|
-
rxml_xpath_object_mark(xmlXPathObjectPtr xpop)
|
33
|
+
static void rxml_xpath_object_mark(xmlXPathObjectPtr xpop)
|
37
34
|
{
|
38
35
|
int i;
|
39
36
|
|
40
|
-
if (
|
37
|
+
if (xpop->type == XPATH_NODESET && xpop->nodesetval != NULL)
|
41
38
|
{
|
42
39
|
xmlDocPtr xdoc = rxml_xpath_object_doc(xpop);
|
43
40
|
if (xdoc && xdoc->_private)
|
44
|
-
rb_gc_mark((VALUE)xdoc->_private);
|
41
|
+
rb_gc_mark((VALUE) xdoc->_private);
|
45
42
|
|
46
|
-
for (i=0; i<xpop->nodesetval->nodeNr; i++)
|
43
|
+
for (i = 0; i < xpop->nodesetval->nodeNr; i++)
|
47
44
|
{
|
48
45
|
if (xpop->nodesetval->nodeTab[i]->_private)
|
49
|
-
rb_gc_mark((VALUE)xpop->nodesetval->nodeTab[i]->_private);
|
46
|
+
rb_gc_mark((VALUE) xpop->nodesetval->nodeTab[i]->_private);
|
50
47
|
}
|
51
48
|
}
|
52
49
|
}
|
53
50
|
|
54
|
-
static void
|
55
|
-
rxml_xpath_object_free(xmlXPathObjectPtr xpop)
|
51
|
+
static void rxml_xpath_object_free(xmlXPathObjectPtr xpop)
|
56
52
|
{
|
57
53
|
/* Now free the xpath result but not underlying nodes
|
58
|
-
|
54
|
+
since those belong to the document. */
|
59
55
|
xmlXPathFreeNodeSetList(xpop);
|
60
56
|
}
|
61
57
|
|
62
|
-
VALUE
|
63
|
-
rxml_xpath_object_wrap(xmlXPathObjectPtr xpop)
|
58
|
+
VALUE rxml_xpath_object_wrap(xmlXPathObjectPtr xpop)
|
64
59
|
{
|
65
60
|
VALUE rval;
|
66
61
|
|
67
|
-
if (
|
62
|
+
if (xpop == NULL)
|
68
63
|
return Qnil;
|
69
64
|
|
70
|
-
switch(xpop->type)
|
65
|
+
switch (xpop->type)
|
66
|
+
{
|
71
67
|
case XPATH_NODESET:
|
72
|
-
rval = Data_Wrap_Struct(cXMLXPathObject,
|
73
|
-
|
74
|
-
|
75
|
-
xpop);
|
76
|
-
|
68
|
+
rval = Data_Wrap_Struct(cXMLXPathObject, rxml_xpath_object_mark,
|
69
|
+
rxml_xpath_object_free, xpop);
|
70
|
+
|
77
71
|
break;
|
78
72
|
case XPATH_BOOLEAN:
|
79
73
|
if (xpop->boolval != 0)
|
80
|
-
rval=Qtrue;
|
74
|
+
rval = Qtrue;
|
81
75
|
else
|
82
|
-
rval=Qfalse;
|
83
|
-
|
76
|
+
rval = Qfalse;
|
77
|
+
|
84
78
|
xmlXPathFreeObject(xpop);
|
85
79
|
break;
|
86
80
|
case XPATH_NUMBER:
|
87
|
-
rval=rb_float_new(xpop->floatval);
|
88
|
-
|
81
|
+
rval = rb_float_new(xpop->floatval);
|
82
|
+
|
89
83
|
xmlXPathFreeObject(xpop);
|
90
84
|
break;
|
91
85
|
case XPATH_STRING:
|
92
|
-
rval=rb_str_new2(xpop->stringval);
|
93
|
-
|
86
|
+
rval = rb_str_new2(xpop->stringval);
|
87
|
+
|
94
88
|
xmlXPathFreeObject(xpop);
|
95
89
|
break;
|
96
90
|
default:
|
97
91
|
xmlXPathFreeObject(xpop);
|
98
|
-
rval=Qnil;
|
92
|
+
rval = Qnil;
|
99
93
|
}
|
100
94
|
return rval;
|
101
95
|
}
|
102
96
|
|
103
|
-
static VALUE
|
104
|
-
|
97
|
+
static VALUE rxml_xpath_object_tabref(xmlXPathObjectPtr xpop, int apos)
|
98
|
+
{
|
105
99
|
|
106
|
-
if (apos < 0
|
107
|
-
apos=xpop->nodesetval->nodeNr+apos;
|
100
|
+
if (apos < 0)
|
101
|
+
apos = xpop->nodesetval->nodeNr + apos;
|
108
102
|
|
109
|
-
if (apos < 0 || apos+1 > xpop->nodesetval->nodeNr
|
103
|
+
if (apos < 0 || apos + 1 > xpop->nodesetval->nodeNr)
|
110
104
|
return Qnil;
|
111
105
|
|
112
|
-
switch(xpop->nodesetval->nodeTab[apos]->type)
|
106
|
+
switch (xpop->nodesetval->nodeTab[apos]->type)
|
107
|
+
{
|
113
108
|
case XML_ATTRIBUTE_NODE:
|
114
|
-
return rxml_attr_wrap((xmlAttrPtr)xpop->nodesetval->nodeTab[apos]);
|
109
|
+
return rxml_attr_wrap((xmlAttrPtr) xpop->nodesetval->nodeTab[apos]);
|
115
110
|
break;
|
116
111
|
default:
|
117
|
-
return
|
118
|
-
xpop->nodesetval->nodeTab[apos]);
|
112
|
+
return rxml_node_wrap(cXMLNode, xpop->nodesetval->nodeTab[apos]);
|
119
113
|
}
|
120
114
|
}
|
121
115
|
|
122
116
|
/*
|
123
117
|
* call-seq:
|
124
118
|
* xpath_object.to_a -> [node, ..., node]
|
125
|
-
*
|
119
|
+
*
|
126
120
|
* Obtain an array of the nodes in this set.
|
127
121
|
*/
|
128
|
-
static VALUE
|
129
|
-
rxml_xpath_object_to_a(VALUE self)
|
122
|
+
static VALUE rxml_xpath_object_to_a(VALUE self)
|
130
123
|
{
|
131
124
|
VALUE set_ary, nodeobj;
|
132
125
|
xmlXPathObjectPtr xpop;
|
133
126
|
int i;
|
134
|
-
|
135
|
-
Data_Get_Struct(self,xmlXPathObject,xpop);
|
127
|
+
|
128
|
+
Data_Get_Struct(self, xmlXPathObject, xpop);
|
136
129
|
|
137
130
|
set_ary = rb_ary_new();
|
138
|
-
if (!((xpop->nodesetval == NULL) || (xpop->nodesetval->nodeNr == 0)))
|
139
|
-
|
131
|
+
if (!((xpop->nodesetval == NULL) || (xpop->nodesetval->nodeNr == 0)))
|
132
|
+
{
|
133
|
+
for (i = 0; i < xpop->nodesetval->nodeNr; i++)
|
134
|
+
{
|
140
135
|
nodeobj = rxml_xpath_object_tabref(xpop, i);
|
141
136
|
rb_ary_push(set_ary, nodeobj);
|
142
137
|
}
|
143
138
|
}
|
144
|
-
|
145
|
-
return(set_ary);
|
139
|
+
|
140
|
+
return (set_ary);
|
146
141
|
}
|
147
142
|
|
148
143
|
/*
|
@@ -151,39 +146,40 @@ rxml_xpath_object_to_a(VALUE self)
|
|
151
146
|
*
|
152
147
|
* Determine whether this nodeset is empty (contains no nodes).
|
153
148
|
*/
|
154
|
-
static VALUE
|
155
|
-
|
149
|
+
static VALUE rxml_xpath_object_empty_q(VALUE self)
|
150
|
+
{
|
156
151
|
xmlXPathObjectPtr xpop;
|
157
152
|
|
158
|
-
Data_Get_Struct(self,xmlXPathObject,xpop);
|
153
|
+
Data_Get_Struct(self, xmlXPathObject, xpop);
|
159
154
|
|
160
155
|
if (xpop->type != XPATH_NODESET)
|
161
156
|
return Qnil;
|
162
|
-
|
163
|
-
return (
|
157
|
+
|
158
|
+
return (xpop->nodesetval == NULL || xpop->nodesetval->nodeNr <= 0) ? Qtrue
|
159
|
+
: Qfalse;
|
164
160
|
}
|
165
161
|
|
166
162
|
/*
|
167
163
|
* call-seq:
|
168
164
|
* xpath_object.each { |node| ... } -> self
|
169
|
-
*
|
165
|
+
*
|
170
166
|
* Call the supplied block for each node in this set.
|
171
167
|
*/
|
172
|
-
static VALUE
|
173
|
-
rxml_xpath_object_each(VALUE self)
|
168
|
+
static VALUE rxml_xpath_object_each(VALUE self)
|
174
169
|
{
|
175
170
|
xmlXPathObjectPtr xpop;
|
176
171
|
int i;
|
177
172
|
|
178
|
-
if (
|
173
|
+
if (rxml_xpath_object_empty_q(self) == Qtrue)
|
179
174
|
return Qnil;
|
180
175
|
|
181
|
-
Data_Get_Struct(self,xmlXPathObject,xpop);
|
176
|
+
Data_Get_Struct(self, xmlXPathObject, xpop);
|
182
177
|
|
183
|
-
for (i = 0; i < xpop->nodesetval->nodeNr; i++)
|
184
|
-
|
178
|
+
for (i = 0; i < xpop->nodesetval->nodeNr; i++)
|
179
|
+
{
|
180
|
+
rb_yield(rxml_xpath_object_tabref(xpop, i));
|
185
181
|
}
|
186
|
-
return(self);
|
182
|
+
return (self);
|
187
183
|
}
|
188
184
|
|
189
185
|
/*
|
@@ -192,12 +188,12 @@ rxml_xpath_object_each(VALUE self)
|
|
192
188
|
*
|
193
189
|
* Returns the first node in this node set, or nil if none exist.
|
194
190
|
*/
|
195
|
-
static VALUE
|
196
|
-
|
197
|
-
if (
|
191
|
+
static VALUE rxml_xpath_object_first(VALUE self)
|
192
|
+
{
|
193
|
+
if (rxml_xpath_object_empty_q(self) == Qtrue)
|
198
194
|
return Qnil;
|
199
|
-
|
200
|
-
return rxml_xpath_object_tabref((xmlXPathObjectPtr)DATA_PTR(self),0);
|
195
|
+
|
196
|
+
return rxml_xpath_object_tabref((xmlXPathObjectPtr) DATA_PTR(self), 0);
|
201
197
|
}
|
202
198
|
|
203
199
|
/*
|
@@ -206,29 +202,29 @@ rxml_xpath_object_first(VALUE self) {
|
|
206
202
|
*
|
207
203
|
* array index into set of nodes
|
208
204
|
*/
|
209
|
-
static VALUE
|
210
|
-
|
211
|
-
if (
|
205
|
+
static VALUE rxml_xpath_object_aref(VALUE self, VALUE aref)
|
206
|
+
{
|
207
|
+
if (rxml_xpath_object_empty_q(self) == Qtrue)
|
212
208
|
return Qnil;
|
213
209
|
|
214
|
-
return rxml_xpath_object_tabref((xmlXPathObjectPtr)DATA_PTR(self),
|
215
|
-
|
210
|
+
return rxml_xpath_object_tabref((xmlXPathObjectPtr) DATA_PTR(self), NUM2INT(
|
211
|
+
aref));
|
216
212
|
}
|
217
213
|
|
218
214
|
/*
|
219
215
|
* call-seq:
|
220
216
|
* xpath_object.length -> num
|
221
|
-
*
|
217
|
+
*
|
222
218
|
* Obtain the length of the nodesetval node list.
|
223
219
|
*/
|
224
|
-
static VALUE
|
225
|
-
|
220
|
+
static VALUE rxml_xpath_object_length(VALUE self)
|
221
|
+
{
|
226
222
|
xmlXPathObjectPtr xpop;
|
227
223
|
|
228
224
|
if (rxml_xpath_object_empty_q(self) == Qtrue)
|
229
225
|
return INT2FIX(0);
|
230
226
|
|
231
|
-
Data_Get_Struct(self,xmlXPathObject,xpop);
|
227
|
+
Data_Get_Struct(self, xmlXPathObject, xpop);
|
232
228
|
|
233
229
|
return INT2NUM(xpop->nodesetval->nodeNr);
|
234
230
|
}
|
@@ -236,11 +232,11 @@ rxml_xpath_object_length(VALUE self) {
|
|
236
232
|
/*
|
237
233
|
* call-seq:
|
238
234
|
* xpath_object.xpath_type -> int
|
239
|
-
*
|
240
|
-
* Returns the XPath type of the result object.
|
235
|
+
*
|
236
|
+
* Returns the XPath type of the result object.
|
241
237
|
* Possible values are defined as constants
|
242
238
|
* on the XML::XPath class and include:
|
243
|
-
*
|
239
|
+
*
|
244
240
|
* * XML::XPath::UNDEFINED
|
245
241
|
* * XML::XPath::NODESET
|
246
242
|
* * XML::XPath::BOOLEAN
|
@@ -250,31 +246,28 @@ rxml_xpath_object_length(VALUE self) {
|
|
250
246
|
* * XML::XPath::RANGE
|
251
247
|
* * XML::XPath::LOCATIONSET
|
252
248
|
* * XML::XPath::USERS
|
253
|
-
* * XML::XPath::XSLT_TREE
|
249
|
+
* * XML::XPath::XSLT_TREE
|
254
250
|
*/
|
255
|
-
static VALUE
|
256
|
-
rxml_xpath_object_get_type(VALUE self)
|
251
|
+
static VALUE rxml_xpath_object_get_type(VALUE self)
|
257
252
|
{
|
258
253
|
xmlXPathObjectPtr xpop;
|
259
254
|
|
260
|
-
Data_Get_Struct(self,xmlXPathObject,xpop);
|
255
|
+
Data_Get_Struct(self, xmlXPathObject, xpop);
|
261
256
|
|
262
257
|
return INT2FIX(xpop->type);
|
263
258
|
}
|
264
259
|
|
265
|
-
|
266
260
|
/*
|
267
261
|
* call-seq:
|
268
262
|
* xpath_object.string -> String
|
269
|
-
*
|
263
|
+
*
|
270
264
|
* Returns the original XPath expression as a string.
|
271
265
|
*/
|
272
|
-
static VALUE
|
273
|
-
rxml_xpath_object_string(VALUE self)
|
266
|
+
static VALUE rxml_xpath_object_string(VALUE self)
|
274
267
|
{
|
275
268
|
xmlXPathObjectPtr xpop;
|
276
269
|
|
277
|
-
Data_Get_Struct(self,xmlXPathObject,xpop);
|
270
|
+
Data_Get_Struct(self, xmlXPathObject, xpop);
|
278
271
|
|
279
272
|
if (xpop->stringval == NULL)
|
280
273
|
return Qnil;
|
@@ -282,28 +275,28 @@ rxml_xpath_object_string(VALUE self)
|
|
282
275
|
return rb_str_new2((const char*) xpop->stringval);
|
283
276
|
}
|
284
277
|
|
285
|
-
/*
|
278
|
+
/*
|
286
279
|
* call-seq:
|
287
280
|
* nodes.debug -> (true|false)
|
288
|
-
*
|
281
|
+
*
|
289
282
|
* Dump libxml debugging information to stdout.
|
290
283
|
* Requires Libxml be compiled with debugging enabled.
|
291
284
|
*/
|
292
|
-
static VALUE
|
293
|
-
|
285
|
+
static VALUE rxml_xpath_object_debug(VALUE self)
|
286
|
+
{
|
294
287
|
xmlXPathObjectPtr xpop;
|
295
|
-
|
296
|
-
|
288
|
+
|
289
|
+
#ifndef LIBXML_DEBUG_ENABLED
|
297
290
|
rb_raise(rb_eTypeError, "libxml was not compiled with debug support.");
|
298
|
-
|
291
|
+
#endif
|
299
292
|
|
300
293
|
Data_Get_Struct(self, xmlXPathObject, xpop);
|
301
294
|
xmlXPathDebugDumpObject(stdout, xpop, 0);
|
302
295
|
return Qnil;
|
303
296
|
}
|
304
297
|
|
305
|
-
void
|
306
|
-
|
298
|
+
void ruby_init_xml_xpath_object(void)
|
299
|
+
{
|
307
300
|
cXMLXPathObject = rb_define_class_under(mXPath, "Object", rb_cObject);
|
308
301
|
rb_include_module(cXMLXPathObject, rb_mEnumerable);
|
309
302
|
rb_define_attr(cXMLXPathObject, "context", 1, 0);
|