mkrf 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (186) hide show
  1. data/CHANGELOG +2 -0
  2. data/MIT-LICENSE +7 -0
  3. data/README +54 -0
  4. data/Rakefile +107 -0
  5. data/lib/mkrf.rb +4 -0
  6. data/lib/mkrf/availability.rb +219 -0
  7. data/lib/mkrf/generator.rb +146 -0
  8. data/test/abstract_unit.rb +4 -0
  9. data/test/fixtures/down_a_directory/header_down_a_directory.h +1 -0
  10. data/test/fixtures/stdmkrf.h +1 -0
  11. data/test/sample_files/libtrivial/Rakefile +31 -0
  12. data/test/sample_files/libtrivial/extconf.rb +3 -0
  13. data/test/sample_files/libtrivial/lib/libtrivial.c +5 -0
  14. data/test/sample_files/libtrivial/lib/libtrivial.o +0 -0
  15. data/test/sample_files/libtrivial/libtrivial_so.bundle +0 -0
  16. data/test/sample_files/libtrivial/mkrf.log +1 -0
  17. data/test/sample_files/libxml-ruby-0.3.8/CHANGELOG +74 -0
  18. data/test/sample_files/libxml-ruby-0.3.8/LICENSE +22 -0
  19. data/test/sample_files/libxml-ruby-0.3.8/README +144 -0
  20. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/cbg.c +76 -0
  21. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/extconf.rb +49 -0
  22. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/libxml.c +86 -0
  23. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/libxml.h +82 -0
  24. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/libxml.rb +107 -0
  25. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/mkrf.log +1 -0
  26. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/old_extconf.rb +95 -0
  27. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_attr.c +372 -0
  28. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_attr.h +21 -0
  29. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_attribute.c +224 -0
  30. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_attribute.h +21 -0
  31. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_document.c +1159 -0
  32. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_document.h +27 -0
  33. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_dtd.c +168 -0
  34. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_dtd.h +17 -0
  35. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_input_cbg.c +167 -0
  36. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_input_cbg.h +21 -0
  37. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_node.c +2139 -0
  38. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_node.h +28 -0
  39. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_node_set.c +248 -0
  40. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_node_set.h +26 -0
  41. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_ns.c +153 -0
  42. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_ns.h +21 -0
  43. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_parser.c +1417 -0
  44. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_parser.h +31 -0
  45. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_parser_context.c +715 -0
  46. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_parser_context.h +22 -0
  47. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_sax_parser.c +426 -0
  48. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_sax_parser.h +52 -0
  49. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_schema.c +142 -0
  50. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_schema.h +16 -0
  51. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_tree.c +43 -0
  52. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_tree.h +12 -0
  53. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xinclude.c +20 -0
  54. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xinclude.h +13 -0
  55. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpath.c +363 -0
  56. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpath.h +24 -0
  57. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpath_context.c +125 -0
  58. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpath_context.h +24 -0
  59. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpointer.c +100 -0
  60. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpointer.h +27 -0
  61. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpointer_context.c +21 -0
  62. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/ruby_xml_xpointer_context.h +18 -0
  63. data/test/sample_files/libxml-ruby-0.3.8/ext/xml/sax_parser_callbacks.inc +202 -0
  64. data/test/sample_files/syck-0.55/CHANGELOG +186 -0
  65. data/test/sample_files/syck-0.55/COPYING +54 -0
  66. data/test/sample_files/syck-0.55/Makefile +582 -0
  67. data/test/sample_files/syck-0.55/Makefile.am +5 -0
  68. data/test/sample_files/syck-0.55/Makefile.in +582 -0
  69. data/test/sample_files/syck-0.55/README +105 -0
  70. data/test/sample_files/syck-0.55/README.BYTECODE +484 -0
  71. data/test/sample_files/syck-0.55/README.EXT +444 -0
  72. data/test/sample_files/syck-0.55/RELEASE +123 -0
  73. data/test/sample_files/syck-0.55/TODO +25 -0
  74. data/test/sample_files/syck-0.55/aclocal.m4 +883 -0
  75. data/test/sample_files/syck-0.55/bootstrap +7 -0
  76. data/test/sample_files/syck-0.55/config.h +79 -0
  77. data/test/sample_files/syck-0.55/config.h.in +78 -0
  78. data/test/sample_files/syck-0.55/config.status +1197 -0
  79. data/test/sample_files/syck-0.55/config/README +14 -0
  80. data/test/sample_files/syck-0.55/config/depcomp +529 -0
  81. data/test/sample_files/syck-0.55/config/install-sh +323 -0
  82. data/test/sample_files/syck-0.55/config/missing +357 -0
  83. data/test/sample_files/syck-0.55/configure +6728 -0
  84. data/test/sample_files/syck-0.55/configure.in +36 -0
  85. data/test/sample_files/syck-0.55/ext/ruby/CHANGELOG +303 -0
  86. data/test/sample_files/syck-0.55/ext/ruby/README +400 -0
  87. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/MANIFEST +1 -0
  88. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/bytecode.c +1170 -0
  89. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/emitter.c +1224 -0
  90. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/extconf.rb +10 -0
  91. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/gram.c +1894 -0
  92. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/gram.h +79 -0
  93. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/handler.c +174 -0
  94. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/implicit.c +2989 -0
  95. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/mkrf.log +1 -0
  96. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/node.c +407 -0
  97. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/rubyext.c +2385 -0
  98. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/syck.c +504 -0
  99. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/syck.h +458 -0
  100. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/token.c +2707 -0
  101. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/yaml2byte.c +250 -0
  102. data/test/sample_files/syck-0.55/ext/ruby/ext/syck/yamlbyte.h +170 -0
  103. data/test/sample_files/syck-0.55/ext/ruby/install.rb +1022 -0
  104. data/test/sample_files/syck-0.55/ext/ruby/lib/okay.rb +161 -0
  105. data/test/sample_files/syck-0.55/ext/ruby/lib/okay/news.rb +69 -0
  106. data/test/sample_files/syck-0.55/ext/ruby/lib/okay/rpc.rb +434 -0
  107. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml.rb +436 -0
  108. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/baseemitter.rb +247 -0
  109. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/basenode.rb +216 -0
  110. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/compat.rb +26 -0
  111. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/constants.rb +45 -0
  112. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/dbm.rb +111 -0
  113. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/emitter.rb +107 -0
  114. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/encoding.rb +33 -0
  115. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/error.rb +34 -0
  116. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/rubytypes.rb +438 -0
  117. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/store.rb +29 -0
  118. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/stream.rb +40 -0
  119. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/stringio.rb +83 -0
  120. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/syck.rb +19 -0
  121. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/tag.rb +86 -0
  122. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/types.rb +188 -0
  123. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/yamlnode.rb +54 -0
  124. data/test/sample_files/syck-0.55/ext/ruby/lib/yaml/ypath.rb +52 -0
  125. data/test/sample_files/syck-0.55/ext/ruby/lib/yod.rb +1168 -0
  126. data/test/sample_files/syck-0.55/ext/ruby/samples/okayNews-modules.rb +27 -0
  127. data/test/sample_files/syck-0.55/ext/ruby/samples/okayNews-sample.rb +336 -0
  128. data/test/sample_files/syck-0.55/ext/ruby/samples/okayNews-validate.rb +341 -0
  129. data/test/sample_files/syck-0.55/ext/ruby/samples/okayRpc-client.rb +51 -0
  130. data/test/sample_files/syck-0.55/ext/ruby/samples/okayRpc-server.rb +85 -0
  131. data/test/sample_files/syck-0.55/ext/ruby/samples/yaml-sortHashKeys.rb +128 -0
  132. data/test/sample_files/syck-0.55/ext/ruby/tests/basic.rb +1653 -0
  133. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsAnchorAlias.yml +51 -0
  134. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsBasicTests.yml +282 -0
  135. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsBlockMapping.yml +78 -0
  136. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsBlockSequence.yml +0 -0
  137. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsDocumentSeparator.yml +102 -0
  138. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsErrorTests.yml +23 -0
  139. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsFlowCollections.yml +73 -0
  140. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsFoldedScalars.yml +215 -0
  141. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsMapInSeq.yml +0 -0
  142. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsNullsAndEmpties.yml +66 -0
  143. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsRubyTests.yml +182 -0
  144. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsSpecificationExamples.yml +2699 -0
  145. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsTypeTransfers.yml +265 -0
  146. data/test/sample_files/syck-0.55/ext/ruby/yts/YtsYpath.yml +221 -0
  147. data/test/sample_files/syck-0.55/ext/ruby/yts/cookbook.rb +159 -0
  148. data/test/sample_files/syck-0.55/ext/ruby/yts/index.yml +10 -0
  149. data/test/sample_files/syck-0.55/ext/ruby/yts/yts.rb +193 -0
  150. data/test/sample_files/syck-0.55/lib/Makefile +497 -0
  151. data/test/sample_files/syck-0.55/lib/Makefile.am +27 -0
  152. data/test/sample_files/syck-0.55/lib/Makefile.in +497 -0
  153. data/test/sample_files/syck-0.55/lib/bytecode.c +1170 -0
  154. data/test/sample_files/syck-0.55/lib/bytecode.re +525 -0
  155. data/test/sample_files/syck-0.55/lib/emitter.c +1224 -0
  156. data/test/sample_files/syck-0.55/lib/gram.c +1894 -0
  157. data/test/sample_files/syck-0.55/lib/gram.h +79 -0
  158. data/test/sample_files/syck-0.55/lib/gram.output +2005 -0
  159. data/test/sample_files/syck-0.55/lib/gram.y +481 -0
  160. data/test/sample_files/syck-0.55/lib/handler.c +174 -0
  161. data/test/sample_files/syck-0.55/lib/implicit.c +2989 -0
  162. data/test/sample_files/syck-0.55/lib/implicit.re +206 -0
  163. data/test/sample_files/syck-0.55/lib/node.c +407 -0
  164. data/test/sample_files/syck-0.55/lib/syck.c +504 -0
  165. data/test/sample_files/syck-0.55/lib/syck.h +458 -0
  166. data/test/sample_files/syck-0.55/lib/syck_st.c +577 -0
  167. data/test/sample_files/syck-0.55/lib/syck_st.h +46 -0
  168. data/test/sample_files/syck-0.55/lib/token.c +2707 -0
  169. data/test/sample_files/syck-0.55/lib/token.re +1139 -0
  170. data/test/sample_files/syck-0.55/lib/yaml2byte.c +250 -0
  171. data/test/sample_files/syck-0.55/lib/yamlbyte.h +170 -0
  172. data/test/sample_files/syck-0.55/stamp-h1 +1 -0
  173. data/test/sample_files/syck-0.55/tests/Basic.c +141 -0
  174. data/test/sample_files/syck-0.55/tests/CuTest.c +294 -0
  175. data/test/sample_files/syck-0.55/tests/CuTest.h +84 -0
  176. data/test/sample_files/syck-0.55/tests/Emit.c +87 -0
  177. data/test/sample_files/syck-0.55/tests/Makefile +480 -0
  178. data/test/sample_files/syck-0.55/tests/Makefile.am +13 -0
  179. data/test/sample_files/syck-0.55/tests/Makefile.in +480 -0
  180. data/test/sample_files/syck-0.55/tests/Parse.c +208 -0
  181. data/test/sample_files/syck-0.55/tests/YTS.c +2310 -0
  182. data/test/sample_files/syck-0.55/tests/YTS.c.erb +326 -0
  183. data/test/sample_files/syck-0.55/tests/YTS.c.rb +44 -0
  184. data/test/test_availability.rb +68 -0
  185. data/test/test_generator.rb +74 -0
  186. metadata +252 -0
