libxml-ruby 3.2.2-x64-mingw-ucrt

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +7 -0
  2. data/HISTORY +848 -0
  3. data/LICENSE +21 -0
  4. data/MANIFEST +166 -0
  5. data/README.rdoc +217 -0
  6. data/Rakefile +99 -0
  7. data/ext/libxml/extconf.rb +61 -0
  8. data/ext/libxml/libxml.c +80 -0
  9. data/ext/libxml/libxml_ruby.def +35 -0
  10. data/ext/libxml/ruby_libxml.h +67 -0
  11. data/ext/libxml/ruby_xml.c +933 -0
  12. data/ext/libxml/ruby_xml.h +10 -0
  13. data/ext/libxml/ruby_xml_attr.c +333 -0
  14. data/ext/libxml/ruby_xml_attr.h +12 -0
  15. data/ext/libxml/ruby_xml_attr_decl.c +153 -0
  16. data/ext/libxml/ruby_xml_attr_decl.h +11 -0
  17. data/ext/libxml/ruby_xml_attributes.c +275 -0
  18. data/ext/libxml/ruby_xml_attributes.h +15 -0
  19. data/ext/libxml/ruby_xml_cbg.c +85 -0
  20. data/ext/libxml/ruby_xml_document.c +1123 -0
  21. data/ext/libxml/ruby_xml_document.h +11 -0
  22. data/ext/libxml/ruby_xml_dtd.c +248 -0
  23. data/ext/libxml/ruby_xml_dtd.h +9 -0
  24. data/ext/libxml/ruby_xml_encoding.c +250 -0
  25. data/ext/libxml/ruby_xml_encoding.h +16 -0
  26. data/ext/libxml/ruby_xml_error.c +996 -0
  27. data/ext/libxml/ruby_xml_error.h +12 -0
  28. data/ext/libxml/ruby_xml_html_parser.c +89 -0
  29. data/ext/libxml/ruby_xml_html_parser.h +10 -0
  30. data/ext/libxml/ruby_xml_html_parser_context.c +337 -0
  31. data/ext/libxml/ruby_xml_html_parser_context.h +10 -0
  32. data/ext/libxml/ruby_xml_html_parser_options.c +46 -0
  33. data/ext/libxml/ruby_xml_html_parser_options.h +10 -0
  34. data/ext/libxml/ruby_xml_input_cbg.c +191 -0
  35. data/ext/libxml/ruby_xml_input_cbg.h +20 -0
  36. data/ext/libxml/ruby_xml_io.c +47 -0
  37. data/ext/libxml/ruby_xml_io.h +10 -0
  38. data/ext/libxml/ruby_xml_namespace.c +153 -0
  39. data/ext/libxml/ruby_xml_namespace.h +10 -0
  40. data/ext/libxml/ruby_xml_namespaces.c +293 -0
  41. data/ext/libxml/ruby_xml_namespaces.h +9 -0
  42. data/ext/libxml/ruby_xml_node.c +1402 -0
  43. data/ext/libxml/ruby_xml_node.h +13 -0
  44. data/ext/libxml/ruby_xml_parser.c +91 -0
  45. data/ext/libxml/ruby_xml_parser.h +12 -0
  46. data/ext/libxml/ruby_xml_parser_context.c +999 -0
  47. data/ext/libxml/ruby_xml_parser_context.h +10 -0
  48. data/ext/libxml/ruby_xml_parser_options.c +66 -0
  49. data/ext/libxml/ruby_xml_parser_options.h +12 -0
  50. data/ext/libxml/ruby_xml_reader.c +1239 -0
  51. data/ext/libxml/ruby_xml_reader.h +17 -0
  52. data/ext/libxml/ruby_xml_relaxng.c +110 -0
  53. data/ext/libxml/ruby_xml_relaxng.h +10 -0
  54. data/ext/libxml/ruby_xml_sax2_handler.c +326 -0
  55. data/ext/libxml/ruby_xml_sax2_handler.h +10 -0
  56. data/ext/libxml/ruby_xml_sax_parser.c +116 -0
  57. data/ext/libxml/ruby_xml_sax_parser.h +10 -0
  58. data/ext/libxml/ruby_xml_schema.c +278 -0
  59. data/ext/libxml/ruby_xml_schema.h +809 -0
  60. data/ext/libxml/ruby_xml_schema_attribute.c +109 -0
  61. data/ext/libxml/ruby_xml_schema_attribute.h +15 -0
  62. data/ext/libxml/ruby_xml_schema_element.c +95 -0
  63. data/ext/libxml/ruby_xml_schema_element.h +14 -0
  64. data/ext/libxml/ruby_xml_schema_facet.c +52 -0
  65. data/ext/libxml/ruby_xml_schema_facet.h +13 -0
  66. data/ext/libxml/ruby_xml_schema_type.c +232 -0
  67. data/ext/libxml/ruby_xml_schema_type.h +9 -0
  68. data/ext/libxml/ruby_xml_version.h +9 -0
  69. data/ext/libxml/ruby_xml_writer.c +1133 -0
  70. data/ext/libxml/ruby_xml_writer.h +10 -0
  71. data/ext/libxml/ruby_xml_xinclude.c +16 -0
  72. data/ext/libxml/ruby_xml_xinclude.h +11 -0
  73. data/ext/libxml/ruby_xml_xpath.c +194 -0
  74. data/ext/libxml/ruby_xml_xpath.h +13 -0
  75. data/ext/libxml/ruby_xml_xpath_context.c +360 -0
  76. data/ext/libxml/ruby_xml_xpath_context.h +9 -0
  77. data/ext/libxml/ruby_xml_xpath_expression.c +81 -0
  78. data/ext/libxml/ruby_xml_xpath_expression.h +10 -0
  79. data/ext/libxml/ruby_xml_xpath_object.c +338 -0
  80. data/ext/libxml/ruby_xml_xpath_object.h +17 -0
  81. data/ext/libxml/ruby_xml_xpointer.c +99 -0
  82. data/ext/libxml/ruby_xml_xpointer.h +11 -0
  83. data/ext/vc/libxml_ruby.sln +28 -0
  84. data/lib/3.1/libxml_ruby.so +0 -0
  85. data/lib/libxml/attr.rb +123 -0
  86. data/lib/libxml/attr_decl.rb +80 -0
  87. data/lib/libxml/attributes.rb +14 -0
  88. data/lib/libxml/document.rb +194 -0
  89. data/lib/libxml/error.rb +95 -0
  90. data/lib/libxml/hpricot.rb +78 -0
  91. data/lib/libxml/html_parser.rb +96 -0
  92. data/lib/libxml/namespace.rb +62 -0
  93. data/lib/libxml/namespaces.rb +38 -0
  94. data/lib/libxml/node.rb +323 -0
  95. data/lib/libxml/parser.rb +101 -0
  96. data/lib/libxml/sax_callbacks.rb +180 -0
  97. data/lib/libxml/sax_parser.rb +41 -0
  98. data/lib/libxml/schema/attribute.rb +19 -0
  99. data/lib/libxml/schema/element.rb +19 -0
  100. data/lib/libxml/schema/type.rb +21 -0
  101. data/lib/libxml/schema.rb +48 -0
  102. data/lib/libxml/tree.rb +29 -0
  103. data/lib/libxml-ruby.rb +30 -0
  104. data/lib/libxml.rb +5 -0
  105. data/lib/xml/libxml.rb +10 -0
  106. data/lib/xml.rb +14 -0
  107. data/libxml-ruby.gemspec +48 -0
  108. data/script/benchmark/depixelate +634 -0
  109. data/script/benchmark/hamlet.xml +9055 -0
  110. data/script/benchmark/parsecount +170 -0
  111. data/script/benchmark/sock_entries.xml +507 -0
  112. data/script/benchmark/throughput +41 -0
  113. data/script/test +6 -0
  114. data/setup.rb +1584 -0
  115. data/test/c14n/given/doc.dtd +1 -0
  116. data/test/c14n/given/example-1.xml +14 -0
  117. data/test/c14n/given/example-2.xml +11 -0
  118. data/test/c14n/given/example-3.xml +18 -0
  119. data/test/c14n/given/example-4.xml +9 -0
  120. data/test/c14n/given/example-5.xml +12 -0
  121. data/test/c14n/given/example-6.xml +2 -0
  122. data/test/c14n/given/example-7.xml +11 -0
  123. data/test/c14n/given/example-8.xml +11 -0
  124. data/test/c14n/given/example-8.xpath +10 -0
  125. data/test/c14n/given/world.txt +1 -0
  126. data/test/c14n/result/1-1-without-comments/example-1 +4 -0
  127. data/test/c14n/result/1-1-without-comments/example-2 +11 -0
  128. data/test/c14n/result/1-1-without-comments/example-3 +14 -0
  129. data/test/c14n/result/1-1-without-comments/example-4 +9 -0
  130. data/test/c14n/result/1-1-without-comments/example-5 +3 -0
  131. data/test/c14n/result/1-1-without-comments/example-6 +1 -0
  132. data/test/c14n/result/1-1-without-comments/example-7 +1 -0
  133. data/test/c14n/result/1-1-without-comments/example-8 +1 -0
  134. data/test/c14n/result/with-comments/example-1 +6 -0
  135. data/test/c14n/result/with-comments/example-2 +11 -0
  136. data/test/c14n/result/with-comments/example-3 +14 -0
  137. data/test/c14n/result/with-comments/example-4 +9 -0
  138. data/test/c14n/result/with-comments/example-5 +4 -0
  139. data/test/c14n/result/with-comments/example-6 +1 -0
  140. data/test/c14n/result/with-comments/example-7 +1 -0
  141. data/test/c14n/result/without-comments/example-1 +4 -0
  142. data/test/c14n/result/without-comments/example-2 +11 -0
  143. data/test/c14n/result/without-comments/example-3 +14 -0
  144. data/test/c14n/result/without-comments/example-4 +9 -0
  145. data/test/c14n/result/without-comments/example-5 +3 -0
  146. data/test/c14n/result/without-comments/example-6 +1 -0
  147. data/test/c14n/result/without-comments/example-7 +1 -0
  148. data/test/model/atom.xml +13 -0
  149. data/test/model/bands.iso-8859-1.xml +5 -0
  150. data/test/model/bands.utf-8.xml +5 -0
  151. data/test/model/bands.xml +5 -0
  152. data/test/model/books.xml +154 -0
  153. data/test/model/cwm_1_0.xml +11336 -0
  154. data/test/model/merge_bug_data.xml +58 -0
  155. data/test/model/ruby-lang.html +238 -0
  156. data/test/model/rubynet.xml +79 -0
  157. data/test/model/rubynet_project +1 -0
  158. data/test/model/shiporder.rnc +28 -0
  159. data/test/model/shiporder.rng +86 -0
  160. data/test/model/shiporder.xml +23 -0
  161. data/test/model/shiporder.xsd +40 -0
  162. data/test/model/soap.xml +27 -0
  163. data/test/model/xinclude.xml +5 -0
  164. data/test/test_attr.rb +181 -0
  165. data/test/test_attr_decl.rb +132 -0
  166. data/test/test_attributes.rb +136 -0
  167. data/test/test_canonicalize.rb +120 -0
  168. data/test/test_deprecated_require.rb +12 -0
  169. data/test/test_document.rb +132 -0
  170. data/test/test_document_write.rb +146 -0
  171. data/test/test_dtd.rb +129 -0
  172. data/test/test_encoding.rb +129 -0
  173. data/test/test_encoding_sax.rb +115 -0
  174. data/test/test_error.rb +178 -0
  175. data/test/test_helper.rb +9 -0
  176. data/test/test_html_parser.rb +162 -0
  177. data/test/test_html_parser_context.rb +23 -0
  178. data/test/test_namespace.rb +60 -0
  179. data/test/test_namespaces.rb +200 -0
  180. data/test/test_node.rb +237 -0
  181. data/test/test_node_cdata.rb +50 -0
  182. data/test/test_node_comment.rb +32 -0
  183. data/test/test_node_copy.rb +40 -0
  184. data/test/test_node_edit.rb +158 -0
  185. data/test/test_node_pi.rb +37 -0
  186. data/test/test_node_text.rb +69 -0
  187. data/test/test_node_write.rb +97 -0
  188. data/test/test_node_xlink.rb +28 -0
  189. data/test/test_parser.rb +324 -0
  190. data/test/test_parser_context.rb +198 -0
  191. data/test/test_properties.rb +38 -0
  192. data/test/test_reader.rb +364 -0
  193. data/test/test_relaxng.rb +53 -0
  194. data/test/test_sax_parser.rb +326 -0
  195. data/test/test_schema.rb +168 -0
  196. data/test/test_suite.rb +48 -0
  197. data/test/test_traversal.rb +152 -0
  198. data/test/test_writer.rb +468 -0
  199. data/test/test_xinclude.rb +20 -0
  200. data/test/test_xml.rb +263 -0
  201. data/test/test_xpath.rb +244 -0
  202. data/test/test_xpath_context.rb +88 -0
  203. data/test/test_xpath_expression.rb +37 -0
  204. data/test/test_xpointer.rb +72 -0
  205. metadata +325 -0
