libxml-ruby 2.8.0 → 3.2.1

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 (204) hide show
  1. checksums.yaml +5 -5
  2. data/HISTORY +842 -775
  3. data/LICENSE +20 -20
  4. data/MANIFEST +166 -166
  5. data/README.rdoc +217 -184
  6. data/Rakefile +90 -78
  7. data/ext/libxml/extconf.h +3 -0
  8. data/ext/libxml/extconf.rb +61 -116
  9. data/ext/libxml/libxml.c +80 -76
  10. data/ext/libxml/ruby_libxml.h +67 -75
  11. data/ext/libxml/ruby_xml.c +933 -893
  12. data/ext/libxml/ruby_xml.h +10 -10
  13. data/ext/libxml/ruby_xml_attr.c +333 -333
  14. data/ext/libxml/ruby_xml_attr.h +12 -12
  15. data/ext/libxml/ruby_xml_attr_decl.c +153 -153
  16. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  17. data/ext/libxml/ruby_xml_attributes.c +275 -275
  18. data/ext/libxml/ruby_xml_attributes.h +15 -15
  19. data/ext/libxml/ruby_xml_cbg.c +85 -85
  20. data/ext/libxml/ruby_xml_document.c +1123 -1147
  21. data/ext/libxml/ruby_xml_document.h +11 -11
  22. data/ext/libxml/ruby_xml_dtd.c +248 -268
  23. data/ext/libxml/ruby_xml_dtd.h +9 -9
  24. data/ext/libxml/ruby_xml_encoding.c +250 -260
  25. data/ext/libxml/ruby_xml_encoding.h +16 -19
  26. data/ext/libxml/ruby_xml_error.c +996 -996
  27. data/ext/libxml/ruby_xml_error.h +12 -12
  28. data/ext/libxml/ruby_xml_html_parser.c +89 -92
  29. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  30. data/ext/libxml/ruby_xml_html_parser_context.c +337 -338
  31. data/ext/libxml/ruby_xml_html_parser_context.h +10 -10
  32. data/ext/libxml/ruby_xml_html_parser_options.c +46 -46
  33. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  34. data/ext/libxml/ruby_xml_input_cbg.c +191 -191
  35. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  36. data/ext/libxml/ruby_xml_io.c +47 -50
  37. data/ext/libxml/ruby_xml_io.h +10 -10
  38. data/ext/libxml/ruby_xml_namespace.c +153 -153
  39. data/ext/libxml/ruby_xml_namespace.h +10 -10
  40. data/ext/libxml/ruby_xml_namespaces.c +293 -293
  41. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  42. data/ext/libxml/ruby_xml_node.c +1402 -1452
  43. data/ext/libxml/ruby_xml_node.h +13 -11
  44. data/ext/libxml/ruby_xml_parser.c +91 -94
  45. data/ext/libxml/ruby_xml_parser.h +12 -12
  46. data/ext/libxml/ruby_xml_parser_context.c +999 -1001
  47. data/ext/libxml/ruby_xml_parser_context.h +10 -10
  48. data/ext/libxml/ruby_xml_parser_options.c +66 -66
  49. data/ext/libxml/ruby_xml_parser_options.h +12 -12
  50. data/ext/libxml/ruby_xml_reader.c +1239 -1228
  51. data/ext/libxml/ruby_xml_reader.h +17 -17
  52. data/ext/libxml/ruby_xml_relaxng.c +110 -111
  53. data/ext/libxml/ruby_xml_relaxng.h +10 -10
  54. data/ext/libxml/ruby_xml_sax2_handler.c +326 -328
  55. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  56. data/ext/libxml/ruby_xml_sax_parser.c +116 -120
  57. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  58. data/ext/libxml/ruby_xml_schema.c +278 -301
  59. data/ext/libxml/ruby_xml_schema.h +809 -809
  60. data/ext/libxml/ruby_xml_schema_attribute.c +109 -109
  61. data/ext/libxml/ruby_xml_schema_attribute.h +15 -15
  62. data/ext/libxml/ruby_xml_schema_element.c +95 -94
  63. data/ext/libxml/ruby_xml_schema_element.h +14 -14
  64. data/ext/libxml/ruby_xml_schema_facet.c +52 -52
  65. data/ext/libxml/ruby_xml_schema_facet.h +13 -13
  66. data/ext/libxml/ruby_xml_schema_type.c +232 -259
  67. data/ext/libxml/ruby_xml_schema_type.h +9 -9
  68. data/ext/libxml/ruby_xml_version.h +9 -9
  69. data/ext/libxml/ruby_xml_writer.c +1133 -1137
  70. data/ext/libxml/ruby_xml_writer.h +10 -10
  71. data/ext/libxml/ruby_xml_xinclude.c +16 -16
  72. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  73. data/ext/libxml/ruby_xml_xpath.c +194 -188
  74. data/ext/libxml/ruby_xml_xpath.h +13 -13
  75. data/ext/libxml/ruby_xml_xpath_context.c +360 -361
  76. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  77. data/ext/libxml/ruby_xml_xpath_expression.c +81 -81
  78. data/ext/libxml/ruby_xml_xpath_expression.h +10 -10
  79. data/ext/libxml/ruby_xml_xpath_object.c +338 -335
  80. data/ext/libxml/ruby_xml_xpath_object.h +17 -17
  81. data/ext/libxml/ruby_xml_xpointer.c +99 -99
  82. data/ext/libxml/ruby_xml_xpointer.h +11 -11
  83. data/ext/vc/libxml_ruby.sln +17 -15
  84. data/lib/libxml-ruby.rb +30 -0
  85. data/lib/libxml.rb +3 -33
  86. data/lib/libxml/node.rb +2 -78
  87. data/lib/libxml/parser.rb +0 -266
  88. data/lib/libxml/sax_parser.rb +0 -17
  89. data/lib/libxml/schema.rb +47 -66
  90. data/lib/libxml/schema/attribute.rb +19 -19
  91. data/lib/libxml/schema/element.rb +19 -27
  92. data/lib/libxml/schema/type.rb +21 -29
  93. data/libxml-ruby.gemspec +48 -44
  94. data/script/benchmark/depixelate +634 -634
  95. data/script/benchmark/hamlet.xml +9054 -9054
  96. data/script/benchmark/parsecount +170 -170
  97. data/script/benchmark/throughput +41 -41
  98. data/script/test +6 -6
  99. data/setup.rb +0 -1
  100. data/test/c14n/given/example-1.xml +14 -14
  101. data/test/c14n/given/example-2.xml +11 -11
  102. data/test/c14n/given/example-3.xml +18 -18
  103. data/test/c14n/given/example-4.xml +9 -9
  104. data/test/c14n/given/example-5.xml +12 -12
  105. data/test/c14n/given/example-6.xml +2 -2
  106. data/test/c14n/given/example-7.xml +11 -11
  107. data/test/c14n/given/example-8.xml +11 -11
  108. data/test/c14n/given/example-8.xpath +9 -9
  109. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  110. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  111. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  112. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  113. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  114. data/test/c14n/result/with-comments/example-1 +5 -5
  115. data/test/c14n/result/with-comments/example-2 +10 -10
  116. data/test/c14n/result/with-comments/example-3 +13 -13
  117. data/test/c14n/result/with-comments/example-4 +8 -8
  118. data/test/c14n/result/with-comments/example-5 +3 -3
  119. data/test/c14n/result/without-comments/example-1 +3 -3
  120. data/test/c14n/result/without-comments/example-2 +10 -10
  121. data/test/c14n/result/without-comments/example-3 +13 -13
  122. data/test/c14n/result/without-comments/example-4 +8 -8
  123. data/test/c14n/result/without-comments/example-5 +2 -2
  124. data/test/model/atom.xml +12 -12
  125. data/test/model/bands.iso-8859-1.xml +4 -4
  126. data/test/model/bands.utf-8.xml +4 -4
  127. data/test/model/bands.xml +4 -4
  128. data/test/model/books.xml +153 -153
  129. data/test/model/cwm_1_0.xml +11336 -0
  130. data/test/model/merge_bug_data.xml +58 -58
  131. data/test/model/ruby-lang.html +238 -238
  132. data/test/model/rubynet.xml +79 -79
  133. data/test/model/shiporder.rnc +28 -28
  134. data/test/model/shiporder.rng +86 -86
  135. data/test/model/shiporder.xml +22 -22
  136. data/test/model/shiporder.xsd +39 -39
  137. data/test/model/soap.xml +27 -27
  138. data/test/model/xinclude.xml +4 -4
  139. data/test/test.xml +2 -0
  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} +32 -27
  146. data/test/test_document_write.rb +146 -0
  147. data/test/{tc_dtd.rb → test_dtd.rb} +28 -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 +3 -10
  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} +41 -42
  167. data/test/{tc_properties.rb → test_properties.rb} +6 -7
  168. data/test/test_reader.rb +363 -0
  169. data/test/test_relaxng.rb +53 -0
  170. data/test/{tc_sax_parser.rb → test_sax_parser.rb} +36 -37
  171. data/test/{tc_schema.rb → test_schema.rb} +43 -37
  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 +262 -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 +117 -95
  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_xml.rb +0 -226
  204. data/test/tc_xpath_expression.rb +0 -38
