superfeedr-nokogiri 1.4.0.20091116183308

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 (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