nokogiri 1.0.0 → 1.6.8.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

Files changed (309) hide show
  1. checksums.yaml +7 -0
  2. data/.autotest +26 -0
  3. data/.cross_rubies +9 -0
  4. data/.editorconfig +17 -0
  5. data/.gemtest +0 -0
  6. data/.travis.yml +51 -0
  7. data/CHANGELOG.rdoc +1160 -0
  8. data/CONTRIBUTING.md +42 -0
  9. data/C_CODING_STYLE.rdoc +33 -0
  10. data/Gemfile +22 -0
  11. data/LICENSE.txt +31 -0
  12. data/Manifest.txt +284 -40
  13. data/README.md +166 -0
  14. data/ROADMAP.md +111 -0
  15. data/Rakefile +310 -199
  16. data/STANDARD_RESPONSES.md +47 -0
  17. data/Y_U_NO_GEMSPEC.md +155 -0
  18. data/appveyor.yml +22 -0
  19. data/bin/nokogiri +118 -0
  20. data/build_all +45 -0
  21. data/dependencies.yml +29 -0
  22. data/ext/nokogiri/depend +358 -0
  23. data/ext/nokogiri/extconf.rb +664 -34
  24. data/ext/nokogiri/html_document.c +120 -33
  25. data/ext/nokogiri/html_document.h +1 -1
  26. data/ext/nokogiri/html_element_description.c +279 -0
  27. data/ext/nokogiri/html_element_description.h +10 -0
  28. data/ext/nokogiri/html_entity_lookup.c +32 -0
  29. data/ext/nokogiri/html_entity_lookup.h +8 -0
  30. data/ext/nokogiri/html_sax_parser_context.c +116 -0
  31. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  32. data/ext/nokogiri/html_sax_push_parser.c +87 -0
  33. data/ext/nokogiri/html_sax_push_parser.h +9 -0
  34. data/ext/nokogiri/nokogiri.c +145 -0
  35. data/ext/nokogiri/nokogiri.h +131 -0
  36. data/ext/nokogiri/xml_attr.c +94 -0
  37. data/ext/nokogiri/xml_attr.h +9 -0
  38. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  39. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  40. data/ext/nokogiri/xml_cdata.c +23 -19
  41. data/ext/nokogiri/xml_cdata.h +1 -1
  42. data/ext/nokogiri/xml_comment.c +69 -0
  43. data/ext/nokogiri/xml_comment.h +9 -0
  44. data/ext/nokogiri/xml_document.c +501 -54
  45. data/ext/nokogiri/xml_document.h +14 -1
  46. data/ext/nokogiri/xml_document_fragment.c +48 -0
  47. data/ext/nokogiri/xml_document_fragment.h +10 -0
  48. data/ext/nokogiri/xml_dtd.c +109 -24
  49. data/ext/nokogiri/xml_dtd.h +3 -1
  50. data/ext/nokogiri/xml_element_content.c +123 -0
  51. data/ext/nokogiri/xml_element_content.h +10 -0
  52. data/ext/nokogiri/xml_element_decl.c +69 -0
  53. data/ext/nokogiri/xml_element_decl.h +9 -0
  54. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  55. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  56. data/ext/nokogiri/xml_entity_decl.c +110 -0
  57. data/ext/nokogiri/xml_entity_decl.h +10 -0
  58. data/ext/nokogiri/xml_entity_reference.c +52 -0
  59. data/ext/nokogiri/xml_entity_reference.h +9 -0
  60. data/ext/nokogiri/xml_io.c +60 -0
  61. data/ext/nokogiri/xml_io.h +11 -0
  62. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  63. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  64. data/ext/nokogiri/xml_namespace.c +117 -0
  65. data/ext/nokogiri/xml_namespace.h +13 -0
  66. data/ext/nokogiri/xml_node.c +1285 -315
  67. data/ext/nokogiri/xml_node.h +4 -6
  68. data/ext/nokogiri/xml_node_set.c +415 -54
  69. data/ext/nokogiri/xml_node_set.h +6 -2
  70. data/ext/nokogiri/xml_processing_instruction.c +56 -0
  71. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  72. data/ext/nokogiri/xml_reader.c +316 -77
  73. data/ext/nokogiri/xml_reader.h +1 -1
  74. data/ext/nokogiri/xml_relax_ng.c +161 -0
  75. data/ext/nokogiri/xml_relax_ng.h +9 -0
  76. data/ext/nokogiri/xml_sax_parser.c +215 -80
  77. data/ext/nokogiri/xml_sax_parser.h +30 -1
  78. data/ext/nokogiri/xml_sax_parser_context.c +262 -0
  79. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  80. data/ext/nokogiri/xml_sax_push_parser.c +115 -0
  81. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  82. data/ext/nokogiri/xml_schema.c +205 -0
  83. data/ext/nokogiri/xml_schema.h +9 -0
  84. data/ext/nokogiri/xml_syntax_error.c +45 -175
  85. data/ext/nokogiri/xml_syntax_error.h +4 -2
  86. data/ext/nokogiri/xml_text.c +37 -14
  87. data/ext/nokogiri/xml_text.h +1 -1
  88. data/ext/nokogiri/xml_xpath_context.c +230 -13
  89. data/ext/nokogiri/xml_xpath_context.h +2 -1
  90. data/ext/nokogiri/xslt_stylesheet.c +196 -34
  91. data/ext/nokogiri/xslt_stylesheet.h +6 -1
  92. data/lib/nokogiri/css/node.rb +18 -61
  93. data/lib/nokogiri/css/parser.rb +725 -17
  94. data/lib/nokogiri/css/parser.y +126 -63
  95. data/lib/nokogiri/css/parser_extras.rb +91 -0
  96. data/lib/nokogiri/css/syntax_error.rb +7 -0
  97. data/lib/nokogiri/css/tokenizer.rb +148 -5
  98. data/lib/nokogiri/css/tokenizer.rex +31 -39
  99. data/lib/nokogiri/css/xpath_visitor.rb +109 -51
  100. data/lib/nokogiri/css.rb +24 -3
  101. data/lib/nokogiri/decorators/slop.rb +42 -0
  102. data/lib/nokogiri/html/builder.rb +27 -1
  103. data/lib/nokogiri/html/document.rb +329 -3
  104. data/lib/nokogiri/html/document_fragment.rb +39 -0
  105. data/lib/nokogiri/html/element_description.rb +23 -0
  106. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  107. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  108. data/lib/nokogiri/html/sax/parser.rb +35 -4
  109. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  110. data/lib/nokogiri/html/sax/push_parser.rb +36 -0
  111. data/lib/nokogiri/html.rb +18 -76
  112. data/lib/nokogiri/syntax_error.rb +4 -0
  113. data/lib/nokogiri/version.rb +106 -1
  114. data/lib/nokogiri/xml/attr.rb +14 -0
  115. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  116. data/lib/nokogiri/xml/builder.rb +395 -31
  117. data/lib/nokogiri/xml/cdata.rb +4 -2
  118. data/lib/nokogiri/xml/character_data.rb +7 -0
  119. data/lib/nokogiri/xml/document.rb +267 -12
  120. data/lib/nokogiri/xml/document_fragment.rb +149 -0
  121. data/lib/nokogiri/xml/dtd.rb +27 -1
  122. data/lib/nokogiri/xml/element_content.rb +36 -0
  123. data/lib/nokogiri/xml/element_decl.rb +13 -0
  124. data/lib/nokogiri/xml/entity_decl.rb +19 -0
  125. data/lib/nokogiri/xml/namespace.rb +13 -0
  126. data/lib/nokogiri/xml/node/save_options.rb +61 -0
  127. data/lib/nokogiri/xml/node.rb +748 -109
  128. data/lib/nokogiri/xml/node_set.rb +200 -72
  129. data/lib/nokogiri/xml/parse_options.rb +120 -0
  130. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  131. data/lib/nokogiri/xml/pp/node.rb +56 -0
  132. data/lib/nokogiri/xml/pp.rb +2 -0
  133. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  134. data/lib/nokogiri/xml/reader.rb +102 -4
  135. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  136. data/lib/nokogiri/xml/sax/document.rb +114 -2
  137. data/lib/nokogiri/xml/sax/parser.rb +97 -7
  138. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  139. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  140. data/lib/nokogiri/xml/sax.rb +2 -7
  141. data/lib/nokogiri/xml/schema.rb +63 -0
  142. data/lib/nokogiri/xml/searchable.rb +221 -0
  143. data/lib/nokogiri/xml/syntax_error.rb +27 -1
  144. data/lib/nokogiri/xml/text.rb +4 -1
  145. data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
  146. data/lib/nokogiri/xml/xpath.rb +4 -0
  147. data/lib/nokogiri/xml/xpath_context.rb +3 -1
  148. data/lib/nokogiri/xml.rb +45 -38
  149. data/lib/nokogiri/xslt/stylesheet.rb +19 -0
  150. data/lib/nokogiri/xslt.rb +47 -2
  151. data/lib/nokogiri.rb +117 -24
  152. data/lib/xsd/xmlparser/nokogiri.rb +102 -0
  153. data/patches/sort-patches-by-date +25 -0
  154. data/ports/archives/libxml2-2.9.4.tar.gz +0 -0
  155. data/ports/archives/libxslt-1.1.29.tar.gz +0 -0
  156. data/suppressions/README.txt +1 -0
  157. data/suppressions/nokogiri_ree-1.8.7.358.supp +61 -0
  158. data/suppressions/nokogiri_ruby-1.8.7.370.supp +0 -0
  159. data/suppressions/nokogiri_ruby-1.9.2.320.supp +28 -0
  160. data/suppressions/nokogiri_ruby-1.9.3.327.supp +28 -0
  161. data/tasks/test.rb +100 -0
  162. data/test/css/test_nthiness.rb +73 -6
  163. data/test/css/test_parser.rb +184 -39
  164. data/test/css/test_tokenizer.rb +72 -19
  165. data/test/css/test_xpath_visitor.rb +44 -2
  166. data/test/decorators/test_slop.rb +20 -0
  167. data/test/files/2ch.html +108 -0
  168. data/test/files/GH_1042.html +18 -0
  169. data/test/files/address_book.rlx +12 -0
  170. data/test/files/address_book.xml +10 -0
  171. data/test/files/atom.xml +344 -0
  172. data/test/files/bar/bar.xsd +4 -0
  173. data/test/files/bogus.xml +0 -0
  174. data/test/files/dont_hurt_em_why.xml +422 -0
  175. data/test/files/encoding.html +82 -0
  176. data/test/files/encoding.xhtml +84 -0
  177. data/test/files/exslt.xml +8 -0
  178. data/test/files/exslt.xslt +35 -0
  179. data/test/files/foo/foo.xsd +4 -0
  180. data/test/files/metacharset.html +10 -0
  181. data/test/files/namespace_pressure_test.xml +1684 -0
  182. data/test/files/noencoding.html +47 -0
  183. data/test/files/po.xml +32 -0
  184. data/test/files/po.xsd +66 -0
  185. data/test/files/saml/saml20assertion_schema.xsd +283 -0
  186. data/test/files/saml/saml20protocol_schema.xsd +302 -0
  187. data/test/files/saml/xenc_schema.xsd +146 -0
  188. data/test/files/saml/xmldsig_schema.xsd +318 -0
  189. data/test/files/shift_jis.html +10 -0
  190. data/test/files/shift_jis.xml +5 -0
  191. data/test/files/shift_jis_no_charset.html +9 -0
  192. data/test/files/slow-xpath.xml +25509 -0
  193. data/test/files/snuggles.xml +3 -0
  194. data/test/files/staff.dtd +10 -0
  195. data/test/files/test_document_url/bar.xml +2 -0
  196. data/test/files/test_document_url/document.dtd +4 -0
  197. data/test/files/test_document_url/document.xml +6 -0
  198. data/test/files/tlm.html +2 -1
  199. data/test/files/to_be_xincluded.xml +2 -0
  200. data/test/files/valid_bar.xml +2 -0
  201. data/test/files/xinclude.xml +4 -0
  202. data/test/helper.rb +124 -13
  203. data/test/html/sax/test_parser.rb +118 -4
  204. data/test/html/sax/test_parser_context.rb +46 -0
  205. data/test/html/sax/test_push_parser.rb +87 -0
  206. data/test/html/test_builder.rb +94 -8
  207. data/test/html/test_document.rb +626 -11
  208. data/test/html/test_document_encoding.rb +145 -0
  209. data/test/html/test_document_fragment.rb +301 -0
  210. data/test/html/test_element_description.rb +105 -0
  211. data/test/html/test_named_characters.rb +14 -0
  212. data/test/html/test_node.rb +212 -0
  213. data/test/html/test_node_encoding.rb +85 -0
  214. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +14 -0
  215. data/test/namespaces/test_namespaces_aliased_default.rb +24 -0
  216. data/test/namespaces/test_namespaces_in_builder_doc.rb +75 -0
  217. data/test/namespaces/test_namespaces_in_cloned_doc.rb +31 -0
  218. data/test/namespaces/test_namespaces_in_created_doc.rb +75 -0
  219. data/test/namespaces/test_namespaces_in_parsed_doc.rb +80 -0
  220. data/test/namespaces/test_namespaces_preservation.rb +31 -0
  221. data/test/test_convert_xpath.rb +2 -47
  222. data/test/test_css_cache.rb +45 -0
  223. data/test/test_encoding_handler.rb +48 -0
  224. data/test/test_memory_leak.rb +156 -0
  225. data/test/test_nokogiri.rb +103 -1
  226. data/test/test_soap4r_sax.rb +52 -0
  227. data/test/test_xslt_transforms.rb +293 -8
  228. data/test/xml/node/test_save_options.rb +28 -0
  229. data/test/xml/node/test_subclass.rb +44 -0
  230. data/test/xml/sax/test_parser.rb +309 -8
  231. data/test/xml/sax/test_parser_context.rb +115 -0
  232. data/test/xml/sax/test_push_parser.rb +157 -0
  233. data/test/xml/test_attr.rb +67 -0
  234. data/test/xml/test_attribute_decl.rb +86 -0
  235. data/test/xml/test_builder.rb +327 -2
  236. data/test/xml/test_c14n.rb +180 -0
  237. data/test/xml/test_cdata.rb +32 -2
  238. data/test/xml/test_comment.rb +40 -0
  239. data/test/xml/test_document.rb +846 -35
  240. data/test/xml/test_document_encoding.rb +31 -0
  241. data/test/xml/test_document_fragment.rb +271 -0
  242. data/test/xml/test_dtd.rb +153 -9
  243. data/test/xml/test_dtd_encoding.rb +31 -0
  244. data/test/xml/test_element_content.rb +56 -0
  245. data/test/xml/test_element_decl.rb +73 -0
  246. data/test/xml/test_entity_decl.rb +122 -0
  247. data/test/xml/test_entity_reference.rb +251 -0
  248. data/test/xml/test_namespace.rb +96 -0
  249. data/test/xml/test_node.rb +1126 -105
  250. data/test/xml/test_node_attributes.rb +115 -0
  251. data/test/xml/test_node_encoding.rb +69 -0
  252. data/test/xml/test_node_inheritance.rb +32 -0
  253. data/test/xml/test_node_reparenting.rb +549 -0
  254. data/test/xml/test_node_set.rb +668 -9
  255. data/test/xml/test_parse_options.rb +64 -0
  256. data/test/xml/test_processing_instruction.rb +30 -0
  257. data/test/xml/test_reader.rb +589 -0
  258. data/test/xml/test_reader_encoding.rb +134 -0
  259. data/test/xml/test_relax_ng.rb +60 -0
  260. data/test/xml/test_schema.rb +142 -0
  261. data/test/xml/test_syntax_error.rb +30 -0
  262. data/test/xml/test_text.rb +49 -2
  263. data/test/xml/test_unparented_node.rb +440 -0
  264. data/test/xml/test_xinclude.rb +83 -0
  265. data/test/xml/test_xpath.rb +445 -0
  266. data/test/xslt/test_custom_functions.rb +133 -0
  267. data/test/xslt/test_exception_handling.rb +37 -0
  268. data/test_all +107 -0
  269. metadata +459 -115
  270. data/History.txt +0 -6
  271. data/README.ja.txt +0 -86
  272. data/README.txt +0 -87
  273. data/ext/nokogiri/html_sax_parser.c +0 -32
  274. data/ext/nokogiri/html_sax_parser.h +0 -11
  275. data/ext/nokogiri/native.c +0 -40
  276. data/ext/nokogiri/native.h +0 -51
  277. data/ext/nokogiri/xml_xpath.c +0 -46
  278. data/ext/nokogiri/xml_xpath.h +0 -11
  279. data/lib/nokogiri/css/generated_parser.rb +0 -653
  280. data/lib/nokogiri/css/generated_tokenizer.rb +0 -159
  281. data/lib/nokogiri/decorators/hpricot/node.rb +0 -58
  282. data/lib/nokogiri/decorators/hpricot/node_set.rb +0 -14
  283. data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +0 -17
  284. data/lib/nokogiri/decorators/hpricot.rb +0 -3
  285. data/lib/nokogiri/decorators.rb +0 -1
  286. data/lib/nokogiri/hpricot.rb +0 -47
  287. data/lib/nokogiri/xml/after_handler.rb +0 -18
  288. data/lib/nokogiri/xml/before_handler.rb +0 -32
  289. data/lib/nokogiri/xml/element.rb +0 -6
  290. data/lib/nokogiri/xml/entity_declaration.rb +0 -9
  291. data/nokogiri.gemspec +0 -34
  292. data/test/hpricot/files/basic.xhtml +0 -17
  293. data/test/hpricot/files/boingboing.html +0 -2266
  294. data/test/hpricot/files/cy0.html +0 -3653
  295. data/test/hpricot/files/immob.html +0 -400
  296. data/test/hpricot/files/pace_application.html +0 -1320
  297. data/test/hpricot/files/tenderlove.html +0 -16
  298. data/test/hpricot/files/uswebgen.html +0 -220
  299. data/test/hpricot/files/utf8.html +0 -1054
  300. data/test/hpricot/files/week9.html +0 -1723
  301. data/test/hpricot/files/why.xml +0 -19
  302. data/test/hpricot/load_files.rb +0 -7
  303. data/test/hpricot/test_alter.rb +0 -67
  304. data/test/hpricot/test_builder.rb +0 -27
  305. data/test/hpricot/test_parser.rb +0 -423
  306. data/test/hpricot/test_paths.rb +0 -15
  307. data/test/hpricot/test_preserved.rb +0 -78
  308. data/test/hpricot/test_xml.rb +0 -30
  309. data/test/test_reader.rb +0 -222
