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.
- data/CHANGELOG +6 -0
- data/LICENSE +1 -1
- data/README +1 -1
- data/Rakefile +8 -5
- data/TODO +1 -1
- data/ext/xml/extconf.rb +4 -5
- data/ext/xml/libxml.c +5 -2
- data/ext/xml/libxml.h +16 -7
- data/ext/xml/libxml.rb +3 -3
- data/ext/xml/ruby_xml_attr.c +118 -99
- data/ext/xml/ruby_xml_attr.h +4 -7
- data/ext/xml/ruby_xml_document.c +131 -170
- data/ext/xml/ruby_xml_document.h +5 -9
- data/ext/xml/ruby_xml_html_parser.c +453 -0
- data/ext/xml/ruby_xml_html_parser.h +29 -0
- data/ext/xml/ruby_xml_node.c +219 -253
- data/ext/xml/ruby_xml_node.h +4 -7
- data/ext/xml/ruby_xml_node_set.c +6 -6
- data/ext/xml/ruby_xml_node_set.h +1 -1
- data/ext/xml/ruby_xml_ns.c +1 -1
- data/ext/xml/ruby_xml_ns.h +1 -1
- data/ext/xml/ruby_xml_parser.c +5 -8
- data/ext/xml/ruby_xml_parser.h +1 -1
- data/ext/xml/ruby_xml_parser_context.c +3 -4
- data/ext/xml/ruby_xml_parser_context.h +1 -1
- data/ext/xml/ruby_xml_reader.c +893 -0
- data/ext/xml/ruby_xml_reader.h +14 -0
- data/ext/xml/ruby_xml_sax_parser.c +255 -204
- data/ext/xml/ruby_xml_sax_parser.h +6 -2
- data/ext/xml/ruby_xml_tree.c +1 -1
- data/ext/xml/ruby_xml_tree.h +1 -1
- data/ext/xml/ruby_xml_xinclude.c +1 -1
- data/ext/xml/ruby_xml_xinclude.h +1 -1
- data/ext/xml/ruby_xml_xpath.c +3 -2
- data/ext/xml/ruby_xml_xpath.h +1 -1
- data/ext/xml/ruby_xml_xpath_context.c +4 -4
- data/ext/xml/ruby_xml_xpath_context.h +1 -1
- data/ext/xml/ruby_xml_xpointer.c +10 -4
- data/ext/xml/ruby_xml_xpointer.h +1 -1
- data/ext/xml/ruby_xml_xpointer_context.c +1 -1
- data/ext/xml/ruby_xml_xpointer_context.h +1 -1
- data/ext/xml/sax_parser_callbacks.inc +55 -54
- data/tests/model/rubynet_project +1 -1
- data/tests/model/simple.xml +7 -0
- data/tests/tc_xml_document.rb +1 -1
- data/tests/tc_xml_document_write.rb +1 -1
- data/tests/tc_xml_document_write2.rb +1 -1
- data/tests/tc_xml_document_write3.rb +1 -1
- data/tests/tc_xml_html_parser.rb +60 -0
- data/tests/tc_xml_node.rb +1 -1
- data/tests/tc_xml_node2.rb +1 -1
- data/tests/tc_xml_node3.rb +1 -1
- data/tests/tc_xml_node4.rb +8 -5
- data/tests/tc_xml_node5.rb +1 -1
- data/tests/tc_xml_node6.rb +1 -1
- data/tests/tc_xml_node7.rb +1 -1
- data/tests/tc_xml_node_set.rb +1 -1
- data/tests/tc_xml_node_set2.rb +1 -1
- data/tests/tc_xml_node_xlink.rb +1 -1
- data/tests/tc_xml_parser.rb +5 -1
- data/tests/tc_xml_parser2.rb +1 -1
- data/tests/tc_xml_parser3.rb +1 -1
- data/tests/tc_xml_parser4.rb +1 -1
- data/tests/tc_xml_parser5.rb +1 -1
- data/tests/tc_xml_parser6.rb +1 -1
- data/tests/tc_xml_parser7.rb +1 -1
- data/tests/tc_xml_parser8.rb +1 -1
- data/tests/tc_xml_parser_context.rb +1 -1
- data/tests/tc_xml_reader.rb +101 -0
- data/tests/tc_xml_sax_parser.rb +95 -0
- data/tests/tc_xml_xinclude.rb +1 -1
- data/tests/tc_xml_xpath.rb +1 -1
- data/tests/tc_xml_xpointer.rb +1 -1
- metadata +79 -73
- data/ext/xml/ruby_xml_attribute.c +0 -224
- data/ext/xml/ruby_xml_attribute.h +0 -21
- 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
|
|
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
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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
|
-
*
|
|
207
|
+
* callbacks.on_internal_subset(name, external_id, system_id)
|
|
118
208
|
*
|
|
119
|
-
*
|
|
209
|
+
* Called for an internal subset event.
|
|
120
210
|
*/
|
|
121
211
|
VALUE
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
*
|
|
219
|
+
* callbacks.on_is_standalone()
|
|
130
220
|
*
|
|
131
|
-
*
|
|
221
|
+
* Called for 'is standalone' event.
|
|
132
222
|
*/
|
|
133
223
|
VALUE
|
|
134
|
-
|
|
135
|
-
|
|
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
|
-
*
|
|
231
|
+
* callbacks.on_has_internal_subset()
|
|
142
232
|
*
|
|
143
|
-
*
|
|
233
|
+
* Called for an internal subset notification event.
|
|
144
234
|
*/
|
|
145
235
|
VALUE
|
|
146
|
-
|
|
147
|
-
|
|
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
|
-
*
|
|
243
|
+
* callbacks.on_has_external_subset()
|
|
154
244
|
*
|
|
155
|
-
*
|
|
245
|
+
* Called for an external subset notification event.
|
|
156
246
|
*/
|
|
157
247
|
VALUE
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
*
|
|
255
|
+
* callbacks.on_start_document()
|
|
166
256
|
*
|
|
167
|
-
*
|
|
257
|
+
* Called for a start document event.
|
|
168
258
|
*/
|
|
169
259
|
VALUE
|
|
170
|
-
|
|
171
|
-
|
|
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
|
-
*
|
|
267
|
+
* callbacks.on_end_document()
|
|
178
268
|
*
|
|
179
|
-
*
|
|
269
|
+
* Called for an end document event.
|
|
180
270
|
*/
|
|
181
271
|
VALUE
|
|
182
|
-
|
|
183
|
-
|
|
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
|
-
*
|
|
279
|
+
* callbacks.on_start_element(name, attr_hash)
|
|
190
280
|
*
|
|
191
|
-
*
|
|
281
|
+
* Called for an element start event.
|
|
192
282
|
*/
|
|
193
283
|
VALUE
|
|
194
|
-
|
|
195
|
-
|
|
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
|
-
*
|
|
291
|
+
* callbacks.on_end_element(name)
|
|
202
292
|
*
|
|
203
|
-
*
|
|
293
|
+
* Called for an element end event.
|
|
204
294
|
*/
|
|
205
295
|
VALUE
|
|
206
|
-
|
|
207
|
-
|
|
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
|
-
*
|
|
303
|
+
* callbacks.on_reference(name)
|
|
214
304
|
*
|
|
215
|
-
*
|
|
305
|
+
* Called for a reference event.
|
|
216
306
|
*/
|
|
217
307
|
VALUE
|
|
218
|
-
|
|
219
|
-
|
|
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
|
-
*
|
|
315
|
+
* callbacks.on_characters(chars)
|
|
226
316
|
*
|
|
227
|
-
*
|
|
317
|
+
* Called for a characters event.
|
|
228
318
|
*/
|
|
229
319
|
VALUE
|
|
230
|
-
|
|
231
|
-
|
|
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
|
-
*
|
|
327
|
+
* callbacks.on_processing_instruction(target, data)
|
|
238
328
|
*
|
|
239
|
-
*
|
|
329
|
+
* Called for an processing instruction event.
|
|
240
330
|
*/
|
|
241
331
|
VALUE
|
|
242
|
-
|
|
243
|
-
|
|
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
|
-
*
|
|
339
|
+
* callbacks.on_comment(msg)
|
|
250
340
|
*
|
|
251
|
-
*
|
|
341
|
+
* Called for a comment event.
|
|
252
342
|
*/
|
|
253
343
|
VALUE
|
|
254
|
-
|
|
255
|
-
|
|
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
|
-
*
|
|
351
|
+
* callbacks.on_parser_warning(msg)
|
|
262
352
|
*
|
|
263
|
-
*
|
|
353
|
+
* Called for parser warnings.
|
|
264
354
|
*/
|
|
265
355
|
VALUE
|
|
266
|
-
|
|
267
|
-
|
|
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
|
-
*
|
|
363
|
+
* callbacks.on_parser_error(msg)
|
|
274
364
|
*
|
|
275
|
-
*
|
|
365
|
+
* Called for parser errors.
|
|
276
366
|
*/
|
|
277
367
|
VALUE
|
|
278
|
-
|
|
279
|
-
|
|
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
|
-
*
|
|
375
|
+
* callbacks.on_parser_fatal_error(msg)
|
|
286
376
|
*
|
|
287
|
-
*
|
|
377
|
+
* Called for fatal parser errors.
|
|
288
378
|
*/
|
|
289
379
|
VALUE
|
|
290
|
-
|
|
291
|
-
|
|
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
|
-
*
|
|
386
|
+
* callbacks.on_cdata_block(cdata)
|
|
297
387
|
*
|
|
298
|
-
*
|
|
388
|
+
* Called for a CDATA block event.
|
|
299
389
|
*/
|
|
300
390
|
VALUE
|
|
301
|
-
|
|
302
|
-
|
|
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
|
-
*
|
|
397
|
+
* callbacks.on_external_subset(name, external_id, system_id)
|
|
308
398
|
*
|
|
309
|
-
*
|
|
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
|
-
|
|
359
|
-
|
|
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
|
-
|
|
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
|
-
|
|
421
|
+
ruby_xml_sax_parser_filename_get, 0);
|
|
394
422
|
rb_define_method(cXMLSaxParser, "filename=",
|
|
395
|
-
|
|
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
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
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
|
}
|