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,24 @@
1
+ /* $Id: ruby_xml_xpath.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_XPATH__
6
+ #define __RUBY_XML_XPATH__
7
+
8
+ extern VALUE cXMLXPath;
9
+ extern VALUE eXMLXPathInvalidPath;
10
+
11
+ typedef struct ruby_xml_xpath {
12
+ VALUE xd;
13
+ VALUE ctxt;
14
+ xmlXPathObjectPtr xpop;
15
+ } ruby_xml_xpath;
16
+
17
+ void ruby_xml_xpath_free(ruby_xml_xpath *rxxp);
18
+ VALUE ruby_xml_xpath_find(int argc, VALUE *argv, VALUE class);
19
+ VALUE ruby_xml_xpath_find2(int argc, VALUE *argv);
20
+ VALUE ruby_xml_xpath_new(VALUE class, VALUE xd, VALUE xxpc,
21
+ xmlXPathObjectPtr xpop);
22
+ void ruby_init_xml_xpath(void);
23
+
24
+ #endif
@@ -0,0 +1,125 @@
1
+ /* $Id: ruby_xml_xpath_context.c,v 1.2 2006/02/27 12:55:32 roscopeco Exp $ */
2
+
3
+ /* Please see the LICENSE file for copyright and distribution information */
4
+
5
+ #include "libxml.h"
6
+ #include "ruby_xml_xpath_context.h"
7
+
8
+ VALUE cXMLXPathContext;
9
+
10
+ /*
11
+ * call-seq:
12
+ * context.doc => document
13
+ *
14
+ * Obtain the XML::Document associated with this XPath.
15
+ */
16
+ VALUE
17
+ ruby_xml_xpath_context_doc_get(VALUE self) {
18
+ ruby_xml_xpath_context *rxxpc;
19
+ Data_Get_Struct(self, ruby_xml_xpath_context, rxxpc);
20
+
21
+ return(rxxpc->xd);
22
+ }
23
+
24
+
25
+ void
26
+ ruby_xml_xpath_context_free(ruby_xml_xpath_context *rxxpc) {
27
+ if (rxxpc->ctxt != NULL) {
28
+ xmlXPathFreeContext(rxxpc->ctxt);
29
+ rxxpc->ctxt = NULL;
30
+ }
31
+
32
+ free(rxxpc);
33
+ }
34
+
35
+
36
+ void
37
+ ruby_xml_xpath_context_mark(ruby_xml_xpath_context *rxxpc) {
38
+ if (rxxpc == NULL) return;
39
+ if (!NIL_P(rxxpc->xd)) rb_gc_mark(rxxpc->xd);
40
+ }
41
+
42
+
43
+ VALUE
44
+ ruby_xml_xpath_context_new(VALUE class, VALUE xd,
45
+ xmlXPathContextPtr xxpc) {
46
+ ruby_xml_xpath_context *rxxpc;
47
+
48
+ rxxpc = ALLOC(ruby_xml_xpath_context);
49
+ rxxpc->ctxt = xxpc;
50
+ rxxpc->xd = xd;
51
+ return(Data_Wrap_Struct(class, ruby_xml_xpath_context_mark,
52
+ ruby_xml_xpath_context_free, rxxpc));
53
+ }
54
+
55
+
56
+ VALUE
57
+ ruby_xml_xpath_context_new2(VALUE xd, xmlXPathContextPtr xxpc) {
58
+ return(ruby_xml_xpath_context_new(cXMLXPathContext, xd, xxpc));
59
+ }
60
+
61
+
62
+ VALUE
63
+ ruby_xml_xpath_context_new3(VALUE xd) {
64
+ ruby_xml_document *rxd;
65
+ xmlXPathContextPtr ctxt;
66
+
67
+ Data_Get_Struct(xd, ruby_xml_document, rxd);
68
+ if (rxd->doc == NULL)
69
+ return(Qnil);
70
+
71
+ ctxt = xmlXPathNewContext(rxd->doc);
72
+ if (ctxt == NULL)
73
+ return(Qnil);
74
+
75
+ return(ruby_xml_xpath_context_new2(xd, ctxt));
76
+ }
77
+
78
+
79
+ VALUE
80
+ ruby_xml_xpath_context_new4(VALUE rnode) {
81
+ ruby_xml_node *node;
82
+
83
+ Data_Get_Struct(rnode, ruby_xml_node, node);
84
+ return(ruby_xml_xpath_context_new3(node->xd));
85
+ }
86
+
87
+
88
+ /*
89
+ * call-seq:
90
+ * context.register_namespace(prefix, uri) => (true|false)
91
+ *
92
+ * Register the specified namespace URI with the specified prefix
93
+ * in this context.
94
+ */
95
+ VALUE
96
+ ruby_xml_xpath_context_register_namespace(VALUE self, VALUE prefix, VALUE uri) {
97
+ ruby_xml_xpath_context *rxxpc;
98
+
99
+ Data_Get_Struct(self, ruby_xml_xpath_context, rxxpc);
100
+ if (xmlXPathRegisterNs(rxxpc->ctxt,
101
+ (xmlChar*)StringValuePtr(prefix),
102
+ (xmlChar*)StringValuePtr(uri))
103
+ == 0) {
104
+ return(Qtrue);
105
+ } else {
106
+ /* Should raise an exception, IMHO */
107
+ return(Qfalse);
108
+ }
109
+ }
110
+
111
+ // Rdoc needs to know
112
+ #ifdef RDOC_NEVER_DEFINED
113
+ mXML = rb_define_module("XML");
114
+ cXMLXPath = rb_define_class_under(mXML, "XPath", rb_cObject);
115
+ #endif
116
+
117
+ void
118
+ ruby_init_xml_xpath_context(void) {
119
+ cXMLXPathContext = rb_define_class_under(cXMLXPath, "Context", rb_cObject);
120
+
121
+ rb_define_method(cXMLXPathContext, "register_namespace",
122
+ ruby_xml_xpath_context_register_namespace, 2);
123
+ rb_define_method(cXMLXPathContext, "doc",
124
+ ruby_xml_xpath_context_doc_get, 0);
125
+ }
@@ -0,0 +1,24 @@
1
+ /* $Id: ruby_xml_xpath_context.h,v 1.2 2006/02/27 12:55:32 roscopeco Exp $ */
2
+
3
+ /* Please see the LICENSE file for copyright and distribution information */
4
+
5
+ #ifndef __RUBY_XML_XPATH_CONTEXT__
6
+ #define __RUBY_XML_XPATH_CONTEXT__
7
+
8
+ extern VALUE cXMLXPathContext;
9
+
10
+ typedef struct ruby_xml_xpath_context {
11
+ VALUE xd;
12
+ xmlXPathContextPtr ctxt;
13
+ } ruby_xml_xpath_context;
14
+
15
+ void ruby_xml_xpath_context_free(ruby_xml_xpath_context *rxxpc);
16
+ VALUE ruby_xml_xpath_context_new(VALUE class, VALUE xd,
17
+ xmlXPathContextPtr ctxt);
18
+ VALUE ruby_xml_xpath_context_new2(VALUE xd, xmlXPathContextPtr ctxt);
19
+ VALUE ruby_xml_xpath_context_new3(VALUE xd);
20
+ VALUE ruby_xml_xpath_context_new4(VALUE rnode);
21
+ VALUE ruby_xml_xpath_context_register_namespace(VALUE self, VALUE prefix, VALUE uri);
22
+ void ruby_init_xml_xpath_context(void);
23
+
24
+ #endif
@@ -0,0 +1,100 @@
1
+ /* $Id: ruby_xml_xpointer.c,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
+ #include "libxml.h"
6
+ #include "ruby_xml_xpointer.h"
7
+
8
+ VALUE cXMLXPointer;
9
+ VALUE eXMLXPointerInvalidExpression;
10
+
11
+ VALUE
12
+ ruby_xml_xpointer_point(VALUE class, VALUE rnode, VALUE xptr_str) {
13
+ #ifdef LIBXML_XPTR_ENABLED
14
+ ruby_xml_node *node;
15
+ ruby_xml_xpath_context *xxpc;
16
+ VALUE rxptr_xpth_ctxt, rxxp;
17
+ xmlXPathObjectPtr xpath;
18
+
19
+ Check_Type(xptr_str, T_STRING);
20
+ if (rb_obj_is_kind_of(rnode, cXMLNode) == Qfalse)
21
+ rb_raise(rb_eTypeError, "require an XML::Node object");
22
+
23
+ Data_Get_Struct(rnode, ruby_xml_node, node);
24
+
25
+ rxptr_xpth_ctxt = ruby_xml_xpath_context_new(cXMLXPathContext, node->xd,
26
+ xmlXPtrNewContext(node->node->doc, node->node, NULL));
27
+ if (NIL_P(rxptr_xpth_ctxt))
28
+ return(Qnil);
29
+ Data_Get_Struct(rxptr_xpth_ctxt, ruby_xml_xpath_context, xxpc);
30
+
31
+ xpath = xmlXPtrEval((xmlChar*)StringValuePtr(xptr_str), xxpc->ctxt);
32
+ if (xpath == NULL)
33
+ rb_raise(eXMLXPointerInvalidExpression, "invalid xpointer expression");
34
+
35
+ rxxp = ruby_xml_xpath_new(cXMLXPath, node->xd, rxptr_xpth_ctxt, xpath);
36
+ return(rxxp);
37
+ #else
38
+ rb_warn("libxml was compiled without XPointer support");
39
+ return(Qfalse);
40
+ #endif
41
+ }
42
+
43
+
44
+ VALUE
45
+ ruby_xml_xpointer_point2(VALUE node, VALUE xptr_str) {
46
+ return(ruby_xml_xpointer_point(cXMLXPointer, node, xptr_str));
47
+ }
48
+
49
+
50
+ /*
51
+ * call-seq:
52
+ * XML::XPointer.range(start_node, end_node) => xpath
53
+ *
54
+ * Create an xpath representing the range between the supplied
55
+ * start and end node.
56
+ */
57
+ VALUE
58
+ ruby_xml_xpointer_range(VALUE class, VALUE rstart, VALUE rend) {
59
+ #ifdef LIBXML_XPTR_ENABLED
60
+ ruby_xml_node *start, *end;
61
+ VALUE rxxp;
62
+ xmlXPathObjectPtr xpath;
63
+
64
+ if (rb_obj_is_kind_of(rstart, cXMLNode) == Qfalse)
65
+ rb_raise(rb_eTypeError, "require an XML::Node object as a starting point");
66
+ if (rb_obj_is_kind_of(rend, cXMLNode) == Qfalse)
67
+ rb_raise(rb_eTypeError, "require an XML::Node object as an ending point");
68
+
69
+ Data_Get_Struct(rstart, ruby_xml_node, start);
70
+ if (start->node == NULL)
71
+ return(Qnil);
72
+
73
+ Data_Get_Struct(rend, ruby_xml_node, end);
74
+ if (end->node == NULL)
75
+ return(Qnil);
76
+
77
+ xpath = xmlXPtrNewRangeNodes(start->node, end->node);
78
+ if (xpath == NULL)
79
+ rb_fatal("You shouldn't be able to have this happen");
80
+
81
+ rxxp = ruby_xml_xpath_new(cXMLXPath, start->xd, Qnil, xpath);
82
+ return(rxxp);
83
+ #else
84
+ rb_warn("libxml was compiled without XPointer support");
85
+ return(Qfalse);
86
+ #endif
87
+ }
88
+
89
+ // Rdoc needs to know
90
+ #ifdef RDOC_NEVER_DEFINED
91
+ mXML = rb_define_module("XML");
92
+ #endif
93
+
94
+ void
95
+ ruby_init_xml_xpointer(void) {
96
+ cXMLXPointer = rb_define_class_under(mXML, "XPointer", rb_cObject);
97
+ eXMLXPointerInvalidExpression = rb_define_class_under(cXMLXPointer, "InvalidExpression", rb_eException);
98
+
99
+ rb_define_singleton_method(cXMLXPointer, "range", ruby_xml_xpointer_range, 2);
100
+ }
@@ -0,0 +1,27 @@
1
+ /* $Id: ruby_xml_xpointer.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_XPOINTER__
6
+ #define __RUBY_XML_XPOINTER__
7
+
8
+ extern VALUE cXMLXPointer;
9
+ extern VALUE eXMLXPointerInvalidExpression;
10
+
11
+ typedef struct ruby_xml_xpointer {
12
+ VALUE xd;
13
+ VALUE ctxt;
14
+ /*
15
+ * This needs to go into a xpointer data struct:
16
+ *
17
+ * xmlLocationSetPtr xptr;
18
+ *
19
+ * I also need an xpointer data struct type.
20
+ */
21
+ } ruby_xml_xpointer;
22
+
23
+ VALUE ruby_xml_xpointer_point(VALUE class, VALUE node, VALUE xptr_string);
24
+ VALUE ruby_xml_xpointer_point2(VALUE node, VALUE xptr_string);
25
+ void ruby_init_xml_xpointer(void);
26
+
27
+ #endif
@@ -0,0 +1,21 @@
1
+ /* $Id: ruby_xml_xpointer_context.c,v 1.2 2006/02/27 12:55:32 roscopeco Exp $ */
2
+
3
+ /* Please see the LICENSE file for copyright and distribution information */
4
+
5
+ #include "libxml.h"
6
+ #include "ruby_xml_xpointer_context.h"
7
+
8
+ VALUE cXMLXPointerContext;
9
+ VALUE eXMLXPointerContextInvalidPath;
10
+
11
+ // Rdoc needs to know
12
+ #ifdef RDOC_NEVER_DEFINED
13
+ mXML = rb_define_module("XML");
14
+ cXMLXPointer = rb_define_class_under(mXML, "XPointer", rb_cObject);
15
+ #endif
16
+
17
+ void
18
+ ruby_init_xml_xpointer_context(void) {
19
+ cXMLXPointerContext = rb_define_class_under(cXMLXPointer, "Context", cXMLXPathContext);
20
+ eXMLXPointerContextInvalidPath = rb_define_class_under(cXMLXPointerContext, "InvalidPath", rb_eException);
21
+ }
@@ -0,0 +1,18 @@
1
+ /* $Id: ruby_xml_xpointer_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_XPOINTER_CONTEXT__
6
+ #define __RUBY_XML_XPOINTER_CONTEXT__
7
+
8
+ extern VALUE cXMLXPointerContext;
9
+ extern VALUE eXMLXPointerContextInvalidPath;
10
+
11
+ typedef struct ruby_xml_xpointer_context {
12
+ VALUE xd;
13
+ xmlXPathContextPtr ctxt;
14
+ } ruby_xml_xpointer_context;
15
+
16
+ void ruby_init_xml_xpointer_context(void);
17
+
18
+ #endif
@@ -0,0 +1,202 @@
1
+ /* $Id: sax_parser_callbacks.inc,v 1.1 2006/04/14 14:50:58 roscopeco Exp $ */
2
+
3
+ /* Please see the LICENSE file for copyright and distribution information */
4
+
5
+ /*
6
+ * SAX CALLBACK HANDLERS
7
+ */
8
+ static void internal_subset_func(ruby_xml_sax_parser_callbacks *cbp,
9
+ const char *name,
10
+ const char *extid,
11
+ const char *sysid) {
12
+ VALUE handler = cbp->internalSubset;
13
+
14
+ if (handler && handler != Qnil) {
15
+ rb_funcall(handler, callsym, 3, rb_str_new2(name),
16
+ rb_str_new2(extid), rb_str_new2(sysid));
17
+ }
18
+ }
19
+
20
+ static void is_standalone_func(ruby_xml_sax_parser_callbacks *cbp) {
21
+ VALUE handler = cbp->isStandalone;
22
+
23
+ if (handler && handler != Qnil) {
24
+ rb_funcall(handler,callsym,0);
25
+ }
26
+ }
27
+
28
+ static void has_internal_subset_func(ruby_xml_sax_parser_callbacks *cbp) {
29
+ VALUE handler = cbp->hasInternalSubset;
30
+
31
+ if (handler && handler != Qnil) {
32
+ rb_funcall(handler,callsym,0);
33
+ }
34
+ }
35
+
36
+ static void has_external_subset_func(ruby_xml_sax_parser_callbacks *cbp) {
37
+ VALUE handler = cbp->hasExternalSubset;
38
+
39
+ if (handler && handler != Qnil) {
40
+ rb_funcall(handler,callsym,0);
41
+ }
42
+ }
43
+
44
+ static void start_document_func(ruby_xml_sax_parser_callbacks *cbp) {
45
+ VALUE handler = cbp->startDocument;
46
+
47
+ if (handler && handler != Qnil) {
48
+ rb_funcall(handler,callsym,0);
49
+ }
50
+ }
51
+
52
+ static void end_document_func(ruby_xml_sax_parser_callbacks *cbp) {
53
+ VALUE handler = cbp->endDocument;
54
+
55
+ if (handler && handler != Qnil) {
56
+ rb_funcall(handler,callsym,0);
57
+ }
58
+ }
59
+
60
+ static void start_element_func(ruby_xml_sax_parser_callbacks *cbp,
61
+ const char *name, const char **attrs) {
62
+ VALUE handler = cbp->startElement;
63
+ VALUE ahsh = rb_hash_new();
64
+ const char *attr, *value;
65
+
66
+ if (attrs) {
67
+ while ((attr = *(attrs++))) {
68
+ value = *(attrs++);
69
+ rb_hash_aset(ahsh, rb_str_new2(attr), rb_str_new2(value));
70
+ }
71
+ }
72
+
73
+ if (handler && handler != Qnil) {
74
+ rb_funcall(handler,callsym,2,rb_str_new2(name),ahsh);
75
+ }
76
+ }
77
+
78
+ static void end_element_func(ruby_xml_sax_parser_callbacks *cbp,
79
+ const char *name) {
80
+ VALUE handler = cbp->endElement;
81
+
82
+ if (handler && handler != Qnil) {
83
+ rb_funcall(handler,callsym,1,rb_str_new2(name));
84
+ }
85
+ }
86
+
87
+ static void reference_func(ruby_xml_sax_parser_callbacks *cbp,
88
+ const char *name) {
89
+ VALUE handler = cbp->reference;
90
+
91
+ if (handler && handler != Qnil) {
92
+ rb_funcall(handler,callsym,1,rb_str_new2(name));
93
+ }
94
+ }
95
+
96
+ static void characters_func(ruby_xml_sax_parser_callbacks *cbp,
97
+ const char *chars, int len) {
98
+ VALUE handler = cbp->characters;
99
+
100
+ if (handler && handler != Qnil) {
101
+ rb_funcall(handler,callsym,1,rb_str_new(chars, len));
102
+ }
103
+ }
104
+
105
+ static void processing_instruction_func(ruby_xml_sax_parser_callbacks *cbp,
106
+ const char *target, const char *data) {
107
+ VALUE handler = cbp->processingInstruction;
108
+
109
+ if (handler && handler != Qnil) {
110
+ rb_funcall(handler, callsym, 2,
111
+ rb_str_new2(target),rb_str_new2(data));
112
+ }
113
+ }
114
+
115
+ static void comment_func(ruby_xml_sax_parser_callbacks *cbp,
116
+ const char *msg) {
117
+ VALUE handler = cbp->comment;
118
+
119
+ if (handler && handler != Qnil) {
120
+ rb_funcall(handler,callsym,1,rb_str_new2(msg));
121
+ }
122
+ }
123
+
124
+ // TODO these next three should actually be formatting messages.
125
+ static void warning_func(ruby_xml_sax_parser_callbacks *cbp,
126
+ const char *msg, ...) {
127
+ VALUE handler = cbp->xmlParserWarning;
128
+
129
+ if (handler && handler != Qnil) {
130
+ rb_funcall(handler,callsym,1,rb_str_new2(msg));
131
+ }
132
+ }
133
+
134
+ static void error_func(ruby_xml_sax_parser_callbacks *cbp,
135
+ const char *msg, ...) {
136
+ VALUE handler = cbp->xmlParserError;
137
+
138
+ if (handler && handler != Qnil) {
139
+ rb_funcall(handler,callsym,1,rb_str_new2(msg));
140
+ }
141
+ }
142
+
143
+ static void fatal_error_func(ruby_xml_sax_parser_callbacks *cbp,
144
+ const char *msg, ...) {
145
+ VALUE handler = cbp->xmlParserFatalError;
146
+
147
+ if (handler && handler != Qnil) {
148
+ rb_funcall(handler,callsym,1,rb_str_new2(msg));
149
+ }
150
+ }
151
+
152
+ static void cdata_block_func(ruby_xml_sax_parser_callbacks *cbp,
153
+ const char *value, int len) {
154
+ VALUE handler = cbp->cdataBlock;
155
+
156
+ if (handler && handler != Qnil) {
157
+ rb_funcall(handler,callsym,1,rb_str_new(value, len));
158
+ }
159
+ }
160
+
161
+ static void external_subset_func(ruby_xml_sax_parser_callbacks *cbp,
162
+ const char *name,
163
+ const char *extid,
164
+ const char *sysid) {
165
+ VALUE handler = cbp->externalSubset;
166
+
167
+ if (handler && handler != Qnil) {
168
+ rb_funcall(handler, callsym, 3, rb_str_new2(name),
169
+ rb_str_new2(extid), rb_str_new2(sysid));
170
+ }
171
+ }
172
+
173
+ static xmlSAXHandler rubySAXHandlerStruct = {
174
+ (internalSubsetSAXFunc)internal_subset_func,
175
+ (isStandaloneSAXFunc)is_standalone_func,
176
+ (hasInternalSubsetSAXFunc)has_internal_subset_func,
177
+ (hasExternalSubsetSAXFunc)has_external_subset_func,
178
+ 0, /* resolveEntity */
179
+ 0, /* getEntity */
180
+ 0, /* entityDecl */
181
+ 0, /* notationDecl */
182
+ 0, /* attributeDecl */
183
+ 0, /* elementDecl */
184
+ 0, /* unparsedEntityDecl */
185
+ 0, /* setDocumentLocator */
186
+ (startDocumentSAXFunc)start_document_func,
187
+ (endDocumentSAXFunc)end_document_func,
188
+ (startElementSAXFunc)start_element_func,
189
+ (endElementSAXFunc)end_element_func,
190
+ (referenceSAXFunc)reference_func,
191
+ (charactersSAXFunc)characters_func,
192
+ 0, /* ignorableWhitespace */
193
+ (processingInstructionSAXFunc)processing_instruction_func,
194
+ (commentSAXFunc)comment_func,
195
+ (warningSAXFunc)warning_func,
196
+ (errorSAXFunc)error_func,
197
+ (fatalErrorSAXFunc)fatal_error_func,
198
+ 0, /* xmlGetParameterEntity */
199
+ (cdataBlockSAXFunc)cdata_block_func,
200
+ (externalSubsetSAXFunc)external_subset_func,
201
+ 1
202
+ };