@@ -1,52 +1,52 @@
1
- #include "ruby_libxml.h"
2
- #include "ruby_xml_schema_facet.h"
3
-
4
- VALUE cXMLSchemaFacet;
5
-
6
- static void rxml_schema_facet_free(xmlSchemaFacetPtr xschema_type)
7
- {
8
- xschema_type = NULL;
9
- xmlFree(xschema_type);
10
- }
11
-
12
- /* START FACET*/
13
-
14
- static VALUE rxml_schema_facet_node(VALUE self)
15
- {
16
- xmlSchemaFacetPtr facet;
17
-
18
- Data_Get_Struct(self, xmlSchemaFacet, facet);
19
-
20
- return rxml_node_wrap(facet->node);
21
- }
22
-
23
- static VALUE rxml_schema_facet_value(VALUE self)
24
- {
25
- xmlSchemaFacetPtr facet;
26
-
27
- Data_Get_Struct(self, xmlSchemaFacet, facet);
28
-
29
- QNIL_OR_STRING(facet->value)
30
- }
31
-
32
- static VALUE rxml_schema_facet_kind(VALUE self)
33
- {
34
- xmlSchemaFacetPtr facet;
35
-
36
- Data_Get_Struct(self, xmlSchemaFacet, facet);
37
-
38
- return INT2NUM(facet->type);
39
- }
40
-
41
- VALUE rxml_wrap_schema_facet(xmlSchemaFacetPtr facet)
42
- {
43
- return Data_Wrap_Struct(cXMLSchemaFacet, NULL, rxml_schema_facet_free, facet);
44
- }
45
-
46
- void rxml_init_schema_facet(void)
47
- {
48
- cXMLSchemaFacet = rb_define_class_under(cXMLSchema, "Facet", rb_cObject);
49
- rb_define_method(cXMLSchemaFacet, "value", rxml_schema_facet_value, 0);
50
- rb_define_method(cXMLSchemaFacet, "node", rxml_schema_facet_node, 0);
51
- rb_define_method(cXMLSchemaFacet, "kind", rxml_schema_facet_kind, 0);
52
- }
1
+ #include "ruby_libxml.h"
2
+ #include "ruby_xml_schema_facet.h"
3
+
4
+ VALUE cXMLSchemaFacet;
5
+
6
+ static void rxml_schema_facet_free(xmlSchemaFacetPtr xschema_type)
7
+ {
8
+ xschema_type = NULL;
9
+ xmlFree(xschema_type);
10
+ }
11
+
12
+ /* START FACET*/
13
+
14
+ static VALUE rxml_schema_facet_node(VALUE self)
15
+ {
16
+ xmlSchemaFacetPtr facet;
17
+
18
+ Data_Get_Struct(self, xmlSchemaFacet, facet);
19
+
20
+ return rxml_node_wrap(facet->node);
21
+ }
22
+
23
+ static VALUE rxml_schema_facet_value(VALUE self)
24
+ {
25
+ xmlSchemaFacetPtr facet;
26
+
27
+ Data_Get_Struct(self, xmlSchemaFacet, facet);
28
+
29
+ QNIL_OR_STRING(facet->value)
30
+ }
31
+
32
+ static VALUE rxml_schema_facet_kind(VALUE self)
33
+ {
34
+ xmlSchemaFacetPtr facet;
35
+
36
+ Data_Get_Struct(self, xmlSchemaFacet, facet);
37
+
38
+ return INT2NUM(facet->type);
39
+ }
40
+
41
+ VALUE rxml_wrap_schema_facet(xmlSchemaFacetPtr facet)
42
+ {
43
+ return Data_Wrap_Struct(cXMLSchemaFacet, NULL, rxml_schema_facet_free, facet);
44
+ }
45
+
46
+ void rxml_init_schema_facet(void)
47
+ {
48
+ cXMLSchemaFacet = rb_define_class_under(cXMLSchema, "Facet", rb_cObject);
49
+ rb_define_method(cXMLSchemaFacet, "value", rxml_schema_facet_value, 0);
50
+ rb_define_method(cXMLSchemaFacet, "node", rxml_schema_facet_node, 0);
51
+ rb_define_method(cXMLSchemaFacet, "kind", rxml_schema_facet_kind, 0);
52
+ }
@@ -1,13 +1,13 @@
1
- #ifndef __RXML_SCHEMA_FACET__
2
- #define __RXML_SCHEMA_FACET__
3
-
4
- #include <libxml/schemasInternals.h>
5
- #include <libxml/xmlschemas.h>
6
- #include <libxml/xmlschemastypes.h>
7
-
8
- extern VALUE cXMLSchemaFacet;
9
-
10
- VALUE rxml_wrap_schema_facet(xmlSchemaFacetPtr facet);
11
- void rxml_init_schema_facet(void);
12
-
13
- #endif
1
+ #ifndef __RXML_SCHEMA_FACET__
2
+ #define __RXML_SCHEMA_FACET__
3
+
4
+ #include <libxml/schemasInternals.h>
5
+ #include <libxml/xmlschemas.h>
6
+ #include <libxml/xmlschemastypes.h>
7
+
8
+ extern VALUE cXMLSchemaFacet;
9
+
10
+ VALUE rxml_wrap_schema_facet(xmlSchemaFacetPtr facet);
11
+ void rxml_init_schema_facet(void);
12
+
13
+ #endif
@@ -1,259 +1,232 @@
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
+ 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 xfacet;
54
+ VALUE result = rb_ary_new();
55
+ VALUE facet;
56
+
57
+ Data_Get_Struct(self, xmlSchemaType, xtype);
58
+
59
+ xfacet = xtype->facets;
60
+
61
+ while (xfacet != NULL)
62
+ {
63
+ facet = rxml_wrap_schema_facet((xmlSchemaFacetPtr)xfacet);
64
+ rb_ary_push(result, facet);
65
+ xfacet = xfacet->next;
66
+ }
67
+
68
+ return result;
69
+ }
70
+
71
+ static VALUE rxml_schema_type_node(VALUE self)
72
+ {
73
+ xmlSchemaTypePtr xtype;
74
+
75
+ Data_Get_Struct(self, xmlSchemaType, xtype);
76
+
77
+ if(xtype->node != NULL)
78
+ return rxml_node_wrap(xtype->node);
79
+ else
80
+ return Qnil;
81
+ }
82
+
83
+ static VALUE rxml_schema_type_kind(VALUE self)
84
+ {
85
+ xmlSchemaTypePtr xtype;
86
+
87
+ Data_Get_Struct(self, xmlSchemaType, xtype);
88
+
89
+ return INT2NUM(xtype->type);
90
+ }
91
+
92
+ static VALUE rxml_schema_type_annot(VALUE self)
93
+ {
94
+ VALUE result = Qnil;
95
+ xmlSchemaTypePtr xtype;
96
+
97
+ Data_Get_Struct(self, xmlSchemaType, xtype);
98
+
99
+ if(xtype != NULL && xtype->annot != NULL && xtype->annot->content != NULL)
100
+ {
101
+ xmlChar *content = xmlNodeGetContent(xtype->annot->content);
102
+ if (content)
103
+ {
104
+ result = rxml_new_cstr(content, NULL);
105
+ xmlFree(content);
106
+ }
107
+ }
108
+ return result;
109
+ }
110
+
111
+ static void rxmlSchemaCollectElements(xmlSchemaParticlePtr xparticle, VALUE hash)
112
+ {
113
+ VALUE element;
114
+ xmlSchemaTreeItemPtr xterm;
115
+
116
+ if (xparticle == NULL)
117
+ return;
118
+
119
+ xterm = xparticle->children;
120
+
121
+ if (xterm != NULL)
122
+ {
123
+ switch (xterm->type)
124
+ {
125
+ case XML_SCHEMA_TYPE_ELEMENT:
126
+ element = rxml_wrap_schema_element((xmlSchemaElementPtr)xterm);
127
+ rb_iv_set(element, "@min", INT2NUM(xparticle->minOccurs));
128
+
129
+ if (xparticle->maxOccurs >= UNBOUNDED)
130
+ rb_iv_set(element, "@max", rb_const_get(rb_path2class("Float"), rb_intern("INFINITY")));
131
+ else
132
+ rb_iv_set(element, "@max", INT2NUM(xparticle->maxOccurs));
133
+
134
+ if (xparticle->annot != NULL)
135
+ {
136
+ xmlChar *content = xmlNodeGetContent(xparticle->annot->content);
137
+
138
+ if (content != NULL)
139
+ {
140
+ rb_iv_set(element, "@annotation", rb_str_new2((const char *) content));
141
+ xmlFree(content);
142
+ }
143
+ }
144
+
145
+ rb_hash_aset(hash, rb_str_new2((const char *) ((xmlSchemaElementPtr)xterm)->name), element);
146
+ break;
147
+
148
+ case XML_SCHEMA_TYPE_SEQUENCE:
149
+ break;
150
+
151
+ case XML_SCHEMA_TYPE_CHOICE:
152
+ break;
153
+
154
+ case XML_SCHEMA_TYPE_ALL:
155
+ break;
156
+
157
+ case XML_SCHEMA_TYPE_ANY:
158
+ break;
159
+
160
+ default:
161
+ return;
162
+ }
163
+ }
164
+
165
+ if (xterm &&
166
+ ((xterm->type == XML_SCHEMA_TYPE_SEQUENCE) || (xterm->type == XML_SCHEMA_TYPE_CHOICE) || (xterm->type == XML_SCHEMA_TYPE_ALL)) &&
167
+ (xterm->children != NULL))
168
+ {
169
+ rxmlSchemaCollectElements((xmlSchemaParticlePtr)xterm->children, hash);
170
+ }
171
+
172
+ if (xparticle->next != NULL)
173
+ {
174
+ rxmlSchemaCollectElements((xmlSchemaParticlePtr)xparticle->next, hash);
175
+ }
176
+ }
177
+
178
+ static VALUE rxml_schema_type_elements(VALUE self)
179
+ {
180
+ VALUE result = rb_hash_new();
181
+ xmlSchemaTypePtr xtype;
182
+
183
+ Data_Get_Struct(self, xmlSchemaType, xtype);
184
+ rxmlSchemaCollectElements((xmlSchemaParticlePtr) xtype->subtypes, result);
185
+
186
+ return result;
187
+ }
188
+
189
+ static VALUE rxml_schema_type_attributes(VALUE self)
190
+ {
191
+ VALUE result = rb_ary_new();
192
+ xmlSchemaTypePtr xtype;
193
+ xmlSchemaAttributeUsePtr xuse;
194
+ xmlSchemaItemListPtr xuses;
195
+ int i;
196
+
197
+ Data_Get_Struct(self, xmlSchemaType, xtype);
198
+ xuses = xtype->attrUses;
199
+
200
+ if (xuses != NULL)
201
+ {
202
+ for (i = 0; i < xuses->nbItems; i++)
203
+ {
204
+ xuse = (xmlSchemaAttributeUsePtr)xuses->items[i];
205
+ rb_ary_push(result, rxml_wrap_schema_attribute(xuse));
206
+ }
207
+ }
208
+
209
+ return result;
210
+ }
211
+
212
+ void rxml_init_schema_type(void)
213
+ {
214
+ /* Add in infinity support for ruby 1.8.7 */
215
+ #if !defined(RUBY_VM) && defined(INFINITY)
216
+ ID infinityId = rb_intern("INFINITY");
217
+ if (rb_const_defined(rb_cFloat, infinityId) == Qfalse)
218
+ rb_define_const(rb_cFloat, "INFINITY", rb_float_new(INFINITY));
219
+ #endif
220
+
221
+ cXMLSchemaType = rb_define_class_under(cXMLSchema, "Type", rb_cObject);
222
+
223
+ rb_define_method(cXMLSchemaType, "namespace", rxml_schema_type_namespace, 0);
224
+ rb_define_method(cXMLSchemaType, "name", rxml_schema_type_name, 0);
225
+ rb_define_method(cXMLSchemaType, "elements", rxml_schema_type_elements, 0);
226
+ rb_define_method(cXMLSchemaType, "attributes", rxml_schema_type_attributes, 0);
227
+ rb_define_method(cXMLSchemaType, "base", rxml_schema_type_base, 0);
228
+ rb_define_method(cXMLSchemaType, "kind", rxml_schema_type_kind, 0);
229
+ rb_define_method(cXMLSchemaType, "node", rxml_schema_type_node, 0);
230
+ rb_define_method(cXMLSchemaType, "facets", rxml_schema_type_facets, 0);
231
+ rb_define_method(cXMLSchemaType, "annotation", rxml_schema_type_annot, 0);
232
+ }