libxml-ruby 0.8.3 → 0.9.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 (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
  }