libxml-ruby 0.8.3 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (168) hide show
  1. data/CHANGES +18 -0
  2. data/RAKEFILE +15 -39
  3. data/README +48 -47
  4. data/ext/libxml/libxml.c +847 -22
  5. data/ext/libxml/ruby_libxml.h +71 -95
  6. data/ext/libxml/ruby_xml_attr.c +500 -500
  7. data/ext/libxml/ruby_xml_attributes.c +1 -1
  8. data/ext/libxml/ruby_xml_document.c +1144 -1135
  9. data/ext/libxml/ruby_xml_document.h +4 -11
  10. data/ext/libxml/ruby_xml_dtd.c +27 -0
  11. data/ext/libxml/ruby_xml_encoding.c +164 -0
  12. data/ext/libxml/ruby_xml_encoding.h +13 -0
  13. data/ext/libxml/ruby_xml_error.c +941 -0
  14. data/ext/libxml/ruby_xml_error.h +13 -0
  15. data/ext/libxml/ruby_xml_html_parser.c +71 -387
  16. data/ext/libxml/ruby_xml_html_parser.h +1 -17
  17. data/ext/libxml/ruby_xml_input.c +179 -0
  18. data/ext/libxml/ruby_xml_input.h +18 -0
  19. data/ext/libxml/ruby_xml_input_cbg.c +17 -3
  20. data/ext/libxml/ruby_xml_node.c +1566 -1582
  21. data/ext/libxml/ruby_xml_node.h +1 -4
  22. data/ext/libxml/ruby_xml_ns.c +14 -3
  23. data/ext/libxml/ruby_xml_parser.c +164 -1398
  24. data/ext/libxml/ruby_xml_parser.h +5 -17
  25. data/ext/libxml/ruby_xml_parser_context.c +131 -169
  26. data/ext/libxml/ruby_xml_parser_context.h +2 -9
  27. data/ext/libxml/ruby_xml_reader.c +910 -945
  28. data/ext/libxml/ruby_xml_relaxng.c +32 -3
  29. data/ext/libxml/ruby_xml_sax_parser.c +106 -364
  30. data/ext/libxml/ruby_xml_sax_parser.h +1 -37
  31. data/ext/libxml/ruby_xml_schema.c +174 -145
  32. data/ext/libxml/ruby_xml_xinclude.c +9 -5
  33. data/ext/libxml/ruby_xml_xpath.c +25 -6
  34. data/ext/libxml/ruby_xml_xpath.h +1 -2
  35. data/ext/libxml/ruby_xml_xpath_context.c +17 -19
  36. data/ext/libxml/ruby_xml_xpath_object.c +60 -56
  37. data/ext/libxml/ruby_xml_xpointer.c +11 -5
  38. data/ext/libxml/sax_parser_callbacks.inc +42 -37
  39. data/ext/libxml/version.h +3 -3
  40. data/ext/mingw/Rakefile +20 -27
  41. data/ext/mingw/build.rake +41 -0
  42. data/ext/vc/libxml_ruby.vcproj +23 -15
  43. data/lib/libxml.rb +8 -2
  44. data/lib/libxml/document.rb +16 -4
  45. data/lib/libxml/error.rb +84 -0
  46. data/lib/libxml/hpricot.rb +76 -0
  47. data/lib/libxml/html_parser.rb +61 -0
  48. data/lib/libxml/node.rb +36 -25
  49. data/lib/libxml/parser.rb +312 -33
  50. data/lib/libxml/parser_context.rb +17 -0
  51. data/lib/libxml/properties.rb +15 -2
  52. data/lib/libxml/reader.rb +15 -0
  53. data/lib/libxml/sax_callbacks.rb +179 -0
  54. data/lib/libxml/sax_parser.rb +42 -0
  55. data/lib/libxml/tree.rb +1 -2
  56. data/lib/libxml/xpath_object.rb +12 -0
  57. data/test/model/atom.xml +4 -0
  58. data/test/tc_attributes.rb +43 -19
  59. data/test/tc_document.rb +1 -1
  60. data/test/tc_document_write.rb +15 -8
  61. data/test/tc_dtd.rb +36 -20
  62. data/test/tc_encoding.rb +13 -0
  63. data/test/tc_error.rb +136 -0
  64. data/test/tc_node.rb +2 -3
  65. data/test/tc_node_copy.rb +1 -1
  66. data/test/tc_node_edit.rb +6 -0
  67. data/test/tc_ns.rb +18 -0
  68. data/test/tc_parser.rb +113 -228
  69. data/test/tc_parser_context.rb +1 -2
  70. data/test/tc_reader.rb +24 -14
  71. data/test/tc_relaxng.rb +18 -6
  72. data/test/tc_sax_parser.rb +48 -13
  73. data/test/tc_schema.rb +20 -8
  74. data/test/tc_well_formed.rb +2 -1
  75. data/test/tc_xml.rb +212 -0
  76. data/test/tc_xpath.rb +60 -46
  77. data/test/tc_xpointer.rb +7 -11
  78. data/test/test_suite.rb +4 -3
  79. metadata +26 -109
  80. data/doc/rdoc/classes/LibXML.html +0 -241
  81. data/doc/rdoc/classes/LibXML/XML.html +0 -185
  82. data/doc/rdoc/classes/LibXML/XML/Attr.html +0 -1010
  83. data/doc/rdoc/classes/LibXML/XML/Attributes.html +0 -526
  84. data/doc/rdoc/classes/LibXML/XML/Document.html +0 -1489
  85. data/doc/rdoc/classes/LibXML/XML/Dtd.html +0 -213
  86. data/doc/rdoc/classes/LibXML/XML/Error.html +0 -117
  87. data/doc/rdoc/classes/LibXML/XML/HTMLParser.html +0 -348
  88. data/doc/rdoc/classes/LibXML/XML/InputCallbacks.html +0 -160
  89. data/doc/rdoc/classes/LibXML/XML/NS.html +0 -381
  90. data/doc/rdoc/classes/LibXML/XML/Node.html +0 -3396
  91. data/doc/rdoc/classes/LibXML/XML/Node/FailedModify.html +0 -123
  92. data/doc/rdoc/classes/LibXML/XML/Node/Set.html +0 -440
  93. data/doc/rdoc/classes/LibXML/XML/Node/SetNamespace.html +0 -123
  94. data/doc/rdoc/classes/LibXML/XML/Node/UnknownType.html +0 -123
  95. data/doc/rdoc/classes/LibXML/XML/Parser.html +0 -2239
  96. data/doc/rdoc/classes/LibXML/XML/Parser/Context.html +0 -1255
  97. data/doc/rdoc/classes/LibXML/XML/Parser/ParseError.html +0 -123
  98. data/doc/rdoc/classes/LibXML/XML/Reader.html +0 -2264
  99. data/doc/rdoc/classes/LibXML/XML/RelaxNG.html +0 -237
  100. data/doc/rdoc/classes/LibXML/XML/SaxParser.html +0 -415
  101. data/doc/rdoc/classes/LibXML/XML/Schema.html +0 -308
  102. data/doc/rdoc/classes/LibXML/XML/State.html +0 -124
  103. data/doc/rdoc/classes/LibXML/XML/Tree.html +0 -111
  104. data/doc/rdoc/classes/LibXML/XML/XInclude.html +0 -123
  105. data/doc/rdoc/classes/LibXML/XML/XInclude/Error.html +0 -117
  106. data/doc/rdoc/classes/LibXML/XML/XMLParserOptions.html +0 -198
  107. data/doc/rdoc/classes/LibXML/XML/XPath.html +0 -184
  108. data/doc/rdoc/classes/LibXML/XML/XPath/Context.html +0 -404
  109. data/doc/rdoc/classes/LibXML/XML/XPath/InvalidPath.html +0 -172
  110. data/doc/rdoc/classes/LibXML/XML/XPath/Object.html +0 -627
  111. data/doc/rdoc/classes/LibXML/XML/XPointer.html +0 -170
  112. data/doc/rdoc/classes/LibXML/XML/XPointer/Context.html +0 -123
  113. data/doc/rdoc/classes/LibXML/XML/XPointer/Context/InvalidPath.html +0 -117
  114. data/doc/rdoc/classes/LibXML/XML/XPointer/InvalidExpression.html +0 -124
  115. data/doc/rdoc/classes/singleton.html +0 -114
  116. data/doc/rdoc/created.rid +0 -1
  117. data/doc/rdoc/files/CHANGES.html +0 -442
  118. data/doc/rdoc/files/LICENSE.html +0 -133
  119. data/doc/rdoc/files/README.html +0 -388
  120. data/doc/rdoc/files/VERSION.html +0 -107
  121. data/doc/rdoc/files/ext/libxml/cbg_c.html +0 -101
  122. data/doc/rdoc/files/ext/libxml/libxml_c.html +0 -101
  123. data/doc/rdoc/files/ext/libxml/ruby_xml_attr_c.html +0 -101
  124. data/doc/rdoc/files/ext/libxml/ruby_xml_attributes_c.html +0 -101
  125. data/doc/rdoc/files/ext/libxml/ruby_xml_document_c.html +0 -101
  126. data/doc/rdoc/files/ext/libxml/ruby_xml_dtd_c.html +0 -101
  127. data/doc/rdoc/files/ext/libxml/ruby_xml_html_parser_c.html +0 -101
  128. data/doc/rdoc/files/ext/libxml/ruby_xml_input_cbg_c.html +0 -101
  129. data/doc/rdoc/files/ext/libxml/ruby_xml_node_c.html +0 -101
  130. data/doc/rdoc/files/ext/libxml/ruby_xml_node_set_c.html +0 -101
  131. data/doc/rdoc/files/ext/libxml/ruby_xml_ns_c.html +0 -101
  132. data/doc/rdoc/files/ext/libxml/ruby_xml_parser_c.html +0 -101
  133. data/doc/rdoc/files/ext/libxml/ruby_xml_parser_context_c.html +0 -101
  134. data/doc/rdoc/files/ext/libxml/ruby_xml_reader_c.html +0 -101
  135. data/doc/rdoc/files/ext/libxml/ruby_xml_relaxng_c.html +0 -101
  136. data/doc/rdoc/files/ext/libxml/ruby_xml_sax_parser_c.html +0 -101
  137. data/doc/rdoc/files/ext/libxml/ruby_xml_schema_c.html +0 -101
  138. data/doc/rdoc/files/ext/libxml/ruby_xml_state_c.html +0 -101
  139. data/doc/rdoc/files/ext/libxml/ruby_xml_xinclude_c.html +0 -101
  140. data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_c.html +0 -101
  141. data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_context_c.html +0 -101
  142. data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_object_c.html +0 -101
  143. data/doc/rdoc/files/ext/libxml/ruby_xml_xpointer_c.html +0 -101
  144. data/doc/rdoc/files/ext/libxml/ruby_xml_xpointer_context_c.html +0 -101
  145. data/doc/rdoc/files/lib/libxml/attr_rb.html +0 -108
  146. data/doc/rdoc/files/lib/libxml/attributes_rb.html +0 -108
  147. data/doc/rdoc/files/lib/libxml/document_rb.html +0 -108
  148. data/doc/rdoc/files/lib/libxml/node_rb.html +0 -108
  149. data/doc/rdoc/files/lib/libxml/node_set_rb.html +0 -108
  150. data/doc/rdoc/files/lib/libxml/parser_options_rb.html +0 -107
  151. data/doc/rdoc/files/lib/libxml/parser_rb.html +0 -101
  152. data/doc/rdoc/files/lib/libxml/properties_rb.html +0 -108
  153. data/doc/rdoc/files/lib/libxml/tree_rb.html +0 -107
  154. data/doc/rdoc/files/lib/libxml_rb.html +0 -124
  155. data/doc/rdoc/files/lib/xml/libxml_rb.html +0 -124
  156. data/doc/rdoc/files/lib/xml_rb.html +0 -134
  157. data/doc/rdoc/fr_class_index.html +0 -62
  158. data/doc/rdoc/fr_file_index.html +0 -66
  159. data/doc/rdoc/fr_method_index.html +0 -392
  160. data/doc/rdoc/index.html +0 -24
  161. data/doc/rdoc/rdoc-style.css +0 -208
  162. data/ext/libxml/ruby_xml_node_set.c +0 -172
  163. data/ext/libxml/ruby_xml_node_set.h +0 -20
  164. data/ext/libxml/ruby_xml_xpointer_context.c +0 -22
  165. data/ext/libxml/ruby_xml_xpointer_context.h +0 -18
  166. data/lib/libxml/node_set.rb +0 -27
  167. data/test/tc_node_set.rb +0 -24
  168. data/test/tc_node_set2.rb +0 -37
