superfeedr-nokogiri 1.4.0.20091116183308

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