libxml-ruby 0.6.0-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
Files changed (127) hide show
  1. data/CHANGES +122 -0
  2. data/LICENSE +23 -0
  3. data/README +144 -0
  4. data/ext/libxml/cbg.c +76 -0
  5. data/ext/libxml/extconf.rb +308 -0
  6. data/ext/libxml/libxml.c +62 -0
  7. data/ext/libxml/ruby_libxml.h +93 -0
  8. data/ext/libxml/ruby_xml_attr.c +405 -0
  9. data/ext/libxml/ruby_xml_attr.h +19 -0
  10. data/ext/libxml/ruby_xml_document.c +1111 -0
  11. data/ext/libxml/ruby_xml_document.h +27 -0
  12. data/ext/libxml/ruby_xml_dtd.c +168 -0
  13. data/ext/libxml/ruby_xml_dtd.h +17 -0
  14. data/ext/libxml/ruby_xml_html_parser.c +449 -0
  15. data/ext/libxml/ruby_xml_html_parser.h +29 -0
  16. data/ext/libxml/ruby_xml_input_cbg.c +158 -0
  17. data/ext/libxml/ruby_xml_input_cbg.h +20 -0
  18. data/ext/libxml/ruby_xml_node.c +2410 -0
  19. data/ext/libxml/ruby_xml_node.h +27 -0
  20. data/ext/libxml/ruby_xml_node_set.c +170 -0
  21. data/ext/libxml/ruby_xml_node_set.h +20 -0
  22. data/ext/libxml/ruby_xml_ns.c +153 -0
  23. data/ext/libxml/ruby_xml_ns.h +21 -0
  24. data/ext/libxml/ruby_xml_parser.c +1425 -0
  25. data/ext/libxml/ruby_xml_parser.h +31 -0
  26. data/ext/libxml/ruby_xml_parser_context.c +750 -0
  27. data/ext/libxml/ruby_xml_parser_context.h +22 -0
  28. data/ext/libxml/ruby_xml_reader.c +900 -0
  29. data/ext/libxml/ruby_xml_reader.h +14 -0
  30. data/ext/libxml/ruby_xml_sax_parser.c +485 -0
  31. data/ext/libxml/ruby_xml_sax_parser.h +56 -0
  32. data/ext/libxml/ruby_xml_schema.c +146 -0
  33. data/ext/libxml/ruby_xml_schema.h +16 -0
  34. data/ext/libxml/ruby_xml_state.c +113 -0
  35. data/ext/libxml/ruby_xml_state.h +12 -0
  36. data/ext/libxml/ruby_xml_tree.c +43 -0
  37. data/ext/libxml/ruby_xml_tree.h +12 -0
  38. data/ext/libxml/ruby_xml_xinclude.c +20 -0
  39. data/ext/libxml/ruby_xml_xinclude.h +13 -0
  40. data/ext/libxml/ruby_xml_xpath.c +243 -0
  41. data/ext/libxml/ruby_xml_xpath.h +23 -0
  42. data/ext/libxml/ruby_xml_xpath_context.c +118 -0
  43. data/ext/libxml/ruby_xml_xpath_context.h +20 -0
  44. data/ext/libxml/ruby_xml_xpath_object.c +293 -0
  45. data/ext/libxml/ruby_xml_xpath_object.h +28 -0
  46. data/ext/libxml/ruby_xml_xpointer.c +100 -0
  47. data/ext/libxml/ruby_xml_xpointer.h +27 -0
  48. data/ext/libxml/ruby_xml_xpointer_context.c +21 -0
  49. data/ext/libxml/ruby_xml_xpointer_context.h +18 -0
  50. data/ext/libxml/sax_parser_callbacks.inc +213 -0
  51. data/ext/libxml/version.h +9 -0
  52. data/lib/libxml.rb +125 -0
  53. data/lib/libxml_ruby.so +0 -0
  54. data/lib/xml/libxml.rb +5 -0
  55. data/mingw/libiconv-2.dll +0 -0
  56. data/mingw/libxml2-2.dll +0 -0
  57. data/mingw/libxml_ruby.so +0 -0
  58. data/mingw/mingw.rake +36 -0
  59. data/test/dtd-test.rb +24 -0
  60. data/test/etc_doc_to_s.rb +19 -0
  61. data/test/ets_copy_bug.rb +21 -0
  62. data/test/ets_copy_bug2.rb +32 -0
  63. data/test/ets_copy_bug3.rb +38 -0
  64. data/test/ets_doc_file.rb +15 -0
  65. data/test/ets_doc_to_s.rb +21 -0
  66. data/test/ets_gpx.rb +26 -0
  67. data/test/ets_node_gc.rb +21 -0
  68. data/test/ets_test.xml +2 -0
  69. data/test/ets_tsr.rb +9 -0
  70. data/test/gc.log +0 -0
  71. data/test/merge_bug.rb +55 -0
  72. data/test/schema-test.rb +74 -0
  73. data/test/tc_well_formed.rb +11 -0
  74. data/test/tc_xml_document.rb +52 -0
  75. data/test/tc_xml_document_write.rb +24 -0
  76. data/test/tc_xml_document_write2.rb +54 -0
  77. data/test/tc_xml_document_write3.rb +96 -0
  78. data/test/tc_xml_html_parser.rb +63 -0
  79. data/test/tc_xml_node.rb +59 -0
  80. data/test/tc_xml_node2.rb +25 -0
  81. data/test/tc_xml_node3.rb +27 -0
  82. data/test/tc_xml_node4.rb +86 -0
  83. data/test/tc_xml_node5.rb +52 -0
  84. data/test/tc_xml_node6.rb +27 -0
  85. data/test/tc_xml_node7.rb +35 -0
  86. data/test/tc_xml_node8.rb +32 -0
  87. data/test/tc_xml_node9.rb +32 -0
  88. data/test/tc_xml_node_copy.rb +40 -0
  89. data/test/tc_xml_node_set.rb +24 -0
  90. data/test/tc_xml_node_set2.rb +37 -0
  91. data/test/tc_xml_node_text.rb +17 -0
  92. data/test/tc_xml_node_xlink.rb +28 -0
  93. data/test/tc_xml_parser.rb +190 -0
  94. data/test/tc_xml_parser2.rb +16 -0
  95. data/test/tc_xml_parser3.rb +23 -0
  96. data/test/tc_xml_parser4.rb +33 -0
  97. data/test/tc_xml_parser5.rb +27 -0
  98. data/test/tc_xml_parser6.rb +23 -0
  99. data/test/tc_xml_parser7.rb +28 -0
  100. data/test/tc_xml_parser8.rb +32 -0
  101. data/test/tc_xml_parser9.rb +11 -0
  102. data/test/tc_xml_parser_context.rb +88 -0
  103. data/test/tc_xml_reader.rb +112 -0
  104. data/test/tc_xml_sax_parser.rb +104 -0
  105. data/test/tc_xml_sax_parser2.rb +51 -0
  106. data/test/tc_xml_xinclude.rb +30 -0
  107. data/test/tc_xml_xpath.rb +38 -0
  108. data/test/tc_xml_xpath2.rb +14 -0
  109. data/test/tc_xml_xpointer.rb +78 -0
  110. data/vc/libxml.sln +20 -0
  111. data/vc/libxml.vcproj +389 -0
  112. data/work/Rakefile +247 -0
  113. data/work/task/make +26 -0
  114. data/work/task/memory +37 -0
  115. data/work/task/rdoc +39 -0
  116. data/work/task/setup +1616 -0
  117. data/work/task/test +29 -0
  118. data/work/test/ets_runner.rb +33 -0
  119. data/work/test/libxml_test.rb +3 -0
  120. data/work/test/runner.rb +0 -0
  121. data/work/test/runner_ets.rb +33 -0
  122. data/work/vc/debug/libxml.exp +0 -0
  123. data/work/vc/debug/libxml.ilk +0 -0
  124. data/work/vc/debug/libxml.lib +0 -0
  125. data/work/vc/debug/libxml.pdb +0 -0
  126. data/work/vc/debug/libxml.so +0 -0
  127. metadata +224 -0
