libxml-ruby 0.8.3-x86-mswin32-60 → 0.9.0-x86-mswin32-60

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 (175) 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/{lib → ext/mingw}/libiconv-2.dll +0 -0
  43. data/ext/mingw/libxml2-2.dll +0 -0
  44. data/ext/mingw/libxml_ruby.dll.a +0 -0
  45. data/ext/mingw/libxml_ruby.so +0 -0
  46. data/ext/vc/libxml_ruby.vcproj +23 -15
  47. data/lib/libxml.rb +8 -2
  48. data/lib/libxml/document.rb +16 -4
  49. data/lib/libxml/error.rb +84 -0
  50. data/lib/libxml/hpricot.rb +76 -0
  51. data/lib/libxml/html_parser.rb +61 -0
  52. data/lib/libxml/node.rb +36 -25
  53. data/lib/libxml/parser.rb +312 -33
  54. data/lib/libxml/parser_context.rb +17 -0
  55. data/lib/libxml/properties.rb +15 -2
  56. data/lib/libxml/reader.rb +15 -0
  57. data/lib/libxml/sax_callbacks.rb +179 -0
  58. data/lib/libxml/sax_parser.rb +42 -0
  59. data/lib/libxml/tree.rb +1 -2
  60. data/lib/libxml/xpath_object.rb +12 -0
  61. data/test/model/atom.xml +4 -0
  62. data/test/tc_attributes.rb +43 -19
  63. data/test/tc_document.rb +1 -1
  64. data/test/tc_document_write.rb +15 -8
  65. data/test/tc_dtd.rb +36 -20
  66. data/test/tc_encoding.rb +13 -0
  67. data/test/tc_error.rb +136 -0
  68. data/test/tc_node.rb +2 -3
  69. data/test/tc_node_copy.rb +1 -1
  70. data/test/tc_node_edit.rb +6 -0
  71. data/test/tc_ns.rb +18 -0
  72. data/test/tc_parser.rb +113 -228
  73. data/test/tc_parser_context.rb +1 -2
  74. data/test/tc_reader.rb +24 -14
  75. data/test/tc_relaxng.rb +18 -6
  76. data/test/tc_sax_parser.rb +48 -13
  77. data/test/tc_schema.rb +20 -8
  78. data/test/tc_well_formed.rb +2 -1
  79. data/test/tc_xml.rb +212 -0
  80. data/test/tc_xpath.rb +60 -46
  81. data/test/tc_xpointer.rb +7 -11
  82. data/test/test_suite.rb +4 -3
  83. metadata +32 -115
  84. data/doc/rdoc/classes/LibXML.html +0 -241
  85. data/doc/rdoc/classes/LibXML/XML.html +0 -185
  86. data/doc/rdoc/classes/LibXML/XML/Attr.html +0 -1010
  87. data/doc/rdoc/classes/LibXML/XML/Attributes.html +0 -526
  88. data/doc/rdoc/classes/LibXML/XML/Document.html +0 -1489
  89. data/doc/rdoc/classes/LibXML/XML/Dtd.html +0 -213
  90. data/doc/rdoc/classes/LibXML/XML/Error.html +0 -117
  91. data/doc/rdoc/classes/LibXML/XML/HTMLParser.html +0 -348
  92. data/doc/rdoc/classes/LibXML/XML/InputCallbacks.html +0 -160
  93. data/doc/rdoc/classes/LibXML/XML/NS.html +0 -381
  94. data/doc/rdoc/classes/LibXML/XML/Node.html +0 -3396
  95. data/doc/rdoc/classes/LibXML/XML/Node/FailedModify.html +0 -123
  96. data/doc/rdoc/classes/LibXML/XML/Node/Set.html +0 -440
  97. data/doc/rdoc/classes/LibXML/XML/Node/SetNamespace.html +0 -123
  98. data/doc/rdoc/classes/LibXML/XML/Node/UnknownType.html +0 -123
  99. data/doc/rdoc/classes/LibXML/XML/Parser.html +0 -2239
  100. data/doc/rdoc/classes/LibXML/XML/Parser/Context.html +0 -1255
  101. data/doc/rdoc/classes/LibXML/XML/Parser/ParseError.html +0 -123
  102. data/doc/rdoc/classes/LibXML/XML/Reader.html +0 -2264
  103. data/doc/rdoc/classes/LibXML/XML/RelaxNG.html +0 -237
  104. data/doc/rdoc/classes/LibXML/XML/SaxParser.html +0 -415
  105. data/doc/rdoc/classes/LibXML/XML/Schema.html +0 -308
  106. data/doc/rdoc/classes/LibXML/XML/State.html +0 -124
  107. data/doc/rdoc/classes/LibXML/XML/Tree.html +0 -111
  108. data/doc/rdoc/classes/LibXML/XML/XInclude.html +0 -123
  109. data/doc/rdoc/classes/LibXML/XML/XInclude/Error.html +0 -117
  110. data/doc/rdoc/classes/LibXML/XML/XMLParserOptions.html +0 -198
  111. data/doc/rdoc/classes/LibXML/XML/XPath.html +0 -184
  112. data/doc/rdoc/classes/LibXML/XML/XPath/Context.html +0 -404
  113. data/doc/rdoc/classes/LibXML/XML/XPath/InvalidPath.html +0 -172
  114. data/doc/rdoc/classes/LibXML/XML/XPath/Object.html +0 -627
  115. data/doc/rdoc/classes/LibXML/XML/XPointer.html +0 -170
  116. data/doc/rdoc/classes/LibXML/XML/XPointer/Context.html +0 -123
  117. data/doc/rdoc/classes/LibXML/XML/XPointer/Context/InvalidPath.html +0 -117
  118. data/doc/rdoc/classes/LibXML/XML/XPointer/InvalidExpression.html +0 -124
  119. data/doc/rdoc/classes/singleton.html +0 -114
  120. data/doc/rdoc/created.rid +0 -1
  121. data/doc/rdoc/files/CHANGES.html +0 -442
  122. data/doc/rdoc/files/LICENSE.html +0 -133
  123. data/doc/rdoc/files/README.html +0 -388
  124. data/doc/rdoc/files/VERSION.html +0 -107
  125. data/doc/rdoc/files/ext/libxml/cbg_c.html +0 -101
  126. data/doc/rdoc/files/ext/libxml/libxml_c.html +0 -101
  127. data/doc/rdoc/files/ext/libxml/ruby_xml_attr_c.html +0 -101
  128. data/doc/rdoc/files/ext/libxml/ruby_xml_attributes_c.html +0 -101
  129. data/doc/rdoc/files/ext/libxml/ruby_xml_document_c.html +0 -101
  130. data/doc/rdoc/files/ext/libxml/ruby_xml_dtd_c.html +0 -101
  131. data/doc/rdoc/files/ext/libxml/ruby_xml_html_parser_c.html +0 -101
  132. data/doc/rdoc/files/ext/libxml/ruby_xml_input_cbg_c.html +0 -101
  133. data/doc/rdoc/files/ext/libxml/ruby_xml_node_c.html +0 -101
  134. data/doc/rdoc/files/ext/libxml/ruby_xml_node_set_c.html +0 -101
  135. data/doc/rdoc/files/ext/libxml/ruby_xml_ns_c.html +0 -101
  136. data/doc/rdoc/files/ext/libxml/ruby_xml_parser_c.html +0 -101
  137. data/doc/rdoc/files/ext/libxml/ruby_xml_parser_context_c.html +0 -101
  138. data/doc/rdoc/files/ext/libxml/ruby_xml_reader_c.html +0 -101
  139. data/doc/rdoc/files/ext/libxml/ruby_xml_relaxng_c.html +0 -101
  140. data/doc/rdoc/files/ext/libxml/ruby_xml_sax_parser_c.html +0 -101
  141. data/doc/rdoc/files/ext/libxml/ruby_xml_schema_c.html +0 -101
  142. data/doc/rdoc/files/ext/libxml/ruby_xml_state_c.html +0 -101
  143. data/doc/rdoc/files/ext/libxml/ruby_xml_xinclude_c.html +0 -101
  144. data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_c.html +0 -101
  145. data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_context_c.html +0 -101
  146. data/doc/rdoc/files/ext/libxml/ruby_xml_xpath_object_c.html +0 -101
  147. data/doc/rdoc/files/ext/libxml/ruby_xml_xpointer_c.html +0 -101
  148. data/doc/rdoc/files/ext/libxml/ruby_xml_xpointer_context_c.html +0 -101
  149. data/doc/rdoc/files/lib/libxml/attr_rb.html +0 -108
  150. data/doc/rdoc/files/lib/libxml/attributes_rb.html +0 -108
  151. data/doc/rdoc/files/lib/libxml/document_rb.html +0 -108
  152. data/doc/rdoc/files/lib/libxml/node_rb.html +0 -108
  153. data/doc/rdoc/files/lib/libxml/node_set_rb.html +0 -108
  154. data/doc/rdoc/files/lib/libxml/parser_options_rb.html +0 -107
  155. data/doc/rdoc/files/lib/libxml/parser_rb.html +0 -101
  156. data/doc/rdoc/files/lib/libxml/properties_rb.html +0 -108
  157. data/doc/rdoc/files/lib/libxml/tree_rb.html +0 -107
  158. data/doc/rdoc/files/lib/libxml_rb.html +0 -124
  159. data/doc/rdoc/files/lib/xml/libxml_rb.html +0 -124
  160. data/doc/rdoc/files/lib/xml_rb.html +0 -134
  161. data/doc/rdoc/fr_class_index.html +0 -62
  162. data/doc/rdoc/fr_file_index.html +0 -66
  163. data/doc/rdoc/fr_method_index.html +0 -392
  164. data/doc/rdoc/index.html +0 -24
  165. data/doc/rdoc/rdoc-style.css +0 -208
  166. data/ext/libxml/ruby_xml_node_set.c +0 -172
  167. data/ext/libxml/ruby_xml_node_set.h +0 -20
  168. data/ext/libxml/ruby_xml_xpointer_context.c +0 -22
  169. data/ext/libxml/ruby_xml_xpointer_context.h +0 -18
  170. data/lib/libxml/node_set.rb +0 -27
  171. data/lib/libxml2-2.dll +0 -0
  172. data/lib/libxml_ruby.dll.a +0 -0
  173. data/lib/libxml_ruby.so +0 -0
  174. data/test/tc_node_set.rb +0 -24
  175. 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
  }