libxml-ruby 0.6.0-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.
Files changed (127) hide show
  1. data/CHANGES +122 -0
  2. data/LICENSE +23 -0
  3. data/README +144 -0
  4. data/ext/libxml/cbg.c +76 -0
  5. data/ext/libxml/extconf.rb +308 -0
  6. data/ext/libxml/libxml.c +62 -0
  7. data/ext/libxml/ruby_libxml.h +93 -0
  8. data/ext/libxml/ruby_xml_attr.c +405 -0
  9. data/ext/libxml/ruby_xml_attr.h +19 -0
  10. data/ext/libxml/ruby_xml_document.c +1111 -0
  11. data/ext/libxml/ruby_xml_document.h +27 -0
  12. data/ext/libxml/ruby_xml_dtd.c +168 -0
  13. data/ext/libxml/ruby_xml_dtd.h +17 -0
  14. data/ext/libxml/ruby_xml_html_parser.c +449 -0
  15. data/ext/libxml/ruby_xml_html_parser.h +29 -0
  16. data/ext/libxml/ruby_xml_input_cbg.c +158 -0
  17. data/ext/libxml/ruby_xml_input_cbg.h +20 -0
  18. data/ext/libxml/ruby_xml_node.c +2410 -0
  19. data/ext/libxml/ruby_xml_node.h +27 -0
  20. data/ext/libxml/ruby_xml_node_set.c +170 -0
  21. data/ext/libxml/ruby_xml_node_set.h +20 -0
  22. data/ext/libxml/ruby_xml_ns.c +153 -0
  23. data/ext/libxml/ruby_xml_ns.h +21 -0
  24. data/ext/libxml/ruby_xml_parser.c +1425 -0
  25. data/ext/libxml/ruby_xml_parser.h +31 -0
  26. data/ext/libxml/ruby_xml_parser_context.c +750 -0
  27. data/ext/libxml/ruby_xml_parser_context.h +22 -0
  28. data/ext/libxml/ruby_xml_reader.c +900 -0
  29. data/ext/libxml/ruby_xml_reader.h +14 -0
  30. data/ext/libxml/ruby_xml_sax_parser.c +485 -0
  31. data/ext/libxml/ruby_xml_sax_parser.h +56 -0
  32. data/ext/libxml/ruby_xml_schema.c +146 -0
  33. data/ext/libxml/ruby_xml_schema.h +16 -0
  34. data/ext/libxml/ruby_xml_state.c +113 -0
  35. data/ext/libxml/ruby_xml_state.h +12 -0
  36. data/ext/libxml/ruby_xml_tree.c +43 -0
  37. data/ext/libxml/ruby_xml_tree.h +12 -0
  38. data/ext/libxml/ruby_xml_xinclude.c +20 -0
  39. data/ext/libxml/ruby_xml_xinclude.h +13 -0
  40. data/ext/libxml/ruby_xml_xpath.c +243 -0
  41. data/ext/libxml/ruby_xml_xpath.h +23 -0
  42. data/ext/libxml/ruby_xml_xpath_context.c +118 -0
  43. data/ext/libxml/ruby_xml_xpath_context.h +20 -0
  44. data/ext/libxml/ruby_xml_xpath_object.c +293 -0
  45. data/ext/libxml/ruby_xml_xpath_object.h +28 -0
  46. data/ext/libxml/ruby_xml_xpointer.c +100 -0
  47. data/ext/libxml/ruby_xml_xpointer.h +27 -0
  48. data/ext/libxml/ruby_xml_xpointer_context.c +21 -0
  49. data/ext/libxml/ruby_xml_xpointer_context.h +18 -0
  50. data/ext/libxml/sax_parser_callbacks.inc +213 -0
  51. data/ext/libxml/version.h +9 -0
  52. data/lib/libxml.rb +125 -0
  53. data/lib/libxml_ruby.so +0 -0
  54. data/lib/xml/libxml.rb +5 -0
  55. data/mingw/libiconv-2.dll +0 -0
  56. data/mingw/libxml2-2.dll +0 -0
  57. data/mingw/libxml_ruby.so +0 -0
  58. data/mingw/mingw.rake +36 -0
  59. data/test/dtd-test.rb +24 -0
  60. data/test/etc_doc_to_s.rb +19 -0
  61. data/test/ets_copy_bug.rb +21 -0
  62. data/test/ets_copy_bug2.rb +32 -0
  63. data/test/ets_copy_bug3.rb +38 -0
  64. data/test/ets_doc_file.rb +15 -0
  65. data/test/ets_doc_to_s.rb +21 -0
  66. data/test/ets_gpx.rb +26 -0
  67. data/test/ets_node_gc.rb +21 -0
  68. data/test/ets_test.xml +2 -0
  69. data/test/ets_tsr.rb +9 -0
  70. data/test/gc.log +0 -0
  71. data/test/merge_bug.rb +55 -0
  72. data/test/schema-test.rb +74 -0
  73. data/test/tc_well_formed.rb +11 -0
  74. data/test/tc_xml_document.rb +52 -0
  75. data/test/tc_xml_document_write.rb +24 -0
  76. data/test/tc_xml_document_write2.rb +54 -0
  77. data/test/tc_xml_document_write3.rb +96 -0
  78. data/test/tc_xml_html_parser.rb +63 -0
  79. data/test/tc_xml_node.rb +59 -0
  80. data/test/tc_xml_node2.rb +25 -0
  81. data/test/tc_xml_node3.rb +27 -0
  82. data/test/tc_xml_node4.rb +86 -0
  83. data/test/tc_xml_node5.rb +52 -0
  84. data/test/tc_xml_node6.rb +27 -0
  85. data/test/tc_xml_node7.rb +35 -0
  86. data/test/tc_xml_node8.rb +32 -0
  87. data/test/tc_xml_node9.rb +32 -0
  88. data/test/tc_xml_node_copy.rb +40 -0
  89. data/test/tc_xml_node_set.rb +24 -0
  90. data/test/tc_xml_node_set2.rb +37 -0
  91. data/test/tc_xml_node_text.rb +17 -0
  92. data/test/tc_xml_node_xlink.rb +28 -0
  93. data/test/tc_xml_parser.rb +190 -0
  94. data/test/tc_xml_parser2.rb +16 -0
  95. data/test/tc_xml_parser3.rb +23 -0
  96. data/test/tc_xml_parser4.rb +33 -0
  97. data/test/tc_xml_parser5.rb +27 -0
  98. data/test/tc_xml_parser6.rb +23 -0
  99. data/test/tc_xml_parser7.rb +28 -0
  100. data/test/tc_xml_parser8.rb +32 -0
  101. data/test/tc_xml_parser9.rb +11 -0
  102. data/test/tc_xml_parser_context.rb +88 -0
  103. data/test/tc_xml_reader.rb +112 -0
  104. data/test/tc_xml_sax_parser.rb +104 -0
  105. data/test/tc_xml_sax_parser2.rb +51 -0
  106. data/test/tc_xml_xinclude.rb +30 -0
  107. data/test/tc_xml_xpath.rb +38 -0
  108. data/test/tc_xml_xpath2.rb +14 -0
  109. data/test/tc_xml_xpointer.rb +78 -0
  110. data/vc/libxml.sln +20 -0
  111. data/vc/libxml.vcproj +389 -0
  112. data/work/Rakefile +247 -0
  113. data/work/task/make +26 -0
  114. data/work/task/memory +37 -0
  115. data/work/task/rdoc +39 -0
  116. data/work/task/setup +1616 -0
  117. data/work/task/test +29 -0
  118. data/work/test/ets_runner.rb +33 -0
  119. data/work/test/libxml_test.rb +3 -0
  120. data/work/test/runner.rb +0 -0
  121. data/work/test/runner_ets.rb +33 -0
  122. data/work/vc/debug/libxml.exp +0 -0
  123. data/work/vc/debug/libxml.ilk +0 -0
  124. data/work/vc/debug/libxml.lib +0 -0
  125. data/work/vc/debug/libxml.pdb +0 -0
  126. data/work/vc/debug/libxml.so +0 -0
  127. metadata +224 -0
