libxml-ruby 2.8.0 → 3.2.3

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 (205) hide show
  1. checksums.yaml +5 -5
  2. data/HISTORY +859 -775
  3. data/LICENSE +20 -20
  4. data/MANIFEST +166 -166
  5. data/README.rdoc +217 -184
  6. data/Rakefile +98 -78
  7. data/ext/libxml/extconf.rb +61 -116
  8. data/ext/libxml/libxml.c +80 -76
  9. data/ext/libxml/ruby_libxml.h +67 -75
  10. data/ext/libxml/ruby_xml.c +937 -893
  11. data/ext/libxml/ruby_xml.h +10 -10
  12. data/ext/libxml/ruby_xml_attr.c +333 -333
  13. data/ext/libxml/ruby_xml_attr.h +12 -12
  14. data/ext/libxml/ruby_xml_attr_decl.c +153 -153
  15. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  16. data/ext/libxml/ruby_xml_attributes.c +275 -275
  17. data/ext/libxml/ruby_xml_attributes.h +15 -15
  18. data/ext/libxml/ruby_xml_cbg.c +85 -85
  19. data/ext/libxml/ruby_xml_document.c +1123 -1147
  20. data/ext/libxml/ruby_xml_document.h +11 -11
  21. data/ext/libxml/ruby_xml_dtd.c +248 -268
  22. data/ext/libxml/ruby_xml_dtd.h +9 -9
  23. data/ext/libxml/ruby_xml_encoding.c +250 -260
  24. data/ext/libxml/ruby_xml_encoding.h +16 -19
  25. data/ext/libxml/ruby_xml_error.c +996 -996
  26. data/ext/libxml/ruby_xml_error.h +12 -12
  27. data/ext/libxml/ruby_xml_html_parser.c +89 -92
  28. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  29. data/ext/libxml/ruby_xml_html_parser_context.c +337 -338
  30. data/ext/libxml/ruby_xml_html_parser_context.h +10 -10
  31. data/ext/libxml/ruby_xml_html_parser_options.c +46 -46
  32. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  33. data/ext/libxml/ruby_xml_input_cbg.c +191 -191
  34. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  35. data/ext/libxml/ruby_xml_io.c +47 -50
  36. data/ext/libxml/ruby_xml_io.h +10 -10
  37. data/ext/libxml/ruby_xml_namespace.c +154 -153
  38. data/ext/libxml/ruby_xml_namespace.h +10 -10
  39. data/ext/libxml/ruby_xml_namespaces.c +293 -293
  40. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  41. data/ext/libxml/ruby_xml_node.c +1406 -1452
  42. data/ext/libxml/ruby_xml_node.h +13 -11
  43. data/ext/libxml/ruby_xml_parser.c +91 -94
  44. data/ext/libxml/ruby_xml_parser.h +12 -12
  45. data/ext/libxml/ruby_xml_parser_context.c +999 -1001
  46. data/ext/libxml/ruby_xml_parser_context.h +10 -10
  47. data/ext/libxml/ruby_xml_parser_options.c +66 -66
  48. data/ext/libxml/ruby_xml_parser_options.h +12 -12
  49. data/ext/libxml/ruby_xml_reader.c +1239 -1228
  50. data/ext/libxml/ruby_xml_reader.h +17 -17
  51. data/ext/libxml/ruby_xml_relaxng.c +110 -111
  52. data/ext/libxml/ruby_xml_relaxng.h +10 -10
  53. data/ext/libxml/ruby_xml_sax2_handler.c +326 -328
  54. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  55. data/ext/libxml/ruby_xml_sax_parser.c +116 -120
  56. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  57. data/ext/libxml/ruby_xml_schema.c +350 -301
  58. data/ext/libxml/ruby_xml_schema.h +806 -809
  59. data/ext/libxml/ruby_xml_schema_attribute.c +61 -109
  60. data/ext/libxml/ruby_xml_schema_attribute.h +15 -15
  61. data/ext/libxml/ruby_xml_schema_element.c +69 -94
  62. data/ext/libxml/ruby_xml_schema_element.h +14 -14
  63. data/ext/libxml/ruby_xml_schema_facet.c +46 -52
  64. data/ext/libxml/ruby_xml_schema_facet.h +13 -13
  65. data/ext/libxml/ruby_xml_schema_type.c +214 -259
  66. data/ext/libxml/ruby_xml_schema_type.h +9 -9
  67. data/ext/libxml/ruby_xml_version.h +9 -9
  68. data/ext/libxml/ruby_xml_writer.c +1133 -1137
  69. data/ext/libxml/ruby_xml_writer.h +10 -10
  70. data/ext/libxml/ruby_xml_xinclude.c +16 -16
  71. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  72. data/ext/libxml/ruby_xml_xpath.c +194 -188
  73. data/ext/libxml/ruby_xml_xpath.h +13 -13
  74. data/ext/libxml/ruby_xml_xpath_context.c +360 -361
  75. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  76. data/ext/libxml/ruby_xml_xpath_expression.c +81 -81
  77. data/ext/libxml/ruby_xml_xpath_expression.h +10 -10
  78. data/ext/libxml/ruby_xml_xpath_object.c +338 -335
  79. data/ext/libxml/ruby_xml_xpath_object.h +17 -17
  80. data/ext/libxml/ruby_xml_xpointer.c +99 -99
  81. data/ext/libxml/ruby_xml_xpointer.h +11 -11
  82. data/ext/vc/libxml_ruby.sln +17 -15
  83. data/lib/libxml/node.rb +2 -78
  84. data/lib/libxml/parser.rb +0 -266
  85. data/lib/libxml/sax_parser.rb +0 -17
  86. data/lib/libxml/schema/attribute.rb +19 -19
  87. data/lib/libxml/schema/element.rb +19 -27
  88. data/lib/libxml/schema/type.rb +21 -29
  89. data/lib/libxml/schema.rb +47 -66
  90. data/lib/libxml-ruby.rb +30 -0
  91. data/lib/libxml.rb +3 -33
  92. data/libxml-ruby.gemspec +48 -44
  93. data/script/benchmark/depixelate +634 -634
  94. data/script/benchmark/hamlet.xml +9054 -9054
  95. data/script/benchmark/parsecount +170 -170
  96. data/script/benchmark/throughput +41 -41
  97. data/script/test +6 -6
  98. data/setup.rb +0 -1
  99. data/test/c14n/given/example-1.xml +14 -14
  100. data/test/c14n/given/example-2.xml +11 -11
  101. data/test/c14n/given/example-3.xml +18 -18
  102. data/test/c14n/given/example-4.xml +9 -9
  103. data/test/c14n/given/example-5.xml +12 -12
  104. data/test/c14n/given/example-6.xml +2 -2
  105. data/test/c14n/given/example-7.xml +11 -11
  106. data/test/c14n/given/example-8.xml +11 -11
  107. data/test/c14n/given/example-8.xpath +9 -9
  108. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  109. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  110. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  111. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  112. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  113. data/test/c14n/result/with-comments/example-1 +5 -5
  114. data/test/c14n/result/with-comments/example-2 +10 -10
  115. data/test/c14n/result/with-comments/example-3 +13 -13
  116. data/test/c14n/result/with-comments/example-4 +8 -8
  117. data/test/c14n/result/with-comments/example-5 +3 -3
  118. data/test/c14n/result/without-comments/example-1 +3 -3
  119. data/test/c14n/result/without-comments/example-2 +10 -10
  120. data/test/c14n/result/without-comments/example-3 +13 -13
  121. data/test/c14n/result/without-comments/example-4 +8 -8
  122. data/test/c14n/result/without-comments/example-5 +2 -2
  123. data/test/model/atom.xml +12 -12
  124. data/test/model/bands.iso-8859-1.xml +4 -4
  125. data/test/model/bands.utf-8.xml +4 -4
  126. data/test/model/bands.xml +4 -4
  127. data/test/model/books.xml +153 -153
  128. data/test/model/cwm_1_0.xml +11336 -0
  129. data/test/model/merge_bug_data.xml +58 -58
  130. data/test/model/ruby-lang.html +238 -238
  131. data/test/model/rubynet.xml +79 -79
  132. data/test/model/shiporder.rnc +28 -28
  133. data/test/model/shiporder.rng +86 -86
  134. data/test/model/shiporder.xml +22 -22
  135. data/test/model/shiporder.xsd +44 -40
  136. data/test/model/shiporder_bad.xsd +40 -0
  137. data/test/model/shiporder_import.xsd +45 -0
  138. data/test/model/soap.xml +27 -27
  139. data/test/model/xinclude.xml +4 -4
  140. data/test/{tc_attr.rb → test_attr.rb} +23 -25
  141. data/test/{tc_attr_decl.rb → test_attr_decl.rb} +13 -14
  142. data/test/{tc_attributes.rb → test_attributes.rb} +11 -18
  143. data/test/{tc_canonicalize.rb → test_canonicalize.rb} +36 -41
  144. data/test/test_deprecated_require.rb +12 -0
  145. data/test/{tc_document.rb → test_document.rb} +33 -27
  146. data/test/test_document_write.rb +146 -0
  147. data/test/{tc_dtd.rb → test_dtd.rb} +29 -29
  148. data/test/{tc_encoding.rb → test_encoding.rb} +129 -126
  149. data/test/{tc_encoding_sax.rb → test_encoding_sax.rb} +7 -6
  150. data/test/test_error.rb +178 -0
  151. data/test/test_helper.rb +4 -9
  152. data/test/test_html_parser.rb +162 -0
  153. data/test/test_html_parser_context.rb +23 -0
  154. data/test/test_namespace.rb +60 -0
  155. data/test/{tc_namespaces.rb → test_namespaces.rb} +34 -44
  156. data/test/{tc_node.rb → test_node.rb} +68 -47
  157. data/test/{tc_node_cdata.rb → test_node_cdata.rb} +12 -13
  158. data/test/{tc_node_comment.rb → test_node_comment.rb} +7 -8
  159. data/test/{tc_node_copy.rb → test_node_copy.rb} +4 -6
  160. data/test/{tc_node_edit.rb → test_node_edit.rb} +23 -41
  161. data/test/{tc_node_pi.rb → test_node_pi.rb} +37 -40
  162. data/test/{tc_node_text.rb → test_node_text.rb} +10 -12
  163. data/test/{tc_node_write.rb → test_node_write.rb} +18 -29
  164. data/test/test_node_xlink.rb +28 -0
  165. data/test/test_parser.rb +324 -0
  166. data/test/{tc_parser_context.rb → test_parser_context.rb} +42 -49
  167. data/test/{tc_properties.rb → test_properties.rb} +6 -7
  168. data/test/test_reader.rb +364 -0
  169. data/test/test_relaxng.rb +53 -0
  170. data/test/{tc_sax_parser.rb → test_sax_parser.rb} +44 -38
  171. data/test/test_schema.rb +231 -0
  172. data/test/test_suite.rb +38 -40
  173. data/test/{tc_traversal.rb → test_traversal.rb} +5 -6
  174. data/test/{tc_writer.rb → test_writer.rb} +468 -448
  175. data/test/{tc_xinclude.rb → test_xinclude.rb} +4 -5
  176. data/test/test_xml.rb +263 -0
  177. data/test/{tc_xpath.rb → test_xpath.rb} +31 -32
  178. data/test/{tc_xpath_context.rb → test_xpath_context.rb} +8 -9
  179. data/test/test_xpath_expression.rb +37 -0
  180. data/test/{tc_xpointer.rb → test_xpointer.rb} +16 -18
  181. metadata +122 -100
  182. data/lib/libxml/ns.rb +0 -22
  183. data/lib/libxml/properties.rb +0 -23
  184. data/lib/libxml/reader.rb +0 -29
  185. data/lib/libxml/xpath_object.rb +0 -16
  186. data/test/etc_doc_to_s.rb +0 -21
  187. data/test/ets_doc_file.rb +0 -17
  188. data/test/ets_doc_to_s.rb +0 -23
  189. data/test/ets_gpx.rb +0 -28
  190. data/test/ets_node_gc.rb +0 -23
  191. data/test/ets_test.xml +0 -2
  192. data/test/ets_tsr.rb +0 -11
  193. data/test/tc_deprecated_require.rb +0 -13
  194. data/test/tc_document_write.rb +0 -196
  195. data/test/tc_error.rb +0 -180
  196. data/test/tc_html_parser.rb +0 -153
  197. data/test/tc_html_parser_context.rb +0 -24
  198. data/test/tc_namespace.rb +0 -62
  199. data/test/tc_node_xlink.rb +0 -29
  200. data/test/tc_parser.rb +0 -381
  201. data/test/tc_reader.rb +0 -400
  202. data/test/tc_relaxng.rb +0 -54
  203. data/test/tc_schema.rb +0 -162
  204. data/test/tc_xml.rb +0 -226
  205. data/test/tc_xpath_expression.rb +0 -38