@@ -1,6 +1,35 @@
1
1
  #include "ruby_libxml.h"
2
2
  #include "ruby_xml_relaxng.h"
3
3
 
4
+ /*
5
+ * Document-class: LibXML::XML::RelaxNG
6
+ *
7
+ * The XML::RelaxNG class is used to prepare RelaxNG schemas for validation
8
+ * of xml documents.
9
+ *
10
+ * Schemas can be created from XML documents, strings or URIs using the
11
+ * corresponding methods (new for URIs).
12
+ *
13
+ * Once a schema is prepared, an XML document can be validated by the
14
+ * XML::Document#validate_relaxng method providing the XML::RelaxNG object
15
+ * as parameter. The method will raise an exception if the document is
16
+ * not valid.
17
+ *
18
+ * Basic Usage:
19
+ *
20
+ * # parse schema as xml document
21
+ * relaxng_document = XML::Document.file('schema.rng')
22
+ *
23
+ * # prepare schema for validation
24
+ * relaxng_schema = XML::RelaxNG.document(relaxng_document)
25
+ *
26
+ * # parse xml document to be validated
27
+ * instance = XML::Document.file('instance.xml')
28
+ *
29
+ * # validate
30
+ * instance.validate_relaxng(relaxng_schema)
31
+ */
32
+
4
33
  VALUE cXMLRelaxNG;
