libxml-ruby 2.8.0 → 3.2.1

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 (204) hide show
  1. checksums.yaml +5 -5
  2. data/HISTORY +842 -775
  3. data/LICENSE +20 -20
  4. data/MANIFEST +166 -166
  5. data/README.rdoc +217 -184
  6. data/Rakefile +90 -78
  7. data/ext/libxml/extconf.h +3 -0
  8. data/ext/libxml/extconf.rb +61 -116
  9. data/ext/libxml/libxml.c +80 -76
  10. data/ext/libxml/ruby_libxml.h +67 -75
  11. data/ext/libxml/ruby_xml.c +933 -893
  12. data/ext/libxml/ruby_xml.h +10 -10
  13. data/ext/libxml/ruby_xml_attr.c +333 -333
  14. data/ext/libxml/ruby_xml_attr.h +12 -12
  15. data/ext/libxml/ruby_xml_attr_decl.c +153 -153
  16. data/ext/libxml/ruby_xml_attr_decl.h +11 -11
  17. data/ext/libxml/ruby_xml_attributes.c +275 -275
  18. data/ext/libxml/ruby_xml_attributes.h +15 -15
  19. data/ext/libxml/ruby_xml_cbg.c +85 -85
  20. data/ext/libxml/ruby_xml_document.c +1123 -1147
  21. data/ext/libxml/ruby_xml_document.h +11 -11
  22. data/ext/libxml/ruby_xml_dtd.c +248 -268
  23. data/ext/libxml/ruby_xml_dtd.h +9 -9
  24. data/ext/libxml/ruby_xml_encoding.c +250 -260
  25. data/ext/libxml/ruby_xml_encoding.h +16 -19
  26. data/ext/libxml/ruby_xml_error.c +996 -996
  27. data/ext/libxml/ruby_xml_error.h +12 -12
  28. data/ext/libxml/ruby_xml_html_parser.c +89 -92
  29. data/ext/libxml/ruby_xml_html_parser.h +10 -10
  30. data/ext/libxml/ruby_xml_html_parser_context.c +337 -338
  31. data/ext/libxml/ruby_xml_html_parser_context.h +10 -10
  32. data/ext/libxml/ruby_xml_html_parser_options.c +46 -46
  33. data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
  34. data/ext/libxml/ruby_xml_input_cbg.c +191 -191
  35. data/ext/libxml/ruby_xml_input_cbg.h +20 -20
  36. data/ext/libxml/ruby_xml_io.c +47 -50
  37. data/ext/libxml/ruby_xml_io.h +10 -10
  38. data/ext/libxml/ruby_xml_namespace.c +153 -153
  39. data/ext/libxml/ruby_xml_namespace.h +10 -10
  40. data/ext/libxml/ruby_xml_namespaces.c +293 -293
  41. data/ext/libxml/ruby_xml_namespaces.h +9 -9
  42. data/ext/libxml/ruby_xml_node.c +1402 -1452
  43. data/ext/libxml/ruby_xml_node.h +13 -11
  44. data/ext/libxml/ruby_xml_parser.c +91 -94
  45. data/ext/libxml/ruby_xml_parser.h +12 -12
  46. data/ext/libxml/ruby_xml_parser_context.c +999 -1001
  47. data/ext/libxml/ruby_xml_parser_context.h +10 -10
  48. data/ext/libxml/ruby_xml_parser_options.c +66 -66
  49. data/ext/libxml/ruby_xml_parser_options.h +12 -12
  50. data/ext/libxml/ruby_xml_reader.c +1239 -1228
  51. data/ext/libxml/ruby_xml_reader.h +17 -17
  52. data/ext/libxml/ruby_xml_relaxng.c +110 -111
  53. data/ext/libxml/ruby_xml_relaxng.h +10 -10
  54. data/ext/libxml/ruby_xml_sax2_handler.c +326 -328
  55. data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
  56. data/ext/libxml/ruby_xml_sax_parser.c +116 -120
  57. data/ext/libxml/ruby_xml_sax_parser.h +10 -10
  58. data/ext/libxml/ruby_xml_schema.c +278 -301
  59. data/ext/libxml/ruby_xml_schema.h +809 -809
  60. data/ext/libxml/ruby_xml_schema_attribute.c +109 -109
  61. data/ext/libxml/ruby_xml_schema_attribute.h +15 -15
  62. data/ext/libxml/ruby_xml_schema_element.c +95 -94
  63. data/ext/libxml/ruby_xml_schema_element.h +14 -14
  64. data/ext/libxml/ruby_xml_schema_facet.c +52 -52
  65. data/ext/libxml/ruby_xml_schema_facet.h +13 -13
  66. data/ext/libxml/ruby_xml_schema_type.c +232 -259
  67. data/ext/libxml/ruby_xml_schema_type.h +9 -9
  68. data/ext/libxml/ruby_xml_version.h +9 -9
  69. data/ext/libxml/ruby_xml_writer.c +1133 -1137
  70. data/ext/libxml/ruby_xml_writer.h +10 -10
  71. data/ext/libxml/ruby_xml_xinclude.c +16 -16
  72. data/ext/libxml/ruby_xml_xinclude.h +11 -11
  73. data/ext/libxml/ruby_xml_xpath.c +194 -188
  74. data/ext/libxml/ruby_xml_xpath.h +13 -13
  75. data/ext/libxml/ruby_xml_xpath_context.c +360 -361
  76. data/ext/libxml/ruby_xml_xpath_context.h +9 -9
  77. data/ext/libxml/ruby_xml_xpath_expression.c +81 -81
  78. data/ext/libxml/ruby_xml_xpath_expression.h +10 -10
  79. data/ext/libxml/ruby_xml_xpath_object.c +338 -335
  80. data/ext/libxml/ruby_xml_xpath_object.h +17 -17
  81. data/ext/libxml/ruby_xml_xpointer.c +99 -99
  82. data/ext/libxml/ruby_xml_xpointer.h +11 -11
  83. data/ext/vc/libxml_ruby.sln +17 -15
  84. data/lib/libxml-ruby.rb +30 -0
  85. data/lib/libxml.rb +3 -33
  86. data/lib/libxml/node.rb +2 -78
  87. data/lib/libxml/parser.rb +0 -266
  88. data/lib/libxml/sax_parser.rb +0 -17
  89. data/lib/libxml/schema.rb +47 -66
  90. data/lib/libxml/schema/attribute.rb +19 -19
  91. data/lib/libxml/schema/element.rb +19 -27
  92. data/lib/libxml/schema/type.rb +21 -29
  93. data/libxml-ruby.gemspec +48 -44
  94. data/script/benchmark/depixelate +634 -634
  95. data/script/benchmark/hamlet.xml +9054 -9054
  96. data/script/benchmark/parsecount +170 -170
  97. data/script/benchmark/throughput +41 -41
  98. data/script/test +6 -6
  99. data/setup.rb +0 -1
  100. data/test/c14n/given/example-1.xml +14 -14
  101. data/test/c14n/given/example-2.xml +11 -11
  102. data/test/c14n/given/example-3.xml +18 -18
  103. data/test/c14n/given/example-4.xml +9 -9
  104. data/test/c14n/given/example-5.xml +12 -12
  105. data/test/c14n/given/example-6.xml +2 -2
  106. data/test/c14n/given/example-7.xml +11 -11
  107. data/test/c14n/given/example-8.xml +11 -11
  108. data/test/c14n/given/example-8.xpath +9 -9
  109. data/test/c14n/result/1-1-without-comments/example-1 +3 -3
  110. data/test/c14n/result/1-1-without-comments/example-2 +10 -10
  111. data/test/c14n/result/1-1-without-comments/example-3 +13 -13
  112. data/test/c14n/result/1-1-without-comments/example-4 +8 -8
  113. data/test/c14n/result/1-1-without-comments/example-5 +2 -2
  114. data/test/c14n/result/with-comments/example-1 +5 -5
  115. data/test/c14n/result/with-comments/example-2 +10 -10
  116. data/test/c14n/result/with-comments/example-3 +13 -13
  117. data/test/c14n/result/with-comments/example-4 +8 -8
  118. data/test/c14n/result/with-comments/example-5 +3 -3
  119. data/test/c14n/result/without-comments/example-1 +3 -3
  120. data/test/c14n/result/without-comments/example-2 +10 -10
  121. data/test/c14n/result/without-comments/example-3 +13 -13
  122. data/test/c14n/result/without-comments/example-4 +8 -8
  123. data/test/c14n/result/without-comments/example-5 +2 -2
  124. data/test/model/atom.xml +12 -12
  125. data/test/model/bands.iso-8859-1.xml +4 -4
  126. data/test/model/bands.utf-8.xml +4 -4
  127. data/test/model/bands.xml +4 -4
  128. data/test/model/books.xml +153 -153
  129. data/test/model/cwm_1_0.xml +11336 -0
  130. data/test/model/merge_bug_data.xml +58 -58
  131. data/test/model/ruby-lang.html +238 -238
  132. data/test/model/rubynet.xml +79 -79
  133. data/test/model/shiporder.rnc +28 -28
  134. data/test/model/shiporder.rng +86 -86
  135. data/test/model/shiporder.xml +22 -22
  136. data/test/model/shiporder.xsd +39 -39
  137. data/test/model/soap.xml +27 -27
  138. data/test/model/xinclude.xml +4 -4
  139. data/test/test.xml +2 -0
  140. data/test/{tc_attr.rb → test_attr.rb} +23 -25
  141. data/test/{tc_attr_decl.rb → test_attr_decl.rb} +13 -14
  142. data/test/{tc_attributes.rb → test_attributes.rb} +11 -18
  143. data/test/{tc_canonicalize.rb → test_canonicalize.rb} +36 -41
  144. data/test/test_deprecated_require.rb +12 -0
  145. data/test/{tc_document.rb → test_document.rb} +32 -27
  146. data/test/test_document_write.rb +146 -0
  147. data/test/{tc_dtd.rb → test_dtd.rb} +28 -29
  148. data/test/{tc_encoding.rb → test_encoding.rb} +129 -126
  149. data/test/{tc_encoding_sax.rb → test_encoding_sax.rb} +7 -6
  150. data/test/test_error.rb +178 -0
  151. data/test/test_helper.rb +3 -10
  152. data/test/test_html_parser.rb +162 -0
  153. data/test/test_html_parser_context.rb +23 -0
  154. data/test/test_namespace.rb +60 -0
  155. data/test/{tc_namespaces.rb → test_namespaces.rb} +34 -44
  156. data/test/{tc_node.rb → test_node.rb} +68 -47
  157. data/test/{tc_node_cdata.rb → test_node_cdata.rb} +12 -13
  158. data/test/{tc_node_comment.rb → test_node_comment.rb} +7 -8
  159. data/test/{tc_node_copy.rb → test_node_copy.rb} +4 -6
  160. data/test/{tc_node_edit.rb → test_node_edit.rb} +23 -41
  161. data/test/{tc_node_pi.rb → test_node_pi.rb} +37 -40
  162. data/test/{tc_node_text.rb → test_node_text.rb} +10 -12
  163. data/test/{tc_node_write.rb → test_node_write.rb} +18 -29
  164. data/test/test_node_xlink.rb +28 -0
  165. data/test/test_parser.rb +324 -0
  166. data/test/{tc_parser_context.rb → test_parser_context.rb} +41 -42
  167. data/test/{tc_properties.rb → test_properties.rb} +6 -7
  168. data/test/test_reader.rb +363 -0
  169. data/test/test_relaxng.rb +53 -0
  170. data/test/{tc_sax_parser.rb → test_sax_parser.rb} +36 -37
  171. data/test/{tc_schema.rb → test_schema.rb} +43 -37
  172. data/test/test_suite.rb +38 -40
  173. data/test/{tc_traversal.rb → test_traversal.rb} +5 -6
  174. data/test/{tc_writer.rb → test_writer.rb} +468 -448
  175. data/test/{tc_xinclude.rb → test_xinclude.rb} +4 -5
  176. data/test/test_xml.rb +262 -0
  177. data/test/{tc_xpath.rb → test_xpath.rb} +31 -32
  178. data/test/{tc_xpath_context.rb → test_xpath_context.rb} +8 -9
  179. data/test/test_xpath_expression.rb +37 -0
  180. data/test/{tc_xpointer.rb → test_xpointer.rb} +16 -18
  181. metadata +117 -95
  182. data/lib/libxml/ns.rb +0 -22
  183. data/lib/libxml/properties.rb +0 -23
  184. data/lib/libxml/reader.rb +0 -29
  185. data/lib/libxml/xpath_object.rb +0 -16
  186. data/test/etc_doc_to_s.rb +0 -21
  187. data/test/ets_doc_file.rb +0 -17
  188. data/test/ets_doc_to_s.rb +0 -23
  189. data/test/ets_gpx.rb +0 -28
  190. data/test/ets_node_gc.rb +0 -23
  191. data/test/ets_test.xml +0 -2
  192. data/test/ets_tsr.rb +0 -11
  193. data/test/tc_deprecated_require.rb +0 -13
  194. data/test/tc_document_write.rb +0 -196
  195. data/test/tc_error.rb +0 -180
  196. data/test/tc_html_parser.rb +0 -153
  197. data/test/tc_html_parser_context.rb +0 -24
  198. data/test/tc_namespace.rb +0 -62
  199. data/test/tc_node_xlink.rb +0 -29
  200. data/test/tc_parser.rb +0 -381
  201. data/test/tc_reader.rb +0 -400
  202. data/test/tc_relaxng.rb +0 -54
  203. data/test/tc_xml.rb +0 -226
  204. data/test/tc_xpath_expression.rb +0 -38
