rubyjedi-nokogiri_java 1.4.0.20100513161003-java

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 (285) hide show
  1. data/.autotest +26 -0
  2. data/CHANGELOG.ja.rdoc +330 -0
  3. data/CHANGELOG.rdoc +341 -0
  4. data/Manifest.txt +277 -0
  5. data/README.ja.rdoc +105 -0
  6. data/README.rdoc +125 -0
  7. data/Rakefile +307 -0
  8. data/bin/nokogiri +49 -0
  9. data/deps.rip +5 -0
  10. data/ext/nokogiri/extconf.rb +149 -0
  11. data/ext/nokogiri/html_document.c +145 -0
  12. data/ext/nokogiri/html_document.h +10 -0
  13. data/ext/nokogiri/html_element_description.c +272 -0
  14. data/ext/nokogiri/html_element_description.h +10 -0
  15. data/ext/nokogiri/html_entity_lookup.c +32 -0
  16. data/ext/nokogiri/html_entity_lookup.h +8 -0
  17. data/ext/nokogiri/html_sax_parser_context.c +92 -0
  18. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  19. data/ext/nokogiri/nokogiri.c +96 -0
  20. data/ext/nokogiri/nokogiri.h +148 -0
  21. data/ext/nokogiri/xml_attr.c +92 -0
  22. data/ext/nokogiri/xml_attr.h +9 -0
  23. data/ext/nokogiri/xml_attribute_decl.c +67 -0
  24. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  25. data/ext/nokogiri/xml_cdata.c +54 -0
  26. data/ext/nokogiri/xml_cdata.h +9 -0
  27. data/ext/nokogiri/xml_comment.c +52 -0
  28. data/ext/nokogiri/xml_comment.h +9 -0
  29. data/ext/nokogiri/xml_document.c +386 -0
  30. data/ext/nokogiri/xml_document.h +24 -0
  31. data/ext/nokogiri/xml_document_fragment.c +46 -0
  32. data/ext/nokogiri/xml_document_fragment.h +10 -0
  33. data/ext/nokogiri/xml_dtd.c +192 -0
  34. data/ext/nokogiri/xml_dtd.h +10 -0
  35. data/ext/nokogiri/xml_element_content.c +123 -0
  36. data/ext/nokogiri/xml_element_content.h +10 -0
  37. data/ext/nokogiri/xml_element_decl.c +69 -0
  38. data/ext/nokogiri/xml_element_decl.h +9 -0
  39. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  40. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  41. data/ext/nokogiri/xml_entity_decl.c +97 -0
  42. data/ext/nokogiri/xml_entity_decl.h +10 -0
  43. data/ext/nokogiri/xml_entity_reference.c +50 -0
  44. data/ext/nokogiri/xml_entity_reference.h +9 -0
  45. data/ext/nokogiri/xml_io.c +31 -0
  46. data/ext/nokogiri/xml_io.h +11 -0
  47. data/ext/nokogiri/xml_namespace.c +82 -0
  48. data/ext/nokogiri/xml_namespace.h +13 -0
  49. data/ext/nokogiri/xml_node.c +1080 -0
  50. data/ext/nokogiri/xml_node.h +13 -0
  51. data/ext/nokogiri/xml_node_set.c +405 -0
  52. data/ext/nokogiri/xml_node_set.h +9 -0
  53. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  54. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  55. data/ext/nokogiri/xml_reader.c +593 -0
  56. data/ext/nokogiri/xml_reader.h +10 -0
  57. data/ext/nokogiri/xml_relax_ng.c +159 -0
  58. data/ext/nokogiri/xml_relax_ng.h +9 -0
  59. data/ext/nokogiri/xml_sax_parser.c +283 -0
  60. data/ext/nokogiri/xml_sax_parser.h +43 -0
  61. data/ext/nokogiri/xml_sax_parser_context.c +157 -0
  62. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  63. data/ext/nokogiri/xml_sax_push_parser.c +114 -0
  64. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  65. data/ext/nokogiri/xml_schema.c +156 -0
  66. data/ext/nokogiri/xml_schema.h +9 -0
  67. data/ext/nokogiri/xml_syntax_error.c +52 -0
  68. data/ext/nokogiri/xml_syntax_error.h +13 -0
  69. data/ext/nokogiri/xml_text.c +48 -0
  70. data/ext/nokogiri/xml_text.h +9 -0
  71. data/ext/nokogiri/xml_xpath.c +53 -0
  72. data/ext/nokogiri/xml_xpath.h +11 -0
  73. data/ext/nokogiri/xml_xpath_context.c +239 -0
  74. data/ext/nokogiri/xml_xpath_context.h +9 -0
  75. data/ext/nokogiri/xslt_stylesheet.c +131 -0
  76. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  77. data/lib/isorelax.jar +0 -0
  78. data/lib/jing.jar +0 -0
  79. data/lib/nekodtd.jar +0 -0
  80. data/lib/nekohtml.jar +0 -0
  81. data/lib/nokogiri.rb +123 -0
  82. data/lib/nokogiri/css.rb +25 -0
  83. data/lib/nokogiri/css/generated_parser.rb +659 -0
  84. data/lib/nokogiri/css/generated_tokenizer.rb +145 -0
  85. data/lib/nokogiri/css/node.rb +99 -0
  86. data/lib/nokogiri/css/parser.rb +82 -0
  87. data/lib/nokogiri/css/parser.y +230 -0
  88. data/lib/nokogiri/css/syntax_error.rb +7 -0
  89. data/lib/nokogiri/css/tokenizer.rb +7 -0
  90. data/lib/nokogiri/css/tokenizer.rex +55 -0
  91. data/lib/nokogiri/css/xpath_visitor.rb +164 -0
  92. data/lib/nokogiri/decorators/slop.rb +33 -0
  93. data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
  94. data/lib/nokogiri/ffi/html/document.rb +28 -0
  95. data/lib/nokogiri/ffi/html/element_description.rb +81 -0
  96. data/lib/nokogiri/ffi/html/entity_lookup.rb +16 -0
  97. data/lib/nokogiri/ffi/html/sax/parser_context.rb +38 -0
  98. data/lib/nokogiri/ffi/io_callbacks.rb +42 -0
  99. data/lib/nokogiri/ffi/libxml.rb +372 -0
  100. data/lib/nokogiri/ffi/structs/common_node.rb +26 -0
  101. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +24 -0
  102. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +13 -0
  103. data/lib/nokogiri/ffi/structs/xml_alloc.rb +16 -0
  104. data/lib/nokogiri/ffi/structs/xml_attr.rb +19 -0
  105. data/lib/nokogiri/ffi/structs/xml_attribute.rb +27 -0
  106. data/lib/nokogiri/ffi/structs/xml_buffer.rb +16 -0
  107. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
  108. data/lib/nokogiri/ffi/structs/xml_document.rb +108 -0
  109. data/lib/nokogiri/ffi/structs/xml_dtd.rb +28 -0
  110. data/lib/nokogiri/ffi/structs/xml_element.rb +26 -0
  111. data/lib/nokogiri/ffi/structs/xml_element_content.rb +17 -0
  112. data/lib/nokogiri/ffi/structs/xml_entity.rb +32 -0
  113. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +12 -0
  114. data/lib/nokogiri/ffi/structs/xml_node.rb +28 -0
  115. data/lib/nokogiri/ffi/structs/xml_node_set.rb +53 -0
  116. data/lib/nokogiri/ffi/structs/xml_notation.rb +11 -0
  117. data/lib/nokogiri/ffi/structs/xml_ns.rb +15 -0
  118. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +19 -0
  119. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +14 -0
  120. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +51 -0
  121. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +124 -0
  122. data/lib/nokogiri/ffi/structs/xml_schema.rb +13 -0
  123. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +31 -0
  124. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +12 -0
  125. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +37 -0
  126. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +35 -0
  127. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +20 -0
  128. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +13 -0
  129. data/lib/nokogiri/ffi/xml/attr.rb +41 -0
  130. data/lib/nokogiri/ffi/xml/attribute_decl.rb +27 -0
  131. data/lib/nokogiri/ffi/xml/cdata.rb +19 -0
  132. data/lib/nokogiri/ffi/xml/comment.rb +18 -0
  133. data/lib/nokogiri/ffi/xml/document.rb +135 -0
  134. data/lib/nokogiri/ffi/xml/document_fragment.rb +21 -0
  135. data/lib/nokogiri/ffi/xml/dtd.rb +67 -0
  136. data/lib/nokogiri/ffi/xml/element_content.rb +43 -0
  137. data/lib/nokogiri/ffi/xml/element_decl.rb +19 -0
  138. data/lib/nokogiri/ffi/xml/entity_decl.rb +27 -0
  139. data/lib/nokogiri/ffi/xml/entity_reference.rb +19 -0
  140. data/lib/nokogiri/ffi/xml/namespace.rb +44 -0
  141. data/lib/nokogiri/ffi/xml/node.rb +465 -0
  142. data/lib/nokogiri/ffi/xml/node_set.rb +146 -0
  143. data/lib/nokogiri/ffi/xml/processing_instruction.rb +20 -0
  144. data/lib/nokogiri/ffi/xml/reader.rb +227 -0
  145. data/lib/nokogiri/ffi/xml/relax_ng.rb +85 -0
  146. data/lib/nokogiri/ffi/xml/sax/parser.rb +135 -0
  147. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +67 -0
  148. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +55 -0
  149. data/lib/nokogiri/ffi/xml/schema.rb +92 -0
  150. data/lib/nokogiri/ffi/xml/syntax_error.rb +98 -0
  151. data/lib/nokogiri/ffi/xml/text.rb +18 -0
  152. data/lib/nokogiri/ffi/xml/xpath.rb +19 -0
  153. data/lib/nokogiri/ffi/xml/xpath_context.rb +135 -0
  154. data/lib/nokogiri/ffi/xslt/stylesheet.rb +50 -0
  155. data/lib/nokogiri/html.rb +36 -0
  156. data/lib/nokogiri/html/builder.rb +35 -0
  157. data/lib/nokogiri/html/document.rb +88 -0
  158. data/lib/nokogiri/html/document_fragment.rb +15 -0
  159. data/lib/nokogiri/html/element_description.rb +23 -0
  160. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  161. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  162. data/lib/nokogiri/html/sax/parser.rb +48 -0
  163. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  164. data/lib/nokogiri/nokogiri.jar +0 -0
  165. data/lib/nokogiri/syntax_error.rb +4 -0
  166. data/lib/nokogiri/version.rb +33 -0
  167. data/lib/nokogiri/version_warning.rb +11 -0
  168. data/lib/nokogiri/xml.rb +67 -0
  169. data/lib/nokogiri/xml/attr.rb +14 -0
  170. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  171. data/lib/nokogiri/xml/builder.rb +405 -0
  172. data/lib/nokogiri/xml/cdata.rb +11 -0
  173. data/lib/nokogiri/xml/character_data.rb +7 -0
  174. data/lib/nokogiri/xml/document.rb +163 -0
  175. data/lib/nokogiri/xml/document_fragment.rb +73 -0
  176. data/lib/nokogiri/xml/dtd.rb +11 -0
  177. data/lib/nokogiri/xml/element_content.rb +36 -0
  178. data/lib/nokogiri/xml/element_decl.rb +13 -0
  179. data/lib/nokogiri/xml/entity_decl.rb +15 -0
  180. data/lib/nokogiri/xml/fragment_handler.rb +73 -0
  181. data/lib/nokogiri/xml/namespace.rb +13 -0
  182. data/lib/nokogiri/xml/node.rb +730 -0
  183. data/lib/nokogiri/xml/node/save_options.rb +42 -0
  184. data/lib/nokogiri/xml/node_set.rb +318 -0
  185. data/lib/nokogiri/xml/notation.rb +6 -0
  186. data/lib/nokogiri/xml/parse_options.rb +85 -0
  187. data/lib/nokogiri/xml/pp.rb +2 -0
  188. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  189. data/lib/nokogiri/xml/pp/node.rb +56 -0
  190. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  191. data/lib/nokogiri/xml/reader.rb +74 -0
  192. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  193. data/lib/nokogiri/xml/sax.rb +4 -0
  194. data/lib/nokogiri/xml/sax/document.rb +160 -0
  195. data/lib/nokogiri/xml/sax/parser.rb +115 -0
  196. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  197. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  198. data/lib/nokogiri/xml/schema.rb +61 -0
  199. data/lib/nokogiri/xml/syntax_error.rb +43 -0
  200. data/lib/nokogiri/xml/xpath.rb +10 -0
  201. data/lib/nokogiri/xml/xpath/syntax_error.rb +8 -0
  202. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  203. data/lib/nokogiri/xslt.rb +48 -0
  204. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  205. data/lib/xercesImpl.jar +0 -0
  206. data/lib/xsd/xmlparser/nokogiri.rb +90 -0
  207. data/tasks/test.rb +100 -0
  208. data/test/css/test_nthiness.rb +159 -0
  209. data/test/css/test_parser.rb +282 -0
  210. data/test/css/test_tokenizer.rb +190 -0
  211. data/test/css/test_xpath_visitor.rb +76 -0
  212. data/test/ffi/test_document.rb +35 -0
  213. data/test/files/2ch.html +108 -0
  214. data/test/files/address_book.rlx +12 -0
  215. data/test/files/address_book.xml +10 -0
  216. data/test/files/bar/bar.xsd +4 -0
  217. data/test/files/dont_hurt_em_why.xml +422 -0
  218. data/test/files/exslt.xml +8 -0
  219. data/test/files/exslt.xslt +35 -0
  220. data/test/files/foo/foo.xsd +4 -0
  221. data/test/files/po.xml +32 -0
  222. data/test/files/po.xsd +66 -0
  223. data/test/files/shift_jis.html +10 -0
  224. data/test/files/shift_jis.xml +5 -0
  225. data/test/files/snuggles.xml +3 -0
  226. data/test/files/staff.dtd +10 -0
  227. data/test/files/staff.xml +59 -0
  228. data/test/files/staff.xslt +32 -0
  229. data/test/files/tlm.html +850 -0
  230. data/test/files/valid_bar.xml +2 -0
  231. data/test/helper.rb +137 -0
  232. data/test/html/sax/test_parser.rb +83 -0
  233. data/test/html/sax/test_parser_context.rb +48 -0
  234. data/test/html/test_builder.rb +164 -0
  235. data/test/html/test_document.rb +385 -0
  236. data/test/html/test_document_encoding.rb +77 -0
  237. data/test/html/test_document_fragment.rb +157 -0
  238. data/test/html/test_element_description.rb +98 -0
  239. data/test/html/test_named_characters.rb +14 -0
  240. data/test/html/test_node.rb +242 -0
  241. data/test/html/test_node_encoding.rb +27 -0
  242. data/test/test_convert_xpath.rb +135 -0
  243. data/test/test_css_cache.rb +45 -0
  244. data/test/test_encoding_handler.rb +46 -0
  245. data/test/test_jruby.rb +40 -0
  246. data/test/test_memory_leak.rb +87 -0
  247. data/test/test_nokogiri.rb +140 -0
  248. data/test/test_reader.rb +358 -0
  249. data/test/test_soap4r_sax.rb +52 -0
  250. data/test/test_xslt_transforms.rb +150 -0
  251. data/test/xml/node/test_save_options.rb +20 -0
  252. data/test/xml/node/test_subclass.rb +44 -0
  253. data/test/xml/sax/test_parser.rb +314 -0
  254. data/test/xml/sax/test_parser_context.rb +63 -0
  255. data/test/xml/sax/test_push_parser.rb +135 -0
  256. data/test/xml/test_attr.rb +38 -0
  257. data/test/xml/test_attribute_decl.rb +90 -0
  258. data/test/xml/test_builder.rb +167 -0
  259. data/test/xml/test_cdata.rb +38 -0
  260. data/test/xml/test_comment.rb +29 -0
  261. data/test/xml/test_document.rb +638 -0
  262. data/test/xml/test_document_encoding.rb +26 -0
  263. data/test/xml/test_document_fragment.rb +149 -0
  264. data/test/xml/test_dtd.rb +92 -0
  265. data/test/xml/test_dtd_encoding.rb +33 -0
  266. data/test/xml/test_element_content.rb +56 -0
  267. data/test/xml/test_element_decl.rb +73 -0
  268. data/test/xml/test_entity_decl.rb +83 -0
  269. data/test/xml/test_entity_reference.rb +21 -0
  270. data/test/xml/test_namespace.rb +70 -0
  271. data/test/xml/test_node.rb +740 -0
  272. data/test/xml/test_node_attributes.rb +34 -0
  273. data/test/xml/test_node_encoding.rb +107 -0
  274. data/test/xml/test_node_reparenting.rb +279 -0
  275. data/test/xml/test_node_set.rb +577 -0
  276. data/test/xml/test_parse_options.rb +52 -0
  277. data/test/xml/test_processing_instruction.rb +30 -0
  278. data/test/xml/test_reader_encoding.rb +126 -0
  279. data/test/xml/test_relax_ng.rb +60 -0
  280. data/test/xml/test_schema.rb +89 -0
  281. data/test/xml/test_syntax_error.rb +12 -0
  282. data/test/xml/test_text.rb +30 -0
  283. data/test/xml/test_unparented_node.rb +381 -0
  284. data/test/xml/test_xpath.rb +169 -0
  285. metadata +477 -0
