nokogiri-backport 1.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (239) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE-DEPENDENCIES.md +1682 -0
  4. data/LICENSE.md +9 -0
  5. data/README.md +272 -0
  6. data/bin/nokogiri +118 -0
  7. data/dependencies.yml +74 -0
  8. data/ext/java/nokogiri/EncodingHandler.java +124 -0
  9. data/ext/java/nokogiri/HtmlDocument.java +178 -0
  10. data/ext/java/nokogiri/HtmlElementDescription.java +148 -0
  11. data/ext/java/nokogiri/HtmlEntityLookup.java +79 -0
  12. data/ext/java/nokogiri/HtmlSaxParserContext.java +282 -0
  13. data/ext/java/nokogiri/HtmlSaxPushParser.java +222 -0
  14. data/ext/java/nokogiri/NokogiriService.java +597 -0
  15. data/ext/java/nokogiri/XmlAttr.java +162 -0
  16. data/ext/java/nokogiri/XmlAttributeDecl.java +129 -0
  17. data/ext/java/nokogiri/XmlCdata.java +82 -0
  18. data/ext/java/nokogiri/XmlComment.java +97 -0
  19. data/ext/java/nokogiri/XmlDocument.java +633 -0
  20. data/ext/java/nokogiri/XmlDocumentFragment.java +185 -0
  21. data/ext/java/nokogiri/XmlDtd.java +481 -0
  22. data/ext/java/nokogiri/XmlElement.java +68 -0
  23. data/ext/java/nokogiri/XmlElementContent.java +382 -0
  24. data/ext/java/nokogiri/XmlElementDecl.java +147 -0
  25. data/ext/java/nokogiri/XmlEntityDecl.java +157 -0
  26. data/ext/java/nokogiri/XmlEntityReference.java +101 -0
  27. data/ext/java/nokogiri/XmlNamespace.java +199 -0
  28. data/ext/java/nokogiri/XmlNode.java +1684 -0
  29. data/ext/java/nokogiri/XmlNodeSet.java +434 -0
  30. data/ext/java/nokogiri/XmlProcessingInstruction.java +100 -0
  31. data/ext/java/nokogiri/XmlReader.java +531 -0
  32. data/ext/java/nokogiri/XmlRelaxng.java +151 -0
  33. data/ext/java/nokogiri/XmlSaxParserContext.java +374 -0
  34. data/ext/java/nokogiri/XmlSaxPushParser.java +286 -0
  35. data/ext/java/nokogiri/XmlSchema.java +388 -0
  36. data/ext/java/nokogiri/XmlSyntaxError.java +138 -0
  37. data/ext/java/nokogiri/XmlText.java +110 -0
  38. data/ext/java/nokogiri/XmlXpathContext.java +301 -0
  39. data/ext/java/nokogiri/XsltStylesheet.java +347 -0
  40. data/ext/java/nokogiri/internals/ClosedStreamException.java +10 -0
  41. data/ext/java/nokogiri/internals/HtmlDomParserContext.java +252 -0
  42. data/ext/java/nokogiri/internals/IgnoreSchemaErrorsErrorHandler.java +20 -0
  43. data/ext/java/nokogiri/internals/NokogiriBlockingQueueInputStream.java +151 -0
  44. data/ext/java/nokogiri/internals/NokogiriDomParser.java +116 -0
  45. data/ext/java/nokogiri/internals/NokogiriEntityResolver.java +121 -0
  46. data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +69 -0
  47. data/ext/java/nokogiri/internals/NokogiriHandler.java +327 -0
  48. data/ext/java/nokogiri/internals/NokogiriHelpers.java +734 -0
  49. data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +217 -0
  50. data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +127 -0
  51. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +100 -0
  52. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +121 -0
  53. data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +78 -0
  54. data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +180 -0
  55. data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +72 -0
  56. data/ext/java/nokogiri/internals/NokogiriXPathVariableResolver.java +60 -0
  57. data/ext/java/nokogiri/internals/NokogiriXsltErrorListener.java +87 -0
  58. data/ext/java/nokogiri/internals/ParserContext.java +259 -0
  59. data/ext/java/nokogiri/internals/ReaderNode.java +488 -0
  60. data/ext/java/nokogiri/internals/SaveContextVisitor.java +778 -0
  61. data/ext/java/nokogiri/internals/SchemaErrorHandler.java +73 -0
  62. data/ext/java/nokogiri/internals/XalanDTMManagerPatch.java +168 -0
  63. data/ext/java/nokogiri/internals/XmlDeclHandler.java +42 -0
  64. data/ext/java/nokogiri/internals/XmlDomParserContext.java +274 -0
  65. data/ext/java/nokogiri/internals/XmlSaxParser.java +65 -0
  66. data/ext/java/nokogiri/internals/c14n/AttrCompare.java +119 -0
  67. data/ext/java/nokogiri/internals/c14n/C14nHelper.java +159 -0
  68. data/ext/java/nokogiri/internals/c14n/CanonicalFilter.java +37 -0
  69. data/ext/java/nokogiri/internals/c14n/CanonicalizationException.java +93 -0
  70. data/ext/java/nokogiri/internals/c14n/Canonicalizer.java +252 -0
  71. data/ext/java/nokogiri/internals/c14n/Canonicalizer11.java +639 -0
  72. data/ext/java/nokogiri/internals/c14n/Canonicalizer11_OmitComments.java +38 -0
  73. data/ext/java/nokogiri/internals/c14n/Canonicalizer11_WithComments.java +38 -0
  74. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315.java +367 -0
  75. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315Excl.java +295 -0
  76. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclOmitComments.java +40 -0
  77. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclWithComments.java +44 -0
  78. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315OmitComments.java +44 -0
  79. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315WithComments.java +43 -0
  80. data/ext/java/nokogiri/internals/c14n/CanonicalizerBase.java +630 -0
  81. data/ext/java/nokogiri/internals/c14n/CanonicalizerPhysical.java +173 -0
  82. data/ext/java/nokogiri/internals/c14n/CanonicalizerSpi.java +76 -0
  83. data/ext/java/nokogiri/internals/c14n/Constants.java +42 -0
  84. data/ext/java/nokogiri/internals/c14n/ElementProxy.java +293 -0
  85. data/ext/java/nokogiri/internals/c14n/HelperNodeList.java +93 -0
  86. data/ext/java/nokogiri/internals/c14n/IgnoreAllErrorHandler.java +79 -0
  87. data/ext/java/nokogiri/internals/c14n/InclusiveNamespaces.java +166 -0
  88. data/ext/java/nokogiri/internals/c14n/InvalidCanonicalizerException.java +76 -0
  89. data/ext/java/nokogiri/internals/c14n/NameSpaceSymbTable.java +402 -0
  90. data/ext/java/nokogiri/internals/c14n/NodeFilter.java +51 -0
  91. data/ext/java/nokogiri/internals/c14n/UtfHelpper.java +179 -0
  92. data/ext/java/nokogiri/internals/c14n/XMLUtils.java +507 -0
  93. data/ext/java/nokogiri/internals/dom2dtm/DOM2DTM.java +1745 -0
  94. data/ext/java/nokogiri/internals/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java +685 -0
  95. data/ext/nokogiri/depend +477 -0
  96. data/ext/nokogiri/extconf.rb +836 -0
  97. data/ext/nokogiri/html_document.c +171 -0
  98. data/ext/nokogiri/html_document.h +10 -0
  99. data/ext/nokogiri/html_element_description.c +279 -0
  100. data/ext/nokogiri/html_element_description.h +10 -0
  101. data/ext/nokogiri/html_entity_lookup.c +32 -0
  102. data/ext/nokogiri/html_entity_lookup.h +8 -0
  103. data/ext/nokogiri/html_sax_parser_context.c +116 -0
  104. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  105. data/ext/nokogiri/html_sax_push_parser.c +87 -0
  106. data/ext/nokogiri/html_sax_push_parser.h +9 -0
  107. data/ext/nokogiri/nokogiri.c +135 -0
  108. data/ext/nokogiri/nokogiri.h +130 -0
  109. data/ext/nokogiri/xml_attr.c +103 -0
  110. data/ext/nokogiri/xml_attr.h +9 -0
  111. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  112. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  113. data/ext/nokogiri/xml_cdata.c +62 -0
  114. data/ext/nokogiri/xml_cdata.h +9 -0
  115. data/ext/nokogiri/xml_comment.c +69 -0
  116. data/ext/nokogiri/xml_comment.h +9 -0
  117. data/ext/nokogiri/xml_document.c +622 -0
  118. data/ext/nokogiri/xml_document.h +23 -0
  119. data/ext/nokogiri/xml_document_fragment.c +48 -0
  120. data/ext/nokogiri/xml_document_fragment.h +10 -0
  121. data/ext/nokogiri/xml_dtd.c +202 -0
  122. data/ext/nokogiri/xml_dtd.h +10 -0
  123. data/ext/nokogiri/xml_element_content.c +123 -0
  124. data/ext/nokogiri/xml_element_content.h +10 -0
  125. data/ext/nokogiri/xml_element_decl.c +69 -0
  126. data/ext/nokogiri/xml_element_decl.h +9 -0
  127. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  128. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  129. data/ext/nokogiri/xml_entity_decl.c +110 -0
  130. data/ext/nokogiri/xml_entity_decl.h +10 -0
  131. data/ext/nokogiri/xml_entity_reference.c +52 -0
  132. data/ext/nokogiri/xml_entity_reference.h +9 -0
  133. data/ext/nokogiri/xml_io.c +63 -0
  134. data/ext/nokogiri/xml_io.h +11 -0
  135. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  136. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  137. data/ext/nokogiri/xml_namespace.c +111 -0
  138. data/ext/nokogiri/xml_namespace.h +14 -0
  139. data/ext/nokogiri/xml_node.c +1773 -0
  140. data/ext/nokogiri/xml_node.h +13 -0
  141. data/ext/nokogiri/xml_node_set.c +486 -0
  142. data/ext/nokogiri/xml_node_set.h +12 -0
  143. data/ext/nokogiri/xml_processing_instruction.c +56 -0
  144. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  145. data/ext/nokogiri/xml_reader.c +657 -0
  146. data/ext/nokogiri/xml_reader.h +10 -0
  147. data/ext/nokogiri/xml_relax_ng.c +179 -0
  148. data/ext/nokogiri/xml_relax_ng.h +9 -0
  149. data/ext/nokogiri/xml_sax_parser.c +305 -0
  150. data/ext/nokogiri/xml_sax_parser.h +39 -0
  151. data/ext/nokogiri/xml_sax_parser_context.c +262 -0
  152. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  153. data/ext/nokogiri/xml_sax_push_parser.c +159 -0
  154. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  155. data/ext/nokogiri/xml_schema.c +276 -0
  156. data/ext/nokogiri/xml_schema.h +9 -0
  157. data/ext/nokogiri/xml_syntax_error.c +64 -0
  158. data/ext/nokogiri/xml_syntax_error.h +13 -0
  159. data/ext/nokogiri/xml_text.c +52 -0
  160. data/ext/nokogiri/xml_text.h +9 -0
  161. data/ext/nokogiri/xml_xpath_context.c +374 -0
  162. data/ext/nokogiri/xml_xpath_context.h +10 -0
  163. data/ext/nokogiri/xslt_stylesheet.c +263 -0
  164. data/ext/nokogiri/xslt_stylesheet.h +14 -0
  165. data/lib/isorelax.jar +0 -0
  166. data/lib/jing.jar +0 -0
  167. data/lib/nekodtd.jar +0 -0
  168. data/lib/nekohtml.jar +0 -0
  169. data/lib/nokogiri/css/node.rb +53 -0
  170. data/lib/nokogiri/css/parser.rb +751 -0
  171. data/lib/nokogiri/css/parser.y +272 -0
  172. data/lib/nokogiri/css/parser_extras.rb +94 -0
  173. data/lib/nokogiri/css/syntax_error.rb +8 -0
  174. data/lib/nokogiri/css/tokenizer.rb +154 -0
  175. data/lib/nokogiri/css/tokenizer.rex +55 -0
  176. data/lib/nokogiri/css/xpath_visitor.rb +260 -0
  177. data/lib/nokogiri/css.rb +28 -0
  178. data/lib/nokogiri/decorators/slop.rb +43 -0
  179. data/lib/nokogiri/html/builder.rb +36 -0
  180. data/lib/nokogiri/html/document.rb +322 -0
  181. data/lib/nokogiri/html/document_fragment.rb +50 -0
  182. data/lib/nokogiri/html/element_description.rb +24 -0
  183. data/lib/nokogiri/html/element_description_defaults.rb +672 -0
  184. data/lib/nokogiri/html/entity_lookup.rb +14 -0
  185. data/lib/nokogiri/html/sax/parser.rb +63 -0
  186. data/lib/nokogiri/html/sax/parser_context.rb +17 -0
  187. data/lib/nokogiri/html/sax/push_parser.rb +37 -0
  188. data/lib/nokogiri/html.rb +38 -0
  189. data/lib/nokogiri/jruby/dependencies.rb +20 -0
  190. data/lib/nokogiri/syntax_error.rb +5 -0
  191. data/lib/nokogiri/version/constant.rb +5 -0
  192. data/lib/nokogiri/version/info.rb +182 -0
  193. data/lib/nokogiri/version.rb +3 -0
  194. data/lib/nokogiri/xml/attr.rb +15 -0
  195. data/lib/nokogiri/xml/attribute_decl.rb +19 -0
  196. data/lib/nokogiri/xml/builder.rb +447 -0
  197. data/lib/nokogiri/xml/cdata.rb +12 -0
  198. data/lib/nokogiri/xml/character_data.rb +8 -0
  199. data/lib/nokogiri/xml/document.rb +290 -0
  200. data/lib/nokogiri/xml/document_fragment.rb +159 -0
  201. data/lib/nokogiri/xml/dtd.rb +33 -0
  202. data/lib/nokogiri/xml/element_content.rb +37 -0
  203. data/lib/nokogiri/xml/element_decl.rb +14 -0
  204. data/lib/nokogiri/xml/entity_decl.rb +20 -0
  205. data/lib/nokogiri/xml/entity_reference.rb +19 -0
  206. data/lib/nokogiri/xml/namespace.rb +14 -0
  207. data/lib/nokogiri/xml/node/save_options.rb +62 -0
  208. data/lib/nokogiri/xml/node.rb +1240 -0
  209. data/lib/nokogiri/xml/node_set.rb +372 -0
  210. data/lib/nokogiri/xml/notation.rb +7 -0
  211. data/lib/nokogiri/xml/parse_options.rb +127 -0
  212. data/lib/nokogiri/xml/pp/character_data.rb +19 -0
  213. data/lib/nokogiri/xml/pp/node.rb +57 -0
  214. data/lib/nokogiri/xml/pp.rb +3 -0
  215. data/lib/nokogiri/xml/processing_instruction.rb +9 -0
  216. data/lib/nokogiri/xml/reader.rb +116 -0
  217. data/lib/nokogiri/xml/relax_ng.rb +37 -0
  218. data/lib/nokogiri/xml/sax/document.rb +172 -0
  219. data/lib/nokogiri/xml/sax/parser.rb +123 -0
  220. data/lib/nokogiri/xml/sax/parser_context.rb +17 -0
  221. data/lib/nokogiri/xml/sax/push_parser.rb +61 -0
  222. data/lib/nokogiri/xml/sax.rb +5 -0
  223. data/lib/nokogiri/xml/schema.rb +72 -0
  224. data/lib/nokogiri/xml/searchable.rb +239 -0
  225. data/lib/nokogiri/xml/syntax_error.rb +71 -0
  226. data/lib/nokogiri/xml/text.rb +10 -0
  227. data/lib/nokogiri/xml/xpath/syntax_error.rb +12 -0
  228. data/lib/nokogiri/xml/xpath.rb +11 -0
  229. data/lib/nokogiri/xml/xpath_context.rb +17 -0
  230. data/lib/nokogiri/xml.rb +76 -0
  231. data/lib/nokogiri/xslt/stylesheet.rb +26 -0
  232. data/lib/nokogiri/xslt.rb +57 -0
  233. data/lib/nokogiri.rb +144 -0
  234. data/lib/serializer.jar +0 -0
  235. data/lib/xalan.jar +0 -0
  236. data/lib/xercesImpl.jar +0 -0
  237. data/lib/xml-apis.jar +0 -0
  238. data/lib/xsd/xmlparser/nokogiri.rb +103 -0
  239. metadata +531 -0
