libxml-ruby 0.9.7 → 0.9.8
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +53 -0
- data/Rakefile +1 -0
- data/ext/libxml/build.log +4 -0
- data/ext/libxml/cbg.c +86 -86
- data/ext/libxml/libxml.c +878 -876
- data/ext/libxml/ruby_libxml.h +8 -4
- data/ext/libxml/ruby_xml_attr.c +36 -168
- data/ext/libxml/ruby_xml_attr.h +2 -4
- data/ext/libxml/ruby_xml_attr_decl.c +177 -0
- data/ext/libxml/ruby_xml_attr_decl.h +13 -0
- data/ext/libxml/ruby_xml_attributes.c +29 -20
- data/ext/libxml/ruby_xml_document.c +895 -898
- data/ext/libxml/ruby_xml_dtd.c +18 -1
- data/ext/libxml/ruby_xml_dtd.h +1 -0
- data/ext/libxml/ruby_xml_encoding.c +116 -0
- data/ext/libxml/ruby_xml_encoding.h +12 -0
- data/ext/libxml/ruby_xml_error.c +8 -2
- data/ext/libxml/ruby_xml_html_parser.c +53 -74
- data/ext/libxml/ruby_xml_html_parser.h +2 -3
- data/ext/libxml/ruby_xml_html_parser_context.c +145 -0
- data/ext/libxml/ruby_xml_html_parser_context.h +12 -0
- data/ext/libxml/ruby_xml_html_parser_options.c +48 -0
- data/ext/libxml/ruby_xml_html_parser_options.h +12 -0
- data/ext/libxml/ruby_xml_input_cbg.c +1 -1
- data/ext/libxml/ruby_xml_io.c +30 -0
- data/ext/libxml/ruby_xml_io.h +9 -0
- data/ext/libxml/ruby_xml_namespace.c +34 -16
- data/ext/libxml/ruby_xml_namespace.h +2 -2
- data/ext/libxml/ruby_xml_namespaces.c +6 -6
- data/ext/libxml/ruby_xml_node.c +1367 -1324
- data/ext/libxml/ruby_xml_node.h +2 -2
- data/ext/libxml/ruby_xml_parser.c +26 -78
- data/ext/libxml/ruby_xml_parser.h +1 -1
- data/ext/libxml/ruby_xml_parser_context.c +284 -13
- data/ext/libxml/ruby_xml_parser_context.h +1 -2
- data/ext/libxml/ruby_xml_parser_options.c +75 -0
- data/ext/libxml/ruby_xml_parser_options.h +14 -0
- data/ext/libxml/ruby_xml_reader.c +277 -183
- data/ext/libxml/ruby_xml_sax_parser.c +60 -57
- data/ext/libxml/ruby_xml_xpath_context.c +43 -8
- data/ext/libxml/ruby_xml_xpath_expression.c +6 -0
- data/ext/libxml/ruby_xml_xpath_object.c +107 -95
- data/ext/libxml/ruby_xml_xpath_object.h +9 -1
- data/ext/libxml/ruby_xml_xpointer.c +107 -107
- data/ext/libxml/version.h +2 -2
- data/ext/vc/libxml_ruby.vcproj +43 -3
- data/lib/libxml.rb +2 -3
- data/lib/libxml/attr.rb +71 -2
- data/lib/libxml/attr_decl.rb +81 -0
- data/lib/libxml/document.rb +78 -14
- data/lib/libxml/html_parser.rb +75 -42
- data/lib/libxml/node.rb +11 -0
- data/lib/libxml/parser.rb +106 -62
- data/lib/libxml/reader.rb +12 -0
- data/lib/libxml/sax_parser.rb +42 -52
- data/lib/libxml/xpath_object.rb +15 -0
- data/test/model/atom.xml +12 -12
- data/test/model/bands.xml +4 -4
- data/test/model/books.xml +146 -147
- data/test/model/merge_bug_data.xml +1 -1
- data/test/model/rubynet.xml +1 -0
- data/test/model/shiporder.rng +1 -1
- data/test/model/shiporder.xml +22 -22
- data/test/model/shiporder.xsd +30 -30
- data/test/model/xinclude.xml +1 -1
- data/test/{tc_node_attr.rb → tc_attr.rb} +1 -1
- data/test/tc_attr_decl.rb +131 -0
- data/test/tc_deprecated_require.rb +1 -3
- data/test/tc_document.rb +13 -3
- data/test/tc_document_write.rb +5 -5
- data/test/tc_dtd.rb +13 -5
- data/test/tc_html_parser.rb +14 -26
- data/test/tc_node_cdata.rb +1 -3
- data/test/tc_node_comment.rb +2 -4
- data/test/tc_node_edit.rb +2 -3
- data/test/tc_node_text.rb +35 -1
- data/test/tc_node_write.rb +3 -3
- data/test/tc_node_xlink.rb +2 -4
- data/test/tc_parser.rb +163 -70
- data/test/tc_parser_context.rb +103 -42
- data/test/tc_reader.rb +173 -45
- data/test/tc_relaxng.rb +2 -2
- data/test/tc_sax_parser.rb +48 -52
- data/test/tc_schema.rb +2 -2
- data/test/tc_xpath.rb +37 -6
- data/test/tc_xpath_context.rb +7 -1
- data/test/tc_xpath_expression.rb +1 -3
- data/test/tc_xpointer.rb +1 -3
- data/test/test_suite.rb +2 -3
- metadata +20 -13
- data/ext/libxml/ruby_xml_input.c +0 -329
- data/ext/libxml/ruby_xml_input.h +0 -20
- data/lib/libxml/parser_context.rb +0 -17
- data/lib/libxml/parser_options.rb +0 -25
- data/test/model/simple.xml +0 -7
- data/test/tc_input.rb +0 -13
- data/test/tc_well_formed.rb +0 -11
data/ext/libxml/ruby_libxml.h
CHANGED
@@ -7,7 +7,6 @@
|
|
7
7
|
|
8
8
|
#include <ruby.h>
|
9
9
|
#include <rubyio.h>
|
10
|
-
#include <util.h>
|
11
10
|
#include <libxml/parser.h>
|
12
11
|
#include <libxml/parserInternals.h>
|
13
12
|
#include <libxml/debugXML.h>
|
@@ -60,17 +59,24 @@
|
|
60
59
|
#include <libxml/xpointer.h>
|
61
60
|
#endif
|
62
61
|
|
62
|
+
#include "ruby_xml_io.h"
|
63
63
|
#include "ruby_xml_error.h"
|
64
|
-
#include "
|
64
|
+
#include "ruby_xml_encoding.h"
|
65
65
|
#include "ruby_xml_state.h"
|
66
66
|
#include "ruby_xml_attributes.h"
|
67
67
|
#include "ruby_xml_attr.h"
|
68
|
+
#include "ruby_xml_attr_decl.h"
|
68
69
|
#include "ruby_xml_document.h"
|
69
70
|
#include "ruby_xml_node.h"
|
70
71
|
#include "ruby_xml_namespace.h"
|
71
72
|
#include "ruby_xml_namespaces.h"
|
72
73
|
#include "ruby_xml_parser.h"
|
74
|
+
#include "ruby_xml_parser_options.h"
|
73
75
|
#include "ruby_xml_parser_context.h"
|
76
|
+
#include "ruby_xml_html_parser.h"
|
77
|
+
#include "ruby_xml_html_parser_options.h"
|
78
|
+
#include "ruby_xml_html_parser_context.h"
|
79
|
+
#include "ruby_xml_reader.h"
|
74
80
|
#include "ruby_xml_sax2_handler.h"
|
75
81
|
#include "ruby_xml_sax_parser.h"
|
76
82
|
#include "ruby_xml_xinclude.h"
|
@@ -83,8 +89,6 @@
|
|
83
89
|
#include "ruby_xml_dtd.h"
|
84
90
|
#include "ruby_xml_schema.h"
|
85
91
|
#include "ruby_xml_relaxng.h"
|
86
|
-
#include "ruby_xml_html_parser.h"
|
87
|
-
#include "ruby_xml_reader.h"
|
88
92
|
|
89
93
|
extern VALUE mLibXML;
|
90
94
|
extern VALUE mXML;
|
data/ext/libxml/ruby_xml_attr.c
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id: ruby_xml_attr.c
|
1
|
+
/* $Id: ruby_xml_attr.c 739 2009-01-23 03:42:09Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
@@ -28,26 +28,16 @@ void rxml_attr_free(xmlAttrPtr xattr)
|
|
28
28
|
if (!xattr)
|
29
29
|
return;
|
30
30
|
|
31
|
-
|
32
|
-
{
|
33
|
-
xattr->_private = NULL;
|
34
|
-
if (xattr->parent == NULL && xattr->doc == NULL)
|
35
|
-
{
|
36
|
-
#ifdef NODE_DEBUG
|
37
|
-
fprintf(stderr,"ruby_xfree rxn=0x%x xn=0x%x o=0x%x\n",(long)rxn,(long)rxn->node,(long)rxn->node->_private);
|
38
|
-
#endif
|
39
|
-
xmlFreeProp(xattr);
|
40
|
-
}
|
31
|
+
xattr->_private = NULL;
|
41
32
|
|
42
|
-
|
33
|
+
if (xattr->parent == NULL && xattr->doc == NULL)
|
34
|
+
{
|
35
|
+
xmlFreeProp(xattr);
|
43
36
|
}
|
44
37
|
}
|
45
38
|
|
46
39
|
void rxml_attr_mark(xmlAttrPtr xattr)
|
47
40
|
{
|
48
|
-
if (xattr == NULL)
|
49
|
-
return;
|
50
|
-
|
51
41
|
if (xattr->_private == NULL)
|
52
42
|
{
|
53
43
|
rb_warning("XmlAttr is not bound! (%s:%d)", __FILE__, __LINE__);
|
@@ -60,16 +50,14 @@ void rxml_attr_mark(xmlAttrPtr xattr)
|
|
60
50
|
VALUE rxml_attr_wrap(xmlAttrPtr xattr)
|
61
51
|
{
|
62
52
|
VALUE result;
|
63
|
-
|
53
|
+
|
54
|
+
/* Check if the node is already wrapped. */
|
64
55
|
if (xattr->_private != NULL)
|
65
56
|
return (VALUE) xattr->_private;
|
66
57
|
|
67
58
|
result = Data_Wrap_Struct(cXMLAttr, rxml_attr_mark, rxml_attr_free, xattr);
|
68
|
-
|
69
59
|
xattr->_private = (void*) result;
|
70
|
-
|
71
|
-
fprintf(stderr,"wrap rxn=0x%x xn=0x%x o=0x%x\n",(long)rxn,(long)xnode,(long)obj);
|
72
|
-
#endif
|
60
|
+
|
73
61
|
return result;
|
74
62
|
}
|
75
63
|
|
@@ -141,26 +129,11 @@ static VALUE rxml_attr_child_get(VALUE self)
|
|
141
129
|
xmlAttrPtr xattr;
|
142
130
|
Data_Get_Struct(self, xmlAttr, xattr);
|
143
131
|
if (xattr->children == NULL)
|
144
|
-
return
|
132
|
+
return Qnil;
|
145
133
|
else
|
146
|
-
return
|
134
|
+
return rxml_node_wrap((xmlNodePtr) xattr->children);
|
147
135
|
}
|
148
136
|
|
149
|
-
/*
|
150
|
-
* call-seq:
|
151
|
-
* attr.child? -> (true|false)
|
152
|
-
*
|
153
|
-
* Returns whether this attribute has child attributes.
|
154
|
-
*/
|
155
|
-
static VALUE rxml_attr_child_q(VALUE self)
|
156
|
-
{
|
157
|
-
xmlAttrPtr xattr;
|
158
|
-
Data_Get_Struct(self, xmlAttr, xattr);
|
159
|
-
if (xattr->children == NULL)
|
160
|
-
return (Qfalse);
|
161
|
-
else
|
162
|
-
return (Qtrue);
|
163
|
-
}
|
164
137
|
|
165
138
|
/*
|
166
139
|
* call-seq:
|
@@ -175,26 +148,9 @@ static VALUE rxml_attr_doc_get(VALUE self)
|
|
175
148
|
xmlAttrPtr xattr;
|
176
149
|
Data_Get_Struct(self, xmlAttr, xattr);
|
177
150
|
if (xattr->doc == NULL)
|
178
|
-
return
|
179
|
-
else
|
180
|
-
return (rxml_document_wrap(xattr->doc));
|
181
|
-
}
|
182
|
-
|
183
|
-
/*
|
184
|
-
* call-seq:
|
185
|
-
* attr.doc? -> (true|false)
|
186
|
-
*
|
187
|
-
* Determine whether this attribute is associated with an
|
188
|
-
* XML::Document.
|
189
|
-
*/
|
190
|
-
static VALUE rxml_attr_doc_q(VALUE self)
|
191
|
-
{
|
192
|
-
xmlAttrPtr xattr;
|
193
|
-
Data_Get_Struct(self, xmlAttr, xattr);
|
194
|
-
if (xattr->doc == NULL)
|
195
|
-
return (Qfalse);
|
151
|
+
return Qnil;
|
196
152
|
else
|
197
|
-
return (
|
153
|
+
return rxml_document_wrap(xattr->doc);
|
198
154
|
}
|
199
155
|
|
200
156
|
/*
|
@@ -208,25 +164,9 @@ static VALUE rxml_attr_last_get(VALUE self)
|
|
208
164
|
xmlAttrPtr xattr;
|
209
165
|
Data_Get_Struct(self, xmlAttr, xattr);
|
210
166
|
if (xattr->last == NULL)
|
211
|
-
return
|
167
|
+
return Qnil;
|
212
168
|
else
|
213
|
-
return
|
214
|
-
}
|
215
|
-
|
216
|
-
/*
|
217
|
-
* call-seq:
|
218
|
-
* attr.last? -> (true|false)
|
219
|
-
*
|
220
|
-
* Determine whether this is the last attribute.
|
221
|
-
*/
|
222
|
-
static VALUE rxml_attr_last_q(VALUE self)
|
223
|
-
{
|
224
|
-
xmlAttrPtr xattr;
|
225
|
-
Data_Get_Struct(self, xmlAttr, xattr);
|
226
|
-
if (xattr->last == NULL)
|
227
|
-
return (Qfalse);
|
228
|
-
else
|
229
|
-
return (Qtrue);
|
169
|
+
return rxml_node_wrap(xattr->last);
|
230
170
|
}
|
231
171
|
|
232
172
|
/*
|
@@ -241,9 +181,9 @@ static VALUE rxml_attr_name_get(VALUE self)
|
|
241
181
|
Data_Get_Struct(self, xmlAttr, xattr);
|
242
182
|
|
243
183
|
if (xattr->name == NULL)
|
244
|
-
return
|
184
|
+
return Qnil;
|
245
185
|
else
|
246
|
-
return
|
186
|
+
return rb_str_new2((const char*) xattr->name);
|
247
187
|
}
|
248
188
|
|
249
189
|
/*
|
@@ -257,36 +197,22 @@ static VALUE rxml_attr_next_get(VALUE self)
|
|
257
197
|
xmlAttrPtr xattr;
|
258
198
|
Data_Get_Struct(self, xmlAttr, xattr);
|
259
199
|
if (xattr->next == NULL)
|
260
|
-
return
|
200
|
+
return Qnil;
|
261
201
|
else
|
262
|
-
return
|
202
|
+
return rxml_attr_wrap(xattr->next);
|
263
203
|
}
|
264
204
|
|
265
205
|
/*
|
266
206
|
* call-seq:
|
267
|
-
* attr.
|
207
|
+
* attr.node_type -> num
|
268
208
|
*
|
269
|
-
*
|
209
|
+
* Obtain this node's type identifier.
|
270
210
|
*/
|
271
|
-
static VALUE
|
211
|
+
static VALUE rxml_attr_node_type(VALUE self)
|
272
212
|
{
|
273
213
|
xmlAttrPtr xattr;
|
274
214
|
Data_Get_Struct(self, xmlAttr, xattr);
|
275
|
-
|
276
|
-
return (Qfalse);
|
277
|
-
else
|
278
|
-
return (Qtrue);
|
279
|
-
}
|
280
|
-
|
281
|
-
/*
|
282
|
-
* call-seq:
|
283
|
-
* attr.type_name -> "attribute"
|
284
|
-
*
|
285
|
-
* Obtain this attribute node's type name.
|
286
|
-
*/
|
287
|
-
static VALUE rxml_attr_node_type_name(VALUE self)
|
288
|
-
{
|
289
|
-
return (rb_str_new2("attribute"));
|
215
|
+
return INT2NUM(xattr->type);
|
290
216
|
}
|
291
217
|
|
292
218
|
/*
|
@@ -300,26 +226,9 @@ static VALUE rxml_attr_ns_get(VALUE self)
|
|
300
226
|
xmlAttrPtr xattr;
|
301
227
|
Data_Get_Struct(self, xmlAttr, xattr);
|
302
228
|
if (xattr->ns == NULL)
|
303
|
-
return
|
229
|
+
return Qnil;
|
304
230
|
else
|
305
|
-
return
|
306
|
-
}
|
307
|
-
|
308
|
-
/*
|
309
|
-
* call-seq:
|
310
|
-
* attr.ns? -> (true|false)
|
311
|
-
*
|
312
|
-
* Determine whether this attribute has an associated
|
313
|
-
* namespace.
|
314
|
-
*/
|
315
|
-
static VALUE rxml_attr_ns_q(VALUE self)
|
316
|
-
{
|
317
|
-
xmlAttrPtr xattr;
|
318
|
-
Data_Get_Struct(self, xmlAttr, xattr);
|
319
|
-
if (xattr->ns == NULL)
|
320
|
-
return (Qfalse);
|
321
|
-
else
|
322
|
-
return (Qtrue);
|
231
|
+
return rxml_namespace_wrap(xattr->ns, NULL);
|
323
232
|
}
|
324
233
|
|
325
234
|
/*
|
@@ -333,25 +242,9 @@ static VALUE rxml_attr_parent_get(VALUE self)
|
|
333
242
|
xmlAttrPtr xattr;
|
334
243
|
Data_Get_Struct(self, xmlAttr, xattr);
|
335
244
|
if (xattr->parent == NULL)
|
336
|
-
return
|
337
|
-
else
|
338
|
-
return (rxml_node_wrap(cXMLNode, xattr->parent));
|
339
|
-
}
|
340
|
-
|
341
|
-
/*
|
342
|
-
* call-seq:
|
343
|
-
* attr.parent? -> (true|false)
|
344
|
-
*
|
345
|
-
* Determine whether this attribute has a parent.
|
346
|
-
*/
|
347
|
-
static VALUE rxml_attr_parent_q(VALUE self)
|
348
|
-
{
|
349
|
-
xmlAttrPtr xattr;
|
350
|
-
Data_Get_Struct(self, xmlAttr, xattr);
|
351
|
-
if (xattr->parent == NULL)
|
352
|
-
return (Qfalse);
|
245
|
+
return Qnil;
|
353
246
|
else
|
354
|
-
return (
|
247
|
+
return rxml_node_wrap(xattr->parent);
|
355
248
|
}
|
356
249
|
|
357
250
|
/*
|
@@ -365,25 +258,9 @@ static VALUE rxml_attr_prev_get(VALUE self)
|
|
365
258
|
xmlAttrPtr xattr;
|
366
259
|
Data_Get_Struct(self, xmlAttr, xattr);
|
367
260
|
if (xattr->prev == NULL)
|
368
|
-
return
|
261
|
+
return Qnil;
|
369
262
|
else
|
370
|
-
return
|
371
|
-
}
|
372
|
-
|
373
|
-
/*
|
374
|
-
* call-seq:
|
375
|
-
* attr.prev? -> (true|false)
|
376
|
-
*
|
377
|
-
* Determine whether there is a previous attribute.
|
378
|
-
*/
|
379
|
-
static VALUE rxml_attr_prev_q(VALUE self)
|
380
|
-
{
|
381
|
-
xmlAttrPtr xattr;
|
382
|
-
Data_Get_Struct(self, xmlAttr, xattr);
|
383
|
-
if (xattr->prev == NULL)
|
384
|
-
return (Qfalse);
|
385
|
-
else
|
386
|
-
return (Qtrue);
|
263
|
+
return rxml_attr_wrap(xattr->prev);
|
387
264
|
}
|
388
265
|
|
389
266
|
/*
|
@@ -402,7 +279,7 @@ static VALUE rxml_attr_remove_ex(VALUE self)
|
|
402
279
|
else
|
403
280
|
xmlUnlinkNode((xmlNodePtr) xattr);
|
404
281
|
|
405
|
-
return
|
282
|
+
return Qnil;;
|
406
283
|
}
|
407
284
|
|
408
285
|
/*
|
@@ -418,16 +295,14 @@ VALUE rxml_attr_value_get(VALUE self)
|
|
418
295
|
VALUE result = Qnil;
|
419
296
|
|
420
297
|
Data_Get_Struct(self, xmlAttr, xattr);
|
421
|
-
|
298
|
+
value = xmlNodeGetContent((xmlNodePtr)xattr);
|
299
|
+
|
300
|
+
if (value != NULL)
|
422
301
|
{
|
423
|
-
|
424
|
-
|
425
|
-
{
|
426
|
-
result = rb_str_new2((const char*) value);
|
427
|
-
xmlFree(value);
|
428
|
-
}
|
302
|
+
result = rb_str_new2((const char*) value);
|
303
|
+
xmlFree(value);
|
429
304
|
}
|
430
|
-
return
|
305
|
+
return result;
|
431
306
|
}
|
432
307
|
|
433
308
|
/*
|
@@ -464,21 +339,14 @@ void ruby_init_xml_attr(void)
|
|
464
339
|
rb_define_alloc_func(cXMLAttr, rxml_attr_alloc);
|
465
340
|
rb_define_method(cXMLAttr, "initialize", rxml_attr_initialize, -1);
|
466
341
|
rb_define_method(cXMLAttr, "child", rxml_attr_child_get, 0);
|
467
|
-
rb_define_method(cXMLAttr, "child?", rxml_attr_child_q, 0);
|
468
342
|
rb_define_method(cXMLAttr, "doc", rxml_attr_doc_get, 0);
|
469
|
-
rb_define_method(cXMLAttr, "doc?", rxml_attr_doc_q, 0);
|
470
343
|
rb_define_method(cXMLAttr, "last", rxml_attr_last_get, 0);
|
471
|
-
rb_define_method(cXMLAttr, "last?", rxml_attr_last_q, 0);
|
472
344
|
rb_define_method(cXMLAttr, "name", rxml_attr_name_get, 0);
|
473
345
|
rb_define_method(cXMLAttr, "next", rxml_attr_next_get, 0);
|
474
|
-
rb_define_method(cXMLAttr, "
|
475
|
-
rb_define_method(cXMLAttr, "node_type_name", rxml_attr_node_type_name, 0);
|
346
|
+
rb_define_method(cXMLAttr, "node_type", rxml_attr_node_type, 0);
|
476
347
|
rb_define_method(cXMLAttr, "ns", rxml_attr_ns_get, 0);
|
477
|
-
rb_define_method(cXMLAttr, "ns?", rxml_attr_ns_q, 0);
|
478
348
|
rb_define_method(cXMLAttr, "parent", rxml_attr_parent_get, 0);
|
479
|
-
rb_define_method(cXMLAttr, "parent?", rxml_attr_parent_q, 0);
|
480
349
|
rb_define_method(cXMLAttr, "prev", rxml_attr_prev_get, 0);
|
481
|
-
rb_define_method(cXMLAttr, "prev?", rxml_attr_prev_q, 0);
|
482
350
|
rb_define_method(cXMLAttr, "remove!", rxml_attr_remove_ex, 0);
|
483
351
|
rb_define_method(cXMLAttr, "value", rxml_attr_value_get, 0);
|
484
352
|
rb_define_method(cXMLAttr, "value=", rxml_attr_value_set, 1);
|
data/ext/libxml/ruby_xml_attr.h
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
/* $Id: ruby_xml_attr.h
|
1
|
+
/* $Id: ruby_xml_attr.h 712 2009-01-20 08:08:52Z cfis $ */
|
2
2
|
|
3
3
|
/* Please see the LICENSE file for copyright and distribution information */
|
4
4
|
|
@@ -8,9 +8,7 @@
|
|
8
8
|
extern VALUE cXMLAttr;
|
9
9
|
|
10
10
|
void ruby_init_xml_attr(void);
|
11
|
-
VALUE
|
11
|
+
VALUE rxml_attr_wrap(xmlAttrPtr xattr);
|
12
12
|
VALUE rxml_attr_value_get(VALUE self);
|
13
13
|
VALUE rxml_attr_value_set(VALUE self, VALUE val);
|
14
|
-
void rxml_attr_free(xmlAttrPtr xattr);
|
15
|
-
VALUE rxml_attr_wrap(xmlAttrPtr xattr);
|
16
14
|
#endif
|
@@ -0,0 +1,177 @@
|
|
1
|
+
/* $Id: ruby_xml_attr.c 666 2008-12-07 00:16:50Z cfis $ */
|
2
|
+
|
3
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
4
|
+
|
5
|
+
/*
|
6
|
+
* Document-class: LibXML::XML::AttrDecl
|
7
|
+
*
|
8
|
+
* At attribute declaration is used in XML::Dtds to define
|
9
|
+
* what attributes are allowed on an element. An attribute
|
10
|
+
* declaration defines an attribues name, data type and default
|
11
|
+
* value (if any).
|
12
|
+
*/
|
13
|
+
|
14
|
+
#include "ruby_libxml.h"
|
15
|
+
|
16
|
+
VALUE cXMLAttrDecl;
|
17
|
+
|
18
|
+
void rxml_attr_decl_mark(xmlAttributePtr xattribute)
|
19
|
+
{
|
20
|
+
if (xattribute->_private == NULL)
|
21
|
+
{
|
22
|
+
rb_warning("AttrDecl is not bound! (%s:%d)", __FILE__, __LINE__);
|
23
|
+
return;
|
24
|
+
}
|
25
|
+
|
26
|
+
rxml_node_mark_common((xmlNodePtr) xattribute);
|
27
|
+
}
|
28
|
+
|
29
|
+
VALUE rxml_attr_decl_wrap(xmlAttributePtr xattribute)
|
30
|
+
{
|
31
|
+
VALUE result;
|
32
|
+
|
33
|
+
// This node is already wrapped
|
34
|
+
if (xattribute->_private != NULL)
|
35
|
+
return (VALUE) xattribute->_private;
|
36
|
+
|
37
|
+
result = Data_Wrap_Struct(cXMLAttrDecl, rxml_attr_decl_mark, NULL, xattribute);
|
38
|
+
|
39
|
+
xattribute->_private = (void*) result;
|
40
|
+
|
41
|
+
return result;
|
42
|
+
}
|
43
|
+
|
44
|
+
/*
|
45
|
+
* call-seq:
|
46
|
+
* attr_decl.doc -> XML::Document
|
47
|
+
*
|
48
|
+
* Returns this attribute declaration's document.
|
49
|
+
*/
|
50
|
+
static VALUE rxml_attr_decl_doc_get(VALUE self)
|
51
|
+
{
|
52
|
+
xmlAttributePtr xattribute;
|
53
|
+
Data_Get_Struct(self, xmlAttribute, xattribute);
|
54
|
+
if (xattribute->doc == NULL)
|
55
|
+
return Qnil;
|
56
|
+
else
|
57
|
+
return rxml_document_wrap(xattribute->doc);
|
58
|
+
}
|
59
|
+
|
60
|
+
|
61
|
+
/*
|
62
|
+
* call-seq:
|
63
|
+
* attr_decl.name -> "name"
|
64
|
+
*
|
65
|
+
* Obtain this attribute declaration's name.
|
66
|
+
*/
|
67
|
+
static VALUE rxml_attr_decl_name_get(VALUE self)
|
68
|
+
{
|
69
|
+
xmlAttributePtr xattribute;
|
70
|
+
Data_Get_Struct(self, xmlAttribute, xattribute);
|
71
|
+
|
72
|
+
if (xattribute->name == NULL)
|
73
|
+
return Qnil;
|
74
|
+
else
|
75
|
+
return rb_str_new2((const char*) xattribute->name);
|
76
|
+
}
|
77
|
+
|
78
|
+
/*
|
79
|
+
* call-seq:
|
80
|
+
* attr_decl.next -> XML::AttrDecl
|
81
|
+
*
|
82
|
+
* Obtain the next attribute declaration.
|
83
|
+
*/
|
84
|
+
static VALUE rxml_attr_decl_next_get(VALUE self)
|
85
|
+
{
|
86
|
+
xmlAttributePtr xattribute;
|
87
|
+
Data_Get_Struct(self, xmlAttribute, xattribute);
|
88
|
+
if (xattribute->next == NULL)
|
89
|
+
return Qnil;
|
90
|
+
else
|
91
|
+
return rxml_attr_decl_wrap((xmlAttributePtr)xattribute->next);
|
92
|
+
}
|
93
|
+
|
94
|
+
/*
|
95
|
+
* call-seq:
|
96
|
+
* attr_decl.type -> num
|
97
|
+
*
|
98
|
+
* Obtain this attribute declaration's type node type.
|
99
|
+
*/
|
100
|
+
static VALUE rxml_attr_decl_node_type(VALUE self)
|
101
|
+
{
|
102
|
+
xmlAttrPtr xattr;
|
103
|
+
Data_Get_Struct(self, xmlAttr, xattr);
|
104
|
+
return INT2NUM(xattr->type);
|
105
|
+
}
|
106
|
+
|
107
|
+
/*
|
108
|
+
* call-seq:
|
109
|
+
* attr_decl.parent -> XML::Dtd
|
110
|
+
*
|
111
|
+
* Obtain this attribute declaration's parent which
|
112
|
+
* is an instance of a XML::DTD.
|
113
|
+
*/
|
114
|
+
static VALUE rxml_attr_decl_parent_get(VALUE self)
|
115
|
+
{
|
116
|
+
xmlAttributePtr xattribute;
|
117
|
+
Data_Get_Struct(self, xmlAttribute, xattribute);
|
118
|
+
|
119
|
+
if (xattribute->parent == NULL)
|
120
|
+
return Qnil;
|
121
|
+
else
|
122
|
+
return rxml_dtd_wrap(xattribute->parent);
|
123
|
+
}
|
124
|
+
|
125
|
+
/*
|
126
|
+
* call-seq:
|
127
|
+
* attr_decl.prev -> (XML::AttrDecl | XML::ElementDecl)
|
128
|
+
*
|
129
|
+
* Obtain the previous attribute declaration or the owning
|
130
|
+
* element declration (not implemented).
|
131
|
+
*/
|
132
|
+
static VALUE rxml_attr_decl_prev_get(VALUE self)
|
133
|
+
{
|
134
|
+
xmlAttributePtr xattribute;
|
135
|
+
Data_Get_Struct(self, xmlAttribute, xattribute);
|
136
|
+
|
137
|
+
if (xattribute->prev == NULL)
|
138
|
+
return Qnil;
|
139
|
+
else
|
140
|
+
return rxml_attr_decl_wrap((xmlAttributePtr)xattribute->prev);
|
141
|
+
}
|
142
|
+
|
143
|
+
/*
|
144
|
+
* call-seq:
|
145
|
+
* attr_decl.value -> "value"
|
146
|
+
*
|
147
|
+
* Obtain the default value of this attribute declaration.
|
148
|
+
*/
|
149
|
+
VALUE rxml_attr_decl_value_get(VALUE self)
|
150
|
+
{
|
151
|
+
xmlAttributePtr xattribute;
|
152
|
+
|
153
|
+
Data_Get_Struct(self, xmlAttribute, xattribute);
|
154
|
+
|
155
|
+
if (xattribute->defaultValue)
|
156
|
+
return rb_str_new2((const char *)xattribute->defaultValue);
|
157
|
+
else
|
158
|
+
return Qnil;
|
159
|
+
}
|
160
|
+
|
161
|
+
// Rdoc needs to know
|
162
|
+
#ifdef RDOC_NEVER_DEFINED
|
163
|
+
mLibXML = rb_define_module("LibXML");
|
164
|
+
mXML = rb_define_module_under(mLibXML, "XML");
|
165
|
+
#endif
|
166
|
+
|
167
|
+
void ruby_init_xml_attr_decl(void)
|
168
|
+
{
|
169
|
+
cXMLAttrDecl = rb_define_class_under(mXML, "AttrDecl", rb_cObject);
|
170
|
+
rb_define_method(cXMLAttrDecl, "doc", rxml_attr_decl_doc_get, 0);
|
171
|
+
rb_define_method(cXMLAttrDecl, "name", rxml_attr_decl_name_get, 0);
|
172
|
+
rb_define_method(cXMLAttrDecl, "next", rxml_attr_decl_next_get, 0);
|
173
|
+
rb_define_method(cXMLAttrDecl, "node_type", rxml_attr_decl_node_type, 0);
|
174
|
+
rb_define_method(cXMLAttrDecl, "parent", rxml_attr_decl_parent_get, 0);
|
175
|
+
rb_define_method(cXMLAttrDecl, "prev", rxml_attr_decl_prev_get, 0);
|
176
|
+
rb_define_method(cXMLAttrDecl, "value", rxml_attr_decl_value_get, 0);
|
177
|
+
}
|