@@ -0,0 +1,131 @@
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
+ static void dealloc(xsltStylesheetPtr doc)
9
+ {
10
+ NOKOGIRI_DEBUG_START(doc);
11
+ xsltFreeStylesheet(doc); // commented out for now.
12
+ NOKOGIRI_DEBUG_END(doc);
13
+ }
14
+
15
+ static void xslt_generic_error_handler(void * ctx, const char *msg, ...)
16
+ {
17
+ char * message;
18
+
19
+ va_list args;
20
+ va_start(args, msg);
21
+ vasprintf(&message, msg, args);
22
+ va_end(args);
23
+
24
+ rb_raise(rb_eRuntimeError, message);
25
+ }
26
+
27
+ /*
28
+ * call-seq:
29
+ * parse_stylesheet_doc(document)
30
+ *
31
+ * Parse a stylesheet from +document+.
32
+ */
33
+ static VALUE parse_stylesheet_doc(VALUE klass, VALUE xmldocobj)
34
+ {
35
+ xmlDocPtr xml ;
36
+ xsltStylesheetPtr ss ;
37
+ Data_Get_Struct(xmldocobj, xmlDoc, xml);
38
+ exsltRegisterAll();
39
+
40
+ xsltSetGenericErrorFunc(NULL, xslt_generic_error_handler);
41
+
42
+ ss = xsltParseStylesheetDoc(xmlCopyDoc(xml, 1)); /* 1 => recursive */
43
+
44
+ xsltSetGenericErrorFunc(NULL, NULL);
45
+
46
+ return Data_Wrap_Struct(klass, NULL, dealloc, ss);
47
+ }
48
+
49
+
50
+ /*
51
+ * call-seq:
52
+ * serialize(document)
53
+ *
54
+ * Serialize +document+ to an xml string.
55
+ */
56
+ static VALUE serialize(VALUE self, VALUE xmlobj)
57
+ {
58
+ xmlDocPtr xml ;
59
+ xsltStylesheetPtr ss ;
60
+ xmlChar* doc_ptr ;
61
+ int doc_len ;
62
+ VALUE rval ;
63
+
64
+ Data_Get_Struct(xmlobj, xmlDoc, xml);
65
+ Data_Get_Struct(self, xsltStylesheet, ss);
66
+ xsltSaveResultToString(&doc_ptr, &doc_len, xml, ss);
67
+ rval = NOKOGIRI_STR_NEW(doc_ptr, doc_len);
68
+ xmlFree(doc_ptr);
69
+ return rval ;
70
+ }
71
+
72
+ /*
73
+ * call-seq:
74
+ * transform(document, params = [])
75
+ *
76
+ * Apply an XSLT stylesheet to an XML::Document.
77
+ * +params+ is an array of strings used as XSLT parameters.
78
+ * returns Nokogiri::XML::Document
79
+ *
80
+ * Example:
81
+ *
82
+ * doc = Nokogiri::XML(File.read(ARGV[0]))
83
+ * xslt = Nokogiri::XSLT(File.read(ARGV[1]))
84
+ * puts xslt.transform(doc, ['key', 'value'])
85
+ *
86
+ */
87
+ static VALUE transform(int argc, VALUE* argv, VALUE self)
88
+ {
89
+ VALUE xmldoc, paramobj ;
90
+ xmlDocPtr xml ;
91
+ xmlDocPtr result ;
92
+ xsltStylesheetPtr ss ;
93
+ const char** params ;
94
+ int param_len, j ;
95
+
96
+ rb_scan_args(argc, argv, "11", &xmldoc, &paramobj);
97
+ if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0) ; }
98
+
99
+ Data_Get_Struct(xmldoc, xmlDoc, xml);
100
+ Data_Get_Struct(self, xsltStylesheet, ss);
101
+
102
+ param_len = RARRAY_LEN(paramobj);
103
+ params = calloc((size_t)param_len+1, sizeof(char*));
104
+ for (j = 0 ; j < param_len ; j++) {
105
+ VALUE entry = rb_ary_entry(paramobj, j);
106
+ const char * ptr = StringValuePtr(entry);
107
+ params[j] = ptr;
108
+ }
109
+ params[param_len] = 0 ;
110
+
111
+ result = xsltApplyStylesheet(ss, xml, params);
112
+ free(params);
113
+
114
+ if (!result) rb_raise(rb_eRuntimeError, "could not perform xslt transform on document");
115
+
116
+ return Nokogiri_wrap_xml_document(0, result) ;
117
+ }
118
+
119
+ VALUE cNokogiriXsltStylesheet ;
120
+ void init_xslt_stylesheet()
121
+ {
122
+ VALUE nokogiri = rb_define_module("Nokogiri");
123
+ VALUE xslt = rb_define_module_under(nokogiri, "XSLT");
124
+ VALUE klass = rb_define_class_under(xslt, "Stylesheet", rb_cObject);
125
+
126
+ cNokogiriXsltStylesheet = klass;
127
+
128
+ rb_define_singleton_method(klass, "parse_stylesheet_doc", parse_stylesheet_doc, 1);
129
+ rb_define_method(klass, "serialize", serialize, 1);
130
+ rb_define_method(klass, "transform", transform, -1);
131
+ }
@@ -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,123 @@
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 ENV['NOKOGIRI_FFI']
10
+ require 'ffi'
11
+ require 'nokogiri/ffi/libxml'
12
+ elsif defined? RUBY_ENGINE && RUBY_ENGINE == "jruby"
13
+ require 'isorelax.jar'
14
+ require 'jing.jar'
15
+ require 'nekohtml.jar'
16
+ require 'nekodtd.jar'
17
+ require 'xercesImpl.jar'
18
+ require 'nokogiri/nokogiri'
19
+ else
20
+ require 'nokogiri/nokogiri'
21
+ end
22
+
23
+ require 'nokogiri/version'
24
+ require 'nokogiri/version_warning'
25
+ require 'nokogiri/syntax_error'
26
+ require 'nokogiri/xml'
27
+ require 'nokogiri/xslt'
28
+ require 'nokogiri/html'
29
+ require 'nokogiri/decorators/slop'
30
+ require 'nokogiri/css'
31
+ require 'nokogiri/html/builder'
32
+
33
+ # Nokogiri parses and searches XML/HTML very quickly, and also has
34
+ # correctly implemented CSS3 selector support as well as XPath support.
35
+ #
36
+ # Parsing a document returns either a Nokogiri::XML::Document, or a
37
+ # Nokogiri::HTML::Document depending on the kind of document you parse.
38
+ #
39
+ # Here is an example:
40
+ #
41
+ # require 'nokogiri'
42
+ # require 'open-uri'
43
+ #
44
+ # # Get a Nokogiri::HTML:Document for the page we’re interested in...
45
+ #
46
+ # doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))
47
+ #
48
+ # # Do funky things with it using Nokogiri::XML::Node methods...
49
+ #
50
+ # ####
51
+ # # Search for nodes by css
52
+ # doc.css('h3.r a.l').each do |link|
53
+ # puts link.content
54
+ # end
55
+ #
56
+ # See Nokogiri::XML::Node#css for more information about CSS searching.
57
+ # See Nokogiri::XML::Node#xpath for more information about XPath searching.
58
+ module Nokogiri
59
+ class << self
60
+ ###
61
+ # Parse an HTML or XML document. +string+ contains the document.
62
+ def parse string, url = nil, encoding = nil, options = nil
63
+ doc =
64
+ if string.respond_to?(:read) ||
65
+ string =~ /^\s*<[^Hh>]*html/i # Probably html
66
+ Nokogiri::HTML(
67
+ string,
68
+ url,
69
+ encoding, options || XML::ParseOptions::DEFAULT_HTML
70
+ )
71
+ else
72
+ Nokogiri::XML(string, url, encoding,
73
+ options || XML::ParseOptions::DEFAULT_XML)
74
+ end
75
+ yield doc if block_given?
76
+ doc
77
+ end
78
+
79
+ ###
80
+ # Create a new Nokogiri::XML::DocumentFragment
81
+ def make input = nil, opts = {}, &blk
82
+ if input
83
+ Nokogiri::HTML.fragment(input).children.first
84
+ else
85
+ Nokogiri(&blk)
86
+ end
87
+ end
88
+
89
+ ###
90
+ # Parse a document and add the Slop decorator. The Slop decorator
91
+ # implements method_missing such that methods may be used instead of CSS
92
+ # or XPath. For example:
93
+ #
94
+ # doc = Nokogiri::Slop(<<-eohtml)
95
+ # <html>
96
+ # <body>
97
+ # <p>first</p>
98
+ # <p>second</p>
99
+ # </body>
100
+ # </html>
101
+ # eohtml
102
+ # assert_equal('second', doc.html.body.p[1].text)
103
+ #
104
+ def Slop(*args, &block)
105
+ Nokogiri(*args, &block).slop!
106
+ end
107
+ end
108
+ end
109
+
110
+ ###
111
+ # Parser a document contained in +args+. Nokogiri will try to guess what
112
+ # type of document you are attempting to parse. For more information, see
113
+ # Nokogiri.parse
114
+ #
115
+ # To specify the type of document, use Nokogiri.XML or Nokogiri.HTML.
116
+ def Nokogiri(*args, &block)
117
+ if block_given?
118
+ builder = Nokogiri::HTML::Builder.new(&block)
119
+ return builder.doc.root
120
+ else
121
+ Nokogiri.parse(*args)
122
+ end
123
+ end
@@ -0,0 +1,25 @@
1
+ require 'nokogiri/css/node'
2
+ require 'nokogiri/css/xpath_visitor'
3
+ require 'nokogiri/css/generated_parser'
4
+ require 'nokogiri/css/generated_tokenizer'
5
+ require 'nokogiri/css/tokenizer'
6
+ require 'nokogiri/css/parser'
7
+ require 'nokogiri/css/syntax_error'
8
+
9
+ module Nokogiri
10
+ module CSS
11
+ class << self
12
+ ###
13
+ # Parse this CSS selector in +selector+. Returns an AST.
14
+ def parse selector
15
+ Parser.new.parse selector
16
+ end
17
+
18
+ ###
19
+ # Get the XPath for +selector+.
20
+ def xpath_for selector, options={}
21
+ Parser.new(options[:ns] || {}).xpath_for selector, options
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,659 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.4.6
4
+ # from Racc grammer file "".
5
+ #
6
+
7
+ require 'racc/parser.rb'
8
+
9
+
10
+ module Nokogiri
11
+ module CSS
12
+ class GeneratedParser < Racc::Parser
13
+ ##### State transition tables begin ###
14
+
15
+ racc_action_table = [
16
+ 3, 55, 26, 21, 12, 24, 56, 3, 57, 1,
17
+ 73, 12, 41, 56, 3, 23, 1, 79, 12, 18,
18
+ 91, 90, 4, 1, 9, 10, 18, 13, 16, 4,
19
+ 12, 9, 10, 18, 13, 16, 4, 12, 9, 10,
20
+ 3, 13, 16, 41, 12, 41, 60, 61, 4, 1,
21
+ 63, 10, 12, 44, 16, 4, 12, 12, 10, 18,
22
+ 3, 16, 4, 3, 9, 10, 80, 13, 16, 27,
23
+ 4, 28, 48, 10, 4, 4, 16, 10, 10, 18,
24
+ 16, 16, 18, 12, 9, 58, 61, 9, 26, 51,
25
+ 57, 53, 26, 51, 81, 53, 82, 66, 68, -22,
26
+ 62, 4, 66, 68, 10, 85, 86, 16, 67, 69,
27
+ 70, 59, 72, 67, 69, 70, 64, 72, 32, 34,
28
+ 36, 64, 26, 51, 54, 53, 26, 51, 31, 53,
29
+ 33, 35, 89, 4, 92, 93, 94 ]
30
+
31
+ racc_action_check = [
32
+ 0, 20, 3, 3, 0, 3, 43, 56, 51, 0,
33
+ 28, 56, 39, 20, 9, 3, 56, 43, 9, 0,
34
+ 71, 71, 0, 9, 0, 0, 56, 0, 0, 56,
35
+ 7, 56, 56, 9, 56, 56, 9, 6, 9, 9,
36
+ 30, 9, 9, 11, 30, 7, 24, 24, 7, 30,
37
+ 26, 7, 8, 10, 7, 6, 41, 17, 6, 30,
38
+ 4, 6, 30, 16, 30, 30, 52, 30, 30, 4,
39
+ 8, 4, 16, 8, 41, 17, 8, 41, 17, 4,
40
+ 41, 17, 16, 15, 4, 21, 53, 16, 61, 61,
41
+ 21, 61, 18, 18, 54, 18, 55, 29, 29, 1,
42
+ 25, 15, 27, 27, 15, 58, 60, 15, 29, 29,
43
+ 29, 22, 29, 27, 27, 27, 29, 27, 5, 5,
44
+ 5, 27, 57, 57, 19, 57, 63, 63, 5, 63,
45
+ 5, 5, 65, 14, 74, 78, 86 ]
46
+
47
+ racc_action_pointer = [
48
+ -2, 71, nil, -8, 58, 111, 31, 24, 46, 12,
49
+ 42, 22, nil, nil, 109, 77, 61, 51, 82, 96,
50
+ 1, 78, 88, nil, 35, 77, 38, 99, -15, 94,
51
+ 38, nil, nil, nil, nil, nil, nil, nil, nil, -9,
52
+ nil, 50, nil, -6, nil, nil, nil, nil, nil, nil,
53
+ nil, -4, 43, 74, 83, 96, 5, 112, 92, nil,
54
+ 99, 78, nil, 116, nil, 107, nil, nil, nil, nil,
55
+ nil, 10, nil, nil, 109, nil, nil, nil, 112, nil,
56
+ nil, nil, nil, nil, nil, nil, 123, nil, nil, nil,
57
+ nil, nil, nil, nil, nil ]
58
+
59
+ racc_action_default = [
60
+ -23, -20, -2, -66, -66, -17, -52, -44, -49, -23,
61
+ -66, -15, -53, -21, -12, -51, -66, -50, -66, -66,
62
+ -66, -37, -66, -27, -35, -66, -36, -56, -66, -56,
63
+ -23, -5, -3, -8, -4, -7, -6, -48, -9, -43,
64
+ -11, -66, -45, -66, -18, -14, -13, -47, -42, -41,
65
+ -46, -37, -66, -35, -66, -66, -23, -66, -66, -28,
66
+ -40, -66, -29, -66, -57, -66, -62, -58, -63, -59,
67
+ -60, -66, -61, -26, -66, -16, -10, -65, -66, -31,
68
+ -30, -19, 95, -1, -34, -39, -66, -32, -33, -24,
69
+ -54, -55, -25, -64, -38 ]
70
+
71
+ racc_goto_table = [
72
+ 22, 37, 39, 42, 75, 40, 29, 20, 30, 45,
73
+ 47, 65, 50, 74, 38, 52, 43, 46, 49, 25,
74
+ 78, nil, nil, nil, nil, nil, nil, nil, nil, nil,
75
+ 83, nil, nil, nil, nil, nil, 77, 76, nil, nil,
76
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
77
+ nil, nil, nil, nil, 84, nil, nil, nil, 87, nil,
78
+ 88 ]
79
+
80
+ racc_goto_check = [
81
+ 14, 7, 7, 7, 2, 8, 9, 1, 3, 8,
82
+ 7, 13, 7, 13, 6, 14, 1, 10, 9, 15,
83
+ 19, nil, nil, nil, nil, nil, nil, nil, nil, nil,
84
+ 2, nil, nil, nil, nil, nil, 7, 8, nil, nil,
85
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
86
+ nil, nil, nil, nil, 14, nil, nil, nil, 14, nil,
87
+ 14 ]
88
+
89
+ racc_goto_pointer = [
90
+ nil, 7, -26, 3, nil, nil, 7, -5, -2, 2,
91
+ 3, nil, nil, -16, -3, 16, nil, nil, nil, -21 ]
92
+
93
+ racc_goto_default = [
94
+ nil, nil, 2, nil, 5, 7, nil, 11, nil, 14,
95
+ 15, 17, 19, nil, nil, nil, 6, 8, 71, nil ]
96
+
97
+ racc_reduce_table = [
98
+ 0, 0, :racc_error,
99
+ 3, 32, :_reduce_1,
100
+ 1, 32, :_reduce_2,
101
+ 1, 34, :_reduce_3,
102
+ 1, 34, :_reduce_4,
103
+ 1, 34, :_reduce_5,
104
+ 1, 34, :_reduce_6,
105
+ 1, 34, :_reduce_7,
106
+ 1, 34, :_reduce_8,
107
+ 2, 35, :_reduce_9,
108
+ 3, 35, :_reduce_10,
109
+ 2, 35, :_reduce_11,
110
+ 1, 35, :_reduce_none,
111
+ 2, 35, :_reduce_13,
112
+ 2, 35, :_reduce_14,
113
+ 1, 35, :_reduce_15,
114
+ 3, 33, :_reduce_16,
115
+ 1, 33, :_reduce_none,
116
+ 2, 42, :_reduce_18,
117
+ 3, 36, :_reduce_19,
118
+ 1, 36, :_reduce_20,
119
+ 1, 36, :_reduce_21,
120
+ 1, 43, :_reduce_22,
121
+ 0, 43, :_reduce_none,
122
+ 4, 41, :_reduce_24,
123
+ 4, 41, :_reduce_25,
124
+ 3, 41, :_reduce_26,
125
+ 2, 40, :_reduce_27,
126
+ 3, 40, :_reduce_28,
127
+ 3, 40, :_reduce_29,
128
+ 3, 40, :_reduce_30,
129
+ 3, 40, :_reduce_31,
130
+ 3, 45, :_reduce_32,
131
+ 3, 45, :_reduce_33,
132
+ 3, 45, :_reduce_34,
133
+ 1, 45, :_reduce_none,
134
+ 1, 45, :_reduce_none,
135
+ 1, 45, :_reduce_37,
136
+ 4, 46, :_reduce_38,
137
+ 3, 46, :_reduce_39,
138
+ 2, 46, :_reduce_40,
139
+ 2, 47, :_reduce_41,
140
+ 2, 47, :_reduce_42,
141
+ 1, 37, :_reduce_none,
142
+ 0, 37, :_reduce_none,
143
+ 2, 38, :_reduce_45,
144
+ 2, 38, :_reduce_46,
145
+ 2, 38, :_reduce_47,
146
+ 2, 38, :_reduce_48,
147
+ 1, 38, :_reduce_none,
148
+ 1, 38, :_reduce_none,
149
+ 1, 38, :_reduce_none,
150
+ 1, 38, :_reduce_none,
151
+ 1, 48, :_reduce_53,
152
+ 2, 44, :_reduce_54,
153
+ 2, 44, :_reduce_55,
154
+ 0, 44, :_reduce_none,
155
+ 1, 49, :_reduce_57,
156
+ 1, 49, :_reduce_58,
157
+ 1, 49, :_reduce_59,
158
+ 1, 49, :_reduce_60,
159
+ 1, 49, :_reduce_61,
160
+ 1, 49, :_reduce_62,
161
+ 1, 49, :_reduce_63,
162
+ 3, 39, :_reduce_64,
163
+ 1, 50, :_reduce_none ]
164
+
165
+ racc_reduce_n = 66
166
+
167
+ racc_shift_n = 95
168
+
169
+ racc_token_table = {
170
+ false => 0,
171
+ :error => 1,
172
+ :FUNCTION => 2,
173
+ :INCLUDES => 3,
174
+ :DASHMATCH => 4,
175
+ :LBRACE => 5,
176
+ :HASH => 6,
177
+ :PLUS => 7,
178
+ :GREATER => 8,
179
+ :S => 9,
180
+ :STRING => 10,
181
+ :IDENT => 11,
182
+ :COMMA => 12,
183
+ :NUMBER => 13,
184
+ :PREFIXMATCH => 14,
185
+ :SUFFIXMATCH => 15,
186
+ :SUBSTRINGMATCH => 16,
187
+ :TILDE => 17,
188
+ :NOT_EQUAL => 18,
189
+ :SLASH => 19,
190
+ :DOUBLESLASH => 20,
191
+ :NOT => 21,
192
+ :EQUAL => 22,
193
+ :RPAREN => 23,
194
+ :LSQUARE => 24,
195
+ :RSQUARE => 25,
196
+ :HAS => 26,
197
+ "." => 27,
198
+ "|" => 28,
199
+ "*" => 29,
200
+ ":" => 30 }
201
+
202
+ racc_nt_base = 31
203
+
204
+ racc_use_result_var = true
205
+
206
+ Racc_arg = [
207
+ racc_action_table,
208
+ racc_action_check,
209
+ racc_action_default,
210
+ racc_action_pointer,
211
+ racc_goto_table,
212
+ racc_goto_check,
213
+ racc_goto_default,
214
+ racc_goto_pointer,
215
+ racc_nt_base,
216
+ racc_reduce_table,
217
+ racc_token_table,
218
+ racc_shift_n,
219
+ racc_reduce_n,
220
+ racc_use_result_var ]
221
+
222
+ Racc_token_to_s_table = [
223
+ "$end",
224
+ "error",
225
+ "FUNCTION",
226
+ "INCLUDES",
227
+ "DASHMATCH",
228
+ "LBRACE",
229
+ "HASH",
230
+ "PLUS",
231
+ "GREATER",
232
+ "S",
233
+ "STRING",
234
+ "IDENT",
235
+ "COMMA",
236
+ "NUMBER",
237
+ "PREFIXMATCH",
238
+ "SUFFIXMATCH",
239
+ "SUBSTRINGMATCH",
240
+ "TILDE",
241
+ "NOT_EQUAL",
242
+ "SLASH",
243
+ "DOUBLESLASH",
244
+ "NOT",
245
+ "EQUAL",
246
+ "RPAREN",
247
+ "LSQUARE",
248
+ "RSQUARE",
249
+ "HAS",
250
+ "\".\"",
251
+ "\"|\"",
252
+ "\"*\"",
253
+ "\":\"",
254
+ "$start",
255
+ "selector",
256
+ "simple_selector_1toN",
257
+ "combinator",
258
+ "simple_selector",
259
+ "element_name",
260
+ "hcap_0toN",
261
+ "hcap_1toN",
262
+ "negation",
263
+ "function",
264
+ "attrib",
265
+ "class",
266
+ "namespace",
267
+ "attrib_val_0or1",
268
+ "expr",
269
+ "an_plus_b",
270
+ "pseudo",
271
+ "attribute_id",
272
+ "eql_incl_dash",
273
+ "negation_arg" ]
274
+
275
+ Racc_debug_parser = false
276
+
277
+ ##### State transition tables end #####
278
+
279
+ # reduce 0 omitted
280
+
281
+ def _reduce_1(val, _values, result)
282
+ result = [val.first, val.last].flatten
283
+
284
+ result
285
+ end
286
+
287
+ def _reduce_2(val, _values, result)
288
+ result = val.flatten
289
+ result
290
+ end
291
+
292
+ def _reduce_3(val, _values, result)
293
+ result = :DIRECT_ADJACENT_SELECTOR
294
+ result
295
+ end
296
+
297
+ def _reduce_4(val, _values, result)
298
+ result = :CHILD_SELECTOR
299
+ result
300
+ end
301
+
302
+ def _reduce_5(val, _values, result)
303
+ result = :PRECEDING_SELECTOR
304
+ result
305
+ end
306
+
307
+ def _reduce_6(val, _values, result)
308
+ result = :DESCENDANT_SELECTOR
309
+ result
310
+ end
311
+
312
+ def _reduce_7(val, _values, result)
313
+ result = :DESCENDANT_SELECTOR
314
+ result
315
+ end
316
+
317
+ def _reduce_8(val, _values, result)
318
+ result = :CHILD_SELECTOR
319
+ result
320
+ end
321
+
322
+ def _reduce_9(val, _values, result)
323
+ result = if val[1].nil?
324
+ val.first
325
+ else
326
+ Node.new(:CONDITIONAL_SELECTOR, [val.first, val[1]])
327
+ end
328
+
329
+ result
330
+ end
331
+
332
+ def _reduce_10(val, _values, result)
333
+ result = Node.new(:CONDITIONAL_SELECTOR,
334
+ [
335
+ val.first,
336
+ Node.new(:COMBINATOR, [val[1], val.last])
337
+ ]
338
+ )
339
+
340
+ result
341
+ end
342
+
343
+ def _reduce_11(val, _values, result)
344
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
345
+
346
+ result
347
+ end
348
+
349
+ # reduce 12 omitted
350
+
351
+ def _reduce_13(val, _values, result)
352
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
353
+
354
+ result
355
+ end
356
+
357
+ def _reduce_14(val, _values, result)
358
+ result = Node.new(:CONDITIONAL_SELECTOR,
359
+ [
360
+ Node.new(:ELEMENT_NAME, ['*']),
361
+ Node.new(:COMBINATOR, val)
362
+ ]
363
+ )
364
+
365
+ result
366
+ end
367
+
368
+ def _reduce_15(val, _values, result)
369
+ result = Node.new(:CONDITIONAL_SELECTOR,
370
+ [Node.new(:ELEMENT_NAME, ['*']), val.first]
371
+ )
372
+
373
+ result
374
+ end
375
+
376
+ def _reduce_16(val, _values, result)
377
+ result = Node.new(val[1], [val.first, val.last])
378
+
379
+ result
380
+ end
381
+
382
+ # reduce 17 omitted
383
+
384
+ def _reduce_18(val, _values, result)
385
+ result = Node.new(:CLASS_CONDITION, [val[1]])
386
+ result
387
+ end
388
+
389
+ def _reduce_19(val, _values, result)
390
+ result = Node.new(:ELEMENT_NAME,
391
+ [[val.first, val.last].compact.join(':')]
392
+ )
393
+
394
+ result
395
+ end
396
+
397
+ def _reduce_20(val, _values, result)
398
+ name = @namespaces.key?('xmlns') ? "xmlns:#{val.first}" : val.first
399
+ result = Node.new(:ELEMENT_NAME, [name])
400
+
401
+ result
402
+ end
403
+
404
+ def _reduce_21(val, _values, result)
405
+ result = Node.new(:ELEMENT_NAME, val)
406
+ result
407
+ end
408
+
409
+ def _reduce_22(val, _values, result)
410
+ result = val[0]
411
+ result
412
+ end
413
+
414
+ # reduce 23 omitted
415
+
416
+ def _reduce_24(val, _values, result)
417
+ result = Node.new(:ATTRIBUTE_CONDITION,
418
+ [Node.new(:ELEMENT_NAME, [val[1]])] + (val[2] || [])
419
+ )
420
+
421
+ result
422
+ end
423
+
424
+ def _reduce_25(val, _values, result)
425
+ result = Node.new(:ATTRIBUTE_CONDITION,
426
+ [val[1]] + (val[2] || [])
427
+ )
428
+
429
+ result
430
+ end
431
+
432
+ def _reduce_26(val, _values, result)
433
+ # Non standard, but hpricot supports it.
434
+ result = Node.new(:PSEUDO_CLASS,
435
+ [Node.new(:FUNCTION, ['nth-child(', val[1]])]
436
+ )
437
+
438
+ result
439
+ end
440
+
441
+ def _reduce_27(val, _values, result)
442
+ result = Node.new(:FUNCTION, [val.first.strip])
443
+
444
+ result
445
+ end
446
+
447
+ def _reduce_28(val, _values, result)
448
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
449
+
450
+ result
451
+ end
452
+
453
+ def _reduce_29(val, _values, result)
454
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
455
+
456
+ result
457
+ end
458
+
459
+ def _reduce_30(val, _values, result)
460
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
461
+
462
+ result
463
+ end
464
+
465
+ def _reduce_31(val, _values, result)
466
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
467
+
468
+ result
469
+ end
470
+
471
+ def _reduce_32(val, _values, result)
472
+ result = [val.first, val.last]
473
+ result
474
+ end
475
+
476
+ def _reduce_33(val, _values, result)
477
+ result = [val.first, val.last]
478
+ result
479
+ end
480
+
481
+ def _reduce_34(val, _values, result)
482
+ result = [val.first, val.last]
483
+ result
484
+ end
485
+
486
+ # reduce 35 omitted
487
+
488
+ # reduce 36 omitted
489
+
490
+ def _reduce_37(val, _values, result)
491
+ if val[0] == 'even'
492
+ val = ["2","n","+","0"]
493
+ result = Node.new(:AN_PLUS_B, val)
494
+ elsif val[0] == 'odd'
495
+ val = ["2","n","+","1"]
496
+ result = Node.new(:AN_PLUS_B, val)
497
+ else
498
+ # This is not CSS standard. It allows us to support this:
499
+ # assert_xpath("//a[foo(., @href)]", @parser.parse('a:foo(@href)'))
500
+ # assert_xpath("//a[foo(., @a, b)]", @parser.parse('a:foo(@a, b)'))
501
+ # assert_xpath("//a[foo(., a, 10)]", @parser.parse('a:foo(a, 10)'))
502
+ result = val
503
+ end
504
+
505
+ result
506
+ end
507
+
508
+ def _reduce_38(val, _values, result)
509
+ if val[1] == 'n'
510
+ result = Node.new(:AN_PLUS_B, val)
511
+ else
512
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
513
+ end
514
+
515
+ result
516
+ end
517
+
518
+ def _reduce_39(val, _values, result)
519
+ # n+3, -n+3
520
+ if val[0] == 'n'
521
+ val.unshift("1")
522
+ result = Node.new(:AN_PLUS_B, val)
523
+ elsif val[0] == '-n'
524
+ val[0] = 'n'
525
+ val.unshift("-1")
526
+ result = Node.new(:AN_PLUS_B, val)
527
+ else
528
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
529
+ end
530
+
531
+ result
532
+ end
533
+
534
+ def _reduce_40(val, _values, result)
535
+ if val[1] == 'n'
536
+ val << "+"
537
+ val << "0"
538
+ result = Node.new(:AN_PLUS_B, val)
539
+ else
540
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
541
+ end
542
+
543
+ result
544
+ end
545
+
546
+ def _reduce_41(val, _values, result)
547
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
548
+
549
+ result
550
+ end
551
+
552
+ def _reduce_42(val, _values, result)
553
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
554
+ result
555
+ end
556
+
557
+ # reduce 43 omitted
558
+
559
+ # reduce 44 omitted
560
+
561
+ def _reduce_45(val, _values, result)
562
+ result = Node.new(:COMBINATOR, val)
563
+
564
+ result
565
+ end
566
+
567
+ def _reduce_46(val, _values, result)
568
+ result = Node.new(:COMBINATOR, val)
569
+
570
+ result
571
+ end
572
+
573
+ def _reduce_47(val, _values, result)
574
+ result = Node.new(:COMBINATOR, val)
575
+
576
+ result
577
+ end
578
+
579
+ def _reduce_48(val, _values, result)
580
+ result = Node.new(:COMBINATOR, val)
581
+
582
+ result
583
+ end
584
+
585
+ # reduce 49 omitted
586
+
587
+ # reduce 50 omitted
588
+
589
+ # reduce 51 omitted
590
+
591
+ # reduce 52 omitted
592
+
593
+ def _reduce_53(val, _values, result)
594
+ result = Node.new(:ID, val)
595
+ result
596
+ end
597
+
598
+ def _reduce_54(val, _values, result)
599
+ result = [val.first, val[1]]
600
+ result
601
+ end
602
+
603
+ def _reduce_55(val, _values, result)
604
+ result = [val.first, val[1]]
605
+ result
606
+ end
607
+
608
+ # reduce 56 omitted
609
+
610
+ def _reduce_57(val, _values, result)
611
+ result = :equal
612
+ result
613
+ end
614
+
615
+ def _reduce_58(val, _values, result)
616
+ result = :prefix_match
617
+ result
618
+ end
619
+
620
+ def _reduce_59(val, _values, result)
621
+ result = :suffix_match
622
+ result
623
+ end
624
+
625
+ def _reduce_60(val, _values, result)
626
+ result = :substring_match
627
+ result
628
+ end
629
+
630
+ def _reduce_61(val, _values, result)
631
+ result = :not_equal
632
+ result
633
+ end
634
+
635
+ def _reduce_62(val, _values, result)
636
+ result = :includes
637
+ result
638
+ end
639
+
640
+ def _reduce_63(val, _values, result)
641
+ result = :dash_match
642
+ result
643
+ end
644
+
645
+ def _reduce_64(val, _values, result)
646
+ result = Node.new(:NOT, [val[1]])
647
+
648
+ result
649
+ end
650
+
651
+ # reduce 65 omitted
652
+
653
+ def _reduce_none(val, _values, result)
654
+ val[0]
655
+ end
656
+
657
+ end # class GeneratedParser
658
+ end # module CSS
659
+ end # module Nokogiri