ruby-xml-smart 0.1.11-i486-linux

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/AUTHORS +4 -0
  2. data/COPYING +504 -0
  3. data/Changelog +192 -0
  4. data/README +52 -0
  5. data/Rakefile +112 -0
  6. data/TODO +6 -0
  7. data/examples/EXAMPLE.xml +17 -0
  8. data/examples/EXAMPLE.xml.sic +17 -0
  9. data/examples/Visualise/EXAMPLE.xml +18 -0
  10. data/examples/Visualise/term-ansicolor-0.0.4/CHANGES +11 -0
  11. data/examples/Visualise/term-ansicolor-0.0.4/GPL +340 -0
  12. data/examples/Visualise/term-ansicolor-0.0.4/README.en +23 -0
  13. data/examples/Visualise/term-ansicolor-0.0.4/Rakefile +72 -0
  14. data/examples/Visualise/term-ansicolor-0.0.4/VERSION +1 -0
  15. data/examples/Visualise/term-ansicolor-0.0.4/examples/cdiff.rb +20 -0
  16. data/examples/Visualise/term-ansicolor-0.0.4/examples/example.rb +82 -0
  17. data/examples/Visualise/term-ansicolor-0.0.4/install.rb +12 -0
  18. data/examples/Visualise/term-ansicolor-0.0.4/lib/term/ansicolor.rb +78 -0
  19. data/examples/Visualise/xpath_visual.rb +45 -0
  20. data/examples/add_children.rb +14 -0
  21. data/examples/add_elements.rb +13 -0
  22. data/examples/attrs.rb +15 -0
  23. data/examples/children.rb +14 -0
  24. data/examples/concurrent.rb +30 -0
  25. data/examples/copy.rb +23 -0
  26. data/examples/create.rb +18 -0
  27. data/examples/delete.rb +30 -0
  28. data/examples/move_elements.rb +12 -0
  29. data/examples/namespace.rb +14 -0
  30. data/examples/namespace_detailed.rb +36 -0
  31. data/examples/namespace_find.rb +20 -0
  32. data/examples/pull.rb +18 -0
  33. data/examples/qname.rb +16 -0
  34. data/examples/replace.rb +14 -0
  35. data/examples/set_OR_replace.rb +32 -0
  36. data/examples/signals.rb +28 -0
  37. data/examples/string.rb +27 -0
  38. data/examples/write.rb +11 -0
  39. data/examples/xpath_attrs.rb +19 -0
  40. data/examples/xpath_functions.rb +7 -0
  41. data/examples/xpath_root.rb +6 -0
  42. data/extconf.rb +29 -0
  43. data/rbxs.c +136 -0
  44. data/rbxs.h +53 -0
  45. data/rbxs_dom.c +483 -0
  46. data/rbxs_dom.h +32 -0
  47. data/rbxs_domattribute.c +189 -0
  48. data/rbxs_domattribute.h +18 -0
  49. data/rbxs_domattributeset.c +182 -0
  50. data/rbxs_domattributeset.h +17 -0
  51. data/rbxs_domelement.c +656 -0
  52. data/rbxs_domelement.h +18 -0
  53. data/rbxs_domnamespace.c +127 -0
  54. data/rbxs_domnamespace.h +18 -0
  55. data/rbxs_domnamespaceset.c +276 -0
  56. data/rbxs_domnamespaceset.h +17 -0
  57. data/rbxs_domnodeset.c +284 -0
  58. data/rbxs_domnodeset.h +19 -0
  59. data/rbxs_domother.c +121 -0
  60. data/rbxs_domother.h +18 -0
  61. data/rbxs_domtext.c +165 -0
  62. data/rbxs_domtext.h +18 -0
  63. data/rbxs_pull.c +244 -0
  64. data/rbxs_pull.h +17 -0
  65. data/rbxs_pullattribute.c +124 -0
  66. data/rbxs_pullattribute.h +18 -0
  67. data/rbxs_pullattributeset.c +156 -0
  68. data/rbxs_pullattributeset.h +17 -0
  69. data/rbxs_qname.c +267 -0
  70. data/rbxs_qname.h +18 -0
  71. data/rbxs_utils.h +39 -0
  72. data/test/namespace_test.rb +83 -0
  73. metadata +125 -0