@@ -1,259 +1,214 @@
1
- #include "ruby_libxml.h"
2
- #include "ruby_xml_schema_type.h"
3
- #include "ruby_xml_schema_element.h"
4
- #include "ruby_xml_schema_attribute.h"
5
- #include "ruby_xml_schema_facet.h"
6
-
7
- #define UNBOUNDED 1 << 30
8
- #define FREE_AND_NULL(str) if ((str) != NULL) { xmlFree((xmlChar *) (str)); str = NULL; }
9
-
10
- VALUE cXMLSchemaType;
11
-
12
- static void rxml_schema_type_free(xmlSchemaTypePtr xschema_type)
13
- {
14
- xschema_type = NULL;
15
- xmlFree(xschema_type);
16
- }
17
-
18
- VALUE rxml_wrap_schema_type(xmlSchemaTypePtr xtype)
19
- {
20
- return Data_Wrap_Struct(cXMLSchemaType, NULL, rxml_schema_type_free, xtype);
21
- }
22
-
23
- static VALUE rxml_schema_type_namespace(VALUE self)
24
- {
25
- xmlSchemaTypePtr xtype;
26
-
27
- Data_Get_Struct(self, xmlSchemaType, xtype);
28
-
29
- QNIL_OR_STRING(xtype->targetNamespace)
30
- }
31
-
32
- static VALUE rxml_schema_type_name(VALUE self)
33
- {
34
- xmlSchemaTypePtr xtype;
35
-
36
- Data_Get_Struct(self, xmlSchemaType, xtype);
37
-
38
- QNIL_OR_STRING(xtype->name)
39
- }
40
-
41
- static VALUE rxml_schema_type_base(VALUE self)
42
- {
43
- xmlSchemaTypePtr xtype;
44
-
45
- Data_Get_Struct(self, xmlSchemaType, xtype);
46
-
47
- return Data_Wrap_Struct(cXMLSchemaType, NULL, rxml_schema_type_free, xtype->baseType);
48
- }
49
-
50
- static VALUE rxml_schema_type_facets(VALUE self)
51
- {
52
- xmlSchemaTypePtr xtype;
53
- xmlSchemaFacetPtr facet;
54
- VALUE facets;
55
- VALUE rfacet;
56
-
57
- facets = rb_iv_get(self, "@facets");
58
-
59
- if (facets == Qnil) {
60
- facets = rb_ary_new();
61
- Data_Get_Struct(self, xmlSchemaType, xtype);
62
-
63
- facet = xtype->facets;
64
-
65
- while (facet != NULL) {
66
- rfacet = rxml_wrap_schema_facet((xmlSchemaFacetPtr) facet);
67
- rb_ary_push(facets, rfacet);
68
- facet = facet->next;
69
- }
70
-
71
- rb_iv_set(self, "@facets", facets);
72
- }
73
-
74
- return facets;
75
- }
76
-
77
- static VALUE rxml_schema_type_node(VALUE self)
78
- {
79
- xmlSchemaTypePtr xtype;
80
-
81
- Data_Get_Struct(self, xmlSchemaType, xtype);
82
-
83
- if(xtype->node != NULL)
84
- return rxml_node_wrap(xtype->node);
85
- else
86
- return Qnil;
87
- }
88
-
89
- static VALUE rxml_schema_type_kind(VALUE self)
90
- {
91
- xmlSchemaTypePtr xtype;
92
-
93
- Data_Get_Struct(self, xmlSchemaType, xtype);
94
-
95
- return INT2NUM(xtype->type);
96
- }
97
-
98
- static VALUE get_annotation(xmlSchemaAnnotPtr annot)
99
- {
100
- if(annot != NULL && annot->content != NULL && annot->content->content != NULL)
101
- return rb_str_new2((const char *) annot->content->content);
102
- else
103
- return Qnil;
104
- }
105
-
106
- static VALUE rxml_schema_type_annot(VALUE self)
107
- {
108
- xmlSchemaTypePtr xtype;
109
-
110
- Data_Get_Struct(self, xmlSchemaType, xtype);
111
-
112
- if(xtype != NULL && xtype->annot != NULL)
113
- return get_annotation(xtype->annot);
114
- else
115
- return Qnil;
116
- }
117
-
118
- static void rxmlSchemaCollectElements(xmlSchemaParticlePtr particle, VALUE self)
119
- {
120
- VALUE elements;
121
- VALUE relement;
122
- xmlSchemaTreeItemPtr term;
123
-
124
- if (particle == NULL)
125
- return;
126
-
127
- term = particle->children;
128
-
129
- if (term != NULL) {
130
- elements = rb_iv_get(self, "@elements");
131
-
132
- switch (term->type) {
133
- case XML_SCHEMA_TYPE_ELEMENT:
134
- relement = rxml_wrap_schema_element((xmlSchemaElementPtr) term);
135
-
136
-
137
- rb_iv_set(relement, "@min", INT2NUM(particle->minOccurs));
138
-
139
- if (particle->maxOccurs >= UNBOUNDED)
140
- rb_iv_set(relement, "@max", rb_const_get(rb_path2class("Float"), rb_intern("INFINITY")));
141
- else
142
- rb_iv_set(relement, "@max", INT2NUM(particle->maxOccurs));
143
-
144
- if (particle->annot != NULL)
145
- {
146
- xmlChar *content;
147
-
148
- content = xmlNodeGetContent(particle->annot->content);
149
-
150
- if (content != NULL)
151
- {
152
- rb_iv_set(relement, "@annotation", rb_str_new2((const char *) content));
153
- xmlFree(content);
154
- }
155
- }
156
-
157
- rb_hash_aset(elements, rb_str_new2((const char *) ((xmlSchemaElementPtr) term)->name), relement);
158
-
159
- break;
160
-
161
- case XML_SCHEMA_TYPE_SEQUENCE:
162
- break;
163
-
164
- case XML_SCHEMA_TYPE_CHOICE:
165
- break;
166
-
167
- case XML_SCHEMA_TYPE_ALL:
168
- break;
169
-
170
- case XML_SCHEMA_TYPE_ANY:
171
- break;
172
-
173
- default:
174
-
175
- return;
176
- }
177
- }
178
-
179
- if (term &&
180
- ((term->type == XML_SCHEMA_TYPE_SEQUENCE) ||
181
- (term->type == XML_SCHEMA_TYPE_CHOICE) ||
182
- (term->type == XML_SCHEMA_TYPE_ALL)) &&
183
- (term->children != NULL)) {
184
-
185
- rxmlSchemaCollectElements((xmlSchemaParticlePtr) term->children, self);
186
- }
187
-
188
- if (particle->next != NULL)
189
- rxmlSchemaCollectElements((xmlSchemaParticlePtr) particle->next, self);
190
- }
191
-
192
- static VALUE
193
- rxml_schema_type_elements(VALUE self)
194
- {
195
- VALUE elements;
196
- xmlSchemaTypePtr xtype;
197
-
198
- Data_Get_Struct(self, xmlSchemaType, xtype);
199
-
200
- if (rb_iv_get(self, "@elements") == Qnil) {
201
- elements = rb_hash_new();
202
- rb_iv_set(self, "@elements", elements);
203
- rxmlSchemaCollectElements((xmlSchemaParticlePtr) xtype->subtypes, self);
204
- }
205
-
206
- return rb_iv_get(self, "@elements");
207
- }
208
-
209
- static VALUE
210
- rxml_schema_type_attributes(VALUE self)
211
- {
212
- VALUE attributes;
213
- xmlSchemaTypePtr xtype;
214
- xmlSchemaAttributeUsePtr use;
215
- xmlSchemaItemListPtr uses;
216
- int i;
217
-
218
- Data_Get_Struct(self, xmlSchemaType, xtype);
219
-
220
- if (rb_iv_get(self, "@attributes") == Qnil) {
221
- attributes = rb_ary_new();
222
- rb_iv_set(self, "@attributes", attributes);
223
-
224
- uses = xtype->attrUses;
225
-
226
- if ((uses == NULL) || (uses->nbItems == 0))
227
- return rb_iv_get(self, "@attributes");
228
-
229
- for (i = 0; i < uses->nbItems; i++) {
230
- use = (xmlSchemaAttributeUsePtr) uses->items[i];
231
- rb_ary_push(attributes, rxml_wrap_schema_attribute(use));
232
- }
233
- }
234
-
235
- return rb_iv_get(self, "@attributes");
236
- }
237
-
238
-
239
- void rxml_init_schema_type(void)
240
- {
241
- /* Add in infinity support for ruby 1.8.7 */
242
- #if !defined(RUBY_VM) && defined(INFINITY)
243
- ID infinityId = rb_intern("INFINITY");
244
- if (rb_const_defined(rb_cFloat, infinityId) == Qfalse)
245
- rb_define_const(rb_cFloat, "INFINITY", rb_float_new(INFINITY));
246
- #endif
247
-
248
- cXMLSchemaType = rb_define_class_under(cXMLSchema, "Type", rb_cObject);
249
-
250
- rb_define_method(cXMLSchemaType, "namespace", rxml_schema_type_namespace, 0);
251
- rb_define_method(cXMLSchemaType, "name", rxml_schema_type_name, 0);
252
- rb_define_method(cXMLSchemaType, "elements", rxml_schema_type_elements, 0);
253
- rb_define_method(cXMLSchemaType, "attributes", rxml_schema_type_attributes, 0);
254
- rb_define_method(cXMLSchemaType, "base", rxml_schema_type_base, 0);
255
- rb_define_method(cXMLSchemaType, "kind", rxml_schema_type_kind, 0);
256
- rb_define_method(cXMLSchemaType, "node", rxml_schema_type_node, 0);
257
- rb_define_method(cXMLSchemaType, "facets", rxml_schema_type_facets, 0);
258
- rb_define_method(cXMLSchemaType, "annotation", rxml_schema_type_annot, 0);
259
- }
1
+ #include "ruby_libxml.h"
2
+ #include "ruby_xml_schema_type.h"
3
+ #include "ruby_xml_schema_element.h"
4
+ #include "ruby_xml_schema_attribute.h"
5
+ #include "ruby_xml_schema_facet.h"
6
+
7
+ #define UNBOUNDED 1 << 30
8
+ #define FREE_AND_NULL(str) if ((str) != NULL) { xmlFree((xmlChar *) (str)); str = NULL; }
9
+
10
+ VALUE cXMLSchemaType;
11
+
12
+ static void rxml_schema_type_free(xmlSchemaTypePtr xschema_type)
13
+ {
14
+ xschema_type = NULL;
15
+ xmlFree(xschema_type);
16
+ }
17
+
18
+ VALUE rxml_wrap_schema_type(xmlSchemaTypePtr xtype)
19
+ {
20
+ VALUE result;
21
+
22
+ if (!xtype)
23
+ rb_raise(rb_eArgError, "XML::Schema::Type required!");
24
+
25
+ result = Data_Wrap_Struct(cXMLSchemaType, NULL, rxml_schema_type_free, xtype);
26
+
27
+ rb_iv_set(result, "@name", QNIL_OR_STRING(xtype->name));
28
+ rb_iv_set(result, "@namespace", QNIL_OR_STRING(xtype->targetNamespace));
29
+ rb_iv_set(result, "@kind", INT2NUM(xtype->type));
30
+
31
+ return result;
32
+ }
33
+
34
+ static VALUE rxml_schema_type_base(VALUE self)
35
+ {
36
+ xmlSchemaTypePtr xtype;
37
+
38
+ Data_Get_Struct(self, xmlSchemaType, xtype);
39
+
40
+ return (xtype->baseType != xtype) ? rxml_wrap_schema_type(xtype->baseType) : Qnil;
41
+ }
42
+
43
+ static VALUE rxml_schema_type_node(VALUE self)
44
+ {
45
+ xmlSchemaTypePtr xtype;
46
+
47
+ Data_Get_Struct(self, xmlSchemaType, xtype);
48
+
49
+ return (xtype->node != NULL) ? rxml_node_wrap(xtype->node) : Qnil;
50
+ }
51
+
52
+ static VALUE rxml_schema_type_facets(VALUE self)
53
+ {
54
+ xmlSchemaTypePtr xtype;
55
+ xmlSchemaFacetPtr xfacet;
56
+ VALUE result = rb_ary_new();
57
+ VALUE facet;
58
+
59
+ Data_Get_Struct(self, xmlSchemaType, xtype);
60
+
61
+ xfacet = xtype->facets;
62
+
63
+ while (xfacet != NULL)
64
+ {
65
+ facet = rxml_wrap_schema_facet((xmlSchemaFacetPtr)xfacet);
66
+ rb_ary_push(result, facet);
67
+ xfacet = xfacet->next;
68
+ }
69
+
70
+ return result;
71
+ }
72
+
73
+ static VALUE rxml_schema_type_annot(VALUE self)
74
+ {
75
+ VALUE result = Qnil;
76
+ xmlSchemaTypePtr xtype;
77
+
78
+ Data_Get_Struct(self, xmlSchemaType, xtype);
79
+
80
+ if(xtype != NULL && xtype->annot != NULL && xtype->annot->content != NULL)
81
+ {
82
+ xmlChar *content = xmlNodeGetContent(xtype->annot->content);
83
+ if (content)
84
+ {
85
+ result = rxml_new_cstr(content, NULL);
86
+ xmlFree(content);
87
+ }
88
+ }
89
+ return result;
90
+ }
91
+
92
+ static void rxmlSchemaCollectElements(xmlSchemaParticlePtr xparticle, VALUE hash)
93
+ {
94
+ VALUE element;
95
+ xmlSchemaTreeItemPtr xterm;
96
+
97
+ if (xparticle == NULL)
98
+ return;
99
+
100
+ xterm = xparticle->children;
101
+
102
+ if (xterm != NULL)
103
+ {
104
+ switch (xterm->type)
105
+ {
106
+ case XML_SCHEMA_TYPE_ELEMENT:
107
+ element = rxml_wrap_schema_element((xmlSchemaElementPtr)xterm);
108
+ rb_iv_set(element, "@min", INT2NUM(xparticle->minOccurs));
109
+
110
+ if (xparticle->maxOccurs >= UNBOUNDED)
111
+ rb_iv_set(element, "@max", rb_const_get(rb_path2class("Float"), rb_intern("INFINITY")));
112
+ else
113
+ rb_iv_set(element, "@max", INT2NUM(xparticle->maxOccurs));
114
+
115
+ if (xparticle->annot != NULL)
116
+ {
117
+ xmlChar *content = xmlNodeGetContent(xparticle->annot->content);
118
+
119
+ if (content != NULL)
120
+ {
121
+ rb_iv_set(element, "@annotation", rb_str_new2((const char *) content));
122
+ xmlFree(content);
123
+ }
124
+ }
125
+
126
+ rb_hash_aset(hash, rb_str_new2((const char *) ((xmlSchemaElementPtr)xterm)->name), element);
127
+ break;
128
+
129
+ case XML_SCHEMA_TYPE_SEQUENCE:
130
+ break;
131
+
132
+ case XML_SCHEMA_TYPE_CHOICE:
133
+ break;
134
+
135
+ case XML_SCHEMA_TYPE_ALL:
136
+ break;
137
+
138
+ case XML_SCHEMA_TYPE_ANY:
139
+ break;
140
+
141
+ default:
142
+ return;
143
+ }
144
+ }
145
+
146
+ if (xterm &&
147
+ ((xterm->type == XML_SCHEMA_TYPE_SEQUENCE) || (xterm->type == XML_SCHEMA_TYPE_CHOICE) || (xterm->type == XML_SCHEMA_TYPE_ALL)) &&
148
+ (xterm->children != NULL))
149
+ {
150
+ rxmlSchemaCollectElements((xmlSchemaParticlePtr)xterm->children, hash);
151
+ }
152
+
153
+ if (xparticle->next != NULL)
154
+ {
155
+ rxmlSchemaCollectElements((xmlSchemaParticlePtr)xparticle->next, hash);
156
+ }
157
+ }
158
+
159
+ static VALUE rxml_schema_type_elements(VALUE self)
160
+ {
161
+ VALUE result = rb_hash_new();
162
+ xmlSchemaTypePtr xtype;
163
+
164
+ Data_Get_Struct(self, xmlSchemaType, xtype);
165
+ rxmlSchemaCollectElements((xmlSchemaParticlePtr) xtype->subtypes, result);
166
+
167
+ return result;
168
+ }
169
+
170
+ static VALUE rxml_schema_type_attributes(VALUE self)
171
+ {
172
+ VALUE result = rb_ary_new();
173
+ xmlSchemaTypePtr xtype;
174
+ xmlSchemaAttributeUsePtr xuse;
175
+ xmlSchemaItemListPtr xuses;
176
+ int i;
177
+
178
+ Data_Get_Struct(self, xmlSchemaType, xtype);
179
+ xuses = xtype->attrUses;
180
+
181
+ if (xuses != NULL)
182
+ {
183
+ for (i = 0; i < xuses->nbItems; i++)
184
+ {
185
+ xuse = (xmlSchemaAttributeUsePtr)xuses->items[i];
186
+ rb_ary_push(result, rxml_wrap_schema_attribute(xuse));
187
+ }
188
+ }
189
+
190
+ return result;
191
+ }
192
+
193
+ void rxml_init_schema_type(void)
194
+ {
195
+ /* Add in infinity support for ruby 1.8.7 */
196
+ #if !defined(RUBY_VM) && defined(INFINITY)
197
+ ID infinityId = rb_intern("INFINITY");
198
+ if (rb_const_defined(rb_cFloat, infinityId) == Qfalse)
199
+ rb_define_const(rb_cFloat, "INFINITY", rb_float_new(INFINITY));
200
+ #endif
201
+
202
+ cXMLSchemaType = rb_define_class_under(cXMLSchema, "Type", rb_cObject);
203
+
204
+ rb_define_attr(cXMLSchemaType, "namespace", 1, 0);
205
+ rb_define_attr(cXMLSchemaType, "name", 1, 0);
206
+ rb_define_attr(cXMLSchemaType, "kind", 1, 0);
207
+
208
+ rb_define_method(cXMLSchemaType, "base", rxml_schema_type_base, 0);
209
+ rb_define_method(cXMLSchemaType, "node", rxml_schema_type_node, 0);
210
+ rb_define_method(cXMLSchemaType, "elements", rxml_schema_type_elements, 0);
211
+ rb_define_method(cXMLSchemaType, "attributes", rxml_schema_type_attributes, 0);
212
+ rb_define_method(cXMLSchemaType, "facets", rxml_schema_type_facets, 0);
213
+ rb_define_method(cXMLSchemaType, "annotation", rxml_schema_type_annot, 0);
214
+ }
@@ -1,9 +1,9 @@
1
- #ifndef __RXML_SCHEMA_TYPE__
2
- #define __RXML_SCHEMA_TYPE__
3
-
4
- extern VALUE cXMLSchemaType;
5
-
6
- VALUE rxml_wrap_schema_type(xmlSchemaTypePtr xtype);
7
- void rxml_init_schema_type(void);
8
-
9
- #endif
1
+ #ifndef __RXML_SCHEMA_TYPE__
2
+ #define __RXML_SCHEMA_TYPE__
3
+
4
+ extern VALUE cXMLSchemaType;
5
+
6
+ VALUE rxml_wrap_schema_type(xmlSchemaTypePtr xtype);
7
+ void rxml_init_schema_type(void);
8
+
9
+ #endif
@@ -1,9 +1,9 @@
1
- /* Don't nuke this block! It is used for automatically updating the
2
- * versions below. VERSION = string formatting, VERNUM = numbered
3
- * version for inline testing: increment both or none at all.*/
4
- #define RUBY_LIBXML_VERSION "2.8.0"
5
- #define RUBY_LIBXML_VERNUM 280
6
- #define RUBY_LIBXML_VER_MAJ 2
7
- #define RUBY_LIBXML_VER_MIN 8
8
- #define RUBY_LIBXML_VER_MIC 0
9
- #define RUBY_LIBXML_VER_PATCH 0
1
+ /* Don't nuke this block! It is used for automatically updating the
2
+ * versions below. VERSION = string formatting, VERNUM = numbered
3
+ * version for inline testing: increment both or none at all.*/
4
+ #define RUBY_LIBXML_VERSION "3.2.3"
5
+ #define RUBY_LIBXML_VERNUM 323
6
+ #define RUBY_LIBXML_VER_MAJ 3
7
+ #define RUBY_LIBXML_VER_MIN 2
8
+ #define RUBY_LIBXML_VER_MIC 3
9
+ #define RUBY_LIBXML_VER_PATCH 0