libxml-ruby 0.3.8.4 → 0.5.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.
Files changed (77) hide show
  1. data/CHANGELOG +6 -0
  2. data/LICENSE +1 -1
  3. data/README +1 -1
  4. data/Rakefile +8 -5
  5. data/TODO +1 -1
  6. data/ext/xml/extconf.rb +4 -5
  7. data/ext/xml/libxml.c +5 -2
  8. data/ext/xml/libxml.h +16 -7
  9. data/ext/xml/libxml.rb +3 -3
  10. data/ext/xml/ruby_xml_attr.c +118 -99
  11. data/ext/xml/ruby_xml_attr.h +4 -7
  12. data/ext/xml/ruby_xml_document.c +131 -170
  13. data/ext/xml/ruby_xml_document.h +5 -9
  14. data/ext/xml/ruby_xml_html_parser.c +453 -0
  15. data/ext/xml/ruby_xml_html_parser.h +29 -0
  16. data/ext/xml/ruby_xml_node.c +219 -253
  17. data/ext/xml/ruby_xml_node.h +4 -7
  18. data/ext/xml/ruby_xml_node_set.c +6 -6
  19. data/ext/xml/ruby_xml_node_set.h +1 -1
  20. data/ext/xml/ruby_xml_ns.c +1 -1
  21. data/ext/xml/ruby_xml_ns.h +1 -1
  22. data/ext/xml/ruby_xml_parser.c +5 -8
  23. data/ext/xml/ruby_xml_parser.h +1 -1
  24. data/ext/xml/ruby_xml_parser_context.c +3 -4
  25. data/ext/xml/ruby_xml_parser_context.h +1 -1
  26. data/ext/xml/ruby_xml_reader.c +893 -0
  27. data/ext/xml/ruby_xml_reader.h +14 -0
  28. data/ext/xml/ruby_xml_sax_parser.c +255 -204
  29. data/ext/xml/ruby_xml_sax_parser.h +6 -2
  30. data/ext/xml/ruby_xml_tree.c +1 -1
  31. data/ext/xml/ruby_xml_tree.h +1 -1
  32. data/ext/xml/ruby_xml_xinclude.c +1 -1
  33. data/ext/xml/ruby_xml_xinclude.h +1 -1
  34. data/ext/xml/ruby_xml_xpath.c +3 -2
  35. data/ext/xml/ruby_xml_xpath.h +1 -1
  36. data/ext/xml/ruby_xml_xpath_context.c +4 -4
  37. data/ext/xml/ruby_xml_xpath_context.h +1 -1
  38. data/ext/xml/ruby_xml_xpointer.c +10 -4
  39. data/ext/xml/ruby_xml_xpointer.h +1 -1
  40. data/ext/xml/ruby_xml_xpointer_context.c +1 -1
  41. data/ext/xml/ruby_xml_xpointer_context.h +1 -1
  42. data/ext/xml/sax_parser_callbacks.inc +55 -54
  43. data/tests/model/rubynet_project +1 -1
  44. data/tests/model/simple.xml +7 -0
  45. data/tests/tc_xml_document.rb +1 -1
  46. data/tests/tc_xml_document_write.rb +1 -1
  47. data/tests/tc_xml_document_write2.rb +1 -1
  48. data/tests/tc_xml_document_write3.rb +1 -1
  49. data/tests/tc_xml_html_parser.rb +60 -0
  50. data/tests/tc_xml_node.rb +1 -1
  51. data/tests/tc_xml_node2.rb +1 -1
  52. data/tests/tc_xml_node3.rb +1 -1
  53. data/tests/tc_xml_node4.rb +8 -5
  54. data/tests/tc_xml_node5.rb +1 -1
  55. data/tests/tc_xml_node6.rb +1 -1
  56. data/tests/tc_xml_node7.rb +1 -1
  57. data/tests/tc_xml_node_set.rb +1 -1
  58. data/tests/tc_xml_node_set2.rb +1 -1
  59. data/tests/tc_xml_node_xlink.rb +1 -1
  60. data/tests/tc_xml_parser.rb +5 -1
  61. data/tests/tc_xml_parser2.rb +1 -1
  62. data/tests/tc_xml_parser3.rb +1 -1
  63. data/tests/tc_xml_parser4.rb +1 -1
  64. data/tests/tc_xml_parser5.rb +1 -1
  65. data/tests/tc_xml_parser6.rb +1 -1
  66. data/tests/tc_xml_parser7.rb +1 -1
  67. data/tests/tc_xml_parser8.rb +1 -1
  68. data/tests/tc_xml_parser_context.rb +1 -1
  69. data/tests/tc_xml_reader.rb +101 -0
  70. data/tests/tc_xml_sax_parser.rb +95 -0
  71. data/tests/tc_xml_xinclude.rb +1 -1
  72. data/tests/tc_xml_xpath.rb +1 -1
  73. data/tests/tc_xml_xpointer.rb +1 -1
  74. metadata +79 -73
  75. data/ext/xml/ruby_xml_attribute.c +0 -224
  76. data/ext/xml/ruby_xml_attribute.h +0 -21
  77. data/tests/test_xml_sax_parser.rb +0 -64