@@ -0,0 +1,263 @@
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
+ static void mark(nokogiriXsltStylesheetTuple *wrapper)
11
+ {
12
+ rb_gc_mark(wrapper->func_instances);
13
+ }
14
+
15
+ static void dealloc(nokogiriXsltStylesheetTuple *wrapper)
16
+ {
17
+ xsltStylesheetPtr doc = wrapper->ss;
18
+
19
+ NOKOGIRI_DEBUG_START(doc);
20
+ xsltFreeStylesheet(doc); /* commented out for now. */
21
+ NOKOGIRI_DEBUG_END(doc);
22
+
23
+ free(wrapper);
24
+ }
25
+
26
+ static void xslt_generic_error_handler(void * ctx, const char *msg, ...)
27
+ {
28
+ char * message;
29
+
30
+ va_list args;
31
+ va_start(args, msg);
32
+ vasprintf(&message, msg, args);
33
+ va_end(args);
34
+
35
+ rb_str_cat2((VALUE)ctx, message);
36
+
37
+ free(message);
38
+ }
39
+
40
+ VALUE Nokogiri_wrap_xslt_stylesheet(xsltStylesheetPtr ss)
41
+ {
42
+ VALUE self;
43
+ nokogiriXsltStylesheetTuple *wrapper;
44
+
45
+ self = Data_Make_Struct(cNokogiriXsltStylesheet, nokogiriXsltStylesheetTuple,
46
+ mark, dealloc, wrapper);
47
+
48
+ ss->_private = (void *)self;
49
+ wrapper->ss = ss;
50
+ wrapper->func_instances = rb_ary_new();
51
+
52
+ return self;
53
+ }
54
+
55
+ /*
56
+ * call-seq:
57
+ * parse_stylesheet_doc(document)
58
+ *
59
+ * Parse a stylesheet from +document+.
60
+ */
61
+ static VALUE parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
62
+ {
63
+ xmlDocPtr xml, xml_cpy;
64
+ VALUE errstr, exception;
65
+ xsltStylesheetPtr ss ;
66
+ Data_Get_Struct(xmldocobj, xmlDoc, xml);
67
+ exsltRegisterAll();
68
+
69
+ errstr = rb_str_new(0, 0);
70
+ xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
71
+
72
+ xml_cpy = xmlCopyDoc(xml, 1); /* 1 => recursive */
73
+ ss = xsltParseStylesheetDoc(xml_cpy);
74
+
75
+ xsltSetGenericErrorFunc(NULL, NULL);
76
+
77
+ if (!ss) {
78
+ xmlFreeDoc(xml_cpy);
79
+ exception = rb_exc_new3(rb_eRuntimeError, errstr);
80
+ rb_exc_raise(exception);
81
+ }
82
+
83
+ return Nokogiri_wrap_xslt_stylesheet(ss);
84
+ }
85
+
86
+
87
+ /*
88
+ * call-seq:
89
+ * serialize(document)
90
+ *
91
+ * Serialize +document+ to an xml string.
92
+ */
93
+ static VALUE serialize(VALUE self, VALUE xmlobj)
94
+ {
95
+ xmlDocPtr xml ;
96
+ nokogiriXsltStylesheetTuple *wrapper;
97
+ xmlChar* doc_ptr ;
98
+ int doc_len ;
99
+ VALUE rval ;
100
+
101
+ Data_Get_Struct(xmlobj, xmlDoc, xml);
102
+ Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
103
+ xsltSaveResultToString(&doc_ptr, &doc_len, xml, wrapper->ss);
104
+ rval = NOKOGIRI_STR_NEW(doc_ptr, doc_len);
105
+ xmlFree(doc_ptr);
106
+ return rval ;
107
+ }
108
+
109
+ /*
110
+ * call-seq:
111
+ * transform(document, params = [])
112
+ *
113
+ * Apply an XSLT stylesheet to an XML::Document.
114
+ * +params+ is an array of strings used as XSLT parameters.
115
+ * returns Nokogiri::XML::Document
116
+ *
117
+ * Example:
118
+ *
119
+ * doc = Nokogiri::XML(File.read(ARGV[0]))
120
+ * xslt = Nokogiri::XSLT(File.read(ARGV[1]))
121
+ * puts xslt.transform(doc, ['key', 'value'])
122
+ *
123
+ */
124
+ static VALUE transform(int argc, VALUE* argv, VALUE self)
125
+ {
126
+ VALUE xmldoc, paramobj, errstr, exception ;
127
+ xmlDocPtr xml ;
128
+ xmlDocPtr result ;
129
+ nokogiriXsltStylesheetTuple *wrapper;
130
+ const char** params ;
131
+ long param_len, j ;
132
+ int parse_error_occurred ;
133
+
134
+ rb_scan_args(argc, argv, "11", &xmldoc, &paramobj);
135
+ if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0L) ; }
136
+ if (!rb_obj_is_kind_of(xmldoc, cNokogiriXmlDocument))
137
+ rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::Document");
138
+
139
+ /* handle hashes as arguments. */
140
+ if(T_HASH == TYPE(paramobj)) {
141
+ paramobj = rb_funcall(paramobj, rb_intern("to_a"), 0);
142
+ paramobj = rb_funcall(paramobj, rb_intern("flatten"), 0);
143
+ }
144
+
145
+ Check_Type(paramobj, T_ARRAY);
146
+
147
+ Data_Get_Struct(xmldoc, xmlDoc, xml);
148
+ Data_Get_Struct(self, nokogiriXsltStylesheetTuple, wrapper);
149
+
150
+ param_len = RARRAY_LEN(paramobj);
151
+ params = calloc((size_t)param_len+1, sizeof(char*));
152
+ for (j = 0 ; j < param_len ; j++) {
153
+ VALUE entry = rb_ary_entry(paramobj, j);
154
+ const char * ptr = StringValueCStr(entry);
155
+ params[j] = ptr;
156
+ }
157
+ params[param_len] = 0 ;
158
+
159
+ errstr = rb_str_new(0, 0);
160
+ xsltSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
161
+ xmlSetGenericErrorFunc((void *)errstr, xslt_generic_error_handler);
162
+
163
+ result = xsltApplyStylesheet(wrapper->ss, xml, params);
164
+ free(params);
165
+
166
+ xsltSetGenericErrorFunc(NULL, NULL);
167
+ xmlSetGenericErrorFunc(NULL, NULL);
168
+
169
+ parse_error_occurred = (Qfalse == rb_funcall(errstr, rb_intern("empty?"), 0));
170
+
171
+ if (parse_error_occurred) {
172
+ exception = rb_exc_new3(rb_eRuntimeError, errstr);
173
+ rb_exc_raise(exception);
174
+ }
175
+
176
+ return Nokogiri_wrap_xml_document((VALUE)0, result) ;
177
+ }
178
+
179
+ static void method_caller(xmlXPathParserContextPtr ctxt, int nargs)
180
+ {
181
+ VALUE handler;
182
+ const char *function_name;
183
+ xsltTransformContextPtr transform;
184
+ const xmlChar *functionURI;
185
+
186
+ transform = xsltXPathGetTransformContext(ctxt);
187
+ functionURI = ctxt->context->functionURI;
188
+ handler = (VALUE)xsltGetExtData(transform, functionURI);
189
+ function_name = (const char*)(ctxt->context->function);
190
+
191
+ Nokogiri_marshal_xpath_funcall_and_return_values(ctxt, nargs, handler, (const char*)function_name);
192
+ }
193
+
194
+ static void * initFunc(xsltTransformContextPtr ctxt, const xmlChar *uri)
195
+ {
196
+ VALUE modules = rb_iv_get(xslt, "@modules");
197
+ VALUE obj = rb_hash_aref(modules, rb_str_new2((const char *)uri));
198
+ VALUE args = { Qfalse };
199
+ VALUE methods = rb_funcall(obj, rb_intern("instance_methods"), 1, args);
200
+ VALUE inst;
201
+ nokogiriXsltStylesheetTuple *wrapper;
202
+ int i;
203
+
204
+ for(i = 0; i < RARRAY_LEN(methods); i++) {
205
+ VALUE method_name = rb_obj_as_string(rb_ary_entry(methods, i));
206
+ xsltRegisterExtFunction(ctxt,
207
+ (unsigned char *)StringValueCStr(method_name), uri, method_caller);
208
+ }
209
+
210
+ Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
211
+ wrapper);
212
+ inst = rb_class_new_instance(0, NULL, obj);
213
+ rb_ary_push(wrapper->func_instances, inst);
214
+
215
+ return (void *)inst;
216
+ }
217
+
218
+ static void shutdownFunc(xsltTransformContextPtr ctxt,
219
+ const xmlChar *uri, void *data)
220
+ {
221
+ nokogiriXsltStylesheetTuple *wrapper;
222
+
223
+ Data_Get_Struct((VALUE)ctxt->style->_private, nokogiriXsltStylesheetTuple,
224
+ wrapper);
225
+
226
+ rb_ary_clear(wrapper->func_instances);
227
+ }
228
+
229
+ /*
230
+ * call-seq:
231
+ * register(uri, custom_handler_class)
232
+ *
233
+ * Register a class that implements custom XSLT transformation functions.
234
+ */
235
+ static VALUE registr(VALUE self, VALUE uri, VALUE obj)
236
+ {
237
+ VALUE modules = rb_iv_get(self, "@modules");
238
+ if(NIL_P(modules)) rb_raise(rb_eRuntimeError, "wtf! @modules isn't set");
239
+
240
+ rb_hash_aset(modules, uri, obj);
241
+ xsltRegisterExtModule((unsigned char *)StringValueCStr(uri), initFunc, shutdownFunc);
242
+ return self;
243
+ }
244
+
245
+ VALUE cNokogiriXsltStylesheet ;
246
+ void init_xslt_stylesheet()
247
+ {
248
+ VALUE nokogiri;
249
+ VALUE klass;
250
+
251
+ nokogiri = rb_define_module("Nokogiri");
252
+ xslt = rb_define_module_under(nokogiri, "XSLT");
253
+ klass = rb_define_class_under(xslt, "Stylesheet", rb_cObject);
254
+
255
+ rb_iv_set(xslt, "@modules", rb_hash_new());
256
+
257
+ cNokogiriXsltStylesheet = klass;
258
+
259
+ rb_define_singleton_method(klass, "parse_stylesheet_doc", parse_stylesheet_doc, 1);
260
+ rb_define_singleton_method(xslt, "register", registr, 2);
261
+ rb_define_method(klass, "serialize", serialize, 1);
262
+ rb_define_method(klass, "transform", transform, -1);
263
+ }
@@ -0,0 +1,14 @@
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
+
10
+ typedef struct _nokogiriXsltStylesheetTuple {
11
+ xsltStylesheetPtr ss;
12
+ VALUE func_instances;
13
+ } nokogiriXsltStylesheetTuple;
14
+ #endif
data/lib/isorelax.jar ADDED
Binary file
data/lib/jing.jar ADDED
Binary file
data/lib/nekodtd.jar ADDED
Binary file
data/lib/nekohtml.jar ADDED
Binary file
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+ module Nokogiri
3
+ module CSS
4
+ class Node
5
+ ALLOW_COMBINATOR_ON_SELF = [:DIRECT_ADJACENT_SELECTOR, :FOLLOWING_SELECTOR, :CHILD_SELECTOR]
6
+
7
+ # Get the type of this node
8
+ attr_accessor :type
9
+ # Get the value of this node
10
+ attr_accessor :value
11
+
12
+ # Create a new Node with +type+ and +value+
13
+ def initialize type, value
14
+ @type = type
15
+ @value = value
16
+ end
17
+
18
+ # Accept +visitor+
19
+ def accept visitor
20
+ visitor.send(:"visit_#{type.to_s.downcase}", self)
21
+ end
22
+
23
+ ###
24
+ # Convert this CSS node to xpath with +prefix+ using +visitor+
25
+ def to_xpath prefix = '//', visitor = XPathVisitor.new
26
+ prefix = '.' if ALLOW_COMBINATOR_ON_SELF.include?(type) && value.first.nil?
27
+ prefix + visitor.accept(self)
28
+ end
29
+
30
+ # Find a node by type using +types+
31
+ def find_by_type types
32
+ matches = []
33
+ matches << self if to_type == types
34
+ @value.each do |v|
35
+ matches += v.find_by_type(types) if v.respond_to?(:find_by_type)
36
+ end
37
+ matches
38
+ end
39
+
40
+ # Convert to_type
41
+ def to_type
42
+ [@type] + @value.map { |n|
43
+ n.to_type if n.respond_to?(:to_type)
44
+ }.compact
45
+ end
46
+
47
+ # Convert to array
48
+ def to_a
49
+ [@type] + @value.map { |n| n.respond_to?(:to_a) ? n.to_a : [n] }
50
+ end
51
+ end
52
+ end
53
+ end