@@ -1,24 +1,732 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.4.12
4
+ # from Racc grammer file "".
5
+ #
6
+
7
+ require 'racc/parser.rb'
8
+
9
+
10
+ require 'nokogiri/css/parser_extras'
11
+
1
12
  module Nokogiri
2
13
  module CSS
3
- class Parser < GeneratedParser
4
- class << self
5
- def parse string
6
- new.parse(string)
14
+ class Parser < Racc::Parser
15
+
16
+
17
+ def unescape_css_identifier(identifier)
18
+ identifier.gsub(/\\(?:([^0-9a-fA-F])|([0-9a-fA-F]{1,6})\s?)/){ |m| $1 || [$2.hex].pack('U') }
19
+ end
20
+ ##### State transition tables begin ###
21
+
22
+ racc_action_table = [
23
+ 24, 93, 56, 57, 33, 55, 94, 23, 24, 22,
24
+ 12, 93, 33, 27, 35, 52, 88, 22, -23, 25,
25
+ 92, 98, 23, 33, 26, 18, 20, 25, 27, 86,
26
+ 23, 24, 26, 18, 20, 33, 27, 11, 39, 24,
27
+ 22, 23, 89, 33, 18, 101, 100, 27, 22, 12,
28
+ 25, 24, 95, 23, 90, 26, 18, 20, 25, 27,
29
+ 66, 23, 24, 26, 18, 20, 33, 27, 91, 90,
30
+ 51, 22, 96, 85, 33, 26, 33, -23, 33, 56,
31
+ 87, 25, 60, 99, 23, 74, 26, 18, 20, 39,
32
+ 27, 39, 23, 39, 23, 18, 23, 18, 27, 18,
33
+ 27, 33, 27, 33, 56, 87, 22, 60, 56, 87,
34
+ 102, 60, 56, 87, 33, 60, 39, 24, 39, 23,
35
+ 103, 23, 18, 20, 18, 27, 46, 27, 49, 39,
36
+ 93, 44, 23, 105, 33, 18, 51, 45, 27, 33,
37
+ -23, 26, 108, 56, 58, 109, 60, nil, nil, 39,
38
+ nil, nil, 23, nil, 39, 18, nil, 23, 27, nil,
39
+ 18, 20, nil, 27, 82, 83, nil, nil, nil, 82,
40
+ 83, nil, nil, nil, nil, 78, 79, 80, nil, 81,
41
+ 78, 79, 80, 77, 81, 4, 5, 10, 77, 4,
42
+ 5, 43, nil, nil, nil, 6, nil, 8, 7, 6,
43
+ nil, 8, 7, 4, 5, 10, nil, nil, nil, nil,
44
+ nil, nil, nil, 6, nil, 8, 7 ]
45
+
46
+ racc_action_check = [
47
+ 42, 58, 24, 24, 42, 24, 57, 15, 43, 42,
48
+ 64, 57, 43, 15, 11, 24, 53, 43, 58, 42,
49
+ 56, 64, 42, 14, 42, 42, 42, 43, 42, 50,
50
+ 43, 3, 43, 43, 43, 3, 43, 1, 14, 9,
51
+ 3, 14, 54, 9, 14, 76, 76, 14, 9, 1,
52
+ 3, 27, 59, 3, 60, 3, 3, 3, 9, 3,
53
+ 27, 9, 12, 9, 9, 9, 12, 9, 55, 55,
54
+ 27, 12, 61, 49, 28, 27, 62, 46, 30, 92,
55
+ 92, 12, 92, 75, 12, 45, 12, 12, 12, 28,
56
+ 12, 62, 28, 30, 62, 28, 30, 62, 28, 30,
57
+ 62, 39, 30, 32, 90, 90, 39, 90, 51, 51,
58
+ 84, 51, 93, 93, 31, 93, 39, 23, 32, 39,
59
+ 86, 32, 39, 39, 32, 39, 23, 32, 23, 31,
60
+ 87, 18, 31, 91, 29, 31, 23, 21, 31, 25,
61
+ 22, 23, 94, 25, 25, 105, 25, nil, nil, 29,
62
+ nil, nil, 29, nil, 25, 29, nil, 25, 29, nil,
63
+ 25, 25, nil, 25, 48, 48, nil, nil, nil, 47,
64
+ 47, nil, nil, nil, nil, 48, 48, 48, nil, 48,
65
+ 47, 47, 47, 48, 47, 0, 0, 0, 47, 17,
66
+ 17, 17, nil, nil, nil, 0, nil, 0, 0, 17,
67
+ nil, 17, 17, 26, 26, 26, nil, nil, nil, nil,
68
+ nil, nil, nil, 26, nil, 26, 26 ]
69
+
70
+ racc_action_pointer = [
71
+ 178, 37, nil, 29, nil, nil, nil, nil, nil, 37,
72
+ nil, 14, 60, nil, 17, -17, nil, 182, 120, nil,
73
+ nil, 108, 111, 115, -8, 133, 196, 49, 68, 128,
74
+ 72, 108, 97, nil, nil, nil, nil, nil, nil, 95,
75
+ nil, nil, -2, 6, nil, 74, 48, 166, 161, 48,
76
+ 0, 98, nil, -7, 19, 57, 8, -1, -11, 29,
77
+ 42, 49, 70, nil, -2, nil, nil, nil, nil, nil,
78
+ nil, nil, nil, nil, nil, 58, 35, nil, nil, nil,
79
+ nil, nil, nil, nil, 85, nil, 109, 118, nil, nil,
80
+ 94, 126, 69, 102, 129, nil, nil, nil, nil, nil,
81
+ nil, nil, nil, nil, nil, 132, nil, nil, nil, nil ]
82
+
83
+ racc_action_default = [
84
+ -74, -75, -2, -24, -4, -5, -6, -7, -8, -24,
85
+ -73, -75, -24, -3, -47, -10, -13, -17, -75, -19,
86
+ -20, -75, -22, -24, -75, -24, -74, -75, -53, -54,
87
+ -55, -56, -57, -58, -14, 110, -1, -9, -46, -24,
88
+ -11, -12, -24, -24, -18, -75, -29, -61, -61, -75,
89
+ -75, -75, -30, -75, -75, -38, -39, -40, -22, -75,
90
+ -38, -75, -70, -72, -75, -44, -45, -48, -49, -50,
91
+ -51, -52, -15, -16, -21, -75, -75, -62, -63, -64,
92
+ -65, -66, -67, -68, -75, -27, -75, -40, -31, -32,
93
+ -75, -43, -75, -75, -75, -33, -69, -71, -34, -25,
94
+ -59, -60, -26, -28, -35, -75, -36, -37, -42, -41 ]
95
+
96
+ racc_goto_table = [
97
+ 53, 38, 13, 1, 41, 48, 62, 40, 34, 65,
98
+ 50, 36, 63, 75, 84, 67, 68, 69, 70, 71,
99
+ 62, 47, 37, 42, 54, nil, 63, nil, nil, 64,
100
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
101
+ nil, 72, 73, nil, nil, nil, nil, nil, nil, 97,
102
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
103
+ nil, nil, nil, nil, nil, nil, 104, nil, 106, 107 ]
104
+
105
+ racc_goto_check = [
106
+ 18, 12, 2, 1, 11, 9, 7, 10, 2, 9,
107
+ 15, 2, 12, 17, 17, 12, 12, 12, 12, 12,
108
+ 7, 16, 8, 5, 19, nil, 12, nil, nil, 1,
109
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
110
+ nil, 2, 2, nil, nil, nil, nil, nil, nil, 12,
111
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
112
+ nil, nil, nil, nil, nil, nil, 18, nil, 18, 18 ]
113
+
114
+ racc_goto_pointer = [
115
+ nil, 3, -1, nil, nil, 6, nil, -19, 8, -18,
116
+ -8, -11, -13, nil, nil, -13, -2, -34, -24, 0,
117
+ nil, nil, nil, nil ]
118
+
119
+ racc_goto_default = [
120
+ nil, nil, nil, 2, 3, 9, 17, 14, nil, 15,
121
+ 31, 30, 16, 29, 19, 21, nil, nil, 59, nil,
122
+ 28, 32, 76, 61 ]
123
+
124
+ racc_reduce_table = [
125
+ 0, 0, :racc_error,
126
+ 3, 32, :_reduce_1,
127
+ 1, 32, :_reduce_2,
128
+ 2, 32, :_reduce_3,
129
+ 1, 36, :_reduce_4,
130
+ 1, 36, :_reduce_5,
131
+ 1, 36, :_reduce_6,
132
+ 1, 36, :_reduce_7,
133
+ 1, 36, :_reduce_8,
134
+ 2, 37, :_reduce_9,
135
+ 1, 37, :_reduce_none,
136
+ 2, 37, :_reduce_11,
137
+ 2, 37, :_reduce_12,
138
+ 1, 37, :_reduce_13,
139
+ 2, 34, :_reduce_14,
140
+ 3, 33, :_reduce_15,
141
+ 3, 33, :_reduce_16,
142
+ 1, 33, :_reduce_none,
143
+ 2, 44, :_reduce_18,
144
+ 1, 38, :_reduce_none,
145
+ 1, 38, :_reduce_20,
146
+ 3, 45, :_reduce_21,
147
+ 1, 45, :_reduce_22,
148
+ 1, 46, :_reduce_23,
149
+ 0, 46, :_reduce_none,
150
+ 4, 42, :_reduce_25,
151
+ 4, 42, :_reduce_26,
152
+ 3, 42, :_reduce_27,
153
+ 3, 47, :_reduce_28,
154
+ 1, 47, :_reduce_29,
155
+ 2, 40, :_reduce_30,
156
+ 3, 40, :_reduce_31,
157
+ 3, 40, :_reduce_32,
158
+ 3, 40, :_reduce_33,
159
+ 3, 40, :_reduce_34,
160
+ 3, 49, :_reduce_35,
161
+ 3, 49, :_reduce_36,
162
+ 3, 49, :_reduce_37,
163
+ 1, 49, :_reduce_none,
164
+ 1, 49, :_reduce_none,
165
+ 1, 49, :_reduce_40,
166
+ 4, 50, :_reduce_41,
167
+ 3, 50, :_reduce_42,
168
+ 2, 50, :_reduce_43,
169
+ 2, 41, :_reduce_44,
170
+ 2, 41, :_reduce_45,
171
+ 1, 39, :_reduce_none,
172
+ 0, 39, :_reduce_none,
173
+ 2, 43, :_reduce_48,
174
+ 2, 43, :_reduce_49,
175
+ 2, 43, :_reduce_50,
176
+ 2, 43, :_reduce_51,
177
+ 2, 43, :_reduce_52,
178
+ 1, 43, :_reduce_none,
179
+ 1, 43, :_reduce_none,
180
+ 1, 43, :_reduce_none,
181
+ 1, 43, :_reduce_none,
182
+ 1, 43, :_reduce_none,
183
+ 1, 51, :_reduce_58,
184
+ 2, 48, :_reduce_59,
185
+ 2, 48, :_reduce_60,
186
+ 0, 48, :_reduce_none,
187
+ 1, 53, :_reduce_62,
188
+ 1, 53, :_reduce_63,
189
+ 1, 53, :_reduce_64,
190
+ 1, 53, :_reduce_65,
191
+ 1, 53, :_reduce_66,
192
+ 1, 53, :_reduce_67,
193
+ 1, 53, :_reduce_68,
194
+ 3, 52, :_reduce_69,
195
+ 1, 54, :_reduce_none,
196
+ 2, 54, :_reduce_none,
197
+ 1, 54, :_reduce_none,
198
+ 1, 35, :_reduce_none,
199
+ 0, 35, :_reduce_none ]
200
+
201
+ racc_reduce_n = 75
202
+
203
+ racc_shift_n = 110
204
+
205
+ racc_token_table = {
206
+ false => 0,
207
+ :error => 1,
208
+ :FUNCTION => 2,
209
+ :INCLUDES => 3,
210
+ :DASHMATCH => 4,
211
+ :LBRACE => 5,
212
+ :HASH => 6,
213
+ :PLUS => 7,
214
+ :GREATER => 8,
215
+ :S => 9,
216
+ :STRING => 10,
217
+ :IDENT => 11,
218
+ :COMMA => 12,
219
+ :NUMBER => 13,
220
+ :PREFIXMATCH => 14,
221
+ :SUFFIXMATCH => 15,
222
+ :SUBSTRINGMATCH => 16,
223
+ :TILDE => 17,
224
+ :NOT_EQUAL => 18,
225
+ :SLASH => 19,
226
+ :DOUBLESLASH => 20,
227
+ :NOT => 21,
228
+ :EQUAL => 22,
229
+ :RPAREN => 23,
230
+ :LSQUARE => 24,
231
+ :RSQUARE => 25,
232
+ :HAS => 26,
233
+ "." => 27,
234
+ "*" => 28,
235
+ "|" => 29,
236
+ ":" => 30 }
237
+
238
+ racc_nt_base = 31
239
+
240
+ racc_use_result_var = true
241
+
242
+ Racc_arg = [
243
+ racc_action_table,
244
+ racc_action_check,
245
+ racc_action_default,
246
+ racc_action_pointer,
247
+ racc_goto_table,
248
+ racc_goto_check,
249
+ racc_goto_default,
250
+ racc_goto_pointer,
251
+ racc_nt_base,
252
+ racc_reduce_table,
253
+ racc_token_table,
254
+ racc_shift_n,
255
+ racc_reduce_n,
256
+ racc_use_result_var ]
257
+
258
+ Racc_token_to_s_table = [
259
+ "$end",
260
+ "error",
261
+ "FUNCTION",
262
+ "INCLUDES",
263
+ "DASHMATCH",
264
+ "LBRACE",
265
+ "HASH",
266
+ "PLUS",
267
+ "GREATER",
268
+ "S",
269
+ "STRING",
270
+ "IDENT",
271
+ "COMMA",
272
+ "NUMBER",
273
+ "PREFIXMATCH",
274
+ "SUFFIXMATCH",
275
+ "SUBSTRINGMATCH",
276
+ "TILDE",
277
+ "NOT_EQUAL",
278
+ "SLASH",
279
+ "DOUBLESLASH",
280
+ "NOT",
281
+ "EQUAL",
282
+ "RPAREN",
283
+ "LSQUARE",
284
+ "RSQUARE",
285
+ "HAS",
286
+ "\".\"",
287
+ "\"*\"",
288
+ "\"|\"",
289
+ "\":\"",
290
+ "$start",
291
+ "selector",
292
+ "simple_selector_1toN",
293
+ "prefixless_combinator_selector",
294
+ "optional_S",
295
+ "combinator",
296
+ "simple_selector",
297
+ "element_name",
298
+ "hcap_0toN",
299
+ "function",
300
+ "pseudo",
301
+ "attrib",
302
+ "hcap_1toN",
303
+ "class",
304
+ "namespaced_ident",
305
+ "namespace",
306
+ "attrib_name",
307
+ "attrib_val_0or1",
308
+ "expr",
309
+ "nth",
310
+ "attribute_id",
311
+ "negation",
312
+ "eql_incl_dash",
313
+ "negation_arg" ]
314
+
315
+ Racc_debug_parser = false
316
+
317
+ ##### State transition tables end #####
318
+
319
+ # reduce 0 omitted
320
+
321
+ def _reduce_1(val, _values, result)
322
+ result = [val.first, val.last].flatten
323
+
324
+ result
325
+ end
326
+
327
+ def _reduce_2(val, _values, result)
328
+ result = val.flatten
329
+ result
330
+ end
331
+
332
+ def _reduce_3(val, _values, result)
333
+ result = [val.last].flatten
334
+ result
335
+ end
336
+
337
+ def _reduce_4(val, _values, result)
338
+ result = :DIRECT_ADJACENT_SELECTOR
339
+ result
340
+ end
341
+
342
+ def _reduce_5(val, _values, result)
343
+ result = :CHILD_SELECTOR
344
+ result
345
+ end
346
+
347
+ def _reduce_6(val, _values, result)
348
+ result = :FOLLOWING_SELECTOR
349
+ result
350
+ end
351
+
352
+ def _reduce_7(val, _values, result)
353
+ result = :DESCENDANT_SELECTOR
354
+ result
355
+ end
356
+
357
+ def _reduce_8(val, _values, result)
358
+ result = :CHILD_SELECTOR
359
+ result
360
+ end
361
+
362
+ def _reduce_9(val, _values, result)
363
+ result = if val[1].nil?
364
+ val.first
365
+ else
366
+ Node.new(:CONDITIONAL_SELECTOR, [val.first, val[1]])
367
+ end
368
+
369
+ result
370
+ end
371
+
372
+ # reduce 10 omitted
373
+
374
+ def _reduce_11(val, _values, result)
375
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
376
+
377
+ result
378
+ end
379
+
380
+ def _reduce_12(val, _values, result)
381
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
382
+
383
+ result
384
+ end
385
+
386
+ def _reduce_13(val, _values, result)
387
+ result = Node.new(:CONDITIONAL_SELECTOR,
388
+ [Node.new(:ELEMENT_NAME, ['*']), val.first]
389
+ )
390
+
391
+ result
392
+ end
393
+
394
+ def _reduce_14(val, _values, result)
395
+ result = Node.new(val.first, [nil, val.last])
396
+
397
+ result
398
+ end
399
+
400
+ def _reduce_15(val, _values, result)
401
+ result = Node.new(val[1], [val.first, val.last])
402
+
403
+ result
404
+ end
405
+
406
+ def _reduce_16(val, _values, result)
407
+ result = Node.new(:DESCENDANT_SELECTOR, [val.first, val.last])
408
+
409
+ result
410
+ end
411
+
412
+ # reduce 17 omitted
413
+
414
+ def _reduce_18(val, _values, result)
415
+ result = Node.new(:CLASS_CONDITION, [unescape_css_identifier(val[1])])
416
+ result
417
+ end
418
+
419
+ # reduce 19 omitted
420
+
421
+ def _reduce_20(val, _values, result)
422
+ result = Node.new(:ELEMENT_NAME, val)
423
+ result
424
+ end
425
+
426
+ def _reduce_21(val, _values, result)
427
+ result = Node.new(:ELEMENT_NAME,
428
+ [[val.first, val.last].compact.join(':')]
429
+ )
430
+
431
+ result
432
+ end
433
+
434
+ def _reduce_22(val, _values, result)
435
+ name = @namespaces.key?('xmlns') ? "xmlns:#{val.first}" : val.first
436
+ result = Node.new(:ELEMENT_NAME, [name])
437
+
438
+ result
439
+ end
440
+
441
+ def _reduce_23(val, _values, result)
442
+ result = val[0]
443
+ result
444
+ end
445
+
446
+ # reduce 24 omitted
447
+
448
+ def _reduce_25(val, _values, result)
449
+ result = Node.new(:ATTRIBUTE_CONDITION,
450
+ [val[1]] + (val[2] || [])
451
+ )
452
+
453
+ result
454
+ end
455
+
456
+ def _reduce_26(val, _values, result)
457
+ result = Node.new(:ATTRIBUTE_CONDITION,
458
+ [val[1]] + (val[2] || [])
459
+ )
460
+
461
+ result
462
+ end
463
+
464
+ def _reduce_27(val, _values, result)
465
+ # Non standard, but hpricot supports it.
466
+ result = Node.new(:PSEUDO_CLASS,
467
+ [Node.new(:FUNCTION, ['nth-child(', val[1]])]
468
+ )
469
+
470
+ result
471
+ end
472
+
473
+ def _reduce_28(val, _values, result)
474
+ result = Node.new(:ELEMENT_NAME,
475
+ [[val.first, val.last].compact.join(':')]
476
+ )
477
+
478
+ result
479
+ end
480
+
481
+ def _reduce_29(val, _values, result)
482
+ # Default namespace is not applied to attributes.
483
+ # So we don't add prefix "xmlns:" as in namespaced_ident.
484
+ result = Node.new(:ELEMENT_NAME, [val.first])
485
+
486
+ result
487
+ end
488
+
489
+ def _reduce_30(val, _values, result)
490
+ result = Node.new(:FUNCTION, [val.first.strip])
491
+
492
+ result
493
+ end
494
+
495
+ def _reduce_31(val, _values, result)
496
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
497
+
498
+ result
499
+ end
500
+
501
+ def _reduce_32(val, _values, result)
502
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
503
+
504
+ result
505
+ end
506
+
507
+ def _reduce_33(val, _values, result)
508
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
509
+
510
+ result
511
+ end
512
+
513
+ def _reduce_34(val, _values, result)
514
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
515
+
516
+ result
517
+ end
518
+
519
+ def _reduce_35(val, _values, result)
520
+ result = [val.first, val.last]
521
+ result
522
+ end
523
+
524
+ def _reduce_36(val, _values, result)
525
+ result = [val.first, val.last]
526
+ result
527
+ end
528
+
529
+ def _reduce_37(val, _values, result)
530
+ result = [val.first, val.last]
531
+ result
532
+ end
533
+
534
+ # reduce 38 omitted
535
+
536
+ # reduce 39 omitted
537
+
538
+ def _reduce_40(val, _values, result)
539
+ case val[0]
540
+ when 'even'
541
+ result = Node.new(:NTH, ['2','n','+','0'])
542
+ when 'odd'
543
+ result = Node.new(:NTH, ['2','n','+','1'])
544
+ when 'n'
545
+ result = Node.new(:NTH, ['1','n','+','0'])
546
+ else
547
+ # This is not CSS standard. It allows us to support this:
548
+ # assert_xpath("//a[foo(., @href)]", @parser.parse('a:foo(@href)'))
549
+ # assert_xpath("//a[foo(., @a, b)]", @parser.parse('a:foo(@a, b)'))
550
+ # assert_xpath("//a[foo(., a, 10)]", @parser.parse('a:foo(a, 10)'))
551
+ result = val
7
552
  end