@@ -0,0 +1,14 @@
1
+ /* Copyright (c) 2006 Apple Computer Inc.
2
+ * Please see the LICENSE file for copyright and distribution information. */
3
+
4
+ #ifndef __RUBY_XML_READER__
5
+ #define __RUBY_XML_READER__
6
+
7
+ extern VALUE cXMLReader;
8
+
9
+ void ruby_init_xml_reader(void);
10
+
11
+ /* Exported to be used by XML::Document#reader */
12
+ VALUE ruby_xml_reader_new_walker(VALUE self, VALUE doc);
13
+
14
+ #endif /* __RUBY_XML_READER__ */
@@ -1,4 +1,4 @@
1
- /* $Id: ruby_xml_sax_parser.c,v 1.6 2006/08/15 13:53:45 roscopeco Exp $ */
1
+ /* $Id: ruby_xml_sax_parser.c 111 2006-11-20 01:39:14Z roscopeco $ */
2
2
 
3
3
  /* Please see the LICENSE file for copyright and distribution information */
4
4
 
@@ -6,7 +6,25 @@
6
6
  #include "ruby_xml_sax_parser.h"
7
7
 
8
8
  VALUE cXMLSaxParser;
9
- VALUE callsym;
9
+ VALUE mXMLSaxParserCallbacks;
10
+
11
+ VALUE cbidOnInternalSubset;
12
+ VALUE cbidOnIsStandalone;
13
+ VALUE cbidOnHasInternalSubset;
14
+ VALUE cbidOnHasExternalSubset;
15
+ VALUE cbidOnStartDocument;
16
+ VALUE cbidOnEndDocument;
17
+ VALUE cbidOnStartElement;
18
+ VALUE cbidOnEndElement;
19
+ VALUE cbidOnReference;
20
+ VALUE cbidOnCharacters;
21
+ VALUE cbidOnProcessingInstruction;
22
+ VALUE cbidOnComment;
23
+ VALUE cbidOnXmlParserWarning;
24
+ VALUE cbidOnXmlParserError;
25
+ VALUE cbidOnXmlParserFatalError;
26
+ VALUE cbidOnCdataBlock;
27
+ VALUE cbidOnExternalSubset;
10
28
 
11
29
  #include "sax_parser_callbacks.inc"
12
30
 
@@ -17,39 +35,21 @@ ruby_xml_sax_parser_free(ruby_xml_sax_parser *rxsp) {
17
35
  /* xmlFreeSax_Parser(rxsp->sax_parser); */
18
36
  }
19
37
 
20
- #define mark_handler(rxsp, handler) \
21
- if (rxsp->cbp->handler && (rxsp->cbp->handler != Qnil)) \
22
- rb_gc_mark(rxsp->cbp->handler)
23
-
24
38
  void
25
39
  ruby_xml_sax_parser_mark(ruby_xml_sax_parser *rxsp) {
26
- mark_handler(rxsp, internalSubset);
27
- mark_handler(rxsp, isStandalone);
28
- mark_handler(rxsp, hasInternalSubset);
29
- mark_handler(rxsp, hasExternalSubset);
30
- mark_handler(rxsp, startDocument);
31
- mark_handler(rxsp, endDocument);
32
- mark_handler(rxsp, startElement);
33
- mark_handler(rxsp, endElement);
34
- mark_handler(rxsp, reference);
35
- mark_handler(rxsp, characters);
36
- mark_handler(rxsp, processingInstruction);
37
- mark_handler(rxsp, comment);
38
- mark_handler(rxsp, xmlParserWarning);
39
- mark_handler(rxsp, xmlParserError);
40
- mark_handler(rxsp, xmlParserFatalError);
41
- mark_handler(rxsp, cdataBlock);
40
+ if (rxsp->callbackHandler && (rxsp->callbackHandler != Qnil)) {
41
+ rb_gc_mark(rxsp->callbackHandler);
42
+ }
42
43
 
43
44
  if (rxsp->filename && (rxsp->filename != Qnil)) {
44
- rb_gc_mark(rxsp->filename);
45
+ rb_gc_mark(rxsp->filename);
45
46
  }
46
-
47
+
47
48
  if (rxsp->str && (rxsp->str != Qnil)) {
48
- rb_gc_mark(rxsp->str);
49
+ rb_gc_mark(rxsp->str);
49
50
  }
50
51
  }
