libxml-ruby 2.9.0 → 3.0.0
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.
- checksums.yaml +4 -4
- data/HISTORY +811 -790
- data/LICENSE +20 -20
- data/MANIFEST +166 -166
- data/README.rdoc +188 -184
- data/Rakefile +1 -1
- data/ext/libxml/libxml.c +80 -80
- data/ext/libxml/ruby_libxml.h +75 -75
- data/ext/libxml/ruby_xml.c +0 -84
- data/ext/libxml/ruby_xml.h +0 -10
- data/ext/libxml/ruby_xml_attr.h +12 -12
- data/ext/libxml/ruby_xml_attr_decl.c +153 -153
- data/ext/libxml/ruby_xml_attr_decl.h +11 -11
- data/ext/libxml/ruby_xml_attributes.c +275 -275
- data/ext/libxml/ruby_xml_attributes.h +15 -15
- data/ext/libxml/ruby_xml_document.c +21 -27
- data/ext/libxml/ruby_xml_document.h +11 -11
- data/ext/libxml/ruby_xml_dtd.c +2 -13
- data/ext/libxml/ruby_xml_dtd.h +9 -9
- data/ext/libxml/ruby_xml_error.c +996 -996
- data/ext/libxml/ruby_xml_error.h +12 -12
- data/ext/libxml/ruby_xml_html_parser.c +89 -92
- data/ext/libxml/ruby_xml_html_parser.h +10 -10
- data/ext/libxml/ruby_xml_html_parser_context.h +10 -10
- data/ext/libxml/ruby_xml_html_parser_options.c +46 -46
- data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
- data/ext/libxml/ruby_xml_input_cbg.h +20 -20
- data/ext/libxml/ruby_xml_io.c +0 -1
- data/ext/libxml/ruby_xml_io.h +10 -10
- data/ext/libxml/ruby_xml_namespace.c +153 -153
- data/ext/libxml/ruby_xml_namespace.h +10 -10
- data/ext/libxml/ruby_xml_namespaces.c +293 -293
- data/ext/libxml/ruby_xml_namespaces.h +9 -9
- data/ext/libxml/ruby_xml_node.c +100 -143
- data/ext/libxml/ruby_xml_node.h +13 -11
- data/ext/libxml/ruby_xml_parser.c +91 -94
- data/ext/libxml/ruby_xml_parser.h +12 -12
- data/ext/libxml/ruby_xml_parser_context.h +10 -10
- data/ext/libxml/ruby_xml_parser_options.c +66 -66
- data/ext/libxml/ruby_xml_parser_options.h +12 -12
- data/ext/libxml/ruby_xml_reader.c +45 -37
- data/ext/libxml/ruby_xml_reader.h +17 -17
- data/ext/libxml/ruby_xml_relaxng.h +10 -10
- data/ext/libxml/ruby_xml_sax2_handler.c +3 -3
- data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
- data/ext/libxml/ruby_xml_sax_parser.c +116 -120
- data/ext/libxml/ruby_xml_sax_parser.h +10 -10
- data/ext/libxml/ruby_xml_schema.h +809 -809
- data/ext/libxml/ruby_xml_schema_attribute.c +109 -109
- data/ext/libxml/ruby_xml_schema_attribute.h +15 -15
- data/ext/libxml/ruby_xml_schema_element.c +94 -94
- data/ext/libxml/ruby_xml_schema_element.h +14 -14
- data/ext/libxml/ruby_xml_schema_facet.c +52 -52
- data/ext/libxml/ruby_xml_schema_facet.h +13 -13
- data/ext/libxml/ruby_xml_schema_type.c +259 -259
- data/ext/libxml/ruby_xml_schema_type.h +9 -9
- data/ext/libxml/ruby_xml_version.h +9 -9
- data/ext/libxml/ruby_xml_writer.c +1136 -1136
- data/ext/libxml/ruby_xml_writer.h +10 -10
- data/ext/libxml/ruby_xml_xinclude.c +16 -16
- data/ext/libxml/ruby_xml_xinclude.h +11 -11
- data/ext/libxml/ruby_xml_xpath.c +42 -36
- data/ext/libxml/ruby_xml_xpath.h +13 -13
- data/ext/libxml/ruby_xml_xpath_context.c +1 -1
- data/ext/libxml/ruby_xml_xpath_context.h +9 -9
- data/ext/libxml/ruby_xml_xpath_expression.c +81 -81
- data/ext/libxml/ruby_xml_xpath_expression.h +10 -10
- data/ext/libxml/ruby_xml_xpath_object.c +5 -2
- data/ext/libxml/ruby_xml_xpath_object.h +17 -17
- data/ext/libxml/ruby_xml_xpointer.c +99 -99
- data/ext/libxml/ruby_xml_xpointer.h +11 -11
- data/ext/vc/libxml_ruby.sln +17 -15
- data/lib/libxml.rb +1 -6
- data/lib/libxml/node.rb +2 -78
- data/lib/libxml/parser.rb +0 -266
- data/lib/libxml/sax_parser.rb +0 -17
- data/lib/libxml/schema.rb +66 -66
- data/lib/libxml/schema/attribute.rb +19 -19
- data/lib/libxml/schema/element.rb +27 -27
- data/lib/libxml/schema/type.rb +29 -29
- data/script/benchmark/depixelate +634 -634
- data/script/benchmark/hamlet.xml +9054 -9054
- data/script/benchmark/parsecount +170 -170
- data/script/benchmark/throughput +41 -41
- data/script/test +6 -6
- data/test/c14n/given/example-1.xml +14 -14
- data/test/c14n/given/example-2.xml +11 -11
- data/test/c14n/given/example-3.xml +18 -18
- data/test/c14n/given/example-4.xml +9 -9
- data/test/c14n/given/example-5.xml +12 -12
- data/test/c14n/given/example-6.xml +2 -2
- data/test/c14n/given/example-7.xml +11 -11
- data/test/c14n/given/example-8.xml +11 -11
- data/test/c14n/given/example-8.xpath +9 -9
- data/test/c14n/result/1-1-without-comments/example-1 +3 -3
- data/test/c14n/result/1-1-without-comments/example-2 +10 -10
- data/test/c14n/result/1-1-without-comments/example-3 +13 -13
- data/test/c14n/result/1-1-without-comments/example-4 +8 -8
- data/test/c14n/result/1-1-without-comments/example-5 +2 -2
- data/test/c14n/result/with-comments/example-1 +5 -5
- data/test/c14n/result/with-comments/example-2 +10 -10
- data/test/c14n/result/with-comments/example-3 +13 -13
- data/test/c14n/result/with-comments/example-4 +8 -8
- data/test/c14n/result/with-comments/example-5 +3 -3
- data/test/c14n/result/without-comments/example-1 +3 -3
- data/test/c14n/result/without-comments/example-2 +10 -10
- data/test/c14n/result/without-comments/example-3 +13 -13
- data/test/c14n/result/without-comments/example-4 +8 -8
- data/test/c14n/result/without-comments/example-5 +2 -2
- data/test/model/atom.xml +12 -12
- data/test/model/bands.iso-8859-1.xml +4 -4
- data/test/model/bands.utf-8.xml +4 -4
- data/test/model/bands.xml +4 -4
- data/test/model/books.xml +153 -153
- data/test/model/merge_bug_data.xml +58 -58
- data/test/model/ruby-lang.html +238 -238
- data/test/model/rubynet.xml +79 -79
- data/test/model/shiporder.rnc +28 -28
- data/test/model/shiporder.rng +86 -86
- data/test/model/shiporder.xml +22 -22
- data/test/model/shiporder.xsd +39 -39
- data/test/model/soap.xml +27 -27
- data/test/model/xinclude.xml +4 -4
- data/test/tc_attributes.rb +0 -6
- data/test/tc_error.rb +157 -158
- data/test/tc_node.rb +33 -17
- data/test/tc_node_edit.rb +0 -15
- data/test/tc_node_pi.rb +39 -39
- data/test/tc_parser.rb +0 -48
- data/test/tc_reader.rb +12 -53
- data/test/tc_writer.rb +447 -447
- data/test/tc_xpath.rb +1 -1
- data/test/test_helper.rb +2 -2
- metadata +3 -8
- data/ext/libxml/extconf.h +0 -4
- data/lib/libxml/ns.rb +0 -22
- data/lib/libxml/properties.rb +0 -23
- data/lib/libxml/reader.rb +0 -29
- data/lib/libxml/xpath_object.rb +0 -16
@@ -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,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 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 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
|
+
}
|