@@ -1,17 +1,17 @@
1
- /* Copyright (c) 2006 Apple Computer Inc.
2
- * Please see the LICENSE file for copyright and distribution information. */
3
-
4
- #ifndef __RXML_READER__
5
- #define __RXML_READER__
6
-
7
- #include <libxml/xmlreader.h>
8
- #include <libxml/xmlschemas.h>
9
-
10
- extern VALUE cXMLReader;
11
-
12
- void rxml_init_reader(void);
13
-
14
- /* Exported to be used by XML::Document#reader */
15
- VALUE rxml_reader_new_walker(VALUE self, VALUE doc);
16
-
17
- #endif /* __rxml_READER__ */
1
+ /* Copyright (c) 2006 Apple Computer Inc.
2
+ * Please see the LICENSE file for copyright and distribution information. */
3
+
4
+ #ifndef __RXML_READER__
5
+ #define __RXML_READER__
6
+
7
+ #include <libxml/xmlreader.h>
8
+ #include <libxml/xmlschemas.h>
9
+
10
+ extern VALUE cXMLReader;
11
+
12
+ void rxml_init_reader(void);
13
+
14
+ /* Exported to be used by XML::Document#reader */
15
+ VALUE rxml_reader_new_walker(VALUE self, VALUE doc);
16
+
17
+ #endif /* __rxml_READER__ */
@@ -1,111 +1,110 @@
1
- #include "ruby_libxml.h"
2
- #include "ruby_xml_relaxng.h"
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
-
33
- VALUE cXMLRelaxNG;
34
-
35
- static void rxml_relaxng_free(xmlRelaxNGPtr xrelaxng)
36
- {
37
- xmlRelaxNGFree(xrelaxng);
38
- }
39
-
40
- /*
41
- * call-seq:
42
- * XML::Relaxng.new(relaxng_uri) -> relaxng
43
- *
44
- * Create a new relaxng from the specified URI.
45
- */
46
- static VALUE rxml_relaxng_init_from_uri(VALUE class, VALUE uri)
47
- {
48
- xmlRelaxNGParserCtxtPtr xparser;
49
- xmlRelaxNGPtr xrelaxng;
50
-
51
- Check_Type(uri, T_STRING);
52
-
53
- xparser = xmlRelaxNGNewParserCtxt(StringValuePtr(uri));
54
- xrelaxng = xmlRelaxNGParse(xparser);
55
- xmlRelaxNGFreeParserCtxt(xparser);
56
-
57
- return Data_Wrap_Struct(cXMLRelaxNG, NULL, rxml_relaxng_free, xrelaxng);
58
- }
59
-
60
- /*
61
- * call-seq:
62
- * XML::RelaxNG.document(document) -> relaxng
63
- *
64
- * Create a new relaxng from the specified document.
65
- */
66
- static VALUE rxml_relaxng_init_from_document(VALUE class, VALUE document)
67
- {
68
- xmlDocPtr xdoc;
69
- xmlRelaxNGPtr xrelaxng;
70
- xmlRelaxNGParserCtxtPtr xparser;
71
-
72
- Data_Get_Struct(document, xmlDoc, xdoc);
73
-
74
- xparser = xmlRelaxNGNewDocParserCtxt(xdoc);
75
- xrelaxng = xmlRelaxNGParse(xparser);
76
- xmlRelaxNGFreeParserCtxt(xparser);
77
-
78
- return Data_Wrap_Struct(cXMLRelaxNG, NULL, rxml_relaxng_free, xrelaxng);
79
- }
80
-
81
- /*
82
- * call-seq:
83
- * XML::RelaxNG.string("relaxng_data") -> "value"
84
- *
85
- * Create a new relaxng using the specified string.
86
- */
87
- static VALUE rxml_relaxng_init_from_string(VALUE self, VALUE relaxng_str)
88
- {
89
- xmlRelaxNGParserCtxtPtr xparser;
90
- xmlRelaxNGPtr xrelaxng;
91
-
92
- Check_Type(relaxng_str, T_STRING);
93
-
94
- xparser = xmlRelaxNGNewMemParserCtxt(StringValuePtr(relaxng_str), strlen(
95
- StringValuePtr(relaxng_str)));
96
- xrelaxng = xmlRelaxNGParse(xparser);
97
- xmlRelaxNGFreeParserCtxt(xparser);
98
-
99
- return Data_Wrap_Struct(cXMLRelaxNG, NULL, rxml_relaxng_free, xrelaxng);
100
- }
101
-
102
- void rxml_init_relaxng(void)
103
- {
104
- cXMLRelaxNG = rb_define_class_under(mXML, "RelaxNG", rb_cObject);
105
- rb_define_singleton_method(cXMLRelaxNG, "new", rxml_relaxng_init_from_uri, 1);
106
- rb_define_singleton_method(cXMLRelaxNG, "from_string",
107
- rxml_relaxng_init_from_string, 1);
108
- rb_define_singleton_method(cXMLRelaxNG, "document",
109
- rxml_relaxng_init_from_document, 1);
110
- }
111
-
1
+ #include "ruby_libxml.h"
2
+ #include "ruby_xml_relaxng.h"
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
+
33
+ VALUE cXMLRelaxNG;
34
+
35
+ static void rxml_relaxng_free(xmlRelaxNGPtr xrelaxng)
36
+ {
37
+ xmlRelaxNGFree(xrelaxng);
38
+ }
39
+
40
+ /*
41
+ * call-seq:
42
+ * XML::Relaxng.new(relaxng_uri) -> relaxng
43
+ *
44
+ * Create a new relaxng from the specified URI.
45
+ */
46
+ static VALUE rxml_relaxng_init_from_uri(VALUE class, VALUE uri)
47
+ {
48
+ xmlRelaxNGParserCtxtPtr xparser;
49
+ xmlRelaxNGPtr xrelaxng;
50
+
51
+ Check_Type(uri, T_STRING);
52
+
53
+ xparser = xmlRelaxNGNewParserCtxt(StringValuePtr(uri));
54
+ xrelaxng = xmlRelaxNGParse(xparser);
55
+ xmlRelaxNGFreeParserCtxt(xparser);
56
+
57
+ return Data_Wrap_Struct(cXMLRelaxNG, NULL, rxml_relaxng_free, xrelaxng);
58
+ }
59
+
60
+ /*
61
+ * call-seq:
62
+ * XML::RelaxNG.document(document) -> relaxng
63
+ *
64
+ * Create a new relaxng from the specified document.
65
+ */
66
+ static VALUE rxml_relaxng_init_from_document(VALUE class, VALUE document)
67
+ {
68
+ xmlDocPtr xdoc;
69
+ xmlRelaxNGPtr xrelaxng;
70
+ xmlRelaxNGParserCtxtPtr xparser;
71
+
72
+ Data_Get_Struct(document, xmlDoc, xdoc);
73
+
74
+ xparser = xmlRelaxNGNewDocParserCtxt(xdoc);
75
+ xrelaxng = xmlRelaxNGParse(xparser);
76
+ xmlRelaxNGFreeParserCtxt(xparser);
77
+
78
+ return Data_Wrap_Struct(cXMLRelaxNG, NULL, rxml_relaxng_free, xrelaxng);
79
+ }
80
+
81
+ /*
82
+ * call-seq:
83
+ * XML::RelaxNG.string("relaxng_data") -> "value"
84
+ *
85
+ * Create a new relaxng using the specified string.
86
+ */
87
+ static VALUE rxml_relaxng_init_from_string(VALUE self, VALUE relaxng_str)
88
+ {
89
+ xmlRelaxNGParserCtxtPtr xparser;
90
+ xmlRelaxNGPtr xrelaxng;
91
+
92
+ Check_Type(relaxng_str, T_STRING);
93
+
94
+ xparser = xmlRelaxNGNewMemParserCtxt(StringValuePtr(relaxng_str), (int)strlen(StringValuePtr(relaxng_str)));
95
+ xrelaxng = xmlRelaxNGParse(xparser);
96
+ xmlRelaxNGFreeParserCtxt(xparser);
97
+
98
+ return Data_Wrap_Struct(cXMLRelaxNG, NULL, rxml_relaxng_free, xrelaxng);
99
+ }
100
+
101
+ void rxml_init_relaxng(void)
102
+ {
103
+ cXMLRelaxNG = rb_define_class_under(mXML, "RelaxNG", rb_cObject);
104
+ rb_define_singleton_method(cXMLRelaxNG, "new", rxml_relaxng_init_from_uri, 1);
105
+ rb_define_singleton_method(cXMLRelaxNG, "from_string",
106
+ rxml_relaxng_init_from_string, 1);
107
+ rb_define_singleton_method(cXMLRelaxNG, "document",
108
+ rxml_relaxng_init_from_document, 1);
109
+ }
110
+
@@ -1,10 +1,10 @@
1
- #ifndef __RXML_RELAXNG__
2
- #define __RXML_RELAXNG__
3
-
4
- #include <libxml/relaxng.h>
5
-
6
- extern VALUE cXMLRelaxNG;
7
-
8
- void rxml_init_relaxng(void);
9
- #endif
10
-
1
+ #ifndef __RXML_RELAXNG__
2
+ #define __RXML_RELAXNG__
3
+
4
+ #include <libxml/relaxng.h>
5
+
6
+ extern VALUE cXMLRelaxNG;
7
+
8
+ void rxml_init_relaxng(void);
9
+ #endif
10
+
@@ -1,328 +1,326 @@
1
- /* Please see the LICENSE file for copyright and distribution information */
2
-
3
- #include "ruby_libxml.h"
4
- #include "ruby_xml_sax2_handler.h"
5
-
6
-
7
- VALUE cbidOnCdataBlock;
8
- VALUE cbidOnCharacters;
9
- VALUE cbidOnComment;
10
- VALUE cbidOnEndDocument;
11
- VALUE cbidOnEndElement;
12
- VALUE cbidOnEndElementNs;
13
- VALUE cbidOnExternalSubset;
14
- VALUE cbidOnHasExternalSubset;
15
- VALUE cbidOnHasInternalSubset;
16
- VALUE cbidOnInternalSubset;
17
- VALUE cbidOnIsStandalone;
18
- VALUE cbidOnError;
19
- VALUE cbidOnProcessingInstruction;
20
- VALUE cbidOnReference;
21
- VALUE cbidOnStartElement;
22
- VALUE cbidOnStartElementNs;
23
- VALUE cbidOnStartDocument;
24
-
25
- /* ====== Callbacks =========== */
26
- static void cdata_block_callback(void *ctx,
27
- const char *value, int len)
28
- {
29
- VALUE handler = (VALUE) ctx;
30
-
31
- if (handler != Qnil)
32
- {
33
- rb_funcall(handler, cbidOnCdataBlock,1, rxml_new_cstr_len(value, len, NULL));
34
- }
35
- }
36
-
37
- static void characters_callback(void *ctx, const char *chars, int len)
38
- {
39
- VALUE handler = (VALUE) ctx;
40
-
41
- if (handler != Qnil)
42
- {
43
- VALUE rchars = rxml_new_cstr_len(chars, len, NULL);
44
- rb_funcall(handler, cbidOnCharacters, 1, rchars);
45
- }
46
- }
47
-
48
- static void comment_callback(void *ctx, const char *msg)
49
- {
50
- VALUE handler = (VALUE) ctx;
51
-
52
- if (handler != Qnil)
53
- {
54
- rb_funcall(handler, cbidOnComment,1,rxml_new_cstr(msg, NULL));
55
- }
56
- }
57
-
58
- static void end_document_callback(void *ctx)
59
- {
60
- VALUE handler = (VALUE) ctx;
61
-
62
- if (handler != Qnil)
63
- {
64
- rb_funcall(handler, cbidOnEndDocument, 0);
65
- }
66
- }
67
-
68
- static void end_element_ns_callback(void *ctx,
69
- const xmlChar *xlocalname, const xmlChar *xprefix, const xmlChar *xURI)
70
- {
71
- VALUE handler = (VALUE) ctx;
72
-
73
- if (handler == Qnil)
74
- return;
75
-
76
- /* Call end element for old-times sake */
77
- if (rb_respond_to(handler, cbidOnEndElement))
78
- {
79
- VALUE name;
80
- if (xprefix)
81
- {
82
- name = rxml_new_cstr(xprefix, NULL);
83
- rb_str_cat2(name, ":");
84
- rb_str_cat2(name, xlocalname);
85
- }
86
- else
87
- {
88
- name = rxml_new_cstr(xlocalname, NULL);
89
- }
90
- rb_funcall(handler, cbidOnEndElement, 1, name);
91
- }
92
-
93
- rb_funcall(handler, cbidOnEndElementNs, 3,
94
- rxml_new_cstr(xlocalname, NULL),
95
- xprefix ? rxml_new_cstr(xprefix, NULL) : Qnil,
96
- xURI ? rxml_new_cstr(xURI, NULL) : Qnil);
97
- }
98
-
99
- static void external_subset_callback(void *ctx, const char *name, const char *extid, const char *sysid)
100
- {
101
- VALUE handler = (VALUE) ctx;
102
-
103
- if (handler != Qnil)
104
- {
105
- VALUE rname = name ? rxml_new_cstr(name, NULL) : Qnil;
106
- VALUE rextid = extid ? rxml_new_cstr(extid, NULL) : Qnil;
107
- VALUE rsysid = sysid ? rxml_new_cstr(sysid, NULL) : Qnil;
108
- rb_funcall(handler, cbidOnExternalSubset, 3, rname, rextid, rsysid);
109
- }
110
- }
111
-
112
- static void has_external_subset_callback(void *ctx)
113
- {
114
- VALUE handler = (VALUE) ctx;
115
-
116
- if (handler != Qnil)
117
- {
118
- rb_funcall(handler, cbidOnHasExternalSubset, 0);
119
- }
120
- }
121
-
122
- static void has_internal_subset_callback(void *ctx)
123
- {
124
- VALUE handler = (VALUE) ctx;
125
-
126
- if (handler != Qnil)
127
- {
128
- rb_funcall(handler, cbidOnHasInternalSubset, 0);
129
- }
130
- }
131
-
132
- static void internal_subset_callback(void *ctx, const char *name, const char *extid, const char *sysid)
133
- {
134
- VALUE handler = (VALUE) ctx;
135
-
136
- if (handler != Qnil)
137
- {
138
- VALUE rname = name ? rxml_new_cstr(name, NULL) : Qnil;
139
- VALUE rextid = extid ? rxml_new_cstr(extid, NULL) : Qnil;
140
- VALUE rsysid = sysid ? rxml_new_cstr(sysid, NULL) : Qnil;
141
- rb_funcall(handler, cbidOnInternalSubset, 3, rname, rextid, rsysid);
142
- }
143
- }
144
-
145
- static void is_standalone_callback(void *ctx)
146
- {
147
- VALUE handler = (VALUE) ctx;
148
-
149
- if (handler != Qnil)
150
- {
151
- rb_funcall(handler, cbidOnIsStandalone,0);
152
- }
153
- }
154
-
155
- static void processing_instruction_callback(void *ctx, const char *target, const char *data)
156
- {
157
- VALUE handler = (VALUE) ctx;
158
-
159
- if (handler != Qnil)
160
- {
161
- VALUE rtarget = target ? rxml_new_cstr(target, NULL) : Qnil;
162
- VALUE rdata = data ? rxml_new_cstr(data, NULL) : Qnil;
163
- rb_funcall(handler, cbidOnProcessingInstruction, 2, rtarget, rdata);
164
- }
165
- }
166
-
167
- static void reference_callback(void *ctx, const char *name)
168
- {
169
- VALUE handler = (VALUE) ctx;
170
-
171
- if (handler != Qnil)
172
- {
173
- rb_funcall(handler, cbidOnReference,1,rxml_new_cstr(name, NULL));
174
- }
175
- }
176
-
177
- static void start_document_callback(void *ctx)
178
- {
179
- VALUE handler = (VALUE) ctx;
180
-
181
- if (handler != Qnil)
182
- {
183
- rb_funcall(handler, cbidOnStartDocument, 0);
184
- }
185
- }
186
-
187
- static void start_element_ns_callback(void *ctx,
188
- const xmlChar *xlocalname, const xmlChar *xprefix, const xmlChar *xURI,
189
- int nb_namespaces, const xmlChar **xnamespaces,
190
- int nb_attributes, int nb_defaulted, const xmlChar **xattributes)
191
- {
192
- VALUE handler = (VALUE) ctx;
193
- VALUE attributes = rb_hash_new();
194
- VALUE namespaces = rb_hash_new();
195
-
196
- if (handler == Qnil)
197
- return;
198
-
199
- if (xattributes)
200
- {
201
- /* Each attribute is an array of [localname, prefix, URI, value, end] */
202
- int i;
203
- for (i = 0;i < nb_attributes * 5; i+=5)
204
- {
205
- VALUE attrName = rxml_new_cstr(xattributes[i+0], NULL);
206
- VALUE attrValue = rxml_new_cstr_len(xattributes[i+3], xattributes[i+4] - xattributes[i+3], NULL);
207
-
208
- rb_hash_aset(attributes, attrName, attrValue);
209
- }
210
- }
211
-
212
- if (xnamespaces)
213
- {
214
- int i;
215
- for (i = 0;i < nb_namespaces * 2; i+=2)
216
- {
217
- VALUE nsPrefix = xnamespaces[i+0] ? rxml_new_cstr(xnamespaces[i+0], NULL) : Qnil;
218
- VALUE nsURI = xnamespaces[i+1] ? rxml_new_cstr(xnamespaces[i+1], NULL) : Qnil;
219
- rb_hash_aset(namespaces, nsPrefix, nsURI);
220
- }
221
- }
222
-
223
- /* Call start element for old-times sake */
224
- if (rb_respond_to(handler, cbidOnStartElement))
225
- {
226
- VALUE name;
227
- if (xprefix)
228
- {
229
- name = rxml_new_cstr(xprefix, NULL);
230
- rb_str_cat2(name, ":");
231
- rb_str_cat2(name, xlocalname);
232
- }
233
- else
234
- {
235
- name = rxml_new_cstr(xlocalname, NULL);
236
- }
237
- rb_funcall(handler, cbidOnStartElement, 2, name, attributes);
238
- }
239
-
240
- rb_funcall(handler, cbidOnStartElementNs, 5,
241
- rxml_new_cstr(xlocalname, NULL),
242
- attributes,
243
- xprefix ? rxml_new_cstr(xprefix, NULL) : Qnil,
244
- xURI ? rxml_new_cstr(xURI, NULL) : Qnil,
245
- namespaces);
246
- }
247
-
248
- static void structured_error_callback(void *ctx, xmlErrorPtr xerror)
249
- {
250
- /* Older versions of Libxml will pass a NULL context from the sax parser. Fixed on
251
- Feb 23, 2011. See:
252
-
253
- http://git.gnome.org/browse/libxml2/commit/?id=241d4a1069e6bedd0ee2295d7b43858109c1c6d1 */
254
-
255
- VALUE handler;
256
-
257
- #if LIBXML_VERSION <= 20708
258
- xmlParserCtxtPtr ctxt = (xmlParserCtxt*)(xerror->ctxt);
259
- ctx = ctxt->userData;
260
- #endif
261
-
262
- handler = (VALUE) ctx;
263
-
264
- if (handler != Qnil)
265
- {
266
- VALUE error = rxml_error_wrap(xerror);
267
- rb_funcall(handler, cbidOnError, 1, error);
268
- }
269
- }
270
-
271
- /* ====== Handler =========== */
272
- xmlSAXHandler rxml_sax_handler = {
273
- (internalSubsetSAXFunc) internal_subset_callback,
274
- (isStandaloneSAXFunc) is_standalone_callback,
275
- (hasInternalSubsetSAXFunc) has_internal_subset_callback,
276
- (hasExternalSubsetSAXFunc) has_external_subset_callback,
277
- 0, /* resolveEntity */
278
- 0, /* getEntity */
279
- 0, /* entityDecl */
280
- 0, /* notationDecl */
281
- 0, /* attributeDecl */
282
- 0, /* elementDecl */
283
- 0, /* unparsedEntityDecl */
284
- 0, /* setDocumentLocator */
285
- (startDocumentSAXFunc) start_document_callback,
286
- (endDocumentSAXFunc) end_document_callback,
287
- 0, /* Use start_element_ns_callback instead */
288
- 0, /* Use end_element_ns_callback instead */
289
- (referenceSAXFunc) reference_callback,
290
- (charactersSAXFunc) characters_callback,
291
- 0, /* ignorableWhitespace */
292
- (processingInstructionSAXFunc) processing_instruction_callback,
293
- (commentSAXFunc) comment_callback,
294
- 0, /* xmlStructuredErrorFunc is used instead */
295
- 0, /* xmlStructuredErrorFunc is used instead */
296
- 0, /* xmlStructuredErrorFunc is used instead */
297
- 0, /* xmlGetParameterEntity */
298
- (cdataBlockSAXFunc) cdata_block_callback,
299
- (externalSubsetSAXFunc) external_subset_callback,
300
- XML_SAX2_MAGIC, /* force SAX2 */
301
- 0, /* _private */
302
- (startElementNsSAX2Func) start_element_ns_callback,
303
- (endElementNsSAX2Func) end_element_ns_callback,
304
- (xmlStructuredErrorFunc) structured_error_callback
305
- };
306
-
307
- void rxml_init_sax2_handler(void)
308
- {
309
-
310
- /* SaxCallbacks */
311
- cbidOnCdataBlock = rb_intern("on_cdata_block");
312
- cbidOnCharacters = rb_intern("on_characters");
313
- cbidOnComment = rb_intern("on_comment");
314
- cbidOnEndDocument = rb_intern("on_end_document");
315
- cbidOnEndElement = rb_intern("on_end_element");
316
- cbidOnEndElementNs = rb_intern("on_end_element_ns");
317
- cbidOnError = rb_intern("on_error");
318
- cbidOnExternalSubset = rb_intern("on_external_subset");
319
- cbidOnHasExternalSubset = rb_intern("on_has_external_subset");
320
- cbidOnHasInternalSubset = rb_intern("on_has_internal_subset");
321
- cbidOnInternalSubset = rb_intern("on_internal_subset");
322
- cbidOnIsStandalone = rb_intern("on_is_standalone");
323
- cbidOnProcessingInstruction = rb_intern("on_processing_instruction");
324
- cbidOnReference = rb_intern("on_reference");
325
- cbidOnStartElement = rb_intern("on_start_element");
326
- cbidOnStartElementNs = rb_intern("on_start_element_ns");
327
- cbidOnStartDocument = rb_intern("on_start_document");
328
- }
1
+ /* Please see the LICENSE file for copyright and distribution information */
2
+
3
+ #include "ruby_libxml.h"
4
+ #include "ruby_xml_sax2_handler.h"
5
+
6
+
7
+ VALUE cbidOnCdataBlock;
8
+ VALUE cbidOnCharacters;
9
+ VALUE cbidOnComment;
10
+ VALUE cbidOnEndDocument;
11
+ VALUE cbidOnEndElement;
12
+ VALUE cbidOnEndElementNs;
13
+ VALUE cbidOnExternalSubset;
14
+ VALUE cbidOnHasExternalSubset;
15
+ VALUE cbidOnHasInternalSubset;
16
+ VALUE cbidOnInternalSubset;
17
+ VALUE cbidOnIsStandalone;
18
+ VALUE cbidOnError;
19
+ VALUE cbidOnProcessingInstruction;
20
+ VALUE cbidOnReference;
21
+ VALUE cbidOnStartElement;
22
+ VALUE cbidOnStartElementNs;
23
+ VALUE cbidOnStartDocument;
24
+
25
+ /* ====== Callbacks =========== */
26
+ static void cdata_block_callback(void *ctx, const xmlChar *value, int len)
27
+ {
28
+ VALUE handler = (VALUE) ctx;
29
+
30
+ if (handler != Qnil)
31
+ {
32
+ rb_funcall(handler, cbidOnCdataBlock,1, rxml_new_cstr_len(value, len, NULL));
33
+ }
34
+ }
35
+
36
+ static void characters_callback(void *ctx, const xmlChar *chars, int len)
37
+ {
38
+ VALUE handler = (VALUE) ctx;
39
+
40
+ if (handler != Qnil)
41
+ {
42
+ VALUE rchars = rxml_new_cstr_len(chars, len, NULL);
43
+ rb_funcall(handler, cbidOnCharacters, 1, rchars);
44
+ }
45
+ }
46
+
47
+ static void comment_callback(void *ctx, const xmlChar *msg)
48
+ {
49
+ VALUE handler = (VALUE) ctx;
50
+
51
+ if (handler != Qnil)
52
+ {
53
+ rb_funcall(handler, cbidOnComment, 1, rxml_new_cstr(msg, NULL));
54
+ }
55
+ }
56
+
57
+ static void end_document_callback(void *ctx)
58
+ {
59
+ VALUE handler = (VALUE) ctx;
60
+
61
+ if (handler != Qnil)
62
+ {
63
+ rb_funcall(handler, cbidOnEndDocument, 0);
64
+ }
65
+ }
66
+
67
+ static void end_element_ns_callback(void *ctx, const xmlChar *xlocalname, const xmlChar *xprefix, const xmlChar *xURI)
68
+ {
69
+ VALUE handler = (VALUE) ctx;
70
+
71
+ if (handler == Qnil)
72
+ return;
73
+
74
+ /* Call end element for old-times sake */
75
+ if (rb_respond_to(handler, cbidOnEndElement))
76
+ {
77
+ VALUE name;
78
+ if (xprefix)
79
+ {
80
+ name = rxml_new_cstr(xprefix, NULL);
81
+ rb_str_cat2(name, ":");
82
+ rb_str_cat2(name, (const char*)xlocalname);
83
+ }
84
+ else
85
+ {
86
+ name = rxml_new_cstr(xlocalname, NULL);
87
+ }
88
+ rb_funcall(handler, cbidOnEndElement, 1, name);
89
+ }
90
+
91
+ rb_funcall(handler, cbidOnEndElementNs, 3,
92
+ rxml_new_cstr(xlocalname, NULL),
93
+ xprefix ? rxml_new_cstr(xprefix, NULL) : Qnil,
94
+ xURI ? rxml_new_cstr(xURI, NULL) : Qnil);
95
+ }
96
+
97
+ static void external_subset_callback(void *ctx, const xmlChar *name, const xmlChar *extid, const xmlChar *sysid)
98
+ {
99
+ VALUE handler = (VALUE) ctx;
100
+
101
+ if (handler != Qnil)
102
+ {
103
+ VALUE rname = name ? rxml_new_cstr(name, NULL) : Qnil;
104
+ VALUE rextid = extid ? rxml_new_cstr(extid, NULL) : Qnil;
105
+ VALUE rsysid = sysid ? rxml_new_cstr(sysid, NULL) : Qnil;
106
+ rb_funcall(handler, cbidOnExternalSubset, 3, rname, rextid, rsysid);
107
+ }
108
+ }
109
+
110
+ static void has_external_subset_callback(void *ctx)
111
+ {
112
+ VALUE handler = (VALUE) ctx;
113
+
114
+ if (handler != Qnil)
115
+ {
116
+ rb_funcall(handler, cbidOnHasExternalSubset, 0);
117
+ }
118
+ }
119
+
120
+ static void has_internal_subset_callback(void *ctx)
121
+ {
122
+ VALUE handler = (VALUE) ctx;
123
+
124
+ if (handler != Qnil)
125
+ {
126
+ rb_funcall(handler, cbidOnHasInternalSubset, 0);
127
+ }
128
+ }
129
+
130
+ static void internal_subset_callback(void *ctx, const xmlChar *name, const xmlChar *extid, const xmlChar *sysid)
131
+ {
132
+ VALUE handler = (VALUE) ctx;
133
+
134
+ if (handler != Qnil)
135
+ {
136
+ VALUE rname = name ? rxml_new_cstr(name, NULL) : Qnil;
137
+ VALUE rextid = extid ? rxml_new_cstr(extid, NULL) : Qnil;
138
+ VALUE rsysid = sysid ? rxml_new_cstr(sysid, NULL) : Qnil;
139
+ rb_funcall(handler, cbidOnInternalSubset, 3, rname, rextid, rsysid);
140
+ }
141
+ }
142
+
143
+ static void is_standalone_callback(void *ctx)
144
+ {
145
+ VALUE handler = (VALUE) ctx;
146
+
147
+ if (handler != Qnil)
148
+ {
149
+ rb_funcall(handler, cbidOnIsStandalone,0);
150
+ }
151
+ }
152
+
153
+ static void processing_instruction_callback(void *ctx, const xmlChar *target, const xmlChar *data)
154
+ {
155
+ VALUE handler = (VALUE) ctx;
156
+
157
+ if (handler != Qnil)
158
+ {
159
+ VALUE rtarget = target ? rxml_new_cstr(target, NULL) : Qnil;
160
+ VALUE rdata = data ? rxml_new_cstr(data, NULL) : Qnil;
161
+ rb_funcall(handler, cbidOnProcessingInstruction, 2, rtarget, rdata);
162
+ }
163
+ }
164
+
165
+ static void reference_callback(void *ctx, const xmlChar *name)
166
+ {
167
+ VALUE handler = (VALUE) ctx;
168
+
169
+ if (handler != Qnil)
170
+ {
171
+ rb_funcall(handler, cbidOnReference, 1, rxml_new_cstr(name, NULL));
172
+ }
173
+ }
174
+
175
+ static void start_document_callback(void *ctx)
176
+ {
177
+ VALUE handler = (VALUE) ctx;
178
+
179
+ if (handler != Qnil)
180
+ {
181
+ rb_funcall(handler, cbidOnStartDocument, 0);
182
+ }
183
+ }
184
+
185
+ static void start_element_ns_callback(void *ctx,
186
+ const xmlChar *xlocalname, const xmlChar *xprefix, const xmlChar *xURI,
187
+ int nb_namespaces, const xmlChar **xnamespaces,
188
+ int nb_attributes, int nb_defaulted, const xmlChar **xattributes)
189
+ {
190
+ VALUE handler = (VALUE) ctx;
191
+ VALUE attributes = rb_hash_new();
192
+ VALUE namespaces = rb_hash_new();
193
+
194
+ if (handler == Qnil)
195
+ return;
196
+
197
+ if (xattributes)
198
+ {
199
+ /* Each attribute is an array of [localname, prefix, URI, value, end] */
200
+ int i;
201
+ for (i = 0;i < nb_attributes * 5; i+=5)
202
+ {
203
+ VALUE attrName = rxml_new_cstr(xattributes[i+0], NULL);
204
+ long attrLen = (long)(xattributes[i+4] - xattributes[i+3]);
205
+ VALUE attrValue = rxml_new_cstr_len(xattributes[i+3], attrLen, NULL);
206
+ rb_hash_aset(attributes, attrName, attrValue);
207
+ }
208
+ }
209
+
210
+ if (xnamespaces)
211
+ {
212
+ int i;
213
+ for (i = 0;i < nb_namespaces * 2; i+=2)
214
+ {
215
+ VALUE nsPrefix = xnamespaces[i+0] ? rxml_new_cstr(xnamespaces[i+0], NULL) : Qnil;
216
+ VALUE nsURI = xnamespaces[i+1] ? rxml_new_cstr(xnamespaces[i+1], NULL) : Qnil;
217
+ rb_hash_aset(namespaces, nsPrefix, nsURI);
218
+ }
219
+ }
220
+
221
+ /* Call start element for old-times sake */
222
+ if (rb_respond_to(handler, cbidOnStartElement))
223
+ {
224
+ VALUE name;
225
+ if (xprefix)
226
+ {
227
+ name = rxml_new_cstr(xprefix, NULL);
228
+ rb_str_cat2(name, ":");
229
+ rb_str_cat2(name, (const char*)xlocalname);
230
+ }
231
+ else
232
+ {
233
+ name = rxml_new_cstr(xlocalname, NULL);
234
+ }
235
+ rb_funcall(handler, cbidOnStartElement, 2, name, attributes);
236
+ }
237
+
238
+ rb_funcall(handler, cbidOnStartElementNs, 5,
239
+ rxml_new_cstr(xlocalname, NULL),
240
+ attributes,
241
+ xprefix ? rxml_new_cstr(xprefix, NULL) : Qnil,
242
+ xURI ? rxml_new_cstr(xURI, NULL) : Qnil,
243
+ namespaces);
244
+ }
245
+
246
+ static void structured_error_callback(void *ctx, xmlErrorPtr xerror)
247
+ {
248
+ /* Older versions of Libxml will pass a NULL context from the sax parser. Fixed on
249
+ Feb 23, 2011. See:
250
+
251
+ http://git.gnome.org/browse/libxml2/commit/?id=241d4a1069e6bedd0ee2295d7b43858109c1c6d1 */
252
+
253
+ VALUE handler;
254
+
255
+ #if LIBXML_VERSION <= 20708
256
+ xmlParserCtxtPtr ctxt = (xmlParserCtxt*)(xerror->ctxt);
257
+ ctx = ctxt->userData;
258
+ #endif
259
+
260
+ handler = (VALUE) ctx;
261
+
262
+ if (handler != Qnil)
263
+ {
264
+ VALUE error = rxml_error_wrap(xerror);
265
+ rb_funcall(handler, cbidOnError, 1, error);
266
+ }
267
+ }
268
+
269
+ /* ====== Handler =========== */
270
+ xmlSAXHandler rxml_sax_handler = {
271
+ (internalSubsetSAXFunc) internal_subset_callback,
272
+ (isStandaloneSAXFunc) is_standalone_callback,
273
+ (hasInternalSubsetSAXFunc) has_internal_subset_callback,
274
+ (hasExternalSubsetSAXFunc) has_external_subset_callback,
275
+ 0, /* resolveEntity */
276
+ 0, /* getEntity */
277
+ 0, /* entityDecl */
278
+ 0, /* notationDecl */
279
+ 0, /* attributeDecl */
280
+ 0, /* elementDecl */
281
+ 0, /* unparsedEntityDecl */
282
+ 0, /* setDocumentLocator */
283
+ (startDocumentSAXFunc) start_document_callback,
284
+ (endDocumentSAXFunc) end_document_callback,
285
+ 0, /* Use start_element_ns_callback instead */
286
+ 0, /* Use end_element_ns_callback instead */
287
+ (referenceSAXFunc) reference_callback,
288
+ (charactersSAXFunc) characters_callback,
289
+ 0, /* ignorableWhitespace */
290
+ (processingInstructionSAXFunc) processing_instruction_callback,
291
+ (commentSAXFunc) comment_callback,
292
+ 0, /* xmlStructuredErrorFunc is used instead */
293
+ 0, /* xmlStructuredErrorFunc is used instead */
294
+ 0, /* xmlStructuredErrorFunc is used instead */
295
+ 0, /* xmlGetParameterEntity */
296
+ (cdataBlockSAXFunc) cdata_block_callback,
297
+ (externalSubsetSAXFunc) external_subset_callback,
298
+ XML_SAX2_MAGIC, /* force SAX2 */
299
+ 0, /* _private */
300
+ (startElementNsSAX2Func) start_element_ns_callback,
301
+ (endElementNsSAX2Func) end_element_ns_callback,
302
+ (xmlStructuredErrorFunc) structured_error_callback
303
+ };
304
+
305
+ void rxml_init_sax2_handler(void)
306
+ {
307
+
308
+ /* SaxCallbacks */
309
+ cbidOnCdataBlock = rb_intern("on_cdata_block");
310
+ cbidOnCharacters = rb_intern("on_characters");
311
+ cbidOnComment = rb_intern("on_comment");
312
+ cbidOnEndDocument = rb_intern("on_end_document");
313
+ cbidOnEndElement = rb_intern("on_end_element");
314
+ cbidOnEndElementNs = rb_intern("on_end_element_ns");
315
+ cbidOnError = rb_intern("on_error");
316
+ cbidOnExternalSubset = rb_intern("on_external_subset");
317
+ cbidOnHasExternalSubset = rb_intern("on_has_external_subset");
318
+ cbidOnHasInternalSubset = rb_intern("on_has_internal_subset");
319
+ cbidOnInternalSubset = rb_intern("on_internal_subset");
320
+ cbidOnIsStandalone = rb_intern("on_is_standalone");
321
+ cbidOnProcessingInstruction = rb_intern("on_processing_instruction");
322
+ cbidOnReference = rb_intern("on_reference");
323
+ cbidOnStartElement = rb_intern("on_start_element");
324
+ cbidOnStartElementNs = rb_intern("on_start_element_ns");
325
+ cbidOnStartDocument = rb_intern("on_start_document");
326
+ }