51
52
 
52
-
53
53
  /*
54
54
  * call-seq:
55
55
  * XML::SaxParser.new => sax_parser
@@ -61,10 +61,9 @@ ruby_xml_sax_parser_new(VALUE class) {
61
61
  ruby_xml_sax_parser *rxsp;
62
62
 
63
63
  rxsp = ALLOC(ruby_xml_sax_parser);
64
- rxsp->cbp = ALLOC(ruby_xml_sax_parser_callbacks);
65
- memset(rxsp->cbp, 0, sizeof(ruby_xml_sax_parser_callbacks));
66
64
  rxsp->xsh = &rubySAXHandlerStruct;
67
-
65
+
66
+ rxsp->callbackHandler = Qnil;
68
67
  rxsp->xpc = NULL;
69
68
  rxsp->filename = Qnil;
70
69
  rxsp->str = Qnil;
@@ -74,6 +73,38 @@ ruby_xml_sax_parser_new(VALUE class) {
74
73
  }
75
74
 
76
75
 
76
+ /*
77
+ * call-seq:
78
+ * sax_parser.callbacks => #<XML::SaxParser::Callbacks subclass>
79
+ *
80
+ * Obtain the callbacks used by this parser.
81
+ */
82
+ VALUE
83
+ ruby_xml_sax_parser_callbacks_get(VALUE self) {
84
+ ruby_xml_sax_parser *rxsp;
85
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
86
+ return(rxsp->callbackHandler);
87
+ }
88
+
89
+
90
+ /*
91
+ * call-seq:
92
+ * sax_parser.callbacks = #<XML::SaxParser::Callbacks subclass>
93
+ *
94
+ * Set the callbacks used by this parser. The value assigned to
95
+ * this attribute will usually be an object that extends the the
96
+ * XML::SaxParser::Callbacks module, overriding the callbacks it
97
+ * wishes to process.
98
+ */
99
+ VALUE
100
+ ruby_xml_sax_parser_callbacks_set(VALUE self, VALUE callbacks) {
101
+ ruby_xml_sax_parser *rxsp;
102
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
103
+ rxsp->callbackHandler = callbacks;
104
+ return(rxsp->callbackHandler);
105
+ }
106
+
107
+
77
108
  /*
78
109
  * call-seq:
79
110
  * sax_parser.filename => "filename"
@@ -103,280 +134,276 @@ ruby_xml_sax_parser_filename_set(VALUE self, VALUE filename) {
103
134
  return(rxsp->filename);
104
135
  }
105
136
 
106
- #define set_handler(self, argc, argv, handler) \
107
- VALUE proc; \
108
- ruby_xml_sax_parser *rxsp; \
109
- rb_scan_args(argc, argv, "0&", &proc); \
110
- Data_Get_Struct(self, ruby_xml_sax_parser, rxsp); \
111
- rxsp->cbp->handler = proc; \
112
- return(Qnil);
137
+
138
+ /*
139
+ * call-seq:
140
+ * parser.parse => (true|false)
141
+ *
142
+ * Parse the input XML, generating callbacks to the object
143
+ * registered via the +callbacks+ attribute.
144
+ */
145
+ VALUE
146
+ ruby_xml_sax_parser_parse(VALUE self) {
147
+ char *str;
148
+ int status = 1;
149
+ ruby_xml_sax_parser *rxsp;
150
+
151
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
152
+
153
+ if (rxsp->filename != Qnil) {
154
+ status = xmlSAXUserParseFile(rxsp->xsh, rxsp, StringValuePtr(rxsp->filename));
155
+ } else if (rxsp->str != Qnil) {
156
+ str = StringValuePtr(rxsp->str);
157
+ status = //ruby_xml_document_new(cXMLDocument,
158
+ xmlSAXUserParseMemory(rxsp->xsh, rxsp,
159
+ str, strlen(str)); //);
160
+ }
161
+
162
+ /* XXX This should return an exception for the various error codes
163
+ * that can come back in status, but I'm too lazy to do that right
164
+ * now. */
165
+ if (status)
166
+ return(Qfalse);
167
+ else
168
+ return(Qtrue);
169
+ }
170
+
171
+
172
+ /*
173
+ * call-seq:
174
+ * parser.string => "xml"
175
+ *
176
+ * Obtain the parser's input string.
177
+ */
178
+ VALUE
179
+ ruby_xml_sax_parser_str_get(VALUE self) {
180
+ ruby_xml_sax_parser *rxsp;
181
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
182
+ return(rxsp->str);
183
+ }
184
+
185
+
186
+ /*
187
+ * call-seq:
188
+ * parser.string = "xml"
189
+ *
190
+ * Set the parser's input string.
191
+ */
192
+ VALUE
193
+ ruby_xml_sax_parser_str_set(VALUE self, VALUE str) {
194
+ ruby_xml_sax_parser *rxsp;
195
+ Check_Type(str, T_STRING);
196
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
197
+ rxsp->str = str;
198
+ return(rxsp->str);
199
+ }
200
+
113
201
 