8
- end
553
+
554
+ result
555
+ end
556
+
557
+ def _reduce_41(val, _values, result)
558
+ if val[1] == 'n'
559
+ result = Node.new(:NTH, val)
560
+ else
561
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
562
+ end
563
+
564
+ result
565
+ end
566
+
567
+ def _reduce_42(val, _values, result)
568
+ # n+3, -n+3
569
+ if val[0] == 'n'
570
+ val.unshift("1")
571
+ result = Node.new(:NTH, val)
572
+ elsif val[0] == '-n'
573
+ val[0] = 'n'
574
+ val.unshift("-1")
575
+ result = Node.new(:NTH, val)
576
+ else
577
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
578
+ end
579
+
580
+ result
581
+ end
582
+
583
+ def _reduce_43(val, _values, result)
584
+ # 5n, -5n, 10n-1
585
+ n = val[1]
586
+ if n[0, 2] == 'n-'
587
+ val[1] = 'n'
588
+ val << "-"
589
+ # b is contained in n as n is the string "n-b"
590
+ val << n[2, n.size]
591
+ result = Node.new(:NTH, val)
592
+ elsif n == 'n'
593
+ val << "+"
594
+ val << "0"
595
+ result = Node.new(:NTH, val)
596
+ else
597
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
598
+ end
599
+
600
+ result
601
+ end
602
+
603
+ def _reduce_44(val, _values, result)
604
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
605
+
606
+ result
607
+ end
608
+
609
+ def _reduce_45(val, _values, result)
610
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
611
+ result
612
+ end
613
+
614
+ # reduce 46 omitted
615
+
616
+ # reduce 47 omitted
617
+
618
+ def _reduce_48(val, _values, result)
619
+ result = Node.new(:COMBINATOR, val)
620
+
621
+ result
622
+ end
623
+
624
+ def _reduce_49(val, _values, result)
625
+ result = Node.new(:COMBINATOR, val)
626
+
627
+ result
628
+ end
629
+
630
+ def _reduce_50(val, _values, result)
631
+ result = Node.new(:COMBINATOR, val)
632
+
633
+ result
634
+ end
635
+
636
+ def _reduce_51(val, _values, result)
637
+ result = Node.new(:COMBINATOR, val)
638
+
639
+ result
640
+ end
641
+
642
+ def _reduce_52(val, _values, result)
643
+ result = Node.new(:COMBINATOR, val)
644
+
645
+ result
646
+ end
647
+
648
+ # reduce 53 omitted
649
+
650
+ # reduce 54 omitted
651
+
652
+ # reduce 55 omitted
9
653
 
