nokogiri-backupify 1.5.0.beta.4

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 (275) hide show
  1. data/.autotest +26 -0
  2. data/CHANGELOG.ja.rdoc +509 -0
  3. data/CHANGELOG.rdoc +490 -0
  4. data/Manifest.txt +274 -0
  5. data/README.ja.rdoc +106 -0
  6. data/README.rdoc +150 -0
  7. data/Rakefile +217 -0
  8. data/bin/nokogiri +54 -0
  9. data/deps.rip +5 -0
  10. data/ext/java/nokogiri/EncodingHandler.java +124 -0
  11. data/ext/java/nokogiri/HtmlDocument.java +146 -0
  12. data/ext/java/nokogiri/HtmlElementDescription.java +145 -0
  13. data/ext/java/nokogiri/HtmlEntityLookup.java +79 -0
  14. data/ext/java/nokogiri/HtmlSaxParserContext.java +256 -0
  15. data/ext/java/nokogiri/NokogiriService.java +466 -0
  16. data/ext/java/nokogiri/XmlAttr.java +183 -0
  17. data/ext/java/nokogiri/XmlAttributeDecl.java +130 -0
  18. data/ext/java/nokogiri/XmlCdata.java +89 -0
  19. data/ext/java/nokogiri/XmlComment.java +84 -0
  20. data/ext/java/nokogiri/XmlDocument.java +514 -0
  21. data/ext/java/nokogiri/XmlDocumentFragment.java +216 -0
  22. data/ext/java/nokogiri/XmlDtd.java +464 -0
  23. data/ext/java/nokogiri/XmlElement.java +221 -0
  24. data/ext/java/nokogiri/XmlElementContent.java +382 -0
  25. data/ext/java/nokogiri/XmlElementDecl.java +147 -0
  26. data/ext/java/nokogiri/XmlEntityDecl.java +161 -0
  27. data/ext/java/nokogiri/XmlEntityReference.java +75 -0
  28. data/ext/java/nokogiri/XmlNamespace.java +127 -0
  29. data/ext/java/nokogiri/XmlNode.java +1392 -0
  30. data/ext/java/nokogiri/XmlNodeSet.java +284 -0
  31. data/ext/java/nokogiri/XmlProcessingInstruction.java +103 -0
  32. data/ext/java/nokogiri/XmlReader.java +409 -0
  33. data/ext/java/nokogiri/XmlRelaxng.java +199 -0
  34. data/ext/java/nokogiri/XmlSaxParserContext.java +353 -0
  35. data/ext/java/nokogiri/XmlSaxPushParser.java +182 -0
  36. data/ext/java/nokogiri/XmlSchema.java +175 -0
  37. data/ext/java/nokogiri/XmlSyntaxError.java +114 -0
  38. data/ext/java/nokogiri/XmlText.java +135 -0
  39. data/ext/java/nokogiri/XmlXpathContext.java +175 -0
  40. data/ext/java/nokogiri/XsltStylesheet.java +181 -0
  41. data/ext/java/nokogiri/internals/HtmlDomParserContext.java +205 -0
  42. data/ext/java/nokogiri/internals/NokogiriDocumentCache.java +73 -0
  43. data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +80 -0
  44. data/ext/java/nokogiri/internals/NokogiriHandler.java +326 -0
  45. data/ext/java/nokogiri/internals/NokogiriHelpers.java +583 -0
  46. data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +170 -0
  47. data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +118 -0
  48. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +73 -0
  49. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +121 -0
  50. data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +78 -0
  51. data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +120 -0
  52. data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +56 -0
  53. data/ext/java/nokogiri/internals/ParserContext.java +278 -0
  54. data/ext/java/nokogiri/internals/PushInputStream.java +411 -0
  55. data/ext/java/nokogiri/internals/ReaderNode.java +473 -0
  56. data/ext/java/nokogiri/internals/SaveContext.java +282 -0
  57. data/ext/java/nokogiri/internals/SchemaErrorHandler.java +68 -0
  58. data/ext/java/nokogiri/internals/XmlDeclHandler.java +42 -0
  59. data/ext/java/nokogiri/internals/XmlDomParser.java +77 -0
  60. data/ext/java/nokogiri/internals/XmlDomParserContext.java +233 -0
  61. data/ext/java/nokogiri/internals/XmlSaxParser.java +65 -0
  62. data/ext/java/nokogiri/internals/XsltExtensionFunction.java +72 -0
  63. data/ext/nokogiri/depend +358 -0
  64. data/ext/nokogiri/extconf.rb +124 -0
  65. data/ext/nokogiri/html_document.c +154 -0
  66. data/ext/nokogiri/html_document.h +10 -0
  67. data/ext/nokogiri/html_element_description.c +276 -0
  68. data/ext/nokogiri/html_element_description.h +10 -0
  69. data/ext/nokogiri/html_entity_lookup.c +32 -0
  70. data/ext/nokogiri/html_entity_lookup.h +8 -0
  71. data/ext/nokogiri/html_sax_parser_context.c +94 -0
  72. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  73. data/ext/nokogiri/nokogiri.c +92 -0
  74. data/ext/nokogiri/nokogiri.h +160 -0
  75. data/ext/nokogiri/xml_attr.c +94 -0
  76. data/ext/nokogiri/xml_attr.h +9 -0
  77. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  78. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  79. data/ext/nokogiri/xml_cdata.c +56 -0
  80. data/ext/nokogiri/xml_cdata.h +9 -0
  81. data/ext/nokogiri/xml_comment.c +54 -0
  82. data/ext/nokogiri/xml_comment.h +9 -0
  83. data/ext/nokogiri/xml_document.c +478 -0
  84. data/ext/nokogiri/xml_document.h +23 -0
  85. data/ext/nokogiri/xml_document_fragment.c +48 -0
  86. data/ext/nokogiri/xml_document_fragment.h +10 -0
  87. data/ext/nokogiri/xml_dtd.c +202 -0
  88. data/ext/nokogiri/xml_dtd.h +10 -0
  89. data/ext/nokogiri/xml_element_content.c +123 -0
  90. data/ext/nokogiri/xml_element_content.h +10 -0
  91. data/ext/nokogiri/xml_element_decl.c +69 -0
  92. data/ext/nokogiri/xml_element_decl.h +9 -0
  93. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  94. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  95. data/ext/nokogiri/xml_entity_decl.c +110 -0
  96. data/ext/nokogiri/xml_entity_decl.h +10 -0
  97. data/ext/nokogiri/xml_entity_reference.c +52 -0
  98. data/ext/nokogiri/xml_entity_reference.h +9 -0
  99. data/ext/nokogiri/xml_io.c +31 -0
  100. data/ext/nokogiri/xml_io.h +11 -0
  101. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  102. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  103. data/ext/nokogiri/xml_namespace.c +84 -0
  104. data/ext/nokogiri/xml_namespace.h +13 -0
  105. data/ext/nokogiri/xml_node.c +1384 -0
  106. data/ext/nokogiri/xml_node.h +13 -0
  107. data/ext/nokogiri/xml_node_set.c +418 -0
  108. data/ext/nokogiri/xml_node_set.h +9 -0
  109. data/ext/nokogiri/xml_processing_instruction.c +56 -0
  110. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  111. data/ext/nokogiri/xml_reader.c +684 -0
  112. data/ext/nokogiri/xml_reader.h +10 -0
  113. data/ext/nokogiri/xml_relax_ng.c +161 -0
  114. data/ext/nokogiri/xml_relax_ng.h +9 -0
  115. data/ext/nokogiri/xml_sax_parser.c +288 -0
  116. data/ext/nokogiri/xml_sax_parser.h +39 -0
  117. data/ext/nokogiri/xml_sax_parser_context.c +199 -0
  118. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  119. data/ext/nokogiri/xml_sax_push_parser.c +115 -0
  120. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  121. data/ext/nokogiri/xml_schema.c +205 -0
  122. data/ext/nokogiri/xml_schema.h +9 -0
  123. data/ext/nokogiri/xml_syntax_error.c +58 -0
  124. data/ext/nokogiri/xml_syntax_error.h +13 -0
  125. data/ext/nokogiri/xml_text.c +50 -0
  126. data/ext/nokogiri/xml_text.h +9 -0
  127. data/ext/nokogiri/xml_xpath_context.c +309 -0
  128. data/ext/nokogiri/xml_xpath_context.h +9 -0
  129. data/ext/nokogiri/xslt_stylesheet.c +258 -0
  130. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  131. data/lib/isorelax.jar +0 -0
  132. data/lib/jing.jar +0 -0
  133. data/lib/nekodtd.jar +0 -0
  134. data/lib/nekohtml.jar +0 -0
  135. data/lib/nokogiri.rb +143 -0
  136. data/lib/nokogiri/css.rb +23 -0
  137. data/lib/nokogiri/css/node.rb +99 -0
  138. data/lib/nokogiri/css/parser.rb +677 -0
  139. data/lib/nokogiri/css/parser.y +237 -0
  140. data/lib/nokogiri/css/parser_extras.rb +91 -0
  141. data/lib/nokogiri/css/syntax_error.rb +7 -0
  142. data/lib/nokogiri/css/tokenizer.rb +152 -0
  143. data/lib/nokogiri/css/tokenizer.rex +55 -0
  144. data/lib/nokogiri/css/xpath_visitor.rb +171 -0
  145. data/lib/nokogiri/decorators/slop.rb +35 -0
  146. data/lib/nokogiri/html.rb +36 -0
  147. data/lib/nokogiri/html/builder.rb +35 -0
  148. data/lib/nokogiri/html/document.rb +221 -0
  149. data/lib/nokogiri/html/document_fragment.rb +41 -0
  150. data/lib/nokogiri/html/element_description.rb +23 -0
  151. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  152. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  153. data/lib/nokogiri/html/sax/parser.rb +52 -0
  154. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  155. data/lib/nokogiri/syntax_error.rb +4 -0
  156. data/lib/nokogiri/version.rb +35 -0
  157. data/lib/nokogiri/xml.rb +67 -0
  158. data/lib/nokogiri/xml/attr.rb +14 -0
  159. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  160. data/lib/nokogiri/xml/builder.rb +418 -0
  161. data/lib/nokogiri/xml/cdata.rb +11 -0
  162. data/lib/nokogiri/xml/character_data.rb +7 -0
  163. data/lib/nokogiri/xml/document.rb +218 -0
  164. data/lib/nokogiri/xml/document_fragment.rb +84 -0
  165. data/lib/nokogiri/xml/dtd.rb +22 -0
  166. data/lib/nokogiri/xml/element_content.rb +36 -0
  167. data/lib/nokogiri/xml/element_decl.rb +13 -0
  168. data/lib/nokogiri/xml/entity_decl.rb +19 -0
  169. data/lib/nokogiri/xml/namespace.rb +13 -0
  170. data/lib/nokogiri/xml/node.rb +907 -0
  171. data/lib/nokogiri/xml/node/save_options.rb +45 -0
  172. data/lib/nokogiri/xml/node_set.rb +350 -0
  173. data/lib/nokogiri/xml/notation.rb +6 -0
  174. data/lib/nokogiri/xml/parse_options.rb +85 -0
  175. data/lib/nokogiri/xml/pp.rb +2 -0
  176. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  177. data/lib/nokogiri/xml/pp/node.rb +56 -0
  178. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  179. data/lib/nokogiri/xml/reader.rb +112 -0
  180. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  181. data/lib/nokogiri/xml/sax.rb +4 -0
  182. data/lib/nokogiri/xml/sax/document.rb +164 -0
  183. data/lib/nokogiri/xml/sax/parser.rb +115 -0
  184. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  185. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  186. data/lib/nokogiri/xml/schema.rb +57 -0
  187. data/lib/nokogiri/xml/syntax_error.rb +47 -0
  188. data/lib/nokogiri/xml/text.rb +9 -0
  189. data/lib/nokogiri/xml/xpath.rb +10 -0
  190. data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
  191. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  192. data/lib/nokogiri/xslt.rb +52 -0
  193. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  194. data/lib/xercesImpl.jar +0 -0
  195. data/lib/xsd/xmlparser/nokogiri.rb +90 -0
  196. data/tasks/cross_compile.rb +177 -0
  197. data/tasks/test.rb +94 -0
  198. data/test/css/test_nthiness.rb +159 -0
  199. data/test/css/test_parser.rb +303 -0
  200. data/test/css/test_tokenizer.rb +198 -0
  201. data/test/css/test_xpath_visitor.rb +85 -0
  202. data/test/decorators/test_slop.rb +16 -0
  203. data/test/files/2ch.html +108 -0
  204. data/test/files/address_book.rlx +12 -0
  205. data/test/files/address_book.xml +10 -0
  206. data/test/files/bar/bar.xsd +4 -0
  207. data/test/files/dont_hurt_em_why.xml +422 -0
  208. data/test/files/exslt.xml +8 -0
  209. data/test/files/exslt.xslt +35 -0
  210. data/test/files/foo/foo.xsd +4 -0
  211. data/test/files/po.xml +32 -0
  212. data/test/files/po.xsd +66 -0
  213. data/test/files/shift_jis.html +10 -0
  214. data/test/files/shift_jis.xml +5 -0
  215. data/test/files/snuggles.xml +3 -0
  216. data/test/files/staff.dtd +10 -0
  217. data/test/files/staff.xml +59 -0
  218. data/test/files/staff.xslt +32 -0
  219. data/test/files/tlm.html +850 -0
  220. data/test/files/valid_bar.xml +2 -0
  221. data/test/helper.rb +171 -0
  222. data/test/html/sax/test_parser.rb +136 -0
  223. data/test/html/sax/test_parser_context.rb +48 -0
  224. data/test/html/test_builder.rb +164 -0
  225. data/test/html/test_document.rb +457 -0
  226. data/test/html/test_document_encoding.rb +123 -0
  227. data/test/html/test_document_fragment.rb +255 -0
  228. data/test/html/test_element_description.rb +100 -0
  229. data/test/html/test_named_characters.rb +14 -0
  230. data/test/html/test_node.rb +190 -0
  231. data/test/html/test_node_encoding.rb +27 -0
  232. data/test/test_convert_xpath.rb +135 -0
  233. data/test/test_css_cache.rb +45 -0
  234. data/test/test_encoding_handler.rb +46 -0
  235. data/test/test_memory_leak.rb +52 -0
  236. data/test/test_nokogiri.rb +132 -0
  237. data/test/test_reader.rb +403 -0
  238. data/test/test_soap4r_sax.rb +52 -0
  239. data/test/test_xslt_transforms.rb +189 -0
  240. data/test/xml/node/test_save_options.rb +20 -0
  241. data/test/xml/node/test_subclass.rb +44 -0
  242. data/test/xml/sax/test_parser.rb +338 -0
  243. data/test/xml/sax/test_parser_context.rb +113 -0
  244. data/test/xml/sax/test_push_parser.rb +156 -0
  245. data/test/xml/test_attr.rb +65 -0
  246. data/test/xml/test_attribute_decl.rb +86 -0
  247. data/test/xml/test_builder.rb +210 -0
  248. data/test/xml/test_cdata.rb +50 -0
  249. data/test/xml/test_comment.rb +29 -0
  250. data/test/xml/test_document.rb +675 -0
  251. data/test/xml/test_document_encoding.rb +26 -0
  252. data/test/xml/test_document_fragment.rb +192 -0
  253. data/test/xml/test_dtd.rb +107 -0
  254. data/test/xml/test_dtd_encoding.rb +33 -0
  255. data/test/xml/test_element_content.rb +56 -0
  256. data/test/xml/test_element_decl.rb +73 -0
  257. data/test/xml/test_entity_decl.rb +122 -0
  258. data/test/xml/test_entity_reference.rb +21 -0
  259. data/test/xml/test_namespace.rb +70 -0
  260. data/test/xml/test_node.rb +899 -0
  261. data/test/xml/test_node_attributes.rb +34 -0
  262. data/test/xml/test_node_encoding.rb +107 -0
  263. data/test/xml/test_node_reparenting.rb +321 -0
  264. data/test/xml/test_node_set.rb +708 -0
  265. data/test/xml/test_parse_options.rb +52 -0
  266. data/test/xml/test_processing_instruction.rb +30 -0
  267. data/test/xml/test_reader_encoding.rb +126 -0
  268. data/test/xml/test_relax_ng.rb +60 -0
  269. data/test/xml/test_schema.rb +89 -0
  270. data/test/xml/test_syntax_error.rb +12 -0
  271. data/test/xml/test_text.rb +47 -0
  272. data/test/xml/test_unparented_node.rb +381 -0
  273. data/test/xml/test_xpath.rb +237 -0
  274. data/test/xslt/test_custom_functions.rb +94 -0
  275. metadata +525 -0