@@ -0,0 +1,127 @@
1
+ #include "rbxs_dom.h"
2
+ #include "rbxs_domnamespace.h"
3
+
4
+ /* -- */
5
+ //***********************************************************************************
6
+ // GC
7
+ //***********************************************************************************
8
+ void rbxs_domnamespace_free(rbxs_domnamespace *prbxs_domnamespace) {
9
+ if (prbxs_domnamespace != NULL) {
10
+ prbxs_domnamespace->ns->_private = NULL;
11
+ free(prbxs_domnamespace);
12
+ }
13
+ }
14
+
15
+ void rbxs_domnamespace_mark(rbxs_domnamespace *prbxs_domnamespace) {
16
+ if (prbxs_domnamespace == NULL) return;
17
+ if (!NIL_P(prbxs_domnamespace->node)) rb_gc_mark(prbxs_domnamespace->node);
18
+ }
19
+
20
+ //***********************************************************************************
21
+ // Methods
22
+ //***********************************************************************************
23
+ /* ++ */
24
+
25
+ /*
26
+ * Documentation
27
+ */
28
+ VALUE rbxs_domnamespace_inspect(VALUE self)
29
+ {
30
+ rbxs_domnamespace *prbxs_domnamespace;
31
+ VALUE *argv;
32
+
33
+ Data_Get_Struct(self, rbxs_domnamespace, prbxs_domnamespace);
34
+ if (prbxs_domnamespace->ns != NULL) {
35
+ argv = ALLOCA_N(VALUE, 5);
36
+ argv[0] = rb_str_new2("#<%s:0x%x %s=\"%s\">");
37
+ argv[1] = CLASS_OF(self);
38
+ argv[2] = rb_obj_id(self);
39
+ argv[3] = rb_str_new2(prbxs_domnamespace->ns->prefix ? (char *)prbxs_domnamespace->ns->prefix : "");
40
+ argv[4] = rb_str_new2((char *)prbxs_domnamespace->ns->href);
41
+ return(rb_f_sprintf(5, argv));
42
+ }
43
+ return(Qnil);
44
+ }
45
+
46
+ /*
47
+ * Documentation
48
+ */
49
+ VALUE rbxs_domnamespace_to_s(VALUE self)
50
+ {
51
+ rbxs_domnamespace *prbxs_domnamespace;
52
+
53
+ Data_Get_Struct(self, rbxs_domnamespace, prbxs_domnamespace);
54
+ if (prbxs_domnamespace->ns != NULL)
55
+ return(rb_str_new2(prbxs_domnamespace->ns->prefix ? (char *)prbxs_domnamespace->ns->prefix : ""));
56
+ return(Qnil);
57
+ }
58
+
59
+ /*
60
+ * Documentation
61
+ */
62
+ VALUE rbxs_domnamespace_prefix(VALUE self)
63
+ {
64
+ rbxs_domnamespace *prbxs_domnamespace;
65
+ Data_Get_Struct(self, rbxs_domnamespace, prbxs_domnamespace);
66
+
67
+ if (prbxs_domnamespace->ns && prbxs_domnamespace->ns->prefix)
68
+ return rb_str_new2((char *)prbxs_domnamespace->ns->prefix);
69
+
70
+ return Qnil;
71
+ }
72
+
73
+ /*
74
+ * Documentation
75
+ */
76
+ VALUE rbxs_domnamespace_href(VALUE self)
77
+ {
78
+ rbxs_domnamespace *prbxs_domnamespace;
79
+ Data_Get_Struct(self, rbxs_domnamespace, prbxs_domnamespace);
80
+
81
+ if (prbxs_domnamespace->ns && prbxs_domnamespace->ns->href)
82
+ return rb_str_new2((char *)prbxs_domnamespace->ns->href);
83
+
84
+ return Qnil;
85
+ }
86
+
87
+ //***********************************************************************************
88
+ // Constructors
89
+ //***********************************************************************************
90
+ VALUE rbxs_domnamespace_new(VALUE class, VALUE node, xmlNsPtr ns) {
91
+ rbxs_domnamespace *prbxs_domnamespace;
92
+ VALUE result;
93
+
94
+ if (ns->_private) {
95
+ return (VALUE) ns->_private;
96
+ }
97
+
98
+ prbxs_domnamespace = (rbxs_domnamespace *)malloc(sizeof(rbxs_domnamespace));
99
+ if (prbxs_domnamespace == NULL )
100
+ rb_raise(rb_eNoMemError, "No memory left for XML::Smart::domNamespace struct");
101
+
102
+ prbxs_domnamespace->node = node;
103
+ prbxs_domnamespace->ns = ns;
104
+
105
+ result = Data_Wrap_Struct(class, rbxs_domnamespace_mark, rbxs_domnamespace_free, prbxs_domnamespace);
106
+ prbxs_domnamespace->ns->_private = (void*) result;
107
+ return result;
108
+ }
109
+
110
+ //***********************************************************************************
111
+ // Initialize class Node
112
+ //***********************************************************************************
113
+ #ifdef RDOC__
114
+ mXML = rb_define_module( "XML" );
115
+ cSmart = rb_define_class_under( mXML, "Smart", rb_cObject );
116
+ cSmartDom = rb_define_class_under( cSmart, "Dom", rb_cObject );
117
+ #endif
118
+ VALUE cSmartDomNamespace;
119
+
120
+ void init_rbxs_domnamespace(void) {
121
+ cSmartDomNamespace = rb_define_class_under( cSmartDom, "Namespace", rb_cObject );
122
+
123
+ rb_define_method(cSmartDomNamespace, "inspect", rbxs_domnamespace_inspect, 0);
124
+ rb_define_method(cSmartDomNamespace, "to_s", rbxs_domnamespace_to_s, 0);
125
+ rb_define_method(cSmartDomNamespace, "prefix", rbxs_domnamespace_prefix, 0);
126
+ rb_define_method(cSmartDomNamespace, "href", rbxs_domnamespace_href, 0);
127
+ }
@@ -0,0 +1,18 @@
1
+ /* Please see the COPYING file for copyright and distribution information */
2
+
3
+ #ifndef __RBXS_DOMNAMESPACE_H__
4
+ #define __RBXS_DOMNAMESPACE_H__
5
+
6
+ #include "rbxs.h"
7
+
8
+ RUBY_EXTERN VALUE cSmartDomNamespace;
9
+
10
+ typedef struct rbxs_domnamespace {
11
+ VALUE node;
12
+ xmlNsPtr ns;
13
+ } rbxs_domnamespace;
14
+
15
+ RUBY_EXTERN VALUE rbxs_domnamespace_new(VALUE class, VALUE node, xmlNsPtr ns);
16
+ RUBY_EXTERN void init_rbxs_domnamespace(void);
17
+
18
+ #endif
@@ -0,0 +1,276 @@
1
+ #include "rbxs_dom.h"
2
+ #include "rbxs_domelement.h"
3
+ #include "rbxs_domnamespace.h"
4
+ #include "rbxs_domnamespaceset.h"
5
+
6
+ #define XML_XMLNS_NAMESPACE (unsigned char *) "http://www.w3.org/2000/xmlns/"
7
+
8
+ /* -- */
9
+ //***********************************************************************************
10
+ // GC
11
+ //***********************************************************************************
12
+ void rbxs_domnamespaceset_free(rbxs_domnamespaceset *prbxs_domnamespaceset) {
13
+ if (prbxs_domnamespaceset != NULL) {
14
+ free(prbxs_domnamespaceset);
15
+ }
16
+ }
17
+
18
+ void rbxs_domnamespaceset_mark(rbxs_domnamespaceset *prbxs_domnamespaceset) {
19
+ if (prbxs_domnamespaceset == NULL) return;
20
+ if (!NIL_P(prbxs_domnamespaceset->node)) rb_gc_mark(prbxs_domnamespaceset->node);
21
+ }
22
+
23
+ //***********************************************************************************
24
+ // Methods
25
+ //***********************************************************************************
26
+ /* ++ */
27
+
28
+ /*
29
+ * Documentation
30
+ */
31
+ VALUE rbxs_domnamespaceset_include(VALUE self, VALUE prefix)
32
+ {
33
+ rbxs_domnamespaceset *prbxs_domnamespaceset;
34
+ rbxs_domelement *prbxs_domelement;
35
+ xmlNsPtr ns;
36
+ unsigned char *cmp;
37
+
38
+ Check_Type(prefix, T_STRING);
39
+ Data_Get_Struct(self, rbxs_domnamespaceset, prbxs_domnamespaceset);
40
+ Data_Get_Struct(prbxs_domnamespaceset->node, rbxs_domelement, prbxs_domelement);
41
+
42
+ ns = prbxs_domelement->node->nsDef;
43
+ cmp = (unsigned char *)StringValuePtr(prefix);
44
+ while (ns != NULL) {
45
+ if (xmlStrEqual(ns->prefix,cmp)) {
46
+ return Qtrue;
47
+ }
48
+ ns = ns->next;
49
+ }
50
+ return(Qfalse);
51
+ }
52
+
53
+ /*
54
+ * Documentation
55
+ */
56
+ VALUE rbxs_domnamespaceset_length(VALUE self)
57
+ {
58
+ rbxs_domnamespaceset *prbxs_domnamespaceset;
59
+ rbxs_domelement *prbxs_domelement;
60
+ int counter = 0;
61
+ xmlNsPtr ns;
62
+
63
+ Data_Get_Struct(self, rbxs_domnamespaceset, prbxs_domnamespaceset);
64
+ Data_Get_Struct(prbxs_domnamespaceset->node, rbxs_domelement, prbxs_domelement);
65
+
66
+ ns = prbxs_domelement->node->nsDef;
67
+ while (ns != NULL) {
68
+ counter++;
69
+ ns = ns->next;
70
+ }
71
+ return(INT2NUM(counter));
72
+ }
73
+
74
+ /*
75
+ * Documentation
76
+ */
77
+ VALUE rbxs_domnamespaceset_find(VALUE self,VALUE value)
78
+ {
79
+ rbxs_domnamespaceset *prbxs_domnamespaceset;
80
+ rbxs_domelement *prbxs_domelement;
81
+ xmlNsPtr ns;
82
+
83
+ Check_Type(value,T_STRING);
84
+ Data_Get_Struct(self, rbxs_domnamespaceset, prbxs_domnamespaceset);
85
+ Data_Get_Struct(prbxs_domnamespaceset->node, rbxs_domelement, prbxs_domelement);
86
+
87
+ ns = xmlSearchNs(prbxs_domelement->node->doc, prbxs_domelement->node, (unsigned char *)StringValuePtr(value));
88
+ if (ns)
89
+ return rbxs_domnamespace_new(cSmartDomNamespace,self,ns);
90
+ else {
91
+ ns = xmlSearchNsByHref(prbxs_domelement->node->doc, prbxs_domelement->node, (unsigned char *)StringValuePtr(value));
92
+ if (ns) return rbxs_domnamespace_new(cSmartDomNamespace,self,ns);
93
+ }
94
+
95
+ return Qnil;
96
+ }
97
+
98
+ /*
99
+ * Documentation
100
+ */
101
+ VALUE rbxs_domnamespaceset_get_ns(VALUE self, VALUE prefix)
102
+ {
103
+ rbxs_domnamespaceset *prbxs_domnamespaceset;
104
+ rbxs_domelement *prbxs_domelement;
105
+ xmlNsPtr ns;
106
+ unsigned char *cmp;
107
+
108
+ Check_Type(prefix, T_STRING);
109
+ Data_Get_Struct(self, rbxs_domnamespaceset, prbxs_domnamespaceset);
110
+ Data_Get_Struct(prbxs_domnamespaceset->node, rbxs_domelement, prbxs_domelement);
111
+
112
+ ns = prbxs_domelement->node->nsDef;
113
+ cmp = (unsigned char *)StringValuePtr(prefix);
114
+ while (ns != NULL) {
115
+ if (xmlStrEqual(ns->prefix,cmp)) {
116
+ return rbxs_domnamespace_new(cSmartDomNamespace, prbxs_domnamespaceset->node, ns);
117
+ }
118
+ ns = ns->next;
119
+ }
120
+ return(Qnil);
121
+ }
122
+
123
+ /*
124
+ * Documentation
125
+ */
126
+ VALUE rbxs_domnamespaceset_get(VALUE self, VALUE prefix)
127
+ {
128
+ rbxs_domnamespaceset *prbxs_domnamespaceset;
129
+ rbxs_domelement *prbxs_domelement;
130
+ xmlNsPtr ns;
131
+ unsigned char *cmp;
132
+
133
+ Check_Type(prefix, T_STRING);
134
+ Data_Get_Struct(self, rbxs_domnamespaceset, prbxs_domnamespaceset);
135
+ Data_Get_Struct(prbxs_domnamespaceset->node, rbxs_domelement, prbxs_domelement);
136
+
137
+ ns = prbxs_domelement->node->nsDef;
138
+ cmp = (unsigned char *)StringValuePtr(prefix);
139
+ while (ns != NULL) {
140
+ if (xmlStrEqual(ns->prefix,cmp))
141
+ return(rb_str_new2((char *)ns->href));
142
+ ns = ns->next;
143
+ }
144
+ return(Qnil);
145
+ }
146
+
147
+ /*
148
+ * Documentation
149
+ */
150
+ VALUE rbxs_domnamespaceset_set(VALUE self, VALUE prefix, VALUE href)
151
+ {
152
+ rbxs_domnamespaceset *prbxs_domnamespaceset;
153
+ rbxs_domelement *prbxs_domelement;
154
+ rbxs_dom *prbxs_dom;
155
+ unsigned char *t_href, *t_prefix;
156
+ xmlNsPtr ns = NULL;
157
+ unsigned short int type;
158
+ VALUE ret,str;
159
+
160
+ Check_Type(prefix, T_STRING);
161
+ Data_Get_Struct(self, rbxs_domnamespaceset, prbxs_domnamespaceset);
162
+ Data_Get_Struct(prbxs_domnamespaceset->node, rbxs_domelement, prbxs_domelement);
163
+ Data_Get_Struct(prbxs_domelement->doc, rbxs_dom, prbxs_dom);
164
+
165
+ str = rb_obj_as_string(href);
166
+ if (NIL_P(str) || TYPE(str) != T_STRING)
167
+ rb_raise(rb_eTypeError, "cannot convert href to string");
168
+ t_href = (unsigned char *)StringValuePtr(str);
169
+ if (!xmlCheckUTF8(t_href))
170
+ rb_raise(rb_eArgError, "href must be utf8 encoded");
171
+
172
+ str = rb_obj_as_string(prefix);
173
+ if (NIL_P(str) || TYPE(str) != T_STRING)
174
+ rb_raise(rb_eTypeError, "cannot convert prefix to string");
175
+ t_prefix = (unsigned char *)StringValuePtr(str);
176
+ if (!xmlCheckUTF8(t_prefix))
177
+ rb_raise(rb_eArgError, "prefix must be utf8 encoded");
178
+
179
+ type = RBXS_DOM_SIGNAL_CHANGE;
180
+ if (t_href == NULL ||
181
+ (!xmlStrEqual(t_prefix, (unsigned char *)"xml") && xmlStrEqual(t_href, XML_XML_NAMESPACE)) ||
182
+ (prbxs_domelement->node->type == XML_ATTRIBUTE_NODE && !xmlStrEqual(t_prefix, (unsigned char *)"xmlns") && xmlStrEqual(t_href, XML_XMLNS_NAMESPACE)) ||
183
+ (prbxs_domelement->node->type == XML_ATTRIBUTE_NODE && !xmlStrEqual(prbxs_domelement->node->name, (unsigned char *)"xmlns"))) {
184
+ ns = NULL;
185
+ } else {
186
+ xmlNsPtr cmp;
187
+ cmp = prbxs_domelement->node->nsDef;
188
+ while (cmp != NULL) {
189
+ if (xmlStrEqual(t_prefix, cmp->prefix)) {
190
+ if (xmlStrEqual(t_href, cmp->href)) {
191
+ ns = cmp;
192
+ break;
193
+ } else {
194
+ xmlFree((char *) cmp->href);
195
+ cmp->href = xmlStrdup(t_href);
196
+ ns = cmp;
197
+ break;
198
+ }
199
+ }
200
+ cmp = cmp->next;
201
+ }
202
+ if (ns == NULL) {
203
+ ns = xmlNewNs(prbxs_domelement->node,t_href,t_prefix);
204
+ type = RBXS_DOM_SIGNAL_ADD;
205
+ }
206
+ }
207
+ if (ns == NULL)
208
+ rb_raise(rb_eRuntimeError, "Couldn't add namespace");
209
+ xmlSetNs(prbxs_domelement->node, ns);
210
+
211
+ ret = rbxs_domnamespace_new(cSmartDomNamespace,prbxs_domnamespaceset->node,ns);
212
+ rbxs_dom_change_handlers_execute(prbxs_dom,type,ret);
213
+ return(ret);
214
+ }
215
+
216
+ /*
217
+ * Documentation
218
+ */
219
+ VALUE rbxs_domnamespaceset_each(VALUE self)
220
+ {
221
+ rbxs_domnamespaceset *prbxs_domnamespaceset;
222
+ rbxs_domelement *prbxs_domelement;
223
+ VALUE obj;
224
+ xmlNsPtr ns;
225
+
226
+ Data_Get_Struct(self, rbxs_domnamespaceset, prbxs_domnamespaceset);
227
+ Data_Get_Struct(prbxs_domnamespaceset->node, rbxs_domelement, prbxs_domelement);
228
+
229
+ ns = prbxs_domelement->node->nsDef;
230
+ while (ns != NULL) {
231
+ obj = rbxs_domnamespace_new(cSmartDomNamespace, prbxs_domnamespaceset->node, ns);
232
+ rb_yield(obj);
233
+ ns = ns->next;
234
+ }
235
+ return(self);
236
+ }
237
+
238
+ //***********************************************************************************
239
+ // Constructors
240
+ //***********************************************************************************
241
+ VALUE rbxs_domnamespaceset_new(VALUE class, VALUE node) {
242
+ rbxs_domnamespaceset *prbxs_domnamespaceset;
243
+
244
+ prbxs_domnamespaceset = (rbxs_domnamespaceset *)malloc(sizeof(rbxs_domnamespaceset));
245
+ if (prbxs_domnamespaceset == NULL )
246
+ rb_raise(rb_eNoMemError, "No memory left for XML::Smart::Dom::NamespaceSet struct");
247
+
248
+ prbxs_domnamespaceset->node = node;
249
+
250
+ return(Data_Wrap_Struct(class, rbxs_domnamespaceset_mark, rbxs_domnamespaceset_free, prbxs_domnamespaceset));
251
+ }
252
+
253
+ //***********************************************************************************
254
+ // Initialize class Node
255
+ //***********************************************************************************
256
+ #ifdef RDOC__
257
+ mXML = rb_define_module( "XML" );
258
+ cSmart = rb_define_class_under( mXML, "Smart", rb_cObject );
259
+ cSmartDom = rb_define_class_under( cSmart, "Dom", rb_cObject );
260
+ #endif
261
+ VALUE cSmartDomNamespaceSet;
262
+
263
+ void init_rbxs_domnamespaceset(void) {
264
+ cSmartDomNamespaceSet = rb_define_class_under( cSmartDom, "NamespaceSet", rb_cObject );
265
+ rb_include_module(cSmartDomNamespaceSet, rb_mEnumerable);
266
+
267
+ rb_define_method(cSmartDomNamespaceSet, "has_ns?", rbxs_domnamespaceset_include, 1);
268
+ rb_define_method(cSmartDomNamespaceSet, "get_ns", rbxs_domnamespaceset_get_ns, 1);
269
+ rb_define_method(cSmartDomNamespaceSet, "include?", rbxs_domnamespaceset_include, 1);
270
+ rb_define_method(cSmartDomNamespaceSet, "[]", rbxs_domnamespaceset_get, 1);
271
+ rb_define_method(cSmartDomNamespaceSet, "[]=", rbxs_domnamespaceset_set, 2);
272
+ rb_define_method(cSmartDomNamespaceSet, "add", rbxs_domnamespaceset_set, 2);
273
+ rb_define_method(cSmartDomNamespaceSet, "length", rbxs_domnamespaceset_length, 0);
274
+ rb_define_method(cSmartDomNamespaceSet, "each", rbxs_domnamespaceset_each, 0);
275
+ rb_define_method(cSmartDomNamespaceSet, "find", rbxs_domnamespaceset_find, 1);
276
+ }
@@ -0,0 +1,17 @@
1
+ /* Please see the COPYING file for copyright and distribution information */
2
+
3
+ #ifndef __RBXS_DOMNAMESPACESET_H__
4
+ #define __RBXS_DOMNAMESPACESET_H__
5
+
6
+ #include "rbxs.h"
7
+
8
+ RUBY_EXTERN VALUE cSmartDomNamespaceSet;
9
+
10
+ typedef struct rbxs_domnamespaceset {
11
+ VALUE node;
12
+ } rbxs_domnamespaceset;
13
+
14
+ RUBY_EXTERN VALUE rbxs_domnamespaceset_new(VALUE class, VALUE node);
15
+ RUBY_EXTERN void init_rbxs_domnamespaceset(void);
16
+
17
+ #endif