202
+ /****** SaxCallbacks ******/
203
+ /* These are all the same. Bloody Rdoc... */
114
204
 
115
205
  /*
116
206
  * call-seq:
117
- * parser.on_internal_subset { |name, external_id, system_id| ... } => nil
207
+ * callbacks.on_internal_subset(name, external_id, system_id)
118
208
  *
119
- * Set the callback block for an internal subset event.
209
+ * Called for an internal subset event.
120
210
  */
121
211
  VALUE
122
- ruby_xml_sax_parser_on_internal_subset(int argc, VALUE *argv, VALUE self) {
123
- set_handler(self, argc, argv, internalSubset);
212
+ ruby_xml_sax_callbacks_on_internal_subset(int argc, VALUE *argv, VALUE self) {
213
+ return Qnil;
124
214
  }
125
215
 
126
216
 
127
217
  /*
128
218
  * call-seq:
129
- * parser.on_is_standalone { || ... } => nil
219
+ * callbacks.on_is_standalone()
130
220
  *
131
- * Set the callback proc for 'is standalone' event.
221
+ * Called for 'is standalone' event.
132
222
  */
133
223
  VALUE
134
- ruby_xml_sax_parser_on_is_standalone(int argc, VALUE *argv, VALUE self) {
135
- set_handler(self, argc, argv, isStandalone);
224
+ ruby_xml_sax_callbacks_on_is_standalone(int argc, VALUE *argv, VALUE self) {
225
+ return Qnil;
136
226
  }
137
227
 
138
228
 
139
229
  /*
140
230
  * call-seq:
141
- * parser.on_has_internal_subset { || ... } => nil
231
+ * callbacks.on_has_internal_subset()
142
232
  *
143
- * Set the callback proc for an internal subset notification event.
233
+ * Called for an internal subset notification event.
144
234
  */
145
235
  VALUE
146
- ruby_xml_sax_parser_on_has_internal_subset(int argc, VALUE *argv, VALUE self) {
147
- set_handler(self, argc, argv, hasInternalSubset);
236
+ ruby_xml_sax_callbacks_on_has_internal_subset(int argc, VALUE *argv, VALUE self) {
237
+ return Qnil;
148
238
  }
149
239
 
150
240
 
151
241
  /*
152
242
  * call-seq:
153
- * parser.on_has_external_subset { || ... } => nil
243
+ * callbacks.on_has_external_subset()
154
244
  *
155
- * Set the callback proc for an external subset notification event.
245
+ * Called for an external subset notification event.
156
246
  */
157
247
  VALUE
158
- ruby_xml_sax_parser_on_has_external_subset(int argc, VALUE *argv, VALUE self) {
159
- set_handler(self, argc, argv, hasExternalSubset);
248
+ ruby_xml_sax_callbacks_on_has_external_subset(int argc, VALUE *argv, VALUE self) {
249
+ return Qnil;
160
250
  }
161
251
 
162
252
 
163
253
  /*
164
254
  * call-seq:
165
- * parser.on_start_document { || ... } => nil
255
+ * callbacks.on_start_document()
166
256
  *
167
- * Set the callback proc for a start document event.
257
+ * Called for a start document event.
168
258
  */
169
259
  VALUE
170
- ruby_xml_sax_parser_on_start_document(int argc, VALUE *argv, VALUE self) {
171
- set_handler(self, argc, argv, startDocument);
260
+ ruby_xml_sax_callbacks_on_start_document(int argc, VALUE *argv, VALUE self) {
261
+ return Qnil;
172
262
  }
173
263
 
174
264
 
175
265
  /*
176
266
  * call-seq:
177
- * parser.on_end_document { || ... } => nil
267
+ * callbacks.on_end_document()
178
268
  *
179
- * Set the callback proc for an end document event.
269
+ * Called for an end document event.
180
270
  */
181
271
  VALUE
182
- ruby_xml_sax_parser_on_end_document(int argc, VALUE *argv, VALUE self) {
183
- set_handler(self, argc, argv, endDocument);
272
+ ruby_xml_sax_callbacks_on_end_document(int argc, VALUE *argv, VALUE self) {
273
+ return Qnil;
184
274
  }
185
275
 
186
276
 
187
277
  /*
188
278
  * call-seq:
189
- * parser.on_start_element { |name, attr_hash| ... } => nil
279
+ * callbacks.on_start_element(name, attr_hash)
190
280
  *
191
- * Set the callback proc for an element start event.
281
+ * Called for an element start event.
192
282
  */
193
283
  VALUE
194
- ruby_xml_sax_parser_on_start_element(int argc, VALUE *argv, VALUE self) {
195
- set_handler(self, argc, argv, startElement);
284
+ ruby_xml_sax_callbacks_on_start_element(int argc, VALUE *argv, VALUE self) {
285
+ return Qnil;
196
286
  }
197
287
 
198
288
 
199
289
  /*
200
290
  * call-seq:
201
- * parser.on_end_element { |name| ... } => nil
291
+ * callbacks.on_end_element(name)
202
292
  *
203
- * Set the callback proc for an element end event.
293
+ * Called for an element end event.
204
294
  */
205
295
  VALUE
206
- ruby_xml_sax_parser_on_end_element(int argc, VALUE *argv, VALUE self) {
207
- set_handler(self, argc, argv, endElement);
296
+ ruby_xml_sax_callbacks_on_end_element(int argc, VALUE *argv, VALUE self) {
297
+ return Qnil;
208
298
  }
209
299
 
210
300
 
211
301
  /*
212
302
  * call-seq:
213
- * parser.on_reference { |name| ... } => nil
303
+ * callbacks.on_reference(name)
214
304
  *
215
- * Set the callback proc for a reference event.
305
+ * Called for a reference event.
216
306
  */
217
307
  VALUE
218
- ruby_xml_sax_parser_on_reference(int argc, VALUE *argv, VALUE self) {
219
- set_handler(self, argc, argv, reference);
308
+ ruby_xml_sax_callbacks_on_reference(int argc, VALUE *argv, VALUE self) {
309
+ return Qnil;
220
310
  }
221
311
 
222
312
 
223
313
  /*
224
314
  * call-seq:
225
- * parser.on_characters { |chars| ... } => nil
315
+ * callbacks.on_characters(chars)
226
316
  *
227
- * Set the callback proc for a characters event.
317
+ * Called for a characters event.
228
318
  */
229
319
  VALUE
230
- ruby_xml_sax_parser_on_characters(int argc, VALUE *argv, VALUE self) {
231
- set_handler(self, argc, argv, characters);
320
+ ruby_xml_sax_callbacks_on_characters(int argc, VALUE *argv, VALUE self) {
321
+ return Qnil;
232
322
  }
233
323
 
234
324
 
235
325
  /*
236
326
  * call-seq:
237
- * parser.on_processing_instruction { |target, data| ... } => nil
327
+ * callbacks.on_processing_instruction(target, data)
238
328
  *
239
- * Set the callback proc for an processing instruction event.
329
+ * Called for an processing instruction event.
240
330
  */
241
331
  VALUE
242
- ruby_xml_sax_parser_on_processing_instruction(int argc, VALUE *argv, VALUE self) {
243
- set_handler(self, argc, argv, processingInstruction);
332
+ ruby_xml_sax_callbacks_on_processing_instruction(int argc, VALUE *argv, VALUE self) {
333
+ return Qnil;
244
334
  }
245
335
 
246
336
 
247
337
  /*
248
338
  * call-seq:
249
- * parser.on_comment { |msg| ... } => nil
339
+ * callbacks.on_comment(msg)
250
340
  *
251
- * Set the callback proc for a comment event.
341
+ * Called for a comment event.
252
342
  */
253
343
  VALUE
254
- ruby_xml_sax_parser_on_comment(int argc, VALUE *argv, VALUE self) {
255
- set_handler(self, argc, argv, comment);
344
+ ruby_xml_sax_callbacks_on_comment(int argc, VALUE *argv, VALUE self) {
345
+ return Qnil;
256
346
  }
257
347
 
258
348
 
259
349
  /*
260
350
  * call-seq:
261
- * parser.on_parser_warning { |msg| ... } => nil
351
+ * callbacks.on_parser_warning(msg)
262
352
  *
263
- * Set the callback proc that receives parser warnings.
353
+ * Called for parser warnings.
264
354
  */
265
355
  VALUE
266
- ruby_xml_sax_parser_on_parser_warning(int argc, VALUE *argv, VALUE self) {
267
- set_handler(self, argc, argv, xmlParserWarning);
356
+ ruby_xml_sax_callbacks_on_parser_warning(int argc, VALUE *argv, VALUE self) {
357
+ return Qnil;
268
358
  }
269
359
 
270
360
 
271
361
  /*
272
362
  * call-seq:
273
- * parser.on_parser_error { |msg| ... } => nil
363
+ * callbacks.on_parser_error(msg)
274
364
  *
275
- * Set the callback proc that receives parser errors.
365
+ * Called for parser errors.
276
366
  */
277
367
  VALUE
278
- ruby_xml_sax_parser_on_parser_error(int argc, VALUE *argv, VALUE self) {
279
- set_handler(self, argc, argv, xmlParserError);
368
+ ruby_xml_sax_callbacks_on_parser_error(int argc, VALUE *argv, VALUE self) {
369
+ return Qnil;
280
370
  }
281
371
 
282
372
 
283
373
  /*
284
374
  * call-seq:
285
- * parser.on_parser_fatal_error { |msg| ... } => nil
375
+ * callbacks.on_parser_fatal_error(msg)
286
376
  *
287
- * Set the callback proc that receives fatal parser errors.
377
+ * Called for fatal parser errors.
288
378
  */
289
379
  VALUE
290
- ruby_xml_sax_parser_on_parser_fatal_error(int argc, VALUE *argv, VALUE self) {
291
- set_handler(self, argc, argv, xmlParserFatalError);
380
+ ruby_xml_sax_callbacks_on_parser_fatal_error(int argc, VALUE *argv, VALUE self) {
381
+ return Qnil;
292
382
  }
293
383
 
294
384
  /*
295
385
  * call-seq:
296
- * parser.on_cdata_block { |cdata| ... } => nil
386
+ * callbacks.on_cdata_block(cdata)
297
387
  *
298
- * Set the callback proc for a CDATA block event.
388
+ * Called for a CDATA block event.
299
389
  */
300
390
  VALUE
301
- ruby_xml_sax_parser_on_cdata_block(int argc, VALUE *argv, VALUE self) {
302
- set_handler(self, argc, argv, cdataBlock);
391
+ ruby_xml_sax_callbacks_on_cdata_block(int argc, VALUE *argv, VALUE self) {
392
+ return Qnil;
303
393
  }
304
394
 
305
395
  /*
306
396
  * call-seq:
307
- * parser.on_external_subset { |name, external_id, system_id| ... } => nil
397
+ * callbacks.on_external_subset(name, external_id, system_id)
308
398
  *
309
- * Set the callback proc for an external subset event.
310
- */
311
- VALUE
312
- ruby_xml_sax_parser_on_external_subset(int argc, VALUE *argv, VALUE self) {
313
- set_handler(self, argc, argv, externalSubset);
314
- }
315
-
316
-
317
- /*
318
- * call-seq:
319
- * parser.parse => (true|false)
320
- *
321
- * Parse the input XML, generating callbacks to the procs
322
- * registered with the parser (via the on_xxxx attributes).
323
- */
324
- VALUE
325
- ruby_xml_sax_parser_parse(VALUE self) {
326
- char *str;
327
- int status = 1;
328
- ruby_xml_sax_parser *rxsp;
329
-
330
- Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
331
-
332
- if (rxsp->filename != Qnil) {
333
- status = xmlSAXUserParseFile(rxsp->xsh, rxsp->cbp, StringValuePtr(rxsp->filename));
334
- } else if (rxsp->str != Qnil) {
335
- str = StringValuePtr(rxsp->str);
336
- status = //ruby_xml_document_new(cXMLDocument,
337
- xmlSAXUserParseMemory(rxsp->xsh, rxsp->cbp,
338
- str, strlen(str)); //);
339
- }
340
-
341
- /* XXX This should return an exception for the various error codes
342
- * that can come back in status, but I'm too lazy to do that right
343
- * now. */
344
- if (status)
345
- return(Qfalse);
346
- else
347
- return(Qtrue);
348
- }
349
-
350
-
351
- /*
352
- * call-seq:
353
- * parser.string => "xml"
354
- *
355
- * Obtain the parser's input string.
399
+ * Called for an external subset event.
356
400
  */
357
401
  VALUE
358
- ruby_xml_sax_parser_str_get(VALUE self) {
359
- ruby_xml_sax_parser *rxsp;
360
- Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
361
- return(rxsp->str);
402
+ ruby_xml_sax_callbacks_on_external_subset(int argc, VALUE *argv, VALUE self) {
403
+ return Qnil;
362
404
  }
363
405
 
364
406
 
365
- /*
366
- * call-seq:
367
- * parser.string = "xml"
368
- *
369
- * Set the parser's input string.
370
- */
371
- VALUE
372
- ruby_xml_sax_parser_str_set(VALUE self, VALUE str) {
373
- ruby_xml_sax_parser *rxsp;
374
- Check_Type(str, T_STRING);
375
- Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
376
- rxsp->str = str;
377
- return(rxsp->str);
378
- }
379
-
380
407
  // Rdoc needs to know
381
408
  #ifdef RDOC_NEVER_DEFINED
382
409
  mXML = rb_define_module("XML");
@@ -385,50 +412,74 @@ ruby_xml_sax_parser_str_set(VALUE self, VALUE str) {
385
412
  void
386
413
  ruby_init_xml_sax_parser(void) {
387
414
  cXMLSaxParser = rb_define_class_under(mXML, "SaxParser", rb_cObject);
388
- callsym = rb_intern("call");
415
+ mXMLSaxParserCallbacks = rb_define_module_under(cXMLSaxParser, "Callbacks");
389
416
 
417
+ /* SaxParser */
390
418
  rb_define_singleton_method(cXMLSaxParser, "new", ruby_xml_sax_parser_new, 0);
391
419
 
392
420
  rb_define_method(cXMLSaxParser, "filename",
393
- ruby_xml_sax_parser_filename_get, 0);
421
+ ruby_xml_sax_parser_filename_get, 0);
394
422
  rb_define_method(cXMLSaxParser, "filename=",
395
- ruby_xml_sax_parser_filename_set, 1);
423
+ ruby_xml_sax_parser_filename_set, 1);
424
+ rb_define_method(cXMLSaxParser, "callbacks",
425
+ ruby_xml_sax_parser_callbacks_get, 0);
426
+ rb_define_method(cXMLSaxParser, "callbacks=",
427
+ ruby_xml_sax_parser_callbacks_set, 1);
396
428
  rb_define_method(cXMLSaxParser, "parse", ruby_xml_sax_parser_parse, 0);
397
429
  rb_define_method(cXMLSaxParser, "string", ruby_xml_sax_parser_str_get, 0);
398
430
  rb_define_method(cXMLSaxParser, "string=", ruby_xml_sax_parser_str_set, 1);
399
431
 
400
- rb_define_method(cXMLSaxParser, "on_internal_subset",
401
- ruby_xml_sax_parser_on_internal_subset, -1);
402
- rb_define_method(cXMLSaxParser, "on_is_standalone",
403
- ruby_xml_sax_parser_on_is_standalone, -1);
404
- rb_define_method(cXMLSaxParser, "on_has_internal_subset",
405
- ruby_xml_sax_parser_on_has_internal_subset, -1);
406
- rb_define_method(cXMLSaxParser, "on_has_external_subset",
407
- ruby_xml_sax_parser_on_has_external_subset, -1);
408
- rb_define_method(cXMLSaxParser, "on_start_document",
409
- ruby_xml_sax_parser_on_start_document, -1);
410
- rb_define_method(cXMLSaxParser, "on_end_document",
411
- ruby_xml_sax_parser_on_end_document, -1);
412
- rb_define_method(cXMLSaxParser, "on_start_element",
413
- ruby_xml_sax_parser_on_start_element, -1);
414
- rb_define_method(cXMLSaxParser, "on_end_element",
415
- ruby_xml_sax_parser_on_end_element, -1);
416
- rb_define_method(cXMLSaxParser, "on_reference",
417
- ruby_xml_sax_parser_on_reference, -1);
418
- rb_define_method(cXMLSaxParser, "on_characters",
419
- ruby_xml_sax_parser_on_characters, -1);
420
- rb_define_method(cXMLSaxParser, "on_processing_instruction",
421
- ruby_xml_sax_parser_on_processing_instruction, -1);
422
- rb_define_method(cXMLSaxParser, "on_comment",
423
- ruby_xml_sax_parser_on_comment, -1);
424
- rb_define_method(cXMLSaxParser, "on_parser_warning",
425
- ruby_xml_sax_parser_on_parser_warning, -1);
426
- rb_define_method(cXMLSaxParser, "on_parser_error",
427
- ruby_xml_sax_parser_on_parser_error, -1);
428
- rb_define_method(cXMLSaxParser, "on_parser_fatal_error",
429
- ruby_xml_sax_parser_on_parser_fatal_error, -1);
430
- rb_define_method(cXMLSaxParser, "on_cdata_block",
431
- ruby_xml_sax_parser_on_cdata_block, -1);
432
- rb_define_method(cXMLSaxParser, "on_external_subset",
433
- ruby_xml_sax_parser_on_external_subset, -1);
432
+ /* SaxCallbacks */
433
+ cbidOnInternalSubset = rb_intern("on_internal_subset");
434
+ cbidOnIsStandalone = rb_intern("on_is_standalone");
435
+ cbidOnHasInternalSubset = rb_intern("on_has_internal_subset");
436
+ cbidOnHasExternalSubset = rb_intern("on_has_external_subset");
437
+ cbidOnStartDocument = rb_intern("on_start_document");
438
+ cbidOnEndDocument = rb_intern("on_end_document");
439
+ cbidOnStartElement = rb_intern("on_start_element");
440
+ cbidOnEndElement = rb_intern("on_end_element");
441
+ cbidOnReference = rb_intern("on_reference");
442
+ cbidOnCharacters = rb_intern("on_characters");
443
+ cbidOnProcessingInstruction = rb_intern("on_processing_instruction");
444
+ cbidOnComment = rb_intern("on_comment");
445
+ cbidOnXmlParserWarning = rb_intern("on_parser_warning");
446
+ cbidOnXmlParserError = rb_intern("on_parser_error");
447
+ cbidOnXmlParserFatalError = rb_intern("on_parser_fatal_error");
448
+ cbidOnCdataBlock = rb_intern("on_cdata_block");
449
+ cbidOnExternalSubset = rb_intern("on_external_subset");
450
+
451
+ rb_define_method(mXMLSaxParserCallbacks, "on_internal_subset",
452
+ ruby_xml_sax_callbacks_on_internal_subset, -1);
453
+ rb_define_method(mXMLSaxParserCallbacks, "on_is_standalone",
454
+ ruby_xml_sax_callbacks_on_is_standalone, -1);
455
+ rb_define_method(mXMLSaxParserCallbacks, "on_has_internal_subset",
456
+ ruby_xml_sax_callbacks_on_has_internal_subset, -1);
457
+ rb_define_method(mXMLSaxParserCallbacks, "on_has_external_subset",
458
+ ruby_xml_sax_callbacks_on_has_external_subset, -1);
459
+ rb_define_method(mXMLSaxParserCallbacks, "on_start_document",
460
+ ruby_xml_sax_callbacks_on_start_document, -1);
461
+ rb_define_method(mXMLSaxParserCallbacks, "on_end_document",
462
+ ruby_xml_sax_callbacks_on_end_document, -1);
463
+ rb_define_method(mXMLSaxParserCallbacks, "on_start_element",
464
+ ruby_xml_sax_callbacks_on_start_element, -1);
465
+ rb_define_method(mXMLSaxParserCallbacks, "on_end_element",
466
+ ruby_xml_sax_callbacks_on_end_element, -1);
467
+ rb_define_method(mXMLSaxParserCallbacks, "on_reference",
468
+ ruby_xml_sax_callbacks_on_reference, -1);
469
+ rb_define_method(mXMLSaxParserCallbacks, "on_characters",
470
+ ruby_xml_sax_callbacks_on_characters, -1);
471
+ rb_define_method(mXMLSaxParserCallbacks, "on_processing_instruction",
472
+ ruby_xml_sax_callbacks_on_processing_instruction, -1);
473
+ rb_define_method(mXMLSaxParserCallbacks, "on_comment",
474
+ ruby_xml_sax_callbacks_on_comment, -1);
475
+ rb_define_method(mXMLSaxParserCallbacks, "on_parser_warning",
476
+ ruby_xml_sax_callbacks_on_parser_warning, -1);
477
+ rb_define_method(mXMLSaxParserCallbacks, "on_parser_error",
478
+ ruby_xml_sax_callbacks_on_parser_error, -1);
479
+ rb_define_method(mXMLSaxParserCallbacks, "on_parser_fatal_error",
480
+ ruby_xml_sax_callbacks_on_parser_fatal_error, -1);
481
+ rb_define_method(mXMLSaxParserCallbacks, "on_cdata_block",
482
+ ruby_xml_sax_callbacks_on_cdata_block, -1);
483
+ rb_define_method(mXMLSaxParserCallbacks, "on_external_subset",
484
+ ruby_xml_sax_callbacks_on_external_subset, -1);
434
485
  }