5
34
 
6
35
  // Rdoc needs to know
@@ -53,13 +82,13 @@ ruby_xml_relaxng_init_from_uri(VALUE class, VALUE uri) {
53
82
  */
54
83
  VALUE
55
84
  ruby_xml_relaxng_init_from_document(VALUE class, VALUE document) {
56
- ruby_xml_document_t *rdoc;
85
+ xmlDocPtr xdoc;
57
86
  ruby_xml_relaxng *relaxng;
58
87
  xmlRelaxNGParserCtxtPtr parser;
59
88
 
60
- Data_Get_Struct(document, ruby_xml_document_t, rdoc);
89
+ Data_Get_Struct(document, xmlDoc, xdoc);
61
90
 
62
- parser = xmlRelaxNGNewDocParserCtxt(rdoc->doc);
91
+ parser = xmlRelaxNGNewDocParserCtxt(xdoc);
63
92
  relaxng = ALLOC(ruby_xml_relaxng);
64
93
  relaxng->relaxng = xmlRelaxNGParse(parser);
65
94
  xmlRelaxNGFreeParserCtxt(parser);
@@ -1,13 +1,45 @@
1
- /* $Id: ruby_xml_sax_parser.c 461 2008-07-15 21:35:56Z cfis $ */
1
+ /* $Id: ruby_xml_sax_parser.c 578 2008-11-18 09:23:26Z cfis $ */
2
2
 
3
3
  /* Please see the LICENSE file for copyright and distribution information */
4
4
 
5
5
  #include "ruby_libxml.h"
6
6
  #include "ruby_xml_sax_parser.h"
7
7
 
8
+ /*
9
+ * Document-class: LibXML::XML::SaxParser
10
+ *
11
+ * XML::SaxParser provides a callback based API for parsing documents,
12
+ * in contrast to XML::Parser's tree based API and XML::Reader's stream
13
+ * based API.
14
+ *
15
+ * Note that the XML::SaxParser API is fairly complex, not well standardized,
16
+ * and does not directly support validation making entity, namespace and
17
+ * base processing relatively hard.
18
+ *
19
+ * To use the XML::SaxParser, register a callback class via the
20
+ * XML::SaxParser#callbacks=. It is easiest to include the
21
+ * XML::SaxParser::Callbacks module in your class and override
22
+ * the methods as needed.
23
+ *
24
+ * Basic example:
25
+ *
26
+ * class MyCallbacks
27
+ * include XML::SaxParser::Callbacks
28
+ * def on_start_element(element, attributes)
29
+ * puts #Element started: #{element}"
30
+ * end
31
+ * end
32
+ *
33
+ * parser = XML::SaxParser.new
34
+ * parser.callbacks = MyCallbacks.new
35
+ * parser.parse
36
+ */
37
+
8
38
  VALUE cXMLSaxParser;
9
39
  VALUE mXMLSaxParserCallbacks;
10
40
 
41
+ ID INPUT_ATTR;
42
+
11
43
  VALUE cbidOnInternalSubset;
12
44
  VALUE cbidOnIsStandalone;
13
45
  VALUE cbidOnHasInternalSubset;
@@ -29,50 +61,53 @@ VALUE cbidOnExternalSubset;
29
61
  #include "sax_parser_callbacks.inc"
30
62
 
31
63
  void
32
- ruby_xml_sax_parser_free(ruby_xml_sax_parser *nodesp) {
33
- /* Apparently this isn't needed: time will tell */
34
- /* if (nodesp->xsh != NULL) */
35
- /* xmlFreeSax_Parser(nodesp->sax_parser); */
64
+ ruby_xml_sax_parser_free(ruby_xml_sax_parser *rxsp) {
65
+ xfree(rxsp);
36
66
  }
37
67
 
38
68
  void
39
- ruby_xml_sax_parser_mark(ruby_xml_sax_parser *nodesp) {
40
- if (nodesp->callbackHandler && (nodesp->callbackHandler != Qnil)) {
41
- rb_gc_mark(nodesp->callbackHandler);
69
+ ruby_xml_sax_parser_mark(ruby_xml_sax_parser *rxsp) {
70
+ if (rxsp->callbackHandler != Qnil) {
71
+ rb_gc_mark(rxsp->callbackHandler);
42
72
  }
43
73
 
44
- if (nodesp->filename && (nodesp->filename != Qnil)) {
45
- rb_gc_mark(nodesp->filename);
74
+ if (rxsp->filename != Qnil) {
75
+ rb_gc_mark(rxsp->filename);
46
76
  }
47
77
 
48
- if (nodesp->str && (nodesp->str != Qnil)) {
49
- rb_gc_mark(nodesp->str);
78
+ if (rxsp->str != Qnil) {
79
+ rb_gc_mark(rxsp->str);
50
80
  }
51
81
  }
52
82
 
83
+ VALUE
84
+ ruby_xml_sax_parser_alloc(VALUE klass) {
85
+ ruby_xml_sax_parser *rxsp = ALLOC(ruby_xml_sax_parser);
86
+ rxsp->xsh = &rubySAXHandlerStruct;
87
+ rxsp->callbackHandler = Qnil;
88
+ rxsp->xpc = NULL;
89
+ rxsp->filename = Qnil;
90
+ rxsp->str = Qnil;
91
+
92
+ return Data_Wrap_Struct(cXMLSaxParser,
93
+ ruby_xml_sax_parser_mark, ruby_xml_sax_parser_free,
94
+ rxsp);
95
+ }
96
+
97
+
53
98
  /*
54
99
  * call-seq:
55
- * XML::SaxParser.new -> sax_parser
100
+ * sax_parser.initialize -> sax_parser
56
101
  *
57
- * Create a new XML::SaxParser instance.
102
+ * Initiliazes instance of parser.
58
103
  */
59
104
  VALUE
60
- ruby_xml_sax_parser_new(VALUE class) {
61
- ruby_xml_sax_parser *nodesp;
62
-
63
- nodesp = ALLOC(ruby_xml_sax_parser);
64
- nodesp->xsh = &rubySAXHandlerStruct;
65
-
66
- nodesp->callbackHandler = Qnil;
67
- nodesp->xpc = NULL;
68
- nodesp->filename = Qnil;
69
- nodesp->str = Qnil;
70
-
71
- return(Data_Wrap_Struct(class, ruby_xml_sax_parser_mark,
72
- ruby_xml_sax_parser_free, nodesp));
105
+ ruby_xml_sax_parser_initialize(VALUE self) {
106
+ VALUE input = rb_class_new_instance(0, NULL, cXMLInput);
107
+ rb_iv_set(self, "@input", input);
108
+ return self;
73
109
  }
74
110
 
75
-
76
111
  /*
77
112
  * call-seq:
78
113
  * sax_parser.callbacks -> #<XML::SaxParser::Callbacks subclass>
@@ -81,9 +116,9 @@ ruby_xml_sax_parser_new(VALUE class) {
81
116
  */
82
117
  VALUE
83
118
  ruby_xml_sax_parser_callbacks_get(VALUE self) {
84
- ruby_xml_sax_parser *nodesp;
85
- Data_Get_Struct(self, ruby_xml_sax_parser, nodesp);
86
- return(nodesp->callbackHandler);
119
+ ruby_xml_sax_parser *rxsp;
120
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
121
+ return(rxsp->callbackHandler);
87
122
  }
88
123
 
89
124
 
@@ -98,43 +133,12 @@ ruby_xml_sax_parser_callbacks_get(VALUE self) {
98
133
  */
99
134
  VALUE
100
135
  ruby_xml_sax_parser_callbacks_set(VALUE self, VALUE callbacks) {
101
- ruby_xml_sax_parser *nodesp;
102
- Data_Get_Struct(self, ruby_xml_sax_parser, nodesp);
103
- nodesp->callbackHandler = callbacks;
104
- return(nodesp->callbackHandler);
136
+ ruby_xml_sax_parser *rxsp;
137
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
138
+ rxsp->callbackHandler = callbacks;
139
+ return(rxsp->callbackHandler);
105
140
  }
106
141
 
107
-
108
- /*
109
- * call-seq:
110
- * sax_parser.filename -> "filename"
111
- *
112
- * Obtain the filename this parser reads from.
113
- */
114
- VALUE
115
- ruby_xml_sax_parser_filename_get(VALUE self) {
116
- ruby_xml_sax_parser *nodesp;
117
- Data_Get_Struct(self, ruby_xml_sax_parser, nodesp);
118
- return(nodesp->filename);
119
- }
120
-
121
-
122
- /*
123
- * call-seq:
124
- * sax_parser.filename = "filename"
125
- *
126
- * Set the filename this parser reads from.
127
- */
128
- VALUE
129
- ruby_xml_sax_parser_filename_set(VALUE self, VALUE filename) {
130
- ruby_xml_sax_parser *nodesp;
131
- Check_Type(filename, T_STRING);
132
- Data_Get_Struct(self, ruby_xml_sax_parser, nodesp);
133
- nodesp->filename = filename;
134
- return(nodesp->filename);
135
- }
136
-
137
-
138
142
  /*
139
143
  * call-seq:
140
144
  * parser.parse -> (true|false)
@@ -146,264 +150,39 @@ VALUE
146
150
  ruby_xml_sax_parser_parse(VALUE self) {
147
151
  char *str;
148
152
  int status = 1;
149
- ruby_xml_sax_parser *nodesp;
153
+ ruby_xml_sax_parser *rxsp;
154
+ VALUE source;
155
+ VALUE input = rb_ivar_get(self, INPUT_ATTR);
150
156
 
151
- Data_Get_Struct(self, ruby_xml_sax_parser, nodesp);
157
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
152
158
 
153
- if (nodesp->filename != Qnil) {
154
- status = xmlSAXUserParseFile(nodesp->xsh, nodesp, StringValuePtr(nodesp->filename));
155
- } else if (nodesp->str != Qnil) {
156
- str = StringValuePtr(nodesp->str);
157
- status = //ruby_xml_document_new(cXMLDocument,
158
- xmlSAXUserParseMemory(nodesp->xsh, nodesp,
159
- str, strlen(str)); //);
159
+ if (rb_ivar_get(input, FILE_ATTR) != Qnil)
160
+ {
161
+ source = rb_ivar_get(input, FILE_ATTR);
162
+ status = xmlSAXUserParseFile(rxsp->xsh, rxsp, StringValuePtr(source));
163
+ }
164
+ else if (rb_ivar_get(input, STRING_ATTR) != Qnil)
165
+ {
166
+ source = rb_ivar_get(input, STRING_ATTR);
167
+ str = StringValueCStr(source);
168
+ status = xmlSAXUserParseMemory(rxsp->xsh, rxsp, str, strlen(str));
169
+ }
170
+ else
171
+ {
172
+ rb_raise(rb_eArgError, "You must specify a parser data source");
160
173
  }
161
174
 
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
175
  if (status)
166
- return(Qfalse);
176
+ {
177
+ ruby_xml_raise(&xmlLastError);
178
+ return Qfalse;
179
+ }
167
180
  else
181
+ {
168
182
  return(Qtrue);
183
+ }
169
184
  }
170
185
 
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 *nodesp;
181
- Data_Get_Struct(self, ruby_xml_sax_parser, nodesp);
182
- return(nodesp->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 *nodesp;
195
- Check_Type(str, T_STRING);
196
- Data_Get_Struct(self, ruby_xml_sax_parser, nodesp);
197
- nodesp->str = str;
198
- return(nodesp->str);
199
- }
200
-
201
-
202
- /****** SaxCallbacks ******/
203
- /* These are all the same. Bloody Rdoc... */
204
-
205
- /*
206
- * call-seq:
207
- * callbacks.on_internal_subset(name, external_id, system_id)
208
- *
209
- * Called for an internal subset event.
210
- */
211
- VALUE
212
- ruby_xml_sax_callbacks_on_internal_subset(int argc, VALUE *argv, VALUE self) {
213
- return Qnil;
214
- }
215
-
216
-
217
- /*
218
- * call-seq:
219
- * callbacks.on_is_standalone()
220
- *
221
- * Called for 'is standalone' event.
222
- */
223
- VALUE
224
- ruby_xml_sax_callbacks_on_is_standalone(int argc, VALUE *argv, VALUE self) {
225
- return Qnil;
226
- }
227
-
228
-
229
- /*
230
- * call-seq:
231
- * callbacks.on_has_internal_subset()
232
- *
233
- * Called for an internal subset notification event.
234
- */
235
- VALUE
236
- ruby_xml_sax_callbacks_on_has_internal_subset(int argc, VALUE *argv, VALUE self) {
237
- return Qnil;
238
- }
239
-
240
-
241
- /*
242
- * call-seq:
243
- * callbacks.on_has_external_subset()
244
- *
245
- * Called for an external subset notification event.
246
- */
247
- VALUE
248
- ruby_xml_sax_callbacks_on_has_external_subset(int argc, VALUE *argv, VALUE self) {
249
- return Qnil;
250
- }
251
-
252
-
253
- /*
254
- * call-seq:
255
- * callbacks.on_start_document()
256
- *
257
- * Called for a start document event.
258
- */
259
- VALUE
260
- ruby_xml_sax_callbacks_on_start_document(int argc, VALUE *argv, VALUE self) {
261
- return Qnil;
262
- }
263
-
264
-
265
- /*
266
- * call-seq:
267
- * callbacks.on_end_document()
268
- *
269
- * Called for an end document event.
270
- */
271
- VALUE
272
- ruby_xml_sax_callbacks_on_end_document(int argc, VALUE *argv, VALUE self) {
273
- return Qnil;
274
- }
275
-
276
-
277
- /*
278
- * call-seq:
279
- * callbacks.on_start_element(name, attributes_hash)
280
- *
281
- * Called for an element start event.
282
- */
283
- VALUE
284
- ruby_xml_sax_callbacks_on_start_element(int argc, VALUE *argv, VALUE self) {
285
- return Qnil;
286
- }
287
-
288
-
289
- /*
290
- * call-seq:
291
- * callbacks.on_end_element(name)
292
- *
293
- * Called for an element end event.
294
- */
295
- VALUE
296
- ruby_xml_sax_callbacks_on_end_element(int argc, VALUE *argv, VALUE self) {
297
- return Qnil;
298
- }
299
-
300
-
301
- /*
302
- * call-seq:
303
- * callbacks.on_reference(name)
304
- *
305
- * Called for a reference event.
306
- */
307
- VALUE
308
- ruby_xml_sax_callbacks_on_reference(int argc, VALUE *argv, VALUE self) {
309
- return Qnil;
310
- }
311
-
312
-
313
- /*
314
- * call-seq:
315
- * callbacks.on_characters(chars)
316
- *
317
- * Called for a characters event.
318
- */
319
- VALUE
320
- ruby_xml_sax_callbacks_on_characters(int argc, VALUE *argv, VALUE self) {
321
- return Qnil;
322
- }
323
-
324
-
325
- /*
326
- * call-seq:
327
- * callbacks.on_processing_instruction(target, data)
328
- *
329
- * Called for an processing instruction event.
330
- */
331
- VALUE
332
- ruby_xml_sax_callbacks_on_processing_instruction(int argc, VALUE *argv, VALUE self) {
333
- return Qnil;
334
- }
335
-
336
-
337
- /*
338
- * call-seq:
339
- * callbacks.on_comment(msg)
340
- *
341
- * Called for a comment event.
342
- */
343
- VALUE
344
- ruby_xml_sax_callbacks_on_comment(int argc, VALUE *argv, VALUE self) {
345
- return Qnil;
346
- }
347
-
348
-
349
- /*
350
- * call-seq:
351
- * callbacks.on_parser_warning(msg)
352
- *
353
- * Called for parser warnings.
354
- */
355
- VALUE
356
- ruby_xml_sax_callbacks_on_parser_warning(int argc, VALUE *argv, VALUE self) {
357
- return Qnil;
358
- }
359
-
360
-
361
- /*
362
- * call-seq:
363
- * callbacks.on_parser_error(msg)
364
- *
365
- * Called for parser errors.
366
- */
367
- VALUE
368
- ruby_xml_sax_callbacks_on_parser_error(int argc, VALUE *argv, VALUE self) {
369
- return Qnil;
370
- }
371
-
372
-
373
- /*
374
- * call-seq:
375
- * callbacks.on_parser_fatal_error(msg)
376
- *
377
- * Called for fatal parser errors.
378
- */
379
- VALUE
380
- ruby_xml_sax_callbacks_on_parser_fatal_error(int argc, VALUE *argv, VALUE self) {
381
- return Qnil;
382
- }
383
-
384
- /*
385
- * call-seq:
386
- * callbacks.on_cdata_block(cdata)
387
- *
388
- * Called for a CDATA block event.
389
- */
390
- VALUE
391
- ruby_xml_sax_callbacks_on_cdata_block(int argc, VALUE *argv, VALUE self) {
392
- return Qnil;
393
- }
394
-
395
- /*
396
- * call-seq:
397
- * callbacks.on_external_subset(name, external_id, system_id)
398
- *
399
- * Called for an external subset event.
400
- */
401
- VALUE
402
- ruby_xml_sax_callbacks_on_external_subset(int argc, VALUE *argv, VALUE self) {
403
- return Qnil;
404
- }
405
-
406
-
407
186
  // Rdoc needs to know
408
187
  #ifdef RDOC_NEVER_DEFINED
409
188
  mLibXML = rb_define_module("LibXML");
@@ -412,23 +191,21 @@ ruby_xml_sax_callbacks_on_external_subset(int argc, VALUE *argv, VALUE self) {
412
191
 
413
192
  void
414
193
  ruby_init_xml_sax_parser(void) {
194
+ /* SaxParser */
415
195
  cXMLSaxParser = rb_define_class_under(mXML, "SaxParser", rb_cObject);
416
- mXMLSaxParserCallbacks = rb_define_module_under(cXMLSaxParser, "Callbacks");
196
+ rb_define_alloc_func(cXMLSaxParser, ruby_xml_sax_parser_alloc);
197
+ rb_define_method(cXMLSaxParser, "callbacks", ruby_xml_sax_parser_callbacks_get, 0);
198
+ rb_define_method(cXMLSaxParser, "callbacks=", ruby_xml_sax_parser_callbacks_set, 1);
199
+ rb_define_method(cXMLSaxParser, "parse", ruby_xml_sax_parser_parse, 0);
417
200
 
418
- /* SaxParser */
419
- rb_define_singleton_method(cXMLSaxParser, "new", ruby_xml_sax_parser_new, 0);
201
+ /* Atributes */
202
+ rb_define_attr(cXMLSaxParser, "input", 1, 0);
203
+
204
+ /* Instance Methods */
205
+ rb_define_method(cXMLSaxParser, "initialize", ruby_xml_sax_parser_initialize, 0);
420
206
 
421
- rb_define_method(cXMLSaxParser, "filename",
422
- ruby_xml_sax_parser_filename_get, 0);
423
- rb_define_method(cXMLSaxParser, "filename=",
424
- ruby_xml_sax_parser_filename_set, 1);
425
- rb_define_method(cXMLSaxParser, "callbacks",
426
- ruby_xml_sax_parser_callbacks_get, 0);
427
- rb_define_method(cXMLSaxParser, "callbacks=",
428
- ruby_xml_sax_parser_callbacks_set, 1);
429
- rb_define_method(cXMLSaxParser, "parse", ruby_xml_sax_parser_parse, 0);
430
- rb_define_method(cXMLSaxParser, "string", ruby_xml_sax_parser_str_get, 0);
431
- rb_define_method(cXMLSaxParser, "string=", ruby_xml_sax_parser_str_set, 1);
207
+
208
+ INPUT_ATTR = rb_intern("@input");
432
209
 
433
210
  /* SaxCallbacks */
434
211
  cbidOnInternalSubset = rb_intern("on_internal_subset");
@@ -448,39 +225,4 @@ ruby_init_xml_sax_parser(void) {
448
225
  cbidOnXmlParserFatalError = rb_intern("on_parser_fatal_error");
449
226
  cbidOnCdataBlock = rb_intern("on_cdata_block");
450
227
  cbidOnExternalSubset = rb_intern("on_external_subset");
451
-
452
- rb_define_method(mXMLSaxParserCallbacks, "on_internal_subset",
453
- ruby_xml_sax_callbacks_on_internal_subset, -1);
454
- rb_define_method(mXMLSaxParserCallbacks, "on_is_standalone",
455
- ruby_xml_sax_callbacks_on_is_standalone, -1);
456
- rb_define_method(mXMLSaxParserCallbacks, "on_has_internal_subset",
457
- ruby_xml_sax_callbacks_on_has_internal_subset, -1);
458
- rb_define_method(mXMLSaxParserCallbacks, "on_has_external_subset",
459
- ruby_xml_sax_callbacks_on_has_external_subset, -1);
460
- rb_define_method(mXMLSaxParserCallbacks, "on_start_document",
461
- ruby_xml_sax_callbacks_on_start_document, -1);
462
- rb_define_method(mXMLSaxParserCallbacks, "on_end_document",
463
- ruby_xml_sax_callbacks_on_end_document, -1);
464
- rb_define_method(mXMLSaxParserCallbacks, "on_start_element",
465
- ruby_xml_sax_callbacks_on_start_element, -1);
466
- rb_define_method(mXMLSaxParserCallbacks, "on_end_element",
467
- ruby_xml_sax_callbacks_on_end_element, -1);
468
- rb_define_method(mXMLSaxParserCallbacks, "on_reference",
469
- ruby_xml_sax_callbacks_on_reference, -1);
470
- rb_define_method(mXMLSaxParserCallbacks, "on_characters",
471
- ruby_xml_sax_callbacks_on_characters, -1);
472
- rb_define_method(mXMLSaxParserCallbacks, "on_processing_instruction",
473
- ruby_xml_sax_callbacks_on_processing_instruction, -1);
474
- rb_define_method(mXMLSaxParserCallbacks, "on_comment",
475
- ruby_xml_sax_callbacks_on_comment, -1);
476
- rb_define_method(mXMLSaxParserCallbacks, "on_parser_warning",
477
- ruby_xml_sax_callbacks_on_parser_warning, -1);
478
- rb_define_method(mXMLSaxParserCallbacks, "on_parser_error",
479
- ruby_xml_sax_callbacks_on_parser_error, -1);
480
- rb_define_method(mXMLSaxParserCallbacks, "on_parser_fatal_error",
481
- ruby_xml_sax_callbacks_on_parser_fatal_error, -1);
482
- rb_define_method(mXMLSaxParserCallbacks, "on_cdata_block",
483
- ruby_xml_sax_callbacks_on_cdata_block, -1);
484
- rb_define_method(mXMLSaxParserCallbacks, "on_external_subset",
485
- ruby_xml_sax_callbacks_on_external_subset, -1);
486
228
  }