@@ -0,0 +1,22 @@
1
+ /* $Id: ruby_xml_parser_context.h,v 1.1 2006/02/21 20:40:16 roscopeco Exp $ */
2
+
3
+ /* Please see the LICENSE file for copyright and distribution information */
4
+
5
+ #ifndef __RUBY_XML_PARSER_CONTEXT__
6
+ #define __RUBY_XML_PARSER_CONTEXT__
7
+
8
+ extern VALUE cXMLParserContext;
9
+
10
+ typedef struct ruby_xml_parser_context {
11
+ xmlParserCtxtPtr ctxt;
12
+ int is_ptr;
13
+ } ruby_xml_parser_context;
14
+
15
+ void ruby_xml_parser_context_free(ruby_xml_parser_context *ctxt);
16
+ void ruby_init_xml_parser_context(void);
17
+ VALUE ruby_xml_parser_context_new(VALUE class, xmlParserCtxtPtr ctxt);
18
+ VALUE ruby_xml_parser_context_new2(VALUE class);
19
+ VALUE ruby_xml_parser_context_new3();
20
+ VALUE ruby_xml_parser_context_each(VALUE self);
21
+
22
+ #endif
@@ -0,0 +1,426 @@
1
+ /* $Id: ruby_xml_sax_parser.c,v 1.4 2006/04/14 23:46:06 roscopeco Exp $ */
2
+
3
+ /* Please see the LICENSE file for copyright and distribution information */
4
+
5
+ #include "libxml.h"
6
+ #include "ruby_xml_sax_parser.h"
7
+
8
+ VALUE cXMLSaxParser;
9
+ VALUE callsym;
10
+
11
+ #include "sax_parser_callbacks.inc"
12
+
13
+ void
14
+ ruby_xml_sax_parser_free(ruby_xml_sax_parser *rxsp) {
15
+ /* Apparently this isn't needed: time will tell */
16
+ /* if (rxsp->xsh != NULL) */
17
+ /* xmlFreeSax_Parser(rxsp->sax_parser); */
18
+ }
19
+
20
+ #define mark_handler(rxsp, handler) \
21
+ if (rxsp->cbp->handler && (rxsp->cbp->handler != Qnil)) \
22
+ rb_gc_mark(rxsp->cbp->handler)
23
+
24
+ void
25
+ ruby_xml_sax_parser_mark(ruby_xml_sax_parser *rxsp) {
26
+ mark_handler(rxsp, internalSubset);
27
+ mark_handler(rxsp, isStandalone);
28
+ mark_handler(rxsp, hasInternalSubset);
29
+ mark_handler(rxsp, hasExternalSubset);
30
+ mark_handler(rxsp, startDocument);
31
+ mark_handler(rxsp, endDocument);
32
+ mark_handler(rxsp, startElement);
33
+ mark_handler(rxsp, endElement);
34
+ mark_handler(rxsp, reference);
35
+ mark_handler(rxsp, characters);
36
+ mark_handler(rxsp, processingInstruction);
37
+ mark_handler(rxsp, comment);
38
+ mark_handler(rxsp, xmlParserWarning);
39
+ mark_handler(rxsp, xmlParserError);
40
+ mark_handler(rxsp, xmlParserFatalError);
41
+ mark_handler(rxsp, cdataBlock);
42
+ }
43
+
44
+
45
+ /*
46
+ * call-seq:
47
+ * XML::SaxParser.new => sax_parser
48
+ *
49
+ * Create a new XML::SaxParser instance.
50
+ */
51
+ VALUE
52
+ ruby_xml_sax_parser_new(VALUE class) {
53
+ ruby_xml_sax_parser *rxsp;
54
+
55
+ rxsp = ALLOC(ruby_xml_sax_parser);
56
+ rxsp->cbp = ALLOC(ruby_xml_sax_parser_callbacks);
57
+ memset(rxsp->cbp, 0, sizeof(ruby_xml_sax_parser_callbacks));
58
+ rxsp->xsh = &rubySAXHandlerStruct;
59
+
60
+ rxsp->xpc = NULL;
61
+ rxsp->filename = Qnil;
62
+ rxsp->str = Qnil;
63
+
64
+ return(Data_Wrap_Struct(class, ruby_xml_sax_parser_mark,
65
+ ruby_xml_sax_parser_free, rxsp));
66
+ }
67
+
68
+
69
+ /*
70
+ * call-seq:
71
+ * sax_parser.filename => "filename"
72
+ *
73
+ * Obtain the filename this parser reads from.
74
+ */
75
+ VALUE
76
+ ruby_xml_sax_parser_filename_get(VALUE self) {
77
+ ruby_xml_sax_parser *rxsp;
78
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
79
+ return(rxsp->filename);
80
+ }
81
+
82
+
83
+ /*
84
+ * call-seq:
85
+ * sax_parser.filename = "filename"
86
+ *
87
+ * Set the filename this parser reads from.
88
+ */
89
+ VALUE
90
+ ruby_xml_sax_parser_filename_set(VALUE self, VALUE filename) {
91
+ ruby_xml_sax_parser *rxsp;
92
+ Check_Type(filename, T_STRING);
93
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
94
+ rxsp->filename = filename;
95
+ return(rxsp->filename);
96
+ }
97
+
98
+ #define set_handler(self, argc, argv, handler) \
99
+ VALUE proc; \
100
+ rb_scan_args(argc, argv, "0&", &proc); \
101
+ ruby_xml_sax_parser *rxsp; \
102
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp); \
103
+ rxsp->cbp->handler = proc; \
104
+ return(Qnil);
105
+
106
+
107
+ /*
108
+ * call-seq:
109
+ * parser.on_internal_subset { |name, external_id, system_id| ... } => nil
110
+ *
111
+ * Set the callback block for an internal subset event.
112
+ */
113
+ VALUE
114
+ ruby_xml_sax_parser_on_internal_subset(int argc, VALUE *argv, VALUE self) {
115
+ set_handler(self, argc, argv, internalSubset);
116
+ }
117
+
118
+
119
+ /*
120
+ * call-seq:
121
+ * parser.on_is_standalone { || ... } => nil
122
+ *
123
+ * Set the callback proc for 'is standalone' event.
124
+ */
125
+ VALUE
126
+ ruby_xml_sax_parser_on_is_standalone(int argc, VALUE *argv, VALUE self) {
127
+ set_handler(self, argc, argv, isStandalone);
128
+ }
129
+
130
+
131
+ /*
132
+ * call-seq:
133
+ * parser.on_has_internal_subset { || ... } => nil
134
+ *
135
+ * Set the callback proc for an internal subset notification event.
136
+ */
137
+ VALUE
138
+ ruby_xml_sax_parser_on_has_internal_subset(int argc, VALUE *argv, VALUE self) {
139
+ set_handler(self, argc, argv, hasInternalSubset);
140
+ }
141
+
142
+
143
+ /*
144
+ * call-seq:
145
+ * parser.on_has_external_subset { || ... } => nil
146
+ *
147
+ * Set the callback proc for an external subset notification event.
148
+ */
149
+ VALUE
150
+ ruby_xml_sax_parser_on_has_external_subset(int argc, VALUE *argv, VALUE self) {
151
+ set_handler(self, argc, argv, hasExternalSubset);
152
+ }
153
+
154
+
155
+ /*
156
+ * call-seq:
157
+ * parser.on_start_document { || ... } => nil
158
+ *
159
+ * Set the callback proc for a start document event.
160
+ */
161
+ VALUE
162
+ ruby_xml_sax_parser_on_start_document(int argc, VALUE *argv, VALUE self) {
163
+ set_handler(self, argc, argv, startDocument);
164
+ }
165
+
166
+
167
+ /*
168
+ * call-seq:
169
+ * parser.on_end_document { || ... } => nil
170
+ *
171
+ * Set the callback proc for an end document event.
172
+ */
173
+ VALUE
174
+ ruby_xml_sax_parser_on_end_document(int argc, VALUE *argv, VALUE self) {
175
+ set_handler(self, argc, argv, endDocument);
176
+ }
177
+
178
+
179
+ /*
180
+ * call-seq:
181
+ * parser.on_start_element { |name, attr_hash| ... } => nil
182
+ *
183
+ * Set the callback proc for an element start event.
184
+ */
185
+ VALUE
186
+ ruby_xml_sax_parser_on_start_element(int argc, VALUE *argv, VALUE self) {
187
+ set_handler(self, argc, argv, startElement);
188
+ }
189
+
190
+
191
+ /*
192
+ * call-seq:
193
+ * parser.on_end_element { |name| ... } => nil
194
+ *
195
+ * Set the callback proc for an element end event.
196
+ */
197
+ VALUE
198
+ ruby_xml_sax_parser_on_end_element(int argc, VALUE *argv, VALUE self) {
199
+ set_handler(self, argc, argv, endElement);
200
+ }
201
+
202
+
203
+ /*
204
+ * call-seq:
205
+ * parser.on_reference { |name| ... } => nil
206
+ *
207
+ * Set the callback proc for a reference event.
208
+ */
209
+ VALUE
210
+ ruby_xml_sax_parser_on_reference(int argc, VALUE *argv, VALUE self) {
211
+ set_handler(self, argc, argv, reference);
212
+ }
213
+
214
+
215
+ /*
216
+ * call-seq:
217
+ * parser.on_characters { |chars| ... } => nil
218
+ *
219
+ * Set the callback proc for a characters event.
220
+ */
221
+ VALUE
222
+ ruby_xml_sax_parser_on_characters(int argc, VALUE *argv, VALUE self) {
223
+ set_handler(self, argc, argv, characters);
224
+ }
225
+
226
+
227
+ /*
228
+ * call-seq:
229
+ * parser.on_processing_instruction { |target, data| ... } => nil
230
+ *
231
+ * Set the callback proc for an processing instruction event.
232
+ */
233
+ VALUE
234
+ ruby_xml_sax_parser_on_processing_instruction(int argc, VALUE *argv, VALUE self) {
235
+ set_handler(self, argc, argv, processingInstruction);
236
+ }
237
+
238
+
239
+ /*
240
+ * call-seq:
241
+ * parser.on_comment { |msg| ... } => nil
242
+ *
243
+ * Set the callback proc for a comment event.
244
+ */
245
+ VALUE
246
+ ruby_xml_sax_parser_on_comment(int argc, VALUE *argv, VALUE self) {
247
+ set_handler(self, argc, argv, comment);
248
+ }
249
+
250
+
251
+ /*
252
+ * call-seq:
253
+ * parser.on_parser_warning { |msg| ... } => nil
254
+ *
255
+ * Set the callback proc that receives parser warnings.
256
+ */
257
+ VALUE
258
+ ruby_xml_sax_parser_on_parser_warning(int argc, VALUE *argv, VALUE self) {
259
+ set_handler(self, argc, argv, xmlParserWarning);
260
+ }
261
+
262
+
263
+ /*
264
+ * call-seq:
265
+ * parser.on_parser_error { |msg| ... } => nil
266
+ *
267
+ * Set the callback proc that receives parser errors.
268
+ */
269
+ VALUE
270
+ ruby_xml_sax_parser_on_parser_error(int argc, VALUE *argv, VALUE self) {
271
+ set_handler(self, argc, argv, xmlParserError);
272
+ }
273
+
274
+
275
+ /*
276
+ * call-seq:
277
+ * parser.on_parser_fatal_error { |msg| ... } => nil
278
+ *
279
+ * Set the callback proc that receives fatal parser errors.
280
+ */
281
+ VALUE
282
+ ruby_xml_sax_parser_on_parser_fatal_error(int argc, VALUE *argv, VALUE self) {
283
+ set_handler(self, argc, argv, xmlParserFatalError);
284
+ }
285
+
286
+ /*
287
+ * call-seq:
288
+ * parser.on_cdata_block { |cdata| ... } => nil
289
+ *
290
+ * Set the callback proc for a CDATA block event.
291
+ */
292
+ VALUE
293
+ ruby_xml_sax_parser_on_cdata_block(int argc, VALUE *argv, VALUE self) {
294
+ set_handler(self, argc, argv, cdataBlock);
295
+ }
296
+
297
+ /*
298
+ * call-seq:
299
+ * parser.on_external_subset { |name, external_id, system_id| ... } => nil
300
+ *
301
+ * Set the callback proc for an external subset event.
302
+ */
303
+ VALUE
304
+ ruby_xml_sax_parser_on_external_subset(int argc, VALUE *argv, VALUE self) {
305
+ set_handler(self, argc, argv, externalSubset);
306
+ }
307
+
308
+
309
+ /*
310
+ * call-seq:
311
+ * parser.parse => (true|false)
312
+ *
313
+ * Parse the input XML, generating callbacks to the procs
314
+ * registered with the parser (via the on_xxxx attributes).
315
+ */
316
+ VALUE
317
+ ruby_xml_sax_parser_parse(VALUE self) {
318
+ char *str;
319
+ int status = 1;
320
+ ruby_xml_sax_parser *rxsp;
321
+
322
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
323
+
324
+ if (rxsp->filename != Qnil) {
325
+ status = xmlSAXUserParseFile(rxsp->xsh, rxsp->cbp, StringValuePtr(rxsp->filename));
326
+ } else if (rxsp->str != Qnil) {
327
+ str = StringValuePtr(rxsp->str);
328
+ status = //ruby_xml_document_new(cXMLDocument,
329
+ xmlSAXUserParseMemory(rxsp->xsh, rxsp->cbp,
330
+ str, strlen(str)); //);
331
+ }
332
+
333
+ /* XXX This should return an exception for the various error codes
334
+ * that can come back in status, but I'm too lazy to do that right
335
+ * now. */
336
+ if (status)
337
+ return(Qfalse);
338
+ else
339
+ return(Qtrue);
340
+ }
341
+
342
+
343
+ /*
344
+ * call-seq:
345
+ * parser.string => "xml"
346
+ *
347
+ * Obtain the parser's input string.
348
+ */
349
+ VALUE
350
+ ruby_xml_sax_parser_str_get(VALUE self) {
351
+ ruby_xml_sax_parser *rxsp;
352
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
353
+ return(rxsp->str);
354
+ }
355
+
356
+
357
+ /*
358
+ * call-seq:
359
+ * parser.string = "xml"
360
+ *
361
+ * Set the parser's input string.
362
+ */
363
+ VALUE
364
+ ruby_xml_sax_parser_str_set(VALUE self, VALUE str) {
365
+ ruby_xml_sax_parser *rxsp;
366
+ Check_Type(str, T_STRING);
367
+ Data_Get_Struct(self, ruby_xml_sax_parser, rxsp);
368
+ rxsp->str = str;
369
+ return(rxsp->str);
370
+ }
371
+
372
+ // Rdoc needs to know
373
+ #ifdef RDOC_NEVER_DEFINED
374
+ mXML = rb_define_module("XML");
375
+ #endif
376
+
377
+ void
378
+ ruby_init_xml_sax_parser(void) {
379
+ cXMLSaxParser = rb_define_class_under(mXML, "SaxParser", rb_cObject);
380
+ callsym = rb_intern("call");
381
+
382
+ rb_define_singleton_method(cXMLSaxParser, "new", ruby_xml_sax_parser_new, 0);
383
+
384
+ rb_define_method(cXMLSaxParser, "filename",
385
+ ruby_xml_sax_parser_filename_get, 0);
386
+ rb_define_method(cXMLSaxParser, "filename=",
387
+ ruby_xml_sax_parser_filename_set, 1);
388
+ rb_define_method(cXMLSaxParser, "parse", ruby_xml_sax_parser_parse, 0);
389
+ rb_define_method(cXMLSaxParser, "string", ruby_xml_sax_parser_str_get, 0);
390
+ rb_define_method(cXMLSaxParser, "string=", ruby_xml_sax_parser_str_set, 1);
391
+
392
+ rb_define_method(cXMLSaxParser, "on_internal_subset",
393
+ ruby_xml_sax_parser_on_internal_subset, -1);
394
+ rb_define_method(cXMLSaxParser, "on_is_standalone",
395
+ ruby_xml_sax_parser_on_is_standalone, -1);
396
+ rb_define_method(cXMLSaxParser, "on_has_internal_subset",
397
+ ruby_xml_sax_parser_on_has_internal_subset, -1);
398
+ rb_define_method(cXMLSaxParser, "on_has_external_subset",
399
+ ruby_xml_sax_parser_on_has_external_subset, -1);
400
+ rb_define_method(cXMLSaxParser, "on_start_document",
401
+ ruby_xml_sax_parser_on_start_document, -1);
402
+ rb_define_method(cXMLSaxParser, "on_end_document",
403
+ ruby_xml_sax_parser_on_end_document, -1);
404
+ rb_define_method(cXMLSaxParser, "on_start_element",
405
+ ruby_xml_sax_parser_on_start_element, -1);
406
+ rb_define_method(cXMLSaxParser, "on_end_element",
407
+ ruby_xml_sax_parser_on_end_element, -1);
408
+ rb_define_method(cXMLSaxParser, "on_reference",
409
+ ruby_xml_sax_parser_on_reference, -1);
410
+ rb_define_method(cXMLSaxParser, "on_characters",
411
+ ruby_xml_sax_parser_on_characters, -1);
412
+ rb_define_method(cXMLSaxParser, "on_processing_instruction",
413
+ ruby_xml_sax_parser_on_processing_instruction, -1);
414
+ rb_define_method(cXMLSaxParser, "on_comment",
415
+ ruby_xml_sax_parser_on_comment, -1);
416
+ rb_define_method(cXMLSaxParser, "on_parser_warning",
417
+ ruby_xml_sax_parser_on_parser_warning, -1);
418
+ rb_define_method(cXMLSaxParser, "on_parser_error",
419
+ ruby_xml_sax_parser_on_parser_error, -1);
420
+ rb_define_method(cXMLSaxParser, "on_parser_fatal_error",
421
+ ruby_xml_sax_parser_on_parser_fatal_error, -1);
422
+ rb_define_method(cXMLSaxParser, "on_cdata_block",
423
+ ruby_xml_sax_parser_on_cdata_block, -1);
424
+ rb_define_method(cXMLSaxParser, "on_external_subset",
425
+ ruby_xml_sax_parser_on_external_subset, -1);
426
+ }
@@ -0,0 +1,52 @@
1
+ /* $Id: ruby_xml_sax_parser.h,v 1.2 2006/04/14 14:45:52 roscopeco Exp $ */
2
+
3
+ /* Please see the LICENSE file for copyright and distribution information */
4
+
5
+ #ifndef __RUBY_XML_SAX_PARSER__
6
+ #define __RUBY_XML_SAX_PARSER__
7
+
8
+ extern VALUE cXMLSaxParser;
9
+
10
+ typedef struct ruby_xml_sax_parser_callbacks {
11
+ VALUE internalSubset;
12
+ VALUE isStandalone;
13
+ VALUE hasInternalSubset;
14
+ VALUE hasExternalSubset;
15
+ VALUE resolveEntity;
16
+ VALUE getEntity;
17
+ VALUE entityDecl;
18
+ VALUE notationDecl;
19
+ VALUE attributeDecl;
20
+ VALUE elementDecl;
21
+ VALUE unparsedEntityDecl;
22
+ VALUE setDocumentLocator;
23
+ VALUE startDocument;
24
+ VALUE endDocument;
25
+ VALUE startElement;
26
+ VALUE endElement;
27
+ VALUE reference;
28
+ VALUE characters;
29
+ VALUE ignorableWhitespace;
30
+ VALUE processingInstruction;
31
+ VALUE comment;
32
+ VALUE xmlParserWarning;
33
+ VALUE xmlParserError;
34
+ VALUE xmlParserFatalError;
35
+ VALUE getParameterEntity;
36
+ VALUE cdataBlock;
37
+ VALUE externalSubset;
38
+ } ruby_xml_sax_parser_callbacks;
39
+
40
+ typedef struct ruby_xml_sax_parser {
41
+ xmlParserCtxtPtr xpc;
42
+ xmlSAXHandlerPtr xsh;
43
+ ruby_xml_sax_parser_callbacks *cbp;
44
+ VALUE filename;
45
+ VALUE str;
46
+ } ruby_xml_sax_parser;
47
+
48
+ void ruby_xml_sax_parser_free(ruby_xml_sax_parser *rxsp);
49
+ void ruby_init_xml_sax_parser(void);
50
+ VALUE ruby_xml_sax_parser_new(VALUE class);
51
+
52
+ #endif