@@ -0,0 +1,9 @@
1
+ #ifndef NOKOGIRI_XML_XPATH_CONTEXT
2
+ #define NOKOGIRI_XML_XPATH_CONTEXT
3
+
4
+ #include <nokogiri.h>
5
+
6
+ void init_xml_xpath_context();
7
+
8
+ extern VALUE cNokogiriXmlXpathContext;
9
+ #endif
@@ -0,0 +1,258 @@
1
+ #include <xslt_stylesheet.h>
2
+
3
+ #include <libxslt/xsltInternals.h>
4
+ #include <libxslt/xsltutils.h>
5
+ #include <libxslt/transform.h>
6
+ #include <libexslt/exslt.h>
7
+
8
+ VALUE xslt;
9
+
10
+ int vasprintf (char **strp, const char *fmt, va_list ap);
11
+
12
+ static void dealloc(xsltStylesheetPtr doc)
13
+ {
14
+ NOKOGIRI_DEBUG_START(doc);
15
+ xsltFreeStylesheet(doc); /* commented out for now. */
16
+ NOKOGIRI_DEBUG_END(doc);
17
+ }
18
+
19
+ NORETURN(static void xslt_generic_error_handler(void * ctx, const char *msg, ...));
20
+ static void xslt_generic_error_handler(void * ctx, const char *msg, ...)
21
+ {
22
+ char * message;
23
+
24
+ va_list args;
25
+ va_start(args, msg);
26
+ vasprintf(&message, msg, args);
27
+ va_end(args);
28
+
29
+ rb_exc_raise(rb_exc_new2(rb_eRuntimeError, message));
30
+ }
31
+
32
+ /*
33
+ * call-seq:
34
+ * parse_stylesheet_doc(document)
35
+ *
36
+ * Parse a stylesheet from +document+.
37
+ */
38
+ static VALUE parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
39
+ {
40
+ xmlDocPtr xml ;
41
+ xsltStylesheetPtr ss ;
42
+ Data_Get_Struct(xmldocobj, xmlDoc, xml);
43
+ exsltRegisterAll();
44
+
45
+ xsltSetGenericErrorFunc(NULL, xslt_generic_error_handler);
46
+
47
+ ss = xsltParseStylesheetDoc(xmlCopyDoc(xml, 1)); /* 1 => recursive */
48
+
49
+ xsltSetGenericErrorFunc(NULL, NULL);
50
+
51
+ return Data_Wrap_Struct(klass, NULL, dealloc, ss);
52
+ }
53
+
54
+
55
+ /*
56
+ * call-seq:
57
+ * serialize(document)
58
+ *
59
+ * Serialize +document+ to an xml string.
60
+ */
61
+ static VALUE serialize(VALUE self, VALUE xmlobj)
62
+ {
63
+ xmlDocPtr xml ;
64
+ xsltStylesheetPtr ss ;
65
+ xmlChar* doc_ptr ;
66
+ int doc_len ;
67
+ VALUE rval ;
68
+
69
+ Data_Get_Struct(xmlobj, xmlDoc, xml);
70
+ Data_Get_Struct(self, xsltStylesheet, ss);
71
+ xsltSaveResultToString(&doc_ptr, &doc_len, xml, ss);
72
+ rval = NOKOGIRI_STR_NEW(doc_ptr, doc_len);
73
+ xmlFree(doc_ptr);
74
+ return rval ;
75
+ }
76
+
77
+ /*
78
+ * call-seq:
79
+ * transform(document, params = [])
80
+ *
81
+ * Apply an XSLT stylesheet to an XML::Document.
82
+ * +params+ is an array of strings used as XSLT parameters.
83
+ * returns Nokogiri::XML::Document
84
+ *
85
+ * Example:
86
+ *
87
+ * doc = Nokogiri::XML(File.read(ARGV[0]))
88
+ * xslt = Nokogiri::XSLT(File.read(ARGV[1]))
89
+ * puts xslt.transform(doc, ['key', 'value'])
90
+ *
91
+ */
92
+ static VALUE transform(int argc, VALUE* argv, VALUE self)
93
+ {
94
+ VALUE xmldoc, paramobj ;
95
+ xmlDocPtr xml ;
96
+ xmlDocPtr result ;
97
+ xsltStylesheetPtr ss ;
98
+ const char** params ;
99
+ long param_len, j ;
100
+
101
+ rb_scan_args(argc, argv, "11", &xmldoc, &paramobj);
102
+ if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0L) ; }
103
+
104
+ /* handle hashes as arguments. */
105
+ if(T_HASH == TYPE(paramobj)) {
106
+ paramobj = rb_funcall(paramobj, rb_intern("to_a"), 0);
107
+ paramobj = rb_funcall(paramobj, rb_intern("flatten"), 0);
108
+ }
109
+
110
+ Check_Type(paramobj, T_ARRAY);
111
+
112
+ Data_Get_Struct(xmldoc, xmlDoc, xml);
113
+ Data_Get_Struct(self, xsltStylesheet, ss);
114
+
115
+ param_len = RARRAY_LEN(paramobj);
116
+ params = calloc((size_t)param_len+1, sizeof(char*));
117
+ for (j = 0 ; j < param_len ; j++) {
118
+ VALUE entry = rb_ary_entry(paramobj, j);
119
+ const char * ptr = StringValuePtr(entry);
120
+ params[j] = ptr;
121
+ }
122
+ params[param_len] = 0 ;
123
+
124
+ result = xsltApplyStylesheet(ss, xml, params);
125
+ free(params);
126
+
127
+ if (!result) rb_raise(rb_eRuntimeError, "could not perform xslt transform on document");
128
+
129
+ return Nokogiri_wrap_xml_document((VALUE)0, result) ;
130
+ }
131
+
132
+ static void method_caller(xmlXPathParserContextPtr ctxt, int nargs)
133
+ {
134
+ const xmlChar * function;
135
+ const xmlChar * functionURI;
136
+ size_t i, count;
137
+
138
+ xsltTransformContextPtr transform;
139
+ xmlXPathObjectPtr xpath;
140
+ VALUE obj;
141
+ VALUE *args;
142
+ VALUE result;
143
+
144
+ transform = xsltXPathGetTransformContext(ctxt);
145
+
146
+ function = ctxt->context->function;
147
+ functionURI = ctxt->context->functionURI;
148
+ obj = (VALUE)xsltGetExtData(transform, functionURI);
149
+
150
+ count = (size_t)ctxt->valueNr;
151
+ args = calloc(count, sizeof(VALUE *));
152
+
153
+ for(i = 0; i < count; i++) {
154
+ VALUE thing;
155
+
156
+ xpath = valuePop(ctxt);
157
+ switch(xpath->type) {
158
+ case XPATH_STRING:
159
+ thing = NOKOGIRI_STR_NEW2(xpath->stringval);
160
+ break;
161
+ case XPATH_NODESET:
162
+ if(NULL == xpath->nodesetval) {
163
+ thing = Nokogiri_wrap_xml_node_set(
164
+ xmlXPathNodeSetCreate(NULL),
165
+ DOC_RUBY_OBJECT(ctxt->context->doc));
166
+ } else {
167
+ thing = Nokogiri_wrap_xml_node_set(xpath->nodesetval,
168
+ DOC_RUBY_OBJECT(ctxt->context->doc));
169
+ }
170
+ break;
171
+ default:
172
+ rb_raise(rb_eRuntimeError, "do not handle type: %d", xpath->type);
173
+ }
174
+ args[i] = thing;
175
+ }
176
+ result = rb_funcall3(obj, rb_intern((const char *)function), (int)count, args);
177
+ switch(TYPE(result)) {
178
+ case T_FLOAT:
179
+ case T_BIGNUM:
180
+ case T_FIXNUM:
181
+ xmlXPathReturnNumber(ctxt, NUM2DBL(result));
182
+ break;
183
+ case T_STRING:
184
+ xmlXPathReturnString(
185
+ ctxt,
186
+ xmlStrdup((xmlChar *)StringValuePtr(result))
187
+ );
188
+ break;
189
+ case T_TRUE:
190
+ xmlXPathReturnTrue(ctxt);
191
+ break;
192
+ case T_FALSE:
193
+ xmlXPathReturnFalse(ctxt);
194
+ break;
195
+ case T_NIL:
196
+ break;
197
+ default:
198
+ rb_raise(rb_eRuntimeError, "Invalid return type");
199
+ }
200
+ }
201
+
202
+ static void * initFunc(xsltTransformContextPtr ctxt, const xmlChar *uri)
203
+ {
204
+ VALUE modules = rb_iv_get(xslt, "@modules");
205
+ VALUE obj = rb_hash_aref(modules, rb_str_new2((const char *)uri));
206
+ VALUE args = { Qfalse };
207
+ VALUE methods = rb_funcall(obj, rb_intern("instance_methods"), 1, args);
208
+ int i;
209
+
210
+ for(i = 0; i < RARRAY_LEN(methods); i++) {
211
+ VALUE method_name = rb_obj_as_string(RARRAY_PTR(methods)[i]);
212
+ xsltRegisterExtFunction(ctxt,
213
+ (unsigned char *)StringValuePtr(method_name), uri, method_caller);
214
+ }
215
+
216
+ return (void *)rb_class_new_instance(0, NULL, obj);
217
+ }
218
+
219
+ static void shutdownFunc(xsltTransformContextPtr ctxt,
220
+ const xmlChar *uri, void *data)
221
+ {
222
+ }
223
+
224
+ /*
225
+ * call-seq:
226
+ * register(uri, custom_handler_class)
227
+ *
228
+ * Register a class that implements custom XLST transformation functions.
229
+ */
230
+ static VALUE registr(VALUE self, VALUE uri, VALUE obj)
231
+ {
232
+ VALUE modules = rb_iv_get(self, "@modules");
233
+ if(NIL_P(modules)) rb_raise(rb_eRuntimeError, "wtf! @modules isn't set");
234
+
235
+ rb_hash_aset(modules, uri, obj);
236
+ xsltRegisterExtModule((unsigned char *)StringValuePtr(uri), initFunc, shutdownFunc);
237
+ return self;
238
+ }
239
+
240
+ VALUE cNokogiriXsltStylesheet ;
241
+ void init_xslt_stylesheet()
242
+ {
243
+ VALUE nokogiri;
244
+ VALUE klass;
245
+
246
+ nokogiri = rb_define_module("Nokogiri");
247
+ xslt = rb_define_module_under(nokogiri, "XSLT");
248
+ klass = rb_define_class_under(xslt, "Stylesheet", rb_cObject);
249
+
250
+ rb_iv_set(xslt, "@modules", rb_hash_new());
251
+
252
+ cNokogiriXsltStylesheet = klass;
253
+
254
+ rb_define_singleton_method(klass, "parse_stylesheet_doc", parse_stylesheet_doc, 1);
255
+ rb_define_singleton_method(xslt, "register", registr, 2);
256
+ rb_define_method(klass, "serialize", serialize, 1);
257
+ rb_define_method(klass, "transform", transform, -1);
258
+ }
@@ -0,0 +1,9 @@
1
+ #ifndef NOKOGIRI_XSLT_STYLESHEET
2
+ #define NOKOGIRI_XSLT_STYLESHEET
3
+
4
+ #include <nokogiri.h>
5
+
6
+ void init_xslt_stylesheet();
7
+
8
+ extern VALUE cNokogiriXsltStylesheet ;
9
+ #endif
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,143 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Modify the PATH on windows so that the external DLLs will get loaded.
3
+
4
+ require 'rbconfig'
5
+ ENV['PATH'] = [File.expand_path(
6
+ File.join(File.dirname(__FILE__), "..", "ext", "nokogiri")
7
+ ), ENV['PATH']].compact.join(';') if RbConfig::CONFIG['host_os'] =~ /(mswin|mingw)/i
8
+
9
+ if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
10
+ # If JRuby::Rack::VERSION is defined, Nokogiri is in a servlet.
11
+ # If AppEngine::ApiProxy is defined, Nokogiri is on Google App Egnine.
12
+ # These two cases don't need to require jar archives because those
13
+ # should be in WEB-INF/lib and already set in the classpath by
14
+ # a servlet container.
15
+ unless defined?(JRuby::Rack::VERSION) || defined?(AppEngine::ApiProxy)
16
+ require 'isorelax.jar'
17
+ require 'jing.jar'
18
+ require 'nekohtml.jar'
19
+ require 'nekodtd.jar'
20
+ require 'xercesImpl.jar'
21
+ end
22
+ require 'nokogiri/nokogiri'
23
+ else
24
+ require 'nokogiri/nokogiri'
25
+ end
26
+
27
+ warn(<<-eowarn) if '1.8.6' == RUBY_VERSION && $VERBOSE
28
+ !!! DEPRECATION WARNING !!!
29
+ Hey Champ! I see you're using Ruby 1.8.6! While I applaud you for sticking to
30
+ your guns and using The One True Ruby, I have to let you know that we're going
31
+ to stop supporting 1.8.6. I know, it's sad. But, we just don't have time to
32
+ support every version of Ruby out there. Whether we like it or not, time moves
33
+ forward and so does our software.
34
+
35
+ On August 1, 2010, we will no longer support Ruby 1.8.6. If nokogiri happens to
36
+ work on 1.8.6 after that date, then great! We will hownever, no longer test,
37
+ use, or endorse 1.8.6 as a supported platform.
38
+
39
+ Thanks,
40
+
41
+ Team Nokogiri
42
+ eowarn
43
+
44
+ require 'nokogiri/version'
45
+ require 'nokogiri/syntax_error'
46
+ require 'nokogiri/xml'
47
+ require 'nokogiri/xslt'
48
+ require 'nokogiri/html'
49
+ require 'nokogiri/decorators/slop'
50
+ require 'nokogiri/css'
51
+ require 'nokogiri/html/builder'
52
+
53
+ # Nokogiri parses and searches XML/HTML very quickly, and also has
54
+ # correctly implemented CSS3 selector support as well as XPath support.
55
+ #
56
+ # Parsing a document returns either a Nokogiri::XML::Document, or a
57
+ # Nokogiri::HTML::Document depending on the kind of document you parse.
58
+ #
59
+ # Here is an example:
60
+ #
61
+ # require 'nokogiri'
62
+ # require 'open-uri'
63
+ #
64
+ # # Get a Nokogiri::HTML:Document for the page we’re interested in...
65
+ #
66
+ # doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))
67
+ #
68
+ # # Do funky things with it using Nokogiri::XML::Node methods...
69
+ #
70
+ # ####
71
+ # # Search for nodes by css
72
+ # doc.css('h3.r a.l').each do |link|
73
+ # puts link.content
74
+ # end
75
+ #
76
+ # See Nokogiri::XML::Node#css for more information about CSS searching.
77
+ # See Nokogiri::XML::Node#xpath for more information about XPath searching.
78
+ module Nokogiri
79
+ class << self
80
+ ###
81
+ # Parse an HTML or XML document. +string+ contains the document.
82
+ def parse string, url = nil, encoding = nil, options = nil
83
+ doc =
84
+ if string.respond_to?(:read) ||
85
+ string =~ /^\s*<[^Hh>]*html/i # Probably html
86
+ Nokogiri::HTML(
87
+ string,
88
+ url,
89
+ encoding, options || XML::ParseOptions::DEFAULT_HTML
90
+ )
91
+ else
92
+ Nokogiri::XML(string, url, encoding,
93
+ options || XML::ParseOptions::DEFAULT_XML)
94
+ end
95
+ yield doc if block_given?
96
+ doc
97
+ end
98
+
99
+ ###
100
+ # Create a new Nokogiri::XML::DocumentFragment
101
+ def make input = nil, opts = {}, &blk
102
+ if input
103
+ Nokogiri::HTML.fragment(input).children.first
104
+ else
105
+ Nokogiri(&blk)
106
+ end
107
+ end
108
+
109
+ ###
110
+ # Parse a document and add the Slop decorator. The Slop decorator
111
+ # implements method_missing such that methods may be used instead of CSS
112
+ # or XPath. For example:
113
+ #
114
+ # doc = Nokogiri::Slop(<<-eohtml)
115
+ # <html>
116
+ # <body>
117
+ # <p>first</p>
118
+ # <p>second</p>
119
+ # </body>
120
+ # </html>
121
+ # eohtml
122
+ # assert_equal('second', doc.html.body.p[1].text)
123
+ #
124
+ def Slop(*args, &block)
125
+ Nokogiri(*args, &block).slop!
126
+ end
127
+ end
128
+ end
129
+
130
+ ###
131
+ # Parser a document contained in +args+. Nokogiri will try to guess what
132
+ # type of document you are attempting to parse. For more information, see
133
+ # Nokogiri.parse
134
+ #
135
+ # To specify the type of document, use Nokogiri.XML or Nokogiri.HTML.
136
+ def Nokogiri(*args, &block)
137
+ if block_given?
138
+ builder = Nokogiri::HTML::Builder.new(&block)
139
+ return builder.doc.root
140
+ else
141
+ Nokogiri.parse(*args)
142
+ end
143
+ end
@@ -0,0 +1,23 @@
1
+ require 'nokogiri/css/node'
2
+ require 'nokogiri/css/xpath_visitor'
3
+ require 'nokogiri/css/parser'
4
+ require 'nokogiri/css/tokenizer'
5
+ require 'nokogiri/css/syntax_error'
6
+
7
+ module Nokogiri
8
+ module CSS
9
+ class << self
10
+ ###
11
+ # Parse this CSS selector in +selector+. Returns an AST.
12
+ def parse selector
13
+ Parser.new.parse selector
14
+ end
15
+
16
+ ###
17
+ # Get the XPath for +selector+.
18
+ def xpath_for selector, options={}
19
+ Parser.new(options[:ns] || {}).xpath_for selector, options
20
+ end
21
+ end
22
+ end
23
+ end