10
- def initialize
11
- @tokenizer = Tokenizer.new
12
- end
654
+ # reduce 56 omitted
13
655
 
14
- def parse string
15
- @tokenizer.scan string
16
- do_parse
17
- end
656
+ # reduce 57 omitted
18
657
 
19
- def next_token
20
- @tokenizer.next_token
21
- end
22
- end
23
- end
658
+ def _reduce_58(val, _values, result)
659
+ result = Node.new(:ID, [unescape_css_identifier(val.first)])
660
+ result
24
661
  end
662
+
663
+ def _reduce_59(val, _values, result)
664
+ result = [val.first, val[1]]
665
+ result
666
+ end
667
+
668
+ def _reduce_60(val, _values, result)
669
+ result = [val.first, val[1]]
670
+ result
671
+ end
672
+
673
+ # reduce 61 omitted
674
+
675
+ def _reduce_62(val, _values, result)
676
+ result = :equal
677
+ result
678
+ end
679
+
680
+ def _reduce_63(val, _values, result)
681
+ result = :prefix_match
682
+ result
683
+ end
684
+
685
+ def _reduce_64(val, _values, result)
686
+ result = :suffix_match
687
+ result
688
+ end
689
+
690
+ def _reduce_65(val, _values, result)
691
+ result = :substring_match
692
+ result
693
+ end
694
+
695
+ def _reduce_66(val, _values, result)
696
+ result = :not_equal
697
+ result
698
+ end
699
+
700
+ def _reduce_67(val, _values, result)
701
+ result = :includes
702
+ result
703
+ end
704
+
705
+ def _reduce_68(val, _values, result)
706
+ result = :dash_match
707
+ result
708
+ end
709
+
710
+ def _reduce_69(val, _values, result)
711
+ result = Node.new(:NOT, [val[1]])
712
+
713
+ result
714
+ end
715
+
716
+ # reduce 70 omitted
717
+
718
+ # reduce 71 omitted
719
+
720
+ # reduce 72 omitted
721
+
722
+ # reduce 73 omitted
723
+
724
+ # reduce 74 omitted
725
+
726
+ def _reduce_none(val, _values, result)
727
+ val[0]
728
+ end
729
+
730
+ end # class Parser
731
+ end # module CSS
732
+ end # module Nokogiri