@@ -0,0 +1,23 @@
1
+ /* $Id: ruby_xml_xpath.h 207 2007-11-14 07:51:46Z danj $ */
2
+
3
+ /* Please see the LICENSE file for copyright and distribution information */
4
+
5
+ #ifndef __RUBY_XML_XPATH__
6
+ #define __RUBY_XML_XPATH__
7
+
8
+ extern VALUE cXMLXPath;
9
+ extern VALUE eXMLXPathInvalidPath;
10
+
11
+ typedef struct ruby_xml_xpath {
12
+ VALUE xd;
13
+ VALUE ctxt;
14
+ xmlXPathObjectPtr xpop;
15
+ } ruby_xml_xpath;
16
+
17
+ void ruby_xml_xpath_free(ruby_xml_xpath *rxxp);
18
+ VALUE ruby_xml_xpath_find(VALUE class, VALUE anode, VALUE xpath_expr, VALUE nslist);
19
+ VALUE ruby_xml_xpath_find2(VALUE anode, VALUE xpath_expr, VALUE nslist);
20
+
21
+ void ruby_init_xml_xpath(void);
22
+
23
+ #endif
@@ -0,0 +1,118 @@
1
+ /* $Id: ruby_xml_xpath_context.c 300 2008-07-01 19:14:15Z cfis $ */
2
+
3
+ /* Please see the LICENSE file for copyright and distribution information */
4
+
5
+ #include "ruby_libxml.h"
6
+ #include "ruby_xml_xpath_context.h"
7
+
8
+ VALUE cXMLXPathContext;
9
+
10
+ /*
11
+ * call-seq:
12
+ * context.doc => document
13
+ *
14
+ * Obtain the XML::Document associated with this XPath.
15
+ */
16
+ VALUE
17
+ ruby_xml_xpath_context_doc_get(VALUE self) {
18
+ xmlXPathContextPtr ctxt;
19
+ Data_Get_Struct(self, xmlXPathContext, ctxt);
20
+
21
+ return ruby_xml_document_wrap(ctxt->doc);
22
+ }
23
+
24
+
25
+ void
26
+ ruby_xml_xpath_context_free(xmlXPathContextPtr ctxt) {
27
+ if (ctxt != NULL) {
28
+ xmlXPathFreeContext(ctxt);
29
+ ctxt = NULL;
30
+ }
31
+ }
32
+
33
+
34
+ void
35
+ ruby_xml_xpath_context_mark(xmlXPathContextPtr ctxt) {
36
+ if (ctxt == NULL ) return;
37
+ if (ctxt->doc != NULL && ctxt->doc->_private != NULL)
38
+ rb_gc_mark((VALUE)ctxt->doc->_private);
39
+ }
40
+
41
+
42
+ VALUE
43
+ ruby_xml_xpath_context_wrap(xmlXPathContextPtr ctxt) {
44
+ return Data_Wrap_Struct(cXMLXPathContext,
45
+ ruby_xml_xpath_context_mark,
46
+ ruby_xml_xpath_context_free,
47
+ ctxt);
48
+ }
49
+
50
+
51
+ VALUE
52
+ ruby_xml_xpath_context_new(VALUE anode) {
53
+ ruby_xml_document_t *rxd;
54
+ ruby_xml_node *node;
55
+ xmlXPathContextPtr ctxt;
56
+
57
+ if (rb_obj_is_kind_of(anode,cXMLDocument) == Qtrue ) {
58
+ Data_Get_Struct(anode,ruby_xml_document_t,rxd);
59
+ if (rxd->doc == NULL) return(Qnil);
60
+
61
+ ctxt = xmlXPathNewContext(rxd->doc);
62
+ if (ctxt == NULL) return(Qnil);
63
+
64
+ } else if (rb_obj_is_kind_of(anode,cXMLNode) == Qtrue ) {
65
+ Data_Get_Struct(anode, ruby_xml_node, node);
66
+ if (node->node->doc == NULL)
67
+ rb_raise(rb_eTypeError,"Supplied node must be part of a document");
68
+
69
+ ctxt = xmlXPathNewContext(node->node->doc);
70
+ if (ctxt == NULL) return(Qnil);
71
+
72
+ } else {
73
+ rb_raise(rb_eTypeError,"create context requires a document or node. Supplied a %s?",
74
+ rb_obj_as_string(anode));
75
+ }
76
+
77
+ return ruby_xml_xpath_context_wrap(ctxt);
78
+ }
79
+
80
+ /*
81
+ * call-seq:
82
+ * context.register_namespace(prefix, uri) => (true|false)
83
+ *
84
+ * Register the specified namespace URI with the specified prefix
85
+ * in this context.
86
+ */
87
+ VALUE
88
+ ruby_xml_xpath_context_register_namespace(VALUE self, VALUE prefix, VALUE uri) {
89
+ xmlXPathContextPtr ctxt;
90
+
91
+ Data_Get_Struct(self, xmlXPathContext, ctxt);
92
+ if (xmlXPathRegisterNs(ctxt,
93
+ (xmlChar*)StringValuePtr(prefix),
94
+ (xmlChar*)StringValuePtr(uri))
95
+ == 0) {
96
+ return(Qtrue);
97
+ } else {
98
+ /* Should raise an exception, IMHO (whose?, why shouldnt it? -danj)*/
99
+ rb_warning("register namespace failed");
100
+ return(Qfalse);
101
+ }
102
+ }
103
+
104
+ // Rdoc needs to know
105
+ #ifdef RDOC_NEVER_DEFINED
106
+ mXML = rb_define_module("XML");
107
+ cXMLXPath = rb_define_class_under(mXML, "XPath", rb_cObject);
108
+ #endif
109
+
110
+ void
111
+ ruby_init_xml_xpath_context(void) {
112
+ cXMLXPathContext = rb_define_class_under(cXMLXPath, "Context", rb_cObject);
113
+
114
+ rb_define_method(cXMLXPathContext, "register_namespace",
115
+ ruby_xml_xpath_context_register_namespace, 2);
116
+ rb_define_method(cXMLXPathContext, "doc",
117
+ ruby_xml_xpath_context_doc_get, 0);
118
+ }
@@ -0,0 +1,20 @@
1
+ /* $Id: ruby_xml_xpath_context.h 207 2007-11-14 07:51:46Z danj $ */
2
+
3
+ /* Please see the LICENSE file for copyright and distribution information */
4
+
5
+ #ifndef __RUBY_XML_XPATH_CONTEXT__
6
+ #define __RUBY_XML_XPATH_CONTEXT__
7
+
8
+ extern VALUE cXMLXPathContext;
9
+
10
+ typedef struct ruby_xml_xpath_context {
11
+ VALUE xd;
12
+ xmlXPathContextPtr ctxt;
13
+ } ruby_xml_xpath_context;
14
+
15
+ VALUE ruby_xml_xpath_context_wrap(xmlXPathContextPtr ctxt);
16
+ VALUE ruby_xml_xpath_context_new(VALUE anode);
17
+ VALUE ruby_xml_xpath_context_register_namespace(VALUE self, VALUE prefix, VALUE uri);
18
+ void ruby_init_xml_xpath_context(void);
19
+
20
+ #endif
@@ -0,0 +1,293 @@
1
+ /* $Id: $ */
2
+
3
+ #include "ruby_libxml.h"
4
+
5
+ /*
6
+ * Document-class: XML::XPath::Object
7
+ *
8
+ * All XPath and XPointer evals result in this type.
9
+ * nodeset should become entirely virtual and refer back to
10
+ * this class/data structure.
11
+ *
12
+ */
13
+ VALUE cXMLXPathObject;
14
+
15
+
16
+ static VALUE
17
+ ruby_xml_xpath_object_tabref(xmlXPathObjectPtr xpop, int apos) {
18
+
19
+ if (apos < 0 )
20
+ apos=xpop->nodesetval->nodeNr+apos;
21
+
22
+ if (apos < 0 || apos+1 > xpop->nodesetval->nodeNr )
23
+ return Qnil;
24
+
25
+ switch(xpop->nodesetval->nodeTab[apos]->type) {
26
+ case XML_ATTRIBUTE_NODE:
27
+ return ruby_xml_attr_wrap(cXMLAttr,
28
+ (xmlAttrPtr)xpop->nodesetval->nodeTab[apos]);
29
+ break;
30
+ default:
31
+ return ruby_xml_node2_wrap(cXMLNode,
32
+ xpop->nodesetval->nodeTab[apos]);
33
+ }
34
+ }
35
+
36
+ void
37
+ ruby_xml_xpath_object_mark(xmlXPathObjectPtr xpop)
38
+ {
39
+ void * xnp;
40
+ int i;
41
+
42
+ if ( xpop->type == XPATH_NODESET && xpop->nodesetval != NULL ) {
43
+ for (i=0; i<xpop->nodesetval->nodeNr; i++) {
44
+ xnp=xpop->nodesetval->nodeTab[i]->_private;
45
+ if (xnp != NULL)
46
+ rb_gc_mark((VALUE)xnp);
47
+ }
48
+ }
49
+ }
50
+
51
+ void
52
+ ruby_xml_xpath_object_free(xmlXPathObjectPtr xpop)
53
+ {
54
+ xmlXPathFreeObject(xpop);
55
+ }
56
+
57
+ VALUE
58
+ ruby_xml_xpath_object_wrap(xmlXPathObjectPtr xpop)
59
+ {
60
+ VALUE rval;
61
+
62
+ if ( xpop==NULL )
63
+ return Qnil;
64
+
65
+ switch(xpop->type) {
66
+ case XPATH_NODESET:
67
+ rval = Data_Wrap_Struct(cXMLXPathObject,
68
+ ruby_xml_xpath_object_mark,
69
+ ruby_xml_xpath_object_free,
70
+ xpop);
71
+
72
+ if (xpop->type == XPATH_NODESET && !((xpop->nodesetval == NULL) || (xpop->nodesetval->nodeNr == 0))) {
73
+ int i;
74
+ for (i = 0; i < xpop->nodesetval->nodeNr; i++) {
75
+ ruby_xml_xpath_object_tabref(xpop, i);
76
+ }
77
+ }
78
+ break;
79
+ case XPATH_BOOLEAN:
80
+ if (xpop->boolval != 0)
81
+ rval=Qtrue;
82
+ else
83
+ rval=Qfalse;
84
+
85
+ xmlXPathFreeObject(xpop);
86
+ break;
87
+ case XPATH_NUMBER:
88
+ rval=rb_float_new(xpop->floatval);
89
+
90
+ xmlXPathFreeObject(xpop);
91
+ break;
92
+ case XPATH_STRING:
93
+ rval=rb_str_new2(xpop->stringval);
94
+
95
+ xmlXPathFreeObject(xpop);
96
+ break;
97
+ default:
98
+ xmlXPathFreeObject(xpop);
99
+ rval=Qnil;
100
+ }
101
+ return rval;
102
+ }
103
+
104
+
105
+ /*
106
+ * call-seq:
107
+ * xpath_object.to_a => [node, ..., node]
108
+ *
109
+ * Obtain an array of the nodes in this set.
110
+ */
111
+ VALUE
112
+ ruby_xml_xpath_object_to_a(VALUE self)
113
+ {
114
+ VALUE set_ary, nodeobj;
115
+ xmlXPathObjectPtr xpop;
116
+ int i;
117
+
118
+ Data_Get_Struct(self,xmlXPathObject,xpop);
119
+
120
+ set_ary = rb_ary_new();
121
+ if (!((xpop->nodesetval == NULL) || (xpop->nodesetval->nodeNr == 0))) {
122
+ for (i = 0; i < xpop->nodesetval->nodeNr; i++) {
123
+ nodeobj = ruby_xml_xpath_object_tabref(xpop, i);
124
+ rb_ary_push(set_ary, nodeobj);
125
+ }
126
+ }
127
+
128
+ return(set_ary);
129
+ }
130
+
131
+ /*
132
+ * call-seq:
133
+ * xpath_object.set => Node::Set
134
+ *
135
+ * Obtain the previous type object which is really
136
+ * just a proxy back to this object. Unless the
137
+ * type is not a NODESET, in which case it is nil.
138
+ */
139
+ VALUE
140
+ ruby_xml_xpath_object_set(VALUE self)
141
+ {
142
+ xmlXPathObjectPtr xpop;
143
+ VALUE r;
144
+
145
+ Data_Get_Struct(self,xmlXPathObject,xpop);
146
+ r=Qnil;
147
+
148
+ if (xpop->type == XPATH_NODESET)
149
+ r=ruby_xml_node_set_new2(self);
150
+
151
+ return r;
152
+ }
153
+
154
+ /*
155
+ * call-seq:
156
+ * xpath_object.empty? => (true|false)
157
+ *
158
+ * Determine whether this nodeset is empty (contains no nodes).
159
+ */
160
+ VALUE
161
+ ruby_xml_xpath_object_empty_q(VALUE self) {
162
+ xmlXPathObjectPtr xpop;
163
+
164
+ Data_Get_Struct(self,xmlXPathObject,xpop);
165
+
166
+ if (xpop->type != XPATH_NODESET)
167
+ return Qnil;
168
+
169
+ return ( xpop->nodesetval == NULL || xpop->nodesetval->nodeNr <= 0 ) ? Qtrue : Qfalse;
170
+ }
171
+
172
+ /*
173
+ * call-seq:
174
+ * xpath_object.each { |node| ... } => self
175
+ *
176
+ * Call the supplied block for each node in this set.
177
+ */
178
+ VALUE
179
+ ruby_xml_xpath_object_each(VALUE self)
180
+ {
181
+ xmlXPathObjectPtr xpop;
182
+ int i;
183
+
184
+ if ( ruby_xml_xpath_object_empty_q(self) == Qtrue )
185
+ return Qnil;
186
+
187
+ Data_Get_Struct(self,xmlXPathObject,xpop);
188
+
189
+ for (i = 0; i < xpop->nodesetval->nodeNr; i++) {
190
+ rb_yield(ruby_xml_xpath_object_tabref(xpop,i));
191
+ }
192
+ return(self);
193
+ }
194
+
195
+ /*
196
+ * call-seq:
197
+ * xpath_object.first => node
198
+ *
199
+ * Returns the first node in this node set, or nil if none exist.
200
+ */
201
+ VALUE
202
+ ruby_xml_xpath_object_first(VALUE self) {
203
+ if ( ruby_xml_xpath_object_empty_q(self) == Qtrue )
204
+ return Qnil;
205
+
206
+ return ruby_xml_xpath_object_tabref((xmlXPathObjectPtr)DATA_PTR(self),0);
207
+ }
208
+
209
+ /*
210
+ * call-seq:
211
+ * xpath_object[i] => node
212
+ *
213
+ * array index into set of nodes
214
+ */
215
+ VALUE
216
+ ruby_xml_xpath_object_aref(VALUE self, VALUE aref) {
217
+ if ( ruby_xml_xpath_object_empty_q(self) == Qtrue )
218
+ return Qnil;
219
+
220
+ return ruby_xml_xpath_object_tabref((xmlXPathObjectPtr)DATA_PTR(self),
221
+ NUM2INT(aref));
222
+ }
223
+
224
+ /*
225
+ * call-seq:
226
+ * xpath_object.length => num
227
+ *
228
+ * Obtain the length of the nodesetval node list.
229
+ */
230
+ VALUE
231
+ ruby_xml_xpath_object_length(VALUE self) {
232
+ xmlXPathObjectPtr xpop;
233
+
234
+ if ( ruby_xml_xpath_object_empty_q(self) == Qtrue )
235
+ return INT2FIX(0);
236
+
237
+ Data_Get_Struct(self,xmlXPathObject,xpop);
238
+
239
+ return INT2NUM(xpop->nodesetval->nodeNr);
240
+ }
241
+
242
+ VALUE
243
+ ruby_xml_xpath_object_set_type(VALUE self)
244
+ {
245
+ xmlXPathObjectPtr xpop;
246
+
247
+ Data_Get_Struct(self,xmlXPathObject,xpop);
248
+
249
+ return INT2FIX(xpop->type);
250
+ }
251
+
252
+ VALUE
253
+ ruby_xml_xpath_object_string(VALUE self)
254
+ {
255
+ xmlXPathObjectPtr xpop;
256
+
257
+ Data_Get_Struct(self,xmlXPathObject,xpop);
258
+
259
+ if (xpop->stringval == NULL)
260
+ return Qnil;
261
+
262
+ return rb_str_new2((const char*) xpop->stringval);
263
+ }
264
+
265
+ // Rdoc needs to know
266
+ #ifdef RDOC_NEVER_DEFINED
267
+ mXML = rb_define_module("XML");
268
+ cXMLXPath = rb_define_class_under(mXML, "XPath", rb_cObject);
269
+ #endif
270
+
271
+ void
272
+ ruby_init_xml_xpath_object(void) {
273
+ cXMLXPathObject = rb_define_class_under(cXMLXPath, "Object", rb_cObject);
274
+
275
+ rb_include_module(cXMLXPathObject, rb_const_get(rb_cObject, rb_intern("Enumerable")));
276
+
277
+ rb_define_method(cXMLXPathObject, "each", ruby_xml_xpath_object_each, 0);
278
+ rb_define_method(cXMLXPathObject, "set_type", ruby_xml_xpath_object_set_type, 0);
279
+ rb_define_method(cXMLXPathObject, "empty?", ruby_xml_xpath_object_empty_q, 0);
280
+ rb_define_method(cXMLXPathObject, "first", ruby_xml_xpath_object_first, 0);
281
+ rb_define_method(cXMLXPathObject, "length", ruby_xml_xpath_object_length, 0);
282
+ rb_define_method(cXMLXPathObject, "size", ruby_xml_xpath_object_length, 0);
283
+ rb_define_method(cXMLXPathObject, "to_a", ruby_xml_xpath_object_to_a, 0);
284
+ rb_define_method(cXMLXPathObject, "[]", ruby_xml_xpath_object_aref, 1);
285
+
286
+ rb_define_method(cXMLXPathObject, "string", ruby_xml_xpath_object_string, 0);
287
+
288
+ rb_include_module(cXMLNodeSet, rb_const_get(rb_cObject, rb_intern("Enumerable")));
289
+
290
+ /* Give the NodeSet type, but it is pointless */
291
+ rb_define_method(cXMLXPathObject, "set", ruby_xml_xpath_object_set, 0);
292
+
293
+ }