jwagener-nokogiri 1.4.1

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