@@ -0,0 +1,10 @@
1
+ /* Please see the LICENSE file for copyright and distribution information */
2
+
3
+ #ifndef __RUBY_XML_H__
4
+ #define __RUBY_XML_H__
5
+
6
+ extern VALUE mXML;
7
+ int rxml_libxml_default_options();
8
+ void rxml_init_xml(void);
9
+
10
+ #endif
@@ -0,0 +1,333 @@
1
+ /* Please see the LICENSE file for copyright and distribution information */
2
+
3
+ /*
4
+ * Document-class: LibXML::XML::Attr
5
+ *
6
+ * Provides access to an attribute defined on an element.
7
+ *
8
+ * Basic Usage:
9
+ *
10
+ * require 'test_helper'
11
+ *
12
+ * doc = XML::Document.new(<some_file>)
13
+ * attribute = doc.root.attributes.get_attribute_ns('http://www.w3.org/1999/xlink', 'href')
14
+ * attribute.name == 'href'
15
+ * attribute.value == 'http://www.mydocument.com'
16
+ * attribute.remove!
17
+ */
18
+
19
+ /* Attributes are owned and freed by their nodes. Thus, its easier for the
20
+ ruby bindings to not manage attribute memory management. This does mean
21
+ that accessing a particular attribute multiple times will return multiple
22
+ different ruby objects. Since we are not using free this works out fine.
23
+ Previous versions of the bindings had a one to one mapping between ruby
24
+ object and xml attribute, but that could result in segfaults because the
25
+ ruby object could be gc'ed. In theory the mark method on the parent node
26
+ could prevent that, but if an attribute is returned using an xpath statement
27
+ then the node would never by surfaced to ruby and the mark method never
28
+ called. */
29
+
30
+ #include "ruby_libxml.h"
31
+ #include "ruby_xml_attr.h"
32
+
33
+ VALUE cXMLAttr;
34
+
35
+ void rxml_attr_mark(xmlAttrPtr xattr)
36
+ {
37
+ /* This can happen if Ruby does a GC run after creating the
38
+ new attribute but before initializing it. */
39
+ if (xattr != NULL)
40
+ rxml_node_mark((xmlNodePtr) xattr);
41
+ }
42
+
43
+ VALUE rxml_attr_wrap(xmlAttrPtr xattr)
44
+ {
45
+ return Data_Wrap_Struct(cXMLAttr, rxml_attr_mark, NULL, xattr);
46
+ }
47
+
48
+ static VALUE rxml_attr_alloc(VALUE klass)
49
+ {
50
+ return Data_Wrap_Struct(klass, rxml_attr_mark, NULL, NULL);
51
+ }
52
+
53
+ /*
54
+ * call-seq:
55
+ * attr.initialize(node, "name", "value")
56
+ *
57
+ * Creates a new attribute for the node.
58
+ *
59
+ * node: The XML::Node that will contain the attribute
60
+ * name: The name of the attribute
61
+ * value: The value of the attribute
62
+ *
63
+ * attr = XML::Attr.new(doc.root, 'name', 'libxml')
64
+ */
65
+ static VALUE rxml_attr_initialize(int argc, VALUE *argv, VALUE self)
66
+ {
67
+ VALUE node = argv[0];
68
+ VALUE name = argv[1];
69
+ VALUE value = argv[2];
70
+ VALUE ns = (argc == 4 ? argv[3] : Qnil);
71
+
72
+ xmlNodePtr xnode;
73
+ xmlAttrPtr xattr;
74
+
75
+ if (argc < 3 || argc > 4)
76
+ rb_raise(rb_eArgError, "Wrong number of arguments (3 or 4)");
77
+
78
+ Check_Type(name, T_STRING);
79
+ Check_Type(value, T_STRING);
80
+
81
+ Data_Get_Struct(node, xmlNode, xnode);
82
+
83
+ if (xnode->type != XML_ELEMENT_NODE)
84
+ rb_raise(rb_eArgError, "Attributes can only be created on element nodes.");
85
+
86
+ if (NIL_P(ns))
87
+ {
88
+ xattr = xmlNewProp(xnode, (xmlChar*)StringValuePtr(name), (xmlChar*)StringValuePtr(value));
89
+ }
90
+ else
91
+ {
92
+ xmlNsPtr xns;
93
+ Data_Get_Struct(ns, xmlNs, xns);
94
+ xattr = xmlNewNsProp(xnode, xns, (xmlChar*)StringValuePtr(name), (xmlChar*)StringValuePtr(value));
95
+ }
96
+
97
+ if (!xattr)
98
+ rb_raise(rb_eRuntimeError, "Could not create attribute.");
99
+
100
+ DATA_PTR( self) = xattr;
101
+ return self;
102
+ }
103
+
104
+ /*
105
+ * call-seq:
106
+ * attr.child -> node
107
+ *
108
+ * Obtain this attribute's child attribute(s).
109
+ */
110
+ static VALUE rxml_attr_child_get(VALUE self)
111
+ {
112
+ xmlAttrPtr xattr;
113
+ Data_Get_Struct(self, xmlAttr, xattr);
114
+ if (xattr->children == NULL)
115
+ return Qnil;
116
+ else
117
+ return rxml_node_wrap((xmlNodePtr) xattr->children);
118
+ }
119
+
120
+
121
+ /*
122
+ * call-seq:
123
+ * attr.doc -> XML::Document
124
+ *
125
+ * Returns this attribute's document.
126
+ *
127
+ * doc.root.attributes.get_attribute('name').doc == doc
128
+ */
129
+ static VALUE rxml_attr_doc_get(VALUE self)
130
+ {
131
+ xmlAttrPtr xattr;
132
+ Data_Get_Struct(self, xmlAttr, xattr);
133
+ if (xattr->doc == NULL)
134
+ return Qnil;
135
+ else
136
+ return rxml_document_wrap(xattr->doc);
137
+ }
138
+
139
+ /*
140
+ * call-seq:
141
+ * attr.last -> node
142
+ *
143
+ * Obtain the last attribute.
144
+ */
145
+ static VALUE rxml_attr_last_get(VALUE self)
146
+ {
147
+ xmlAttrPtr xattr;
148
+ Data_Get_Struct(self, xmlAttr, xattr);
149
+ if (xattr->last == NULL)
150
+ return Qnil;
151
+ else
152
+ return rxml_node_wrap(xattr->last);
153
+ }
154
+
155
+ /*
156
+ * call-seq:
157
+ * attr.name -> "name"
158
+ *
159
+ * Obtain this attribute's name.
160
+ */
161
+ static VALUE rxml_attr_name_get(VALUE self)
162
+ {
163
+ xmlAttrPtr xattr;
164
+ Data_Get_Struct(self, xmlAttr, xattr);
165
+
166
+ if (xattr->name == NULL)
167
+ return Qnil;
168
+ else
169
+ return rxml_new_cstr( xattr->name, NULL);
170
+ }
171
+
172
+ /*
173
+ * call-seq:
174
+ * attr.next -> node
175
+ *
176
+ * Obtain the next attribute.
177
+ */
178
+ static VALUE rxml_attr_next_get(VALUE self)
179
+ {
180
+ xmlAttrPtr xattr;
181
+ Data_Get_Struct(self, xmlAttr, xattr);
182
+ if (xattr->next == NULL)
183
+ return Qnil;
184
+ else
185
+ return rxml_attr_wrap(xattr->next);
186
+ }
187
+
188
+ /*
189
+ * call-seq:
190
+ * attr.node_type -> num
191
+ *
192
+ * Obtain this node's type identifier.
193
+ */
194
+ static VALUE rxml_attr_node_type(VALUE self)
195
+ {
196
+ xmlAttrPtr xattr;
197
+ Data_Get_Struct(self, xmlAttr, xattr);
198
+ return INT2NUM(xattr->type);
199
+ }
200
+
201
+ /*
202
+ * call-seq:
203
+ * attr.ns -> namespace
204
+ *
205
+ * Obtain this attribute's associated XML::NS, if any.
206
+ */
207
+ static VALUE rxml_attr_ns_get(VALUE self)
208
+ {
209
+ xmlAttrPtr xattr;
210
+ Data_Get_Struct(self, xmlAttr, xattr);
211
+ if (xattr->ns == NULL)
212
+ return Qnil;
213
+ else
214
+ return rxml_namespace_wrap(xattr->ns);
215
+ }
216
+
217
+ /*
218
+ * call-seq:
219
+ * attr.parent -> node
220
+ *
221
+ * Obtain this attribute node's parent.
222
+ */
223
+ static VALUE rxml_attr_parent_get(VALUE self)
224
+ {
225
+ xmlAttrPtr xattr;
226
+ Data_Get_Struct(self, xmlAttr, xattr);
227
+ if (xattr->parent == NULL)
228
+ return Qnil;
229
+ else
230
+ return rxml_node_wrap(xattr->parent);
231
+ }
232
+
233
+ /*
234
+ * call-seq:
235
+ * attr.prev -> node
236
+ *
237
+ * Obtain the previous attribute.
238
+ */
239
+ static VALUE rxml_attr_prev_get(VALUE self)
240
+ {
241
+ xmlAttrPtr xattr;
242
+ Data_Get_Struct(self, xmlAttr, xattr);
243
+ if (xattr->prev == NULL)
244
+ return Qnil;
245
+ else
246
+ return rxml_attr_wrap(xattr->prev);
247
+ }
248
+
249
+ /*
250
+ * call-seq:
251
+ * attr.remove! -> nil
252
+ *
253
+ * Removes this attribute from it's parent. Note
254
+ * the attribute and its content is freed and can
255
+ * no longer be used. If you try to use it you
256
+ * will get a segmentation fault.
257
+ */
258
+ static VALUE rxml_attr_remove_ex(VALUE self)
259
+ {
260
+ xmlAttrPtr xattr;
261
+ Data_Get_Struct(self, xmlAttr, xattr);
262
+ xmlRemoveProp(xattr);
263
+
264
+ RDATA(self)->data = NULL;
265
+ RDATA(self)->dfree = NULL;
266
+ RDATA(self)->dmark = NULL;
267
+
268
+ return Qnil;
269
+ }
270
+
271
+ /*
272
+ * call-seq:
273
+ * attr.value -> "value"
274
+ *
275
+ * Obtain the value of this attribute.
276
+ */
277
+ VALUE rxml_attr_value_get(VALUE self)
278
+ {
279
+ xmlAttrPtr xattr;
280
+ xmlChar *value;
281
+ VALUE result = Qnil;
282
+
283
+ Data_Get_Struct(self, xmlAttr, xattr);
284
+ value = xmlNodeGetContent((xmlNodePtr)xattr);
285
+
286
+ if (value != NULL)
287
+ {
288
+ result = rxml_new_cstr( value, NULL);
289
+ xmlFree(value);
290
+ }
291
+ return result;
292
+ }
293
+
294
+ /*
295
+ * call-seq:
296
+ * attr.value = "value"
297
+ *
298
+ * Sets the value of this attribute.
299
+ */
300
+ VALUE rxml_attr_value_set(VALUE self, VALUE val)
301
+ {
302
+ xmlAttrPtr xattr;
303
+
304
+ Check_Type(val, T_STRING);
305
+ Data_Get_Struct(self, xmlAttr, xattr);
306
+
307
+ if (xattr->ns)
308
+ xmlSetNsProp(xattr->parent, xattr->ns, xattr->name,
309
+ (xmlChar*) StringValuePtr(val));
310
+ else
311
+ xmlSetProp(xattr->parent, xattr->name, (xmlChar*) StringValuePtr(val));
312
+
313
+ return (self);
314
+ }
315
+
316
+ void rxml_init_attr(void)
317
+ {
318
+ cXMLAttr = rb_define_class_under(mXML, "Attr", rb_cObject);
319
+ rb_define_alloc_func(cXMLAttr, rxml_attr_alloc);
320
+ rb_define_method(cXMLAttr, "initialize", rxml_attr_initialize, -1);
321
+ rb_define_method(cXMLAttr, "child", rxml_attr_child_get, 0);
322
+ rb_define_method(cXMLAttr, "doc", rxml_attr_doc_get, 0);
323
+ rb_define_method(cXMLAttr, "last", rxml_attr_last_get, 0);
324
+ rb_define_method(cXMLAttr, "name", rxml_attr_name_get, 0);
325
+ rb_define_method(cXMLAttr, "next", rxml_attr_next_get, 0);
326
+ rb_define_method(cXMLAttr, "node_type", rxml_attr_node_type, 0);
327
+ rb_define_method(cXMLAttr, "ns", rxml_attr_ns_get, 0);
328
+ rb_define_method(cXMLAttr, "parent", rxml_attr_parent_get, 0);
329
+ rb_define_method(cXMLAttr, "prev", rxml_attr_prev_get, 0);
330
+ rb_define_method(cXMLAttr, "remove!", rxml_attr_remove_ex, 0);
331
+ rb_define_method(cXMLAttr, "value", rxml_attr_value_get, 0);
332
+ rb_define_method(cXMLAttr, "value=", rxml_attr_value_set, 1);
333
+ }
@@ -0,0 +1,12 @@
1
+ /* Please see the LICENSE file for copyright and distribution information */
2
+
3
+ #ifndef __RXML_ATTR__
4
+ #define __RXML_ATTR__
5
+
6
+ extern VALUE cXMLAttr;
7
+
8
+ void rxml_init_attr(void);
9
+ VALUE rxml_attr_wrap(xmlAttrPtr xattr);
10
+ VALUE rxml_attr_value_get(VALUE self);
11
+ VALUE rxml_attr_value_set(VALUE self, VALUE val);
12
+ #endif
@@ -0,0 +1,153 @@
1
+ /* Please see the LICENSE file for copyright and distribution information */
2
+
3
+ /*
4
+ * Document-class: LibXML::XML::AttrDecl
5
+ *
6
+ * At attribute declaration is used in XML::Dtds to define
7
+ * what attributes are allowed on an element. An attribute
8
+ * declaration defines an attribues name, data type and default
9
+ * value (if any).
10
+ */
11
+
12
+ #include "ruby_libxml.h"
13
+
14
+ VALUE cXMLAttrDecl;
15
+
16
+ void rxml_attr_decl_mark(xmlAttributePtr xattr)
17
+ {
18
+ rxml_node_mark((xmlNodePtr) xattr);
19
+ }
20
+
21
+ VALUE rxml_attr_decl_wrap(xmlAttributePtr xattr)
22
+ {
23
+ return Data_Wrap_Struct(cXMLAttrDecl, rxml_attr_decl_mark, NULL, xattr);
24
+ }
25
+
26
+ /*
27
+ * call-seq:
28
+ * attr_decl.doc -> XML::Document
29
+ *
30
+ * Returns this attribute declaration's document.
31
+ */
32
+ static VALUE rxml_attr_decl_doc_get(VALUE self)
33
+ {
34
+ xmlAttributePtr xattr;
35
+ Data_Get_Struct(self, xmlAttribute, xattr);
36
+ if (xattr->doc == NULL)
37
+ return Qnil;
38
+ else
39
+ return rxml_document_wrap(xattr->doc);
40
+ }
41
+
42
+
43
+ /*
44
+ * call-seq:
45
+ * attr_decl.name -> "name"
46
+ *
47
+ * Obtain this attribute declaration's name.
48
+ */
49
+ static VALUE rxml_attr_decl_name_get(VALUE self)
50
+ {
51
+ xmlAttributePtr xattr;
52
+ Data_Get_Struct(self, xmlAttribute, xattr);
53
+
54
+ if (xattr->name == NULL)
55
+ return Qnil;
56
+ else
57
+ return rxml_new_cstr( xattr->name, xattr->doc->encoding);
58
+ }
59
+
60
+ /*
61
+ * call-seq:
62
+ * attr_decl.next -> XML::AttrDecl
63
+ *
64
+ * Obtain the next attribute declaration.
65
+ */
66
+ static VALUE rxml_attr_decl_next_get(VALUE self)
67
+ {
68
+ xmlAttributePtr xattr;
69
+ Data_Get_Struct(self, xmlAttribute, xattr);
70
+ if (xattr->next == NULL)
71
+ return Qnil;
72
+ else
73
+ return rxml_attr_decl_wrap((xmlAttributePtr)xattr->next);
74
+ }
75
+
76
+ /*
77
+ * call-seq:
78
+ * attr_decl.type -> num
79
+ *
80
+ * Obtain this attribute declaration's type node type.
81
+ */
82
+ static VALUE rxml_attr_decl_node_type(VALUE self)
83
+ {
84
+ xmlAttrPtr xattr;
85
+ Data_Get_Struct(self, xmlAttr, xattr);
86
+ return INT2NUM(xattr->type);
87
+ }
88
+
89
+ /*
90
+ * call-seq:
91
+ * attr_decl.parent -> XML::Dtd
92
+ *
93
+ * Obtain this attribute declaration's parent which
94
+ * is an instance of a XML::DTD.
95
+ */
96
+ static VALUE rxml_attr_decl_parent_get(VALUE self)
97
+ {
98
+ xmlAttributePtr xattr;
99
+ Data_Get_Struct(self, xmlAttribute, xattr);
100
+
101
+ if (xattr->parent == NULL)
102
+ return Qnil;
103
+ else
104
+ return rxml_dtd_wrap(xattr->parent);
105
+ }
106
+
107
+ /*
108
+ * call-seq:
109
+ * attr_decl.prev -> (XML::AttrDecl | XML::ElementDecl)
110
+ *
111
+ * Obtain the previous attribute declaration or the owning
112
+ * element declration (not implemented).
113
+ */
114
+ static VALUE rxml_attr_decl_prev_get(VALUE self)
115
+ {
116
+ xmlAttributePtr xattr;
117
+ Data_Get_Struct(self, xmlAttribute, xattr);
118
+
119
+ if (xattr->prev == NULL)
120
+ return Qnil;
121
+ else
122
+ return rxml_attr_decl_wrap((xmlAttributePtr)xattr->prev);
123
+ }
124
+
125
+ /*
126
+ * call-seq:
127
+ * attr_decl.value -> "value"
128
+ *
129
+ * Obtain the default value of this attribute declaration.
130
+ */
131
+ VALUE rxml_attr_decl_value_get(VALUE self)
132
+ {
133
+ xmlAttributePtr xattr;
134
+
135
+ Data_Get_Struct(self, xmlAttribute, xattr);
136
+
137
+ if (xattr->defaultValue)
138
+ return rxml_new_cstr(xattr->defaultValue, NULL);
139
+ else
140
+ return Qnil;
141
+ }
142
+
143
+ void rxml_init_attr_decl(void)
144
+ {
145
+ cXMLAttrDecl = rb_define_class_under(mXML, "AttrDecl", rb_cObject);
146
+ rb_define_method(cXMLAttrDecl, "doc", rxml_attr_decl_doc_get, 0);
147
+ rb_define_method(cXMLAttrDecl, "name", rxml_attr_decl_name_get, 0);
148
+ rb_define_method(cXMLAttrDecl, "next", rxml_attr_decl_next_get, 0);
149
+ rb_define_method(cXMLAttrDecl, "node_type", rxml_attr_decl_node_type, 0);
150
+ rb_define_method(cXMLAttrDecl, "parent", rxml_attr_decl_parent_get, 0);
151
+ rb_define_method(cXMLAttrDecl, "prev", rxml_attr_decl_prev_get, 0);
152
+ rb_define_method(cXMLAttrDecl, "value", rxml_attr_decl_value_get, 0);
153
+ }
@@ -0,0 +1,11 @@
1
+ /* Please see the LICENSE file for copyright and distribution information */
2
+
3
+ #ifndef __RXML_ATTR_DECL__
4
+ #define __RXML_ATTR_DECL__
5
+
6
+ extern VALUE cXMLAttrDecl;
7
+
8
+ void rxml_init_attr_decl(void);
9
+ VALUE rxml_attr_decl_wrap(xmlAttributePtr xattribute);
10
+ VALUE rxml_attr_decl_value_get(VALUE self);
11
+ #endif