@@ -0,0 +1,31 @@
1
+ /* $Id: ruby_xml_parser.h 39 2006-02-21 20:40:16Z roscopeco $ */
2
+
3
+ /* Please see the LICENSE file for copyright and distribution information */
4
+
5
+ #ifndef __RUBY_XML_PARSER__
6
+ #define __RUBY_XML_PARSER__
7
+
8
+ #define MAX_LIBXML_FEATURES_LEN 50
9
+
10
+ extern int ruby_xml_parser_count;
11
+ extern VALUE cXMLParser;
12
+ extern VALUE eXMLParserParseError;
13
+
14
+ typedef struct ruby_xml_parser {
15
+ VALUE ctxt;
16
+ int parsed;
17
+ void *data;
18
+ int data_type;
19
+ } ruby_xml_parser;
20
+
21
+ VALUE ruby_xml_parser_default_load_external_dtd_set(VALUE class, VALUE bool);
22
+ VALUE ruby_xml_parser_default_substitute_entities_set(VALUE class, VALUE bool);
23
+ VALUE ruby_xml_parser_features(VALUE self);
24
+ VALUE ruby_xml_parser_filename_get(VALUE self);
25
+ VALUE ruby_xml_parser_filename_set(VALUE self, VALUE filename);
26
+ VALUE ruby_xml_parser_new(VALUE class);
27
+ VALUE ruby_xml_parser_parse(VALUE self);
28
+ VALUE ruby_xml_parser_str_get(VALUE self);
29
+ VALUE ruby_xml_parser_str_set(VALUE self, VALUE str);
30
+
31
+ #endif
@@ -0,0 +1,750 @@
1
+ /* $Id: ruby_xml_parser_context.c 300 2008-07-01 19:14:15Z cfis $ */
2
+
3
+ /* Please see the LICENSE file for copyright and distribution information */
4
+
5
+ #include "ruby_libxml.h"
6
+ #include "ruby_xml_parser_context.h"
7
+
8
+ /* TODO:
9
+ *
10
+ * *) xmlParserInput class/structure
11
+ * *) errNo and mappings
12
+ * *) validity context
13
+ * *) record_info or stats class/structure
14
+ * *) xmlParserNodeInfoSeq
15
+ * *) xmlParserInputState
16
+ */
17
+ VALUE cXMLParserContext;
18
+
19
+ /*
20
+ * call-seq:
21
+ * context.data_directory => "dir"
22
+ *
23
+ * Obtain the data directory associated with this context.
24
+ */
25
+ VALUE
26
+ ruby_xml_parser_context_data_directory_get(VALUE self) {
27
+ ruby_xml_parser_context *rxpc;
28
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
29
+
30
+ if (rxpc->ctxt->directory == NULL)
31
+ return(Qnil);
32
+ else
33
+ return(rb_str_new2(rxpc->ctxt->directory));
34
+ }
35
+
36
+
37
+ /*
38
+ * call-seq:
39
+ * context.depth => num
40
+ *
41
+ * Obtain the depth of this context.
42
+ */
43
+ VALUE
44
+ ruby_xml_parser_context_depth_get(VALUE self) {
45
+ ruby_xml_parser_context *rxpc;
46
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
47
+
48
+ return(INT2NUM(rxpc->ctxt->depth));
49
+ }
50
+
51
+
52
+ /*
53
+ * call-seq:
54
+ * context.disable_sax? => (true|false)
55
+ *
56
+ * Determine whether SAX-based processing is disabled
57
+ * in this context.
58
+ */
59
+ VALUE
60
+ ruby_xml_parser_context_disable_sax_q(VALUE self) {
61
+ ruby_xml_parser_context *rxpc;
62
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
63
+
64
+ if (rxpc->ctxt->disableSAX)
65
+ return(Qtrue);
66
+ else
67
+ return(Qfalse);
68
+ }
69
+
70
+
71
+ /*
72
+ * call-seq:
73
+ * context.doc => document
74
+ *
75
+ * Obtain the +XML::Document+ associated with this context.
76
+ */
77
+ VALUE
78
+ ruby_xml_parser_context_doc_get(VALUE self) {
79
+ ruby_xml_parser_context *rxpc;
80
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
81
+
82
+ if (rxpc->ctxt->myDoc == NULL)
83
+ return(Qnil);
84
+
85
+ return(ruby_xml_document_wrap(rxpc->ctxt->myDoc));
86
+ }
87
+
88
+
89
+ /*
90
+ * call-seq:
91
+ * context.docbook? => (true|false)
92
+ *
93
+ * Determine whether this is a docbook context.
94
+ */
95
+ VALUE
96
+ ruby_xml_parser_context_docbook_q(VALUE self) {
97
+ ruby_xml_parser_context *rxpc;
98
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
99
+
100
+ if (rxpc->ctxt->html == 2) // TODO check this
101
+ return(Qtrue);
102
+ else
103
+ return(Qfalse);
104
+ }
105
+
106
+
107
+ /*
108
+ * call-seq:
109
+ * context.encoding => "encoding"
110
+ *
111
+ * Obtain the character encoding identifier used in
112
+ * this context.
113
+ */
114
+ VALUE
115
+ ruby_xml_parser_context_encoding_get(VALUE self) {
116
+ ruby_xml_parser_context *rxpc;
117
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
118
+
119
+ if (rxpc->ctxt->encoding == NULL)
120
+ return(Qnil);
121
+ else
122
+ return(rb_str_new2((const char*)rxpc->ctxt->encoding));
123
+ }
124
+
125
+
126
+ /*
127
+ * call-seq:
128
+ * context.errno => num
129
+ *
130
+ * Obtain the last-error number in this context.
131
+ */
132
+ VALUE
133
+ ruby_xml_parser_context_errno_get(VALUE self) {
134
+ ruby_xml_parser_context *rxpc;
135
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
136
+
137
+ return(INT2NUM(rxpc->ctxt->errNo));
138
+ }
139
+
140
+
141
+ void
142
+ ruby_xml_parser_context_free(ruby_xml_parser_context *rxpc) {
143
+ if (rxpc->ctxt != NULL) {
144
+ xmlFreeParserCtxt(rxpc->ctxt);
145
+ rxpc->ctxt = NULL;
146
+ }
147
+
148
+ ruby_xfree(rxpc);
149
+ }
150
+
151
+ void
152
+ ruby_xml_parser_context_mark(void *v) {
153
+ if ( v == NULL ) return;
154
+ ruby_xml_state_marker();
155
+ }
156
+
157
+ /*
158
+ * call-seq:
159
+ * context.html? => (true|false)
160
+ *
161
+ * Determine whether this is an html context.
162
+ */
163
+ VALUE
164
+ ruby_xml_parser_context_html_q(VALUE self) {
165
+ ruby_xml_parser_context *rxpc;
166
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
167
+
168
+ if (rxpc->ctxt->html == 1)
169
+ return(Qtrue);
170
+ else
171
+ return(Qfalse);
172
+ }
173
+
174
+
175
+ /*
176
+ * call-seq:
177
+ * context.max_num_streams => num
178
+ *
179
+ * Obtain the limit on the number of IO streams opened in
180
+ * this context.
181
+ */
182
+ VALUE
183
+ ruby_xml_parser_context_io_max_num_streams_get(VALUE self) {
184
+ // TODO alias to max_streams and dep this?
185
+ ruby_xml_parser_context *rxpc;
186
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
187
+
188
+ return(INT2NUM(rxpc->ctxt->inputMax));
189
+ }
190
+
191
+
192
+ /*
193
+ * call-seq:
194
+ * context.num_streams => "dir"
195
+ *
196
+ * Obtain the actual number of IO streams in this
197
+ * context.
198
+ */
199
+ VALUE
200
+ ruby_xml_parser_context_io_num_streams_get(VALUE self) {
201
+ ruby_xml_parser_context *rxpc;
202
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
203
+
204
+ return(INT2NUM(rxpc->ctxt->inputNr));
205
+ }
206
+
207
+
208
+ /*
209
+ * call-seq:
210
+ * context.keep_blanks? => (true|false)
211
+ *
212
+ * Determine whether parsers in this context retain
213
+ * whitespace.
214
+ */
215
+ VALUE
216
+ ruby_xml_parser_context_keep_blanks_q(VALUE self) {
217
+ ruby_xml_parser_context *rxpc;
218
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
219
+
220
+ if (rxpc->ctxt->keepBlanks)
221
+ return(Qtrue);
222
+ else
223
+ return(Qfalse);
224
+ }
225
+
226
+
227
+ /*
228
+ * call-seq:
229
+ * context.name_depth => num
230
+ *
231
+ * Obtain the name depth for this context.
232
+ */
233
+ VALUE
234
+ ruby_xml_parser_context_name_depth_get(VALUE self) {
235
+ ruby_xml_parser_context *rxpc;
236
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
237
+
238
+ return(INT2NUM(rxpc->ctxt->nameNr));
239
+ }
240
+
241
+
242
+ /*
243
+ * call-seq:
244
+ * context.name_depth_max => num
245
+ *
246
+ * Obtain the maximum name depth for this context.
247
+ */
248
+ VALUE
249
+ ruby_xml_parser_context_name_depth_max_get(VALUE self) {
250
+ ruby_xml_parser_context *rxpc;
251
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
252
+
253
+ return(INT2NUM(rxpc->ctxt->nameMax));
254
+ }
255
+
256
+
257
+ /*
258
+ * call-seq:
259
+ * context.name_node => "name"
260
+ *
261
+ * Obtain the name node for this context.
262
+ */
263
+ VALUE
264
+ ruby_xml_parser_context_name_node_get(VALUE self) {
265
+ ruby_xml_parser_context *rxpc;
266
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
267
+
268
+ if (rxpc->ctxt->name == NULL)
269
+ return(Qnil);
270
+ else
271
+ return(rb_str_new2((const char*)rxpc->ctxt->name));
272
+ }
273
+
274
+
275
+ /*
276
+ * call-seq:
277
+ * context.name_tab => ["name", ..., "name"]
278
+ *
279
+ * Obtain the name table for this context.
280
+ */
281
+ VALUE
282
+ ruby_xml_parser_context_name_tab_get(VALUE self) {
283
+ int i;
284
+ ruby_xml_parser_context *rxpc;
285
+ VALUE tab_ary;
286
+
287
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
288
+
289
+ if (rxpc->ctxt->nameTab == NULL)
290
+ return(Qnil);
291
+
292
+ tab_ary = rb_ary_new();
293
+
294
+ for (i = (rxpc->ctxt->nameNr - 1); i >= 0; i--) {
295
+ if (rxpc->ctxt->nameTab[i] == NULL)
296
+ continue;
297
+ else
298
+ rb_ary_push(tab_ary, rb_str_new2((const char*)rxpc->ctxt->nameTab[i]));
299
+ }
300
+
301
+ return(tab_ary);
302
+ }
303
+
304
+
305
+ /*
306
+ * call-seq:
307
+ * context.node_depth => num
308
+ *
309
+ * Obtain the node depth for this context.
310
+ */
311
+ VALUE
312
+ ruby_xml_parser_context_node_depth_get(VALUE self) {
313
+ ruby_xml_parser_context *rxpc;
314
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
315
+
316
+ return(INT2NUM(rxpc->ctxt->nodeNr));
317
+ }
318
+
319
+
320
+ /*
321
+ * call-seq:
322
+ * context.node => node
323
+ *
324
+ * Obtain the root node of this context.
325
+ */
326
+ VALUE
327
+ ruby_xml_parser_context_node_get(VALUE self) {
328
+ ruby_xml_parser_context *rxpc;
329
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
330
+
331
+ if (rxpc->ctxt->node == NULL)
332
+ return(Qnil);
333
+ else
334
+ return(ruby_xml_node2_wrap(cXMLNode,
335
+ rxpc->ctxt->node));
336
+ }
337
+
338
+
339
+ /*
340
+ * call-seq:
341
+ * context.node_depth_max => num
342
+ *
343
+ * Obtain the maximum node depth for this context.
344
+ */
345
+ VALUE
346
+ ruby_xml_parser_context_node_depth_max_get(VALUE self) {
347
+ ruby_xml_parser_context *rxpc;
348
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
349
+
350
+ return(INT2NUM(rxpc->ctxt->nodeMax));
351
+ }
352
+
353
+
354
+ /*
355
+ * call-seq:
356
+ * context.num_chars => num
357
+ *
358
+ * Obtain the number of characters in this context.
359
+ */
360
+ VALUE
361
+ ruby_xml_parser_context_num_chars_get(VALUE self) {
362
+ ruby_xml_parser_context *rxpc;
363
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
364
+
365
+ return(LONG2NUM(rxpc->ctxt->nbChars));
366
+ }
367
+
368
+
369
+ VALUE
370
+ ruby_xml_parser_context_new(VALUE class, xmlParserCtxtPtr ctxt) {
371
+ ruby_xml_parser_context *rxpc;
372
+
373
+ rxpc = ALLOC(ruby_xml_parser_context);
374
+
375
+ rxpc->ctxt = ctxt;
376
+ return Data_Wrap_Struct(class,
377
+ ruby_xml_parser_context_mark,
378
+ ruby_xml_parser_context_free,
379
+ rxpc);
380
+ }
381
+
382
+
383
+ VALUE
384
+ ruby_xml_parser_context_new2(VALUE class) {
385
+ return(ruby_xml_parser_context_new(class, NULL));
386
+ }
387
+
388
+
389
+ VALUE
390
+ ruby_xml_parser_context_new3() {
391
+ return(ruby_xml_parser_context_new2(cXMLParserContext));
392
+ }
393
+
394
+
395
+ VALUE
396
+ ruby_xml_parser_context_options_set(VALUE self, VALUE options) {
397
+ ruby_xml_parser_context *rxpc;
398
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
399
+
400
+ if (xmlCtxtUseOptions(rxpc->ctxt, NUM2INT(options)))
401
+ return Qfalse;
402
+ else
403
+ return Qtrue;
404
+ }
405
+
406
+ VALUE
407
+ ruby_xml_parser_context_options_get(VALUE self) {
408
+ ruby_xml_parser_context *rxpc;
409
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
410
+ return INT2NUM(rxpc->ctxt->options);
411
+ }
412
+
413
+ /*
414
+ * call-seq:
415
+ * context.replace_entities? => (true|false)
416
+ *
417
+ * Determine whether external entity replacement is enabled in this
418
+ * context.
419
+ */
420
+ VALUE
421
+ ruby_xml_parser_context_replace_entities_q(VALUE self) {
422
+ ruby_xml_parser_context *rxpc;
423
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
424
+
425
+ if (rxpc->ctxt->replaceEntities)
426
+ return(Qtrue);
427
+ else
428
+ return(Qfalse);
429
+ }
430
+
431
+
432
+ /*
433
+ * call-seq:
434
+ * context.replace_entities = true|false
435
+ *
436
+ * Control whether external entity replacement is enabled in this
437
+ * context.
438
+ */
439
+ VALUE
440
+ ruby_xml_parser_context_replace_entities_set(VALUE self, VALUE bool) {
441
+ ruby_xml_parser_context *rxpc;
442
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
443
+
444
+ if (TYPE(bool) == T_FALSE) {
445
+ rxpc->ctxt->replaceEntities = 0;
446
+ return(Qfalse);
447
+ } else {
448
+ rxpc->ctxt->replaceEntities = 1;
449
+ return(Qfalse);
450
+ }
451
+ }
452
+
453
+
454
+ /*
455
+ * call-seq:
456
+ * context.reset
457
+ *
458
+ * Resets the parser context.
459
+ */
460
+ VALUE
461
+ ruby_xml_parser_context_reset(VALUE self) {
462
+ ruby_xml_parser_context *rxpc;
463
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
464
+ xmlCtxtReset(rxpc->ctxt);
465
+ }
466
+
467
+ /*
468
+ * call-seq:
469
+ * context.space_depth => num
470
+ *
471
+ * Obtain the space depth for this context.
472
+ */
473
+ VALUE
474
+ ruby_xml_parser_context_space_depth_get(VALUE self) {
475
+ ruby_xml_parser_context *rxpc;
476
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
477
+
478
+ return(INT2NUM(rxpc->ctxt->spaceNr));
479
+ }
480
+
481
+
482
+ /*
483
+ * call-seq:
484
+ * context.space_depth => num
485
+ *
486
+ * Obtain the maximum space depth for this context.
487
+ */
488
+ VALUE
489
+ ruby_xml_parser_context_space_depth_max_get(VALUE self) {
490
+ ruby_xml_parser_context *rxpc;
491
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
492
+
493
+ return(INT2NUM(rxpc->ctxt->spaceMax));
494
+ }
495
+
496
+
497
+ /*
498
+ * call-seq:
499
+ * context.subset_external? => (true|false)
500
+ *
501
+ * Determine whether this context is a subset of an
502
+ * external context.
503
+ */
504
+ VALUE
505
+ ruby_xml_parser_context_subset_external_q(VALUE self) {
506
+ ruby_xml_parser_context *rxpc;
507
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
508
+
509
+ if (rxpc->ctxt->inSubset == 2)
510
+ return(Qtrue);
511
+ else
512
+ return(Qfalse);
513
+ }
514
+
515
+
516
+ /*
517
+ * call-seq:
518
+ * context.subset_internal? => (true|false)
519
+ *
520
+ * Determine whether this context is a subset of an
521
+ * internal context.
522
+ */
523
+ VALUE
524
+ ruby_xml_parser_context_subset_internal_q(VALUE self) {
525
+ ruby_xml_parser_context *rxpc;
526
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
527
+
528
+ if (rxpc->ctxt->inSubset == 1)
529
+ return(Qtrue);
530
+ else
531
+ return(Qfalse);
532
+ }
533
+
534
+
535
+ /*
536
+ * call-seq:
537
+ * context.subset_name => "name"
538
+ *
539
+ * Obtain this context's subset name (valid only if
540
+ * either of subset_external? or subset_internal?
541
+ * is true).
542
+ */
543
+ VALUE
544
+ ruby_xml_parser_context_subset_name_get(VALUE self) {
545
+ ruby_xml_parser_context *rxpc;
546
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
547
+
548
+ if (rxpc->ctxt->intSubName == NULL)
549
+ return(Qnil);
550
+ else
551
+ return(rb_str_new2((const char*)rxpc->ctxt->intSubName));
552
+ }
553
+
554
+
555
+ /*
556
+ * call-seq:
557
+ * context.subset_external_uri => "uri"
558
+ *
559
+ * Obtain this context's external subset URI. (valid only if
560
+ * either of subset_external? or subset_internal?
561
+ * is true).
562
+ */
563
+ VALUE
564
+ ruby_xml_parser_context_subset_external_uri_get(VALUE self) {
565
+ ruby_xml_parser_context *rxpc;
566
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
567
+
568
+ if (rxpc->ctxt->extSubURI == NULL)
569
+ return(Qnil);
570
+ else
571
+ return(rb_str_new2((const char*)rxpc->ctxt->extSubURI));
572
+ }
573
+
574
+
575
+ /*
576
+ * call-seq:
577
+ * context.subset_external_system_id => "system_id"
578
+ *
579
+ * Obtain this context's external subset system identifier.
580
+ * (valid only if either of subset_external? or subset_internal?
581
+ * is true).
582
+ */
583
+ VALUE
584
+ ruby_xml_parser_context_subset_external_system_id_get(VALUE self) {
585
+ ruby_xml_parser_context *rxpc;
586
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
587
+
588
+ if (rxpc->ctxt->extSubSystem == NULL)
589
+ return(Qnil);
590
+ else
591
+ return(rb_str_new2((const char*)rxpc->ctxt->extSubSystem));
592
+ }
593
+
594
+
595
+ /*
596
+ * call-seq:
597
+ * context.standalone? => (true|false)
598
+ *
599
+ * Determine whether this is a standalone context.
600
+ */
601
+ VALUE
602
+ ruby_xml_parser_context_standalone_q(VALUE self) {
603
+ ruby_xml_parser_context *rxpc;
604
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
605
+
606
+ if (rxpc->ctxt->standalone)
607
+ return(Qtrue);
608
+ else
609
+ return(Qfalse);
610
+ }
611
+
612
+
613
+ /*
614
+ * call-seq:
615
+ * context.stats? => (true|false)
616
+ *
617
+ * Determine whether this context maintains statistics.
618
+ */
619
+ VALUE
620
+ ruby_xml_parser_context_stats_q(VALUE self) {
621
+ ruby_xml_parser_context *rxpc;
622
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
623
+
624
+ if (rxpc->ctxt->record_info)
625
+ return(Qtrue);
626
+ else
627
+ return(Qfalse);
628
+ }
629
+
630
+
631
+ /*
632
+ * call-seq:
633
+ * context.valid? => (true|false)
634
+ *
635
+ * Determine whether this context is valid.
636
+ */
637
+ VALUE
638
+ ruby_xml_parser_context_valid_q(VALUE self) {
639
+ ruby_xml_parser_context *rxpc;
640
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
641
+
642
+ if (rxpc->ctxt->valid)
643
+ return(Qtrue);
644
+ else
645
+ return(Qfalse);
646
+ }
647
+
648
+
649
+ /*
650
+ * call-seq:
651
+ * context.validate? => (true|false)
652
+ *
653
+ * Determine whether validation is enabled in this context.
654
+ */
655
+ VALUE
656
+ ruby_xml_parser_context_validate_q(VALUE self) {
657
+ ruby_xml_parser_context *rxpc;
658
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
659
+
660
+ if (rxpc->ctxt->validate)
661
+ return(Qtrue);
662
+ else
663
+ return(Qfalse);
664
+ }
665
+
666
+
667
+ /*
668
+ * call-seq:
669
+ * context.version => "version"
670
+ *
671
+ * Obtain this context's version identifier.
672
+ */
673
+ VALUE
674
+ ruby_xml_parser_context_version_get(VALUE self) {
675
+ ruby_xml_parser_context *rxpc;
676
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
677
+
678
+ if (rxpc->ctxt->version == NULL)
679
+ return(Qnil);
680
+ else
681
+ return(rb_str_new2((const char*)rxpc->ctxt->version));
682
+ }
683
+
684
+
685
+ /*
686
+ * call-seq:
687
+ * context.well_formed? => (true|false)
688
+ *
689
+ * Determine whether this context contains well-formed XML.
690
+ */
691
+ VALUE
692
+ ruby_xml_parser_context_well_formed_q(VALUE self) {
693
+ ruby_xml_parser_context *rxpc;
694
+ Data_Get_Struct(self, ruby_xml_parser_context, rxpc);
695
+
696
+ if (rxpc->ctxt->wellFormed)
697
+ return(Qtrue);
698
+ else
699
+ return(Qfalse);
700
+ }
701
+
702
+
703
+ // Rdoc needs to know
704
+ #ifdef RDOC_NEVER_DEFINED
705
+ mXML = rb_define_module("XML");
706
+ cXMLParser = rb_define_class_under(mXML, "Parser", rb_cObject);
707
+ #endif
708
+
709
+ void
710
+ ruby_init_xml_parser_context(void) {
711
+ cXMLParserContext = rb_define_class_under(cXMLParser, "Context", rb_cObject);
712
+
713
+ rb_define_method(cXMLParserContext, "data_directory", ruby_xml_parser_context_data_directory_get, 0);
714
+ rb_define_method(cXMLParserContext, "depth", ruby_xml_parser_context_depth_get, 0);
715
+ rb_define_method(cXMLParserContext, "disable_sax?", ruby_xml_parser_context_disable_sax_q, 0);
716
+ rb_define_method(cXMLParserContext, "doc", ruby_xml_parser_context_doc_get, 0);
717
+ rb_define_method(cXMLParserContext, "docbook?", ruby_xml_parser_context_docbook_q, 0);
718
+ rb_define_method(cXMLParserContext, "encoding", ruby_xml_parser_context_encoding_get, 0);
719
+ rb_define_method(cXMLParserContext, "errno", ruby_xml_parser_context_errno_get, 0);
720
+ rb_define_method(cXMLParserContext, "html?", ruby_xml_parser_context_html_q, 0);
721
+ rb_define_method(cXMLParserContext, "io_max_num_streams", ruby_xml_parser_context_io_max_num_streams_get, 0);
722
+ rb_define_method(cXMLParserContext, "io_num_streams", ruby_xml_parser_context_io_num_streams_get, 0);
723
+ rb_define_method(cXMLParserContext, "keep_blanks?", ruby_xml_parser_context_keep_blanks_q, 0);
724
+ rb_define_method(cXMLParserContext, "name_node", ruby_xml_parser_context_name_node_get, 0);
725
+ rb_define_method(cXMLParserContext, "name_depth", ruby_xml_parser_context_name_depth_get, 0);
726
+ rb_define_method(cXMLParserContext, "name_depth_max", ruby_xml_parser_context_name_depth_max_get, 0);
727
+ rb_define_method(cXMLParserContext, "name_tab", ruby_xml_parser_context_name_tab_get, 0);
728
+ rb_define_method(cXMLParserContext, "node", ruby_xml_parser_context_node_get, 0);
729
+ rb_define_method(cXMLParserContext, "node_depth", ruby_xml_parser_context_node_depth_get, 0);
730
+ rb_define_method(cXMLParserContext, "node_depth_max", ruby_xml_parser_context_node_depth_max_get, 0);
731
+ rb_define_method(cXMLParserContext, "num_chars", ruby_xml_parser_context_num_chars_get, 0);
732
+ rb_define_method(cXMLParserContext, "options", ruby_xml_parser_context_options_get, 0);
733
+ rb_define_method(cXMLParserContext, "options=", ruby_xml_parser_context_options_set, 1);
734
+ rb_define_method(cXMLParserContext, "replace_entities?", ruby_xml_parser_context_replace_entities_q, 0);
735
+ rb_define_method(cXMLParserContext, "replace_entities=", ruby_xml_parser_context_replace_entities_set, 1);
736
+ rb_define_method(cXMLParserContext, "reset", ruby_xml_parser_context_reset, 0);
737
+ rb_define_method(cXMLParserContext, "space_depth", ruby_xml_parser_context_space_depth_get, 0);
738
+ rb_define_method(cXMLParserContext, "space_depth_max", ruby_xml_parser_context_space_depth_max_get, 0);
739
+ rb_define_method(cXMLParserContext, "subset_external?", ruby_xml_parser_context_subset_external_q, 0);
740
+ rb_define_method(cXMLParserContext, "subset_external_system_id", ruby_xml_parser_context_subset_external_system_id_get, 0);
741
+ rb_define_method(cXMLParserContext, "subset_external_uri", ruby_xml_parser_context_subset_name_get, 0);
742
+ rb_define_method(cXMLParserContext, "subset_internal?", ruby_xml_parser_context_subset_internal_q, 0);
743
+ rb_define_method(cXMLParserContext, "subset_internal_name", ruby_xml_parser_context_subset_name_get, 0);
744
+ rb_define_method(cXMLParserContext, "stats?", ruby_xml_parser_context_stats_q, 0);
745
+ rb_define_method(cXMLParserContext, "standalone?", ruby_xml_parser_context_standalone_q, 0);
746
+ rb_define_method(cXMLParserContext, "valid", ruby_xml_parser_context_valid_q, 0);
747
+ rb_define_method(cXMLParserContext, "validate?", ruby_xml_parser_context_validate_q, 0);
748
+ rb_define_method(cXMLParserContext, "version", ruby_xml_parser_context_version_get, 0);
749
+ rb_define_method(cXMLParserContext, "well_formed?", ruby_xml_parser_context_well_formed_q, 0);
750
+ }