nokogiri 1.10.9 → 1.18.3

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.

Potentially problematic release.


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

Files changed (230) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +38 -0
  3. data/LICENSE-DEPENDENCIES.md +1632 -1022
  4. data/LICENSE.md +1 -1
  5. data/README.md +190 -95
  6. data/bin/nokogiri +63 -50
  7. data/dependencies.yml +34 -66
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +909 -422
  10. data/ext/nokogiri/gumbo.c +610 -0
  11. data/ext/nokogiri/html4_document.c +171 -0
  12. data/ext/nokogiri/html4_element_description.c +299 -0
  13. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  14. data/ext/nokogiri/html4_sax_parser.c +40 -0
  15. data/ext/nokogiri/html4_sax_parser_context.c +98 -0
  16. data/ext/nokogiri/html4_sax_push_parser.c +96 -0
  17. data/ext/nokogiri/libxml2_polyfill.c +114 -0
  18. data/ext/nokogiri/nokogiri.c +258 -105
  19. data/ext/nokogiri/nokogiri.h +207 -90
  20. data/ext/nokogiri/test_global_handlers.c +40 -0
  21. data/ext/nokogiri/xml_attr.c +18 -18
  22. data/ext/nokogiri/xml_attribute_decl.c +22 -22
  23. data/ext/nokogiri/xml_cdata.c +33 -33
  24. data/ext/nokogiri/xml_comment.c +19 -31
  25. data/ext/nokogiri/xml_document.c +499 -323
  26. data/ext/nokogiri/xml_document_fragment.c +17 -36
  27. data/ext/nokogiri/xml_dtd.c +65 -59
  28. data/ext/nokogiri/xml_element_content.c +63 -55
  29. data/ext/nokogiri/xml_element_decl.c +31 -31
  30. data/ext/nokogiri/xml_encoding_handler.c +54 -21
  31. data/ext/nokogiri/xml_entity_decl.c +37 -35
  32. data/ext/nokogiri/xml_entity_reference.c +17 -19
  33. data/ext/nokogiri/xml_namespace.c +131 -61
  34. data/ext/nokogiri/xml_node.c +1429 -723
  35. data/ext/nokogiri/xml_node_set.c +257 -225
  36. data/ext/nokogiri/xml_processing_instruction.c +18 -20
  37. data/ext/nokogiri/xml_reader.c +340 -231
  38. data/ext/nokogiri/xml_relax_ng.c +87 -99
  39. data/ext/nokogiri/xml_sax_parser.c +269 -176
  40. data/ext/nokogiri/xml_sax_parser_context.c +286 -152
  41. data/ext/nokogiri/xml_sax_push_parser.c +111 -64
  42. data/ext/nokogiri/xml_schema.c +132 -140
  43. data/ext/nokogiri/xml_syntax_error.c +52 -23
  44. data/ext/nokogiri/xml_text.c +37 -30
  45. data/ext/nokogiri/xml_xpath_context.c +373 -185
  46. data/ext/nokogiri/xslt_stylesheet.c +342 -191
  47. data/gumbo-parser/CHANGES.md +63 -0
  48. data/gumbo-parser/Makefile +129 -0
  49. data/gumbo-parser/THANKS +27 -0
  50. data/gumbo-parser/src/Makefile +34 -0
  51. data/gumbo-parser/src/README.md +41 -0
  52. data/gumbo-parser/src/ascii.c +75 -0
  53. data/gumbo-parser/src/ascii.h +115 -0
  54. data/gumbo-parser/src/attribute.c +42 -0
  55. data/gumbo-parser/src/attribute.h +17 -0
  56. data/gumbo-parser/src/char_ref.c +22225 -0
  57. data/gumbo-parser/src/char_ref.h +29 -0
  58. data/gumbo-parser/src/char_ref.rl +2154 -0
  59. data/gumbo-parser/src/error.c +658 -0
  60. data/gumbo-parser/src/error.h +152 -0
  61. data/gumbo-parser/src/foreign_attrs.c +103 -0
  62. data/gumbo-parser/src/foreign_attrs.gperf +27 -0
  63. data/gumbo-parser/src/insertion_mode.h +33 -0
  64. data/gumbo-parser/src/macros.h +91 -0
  65. data/gumbo-parser/src/nokogiri_gumbo.h +953 -0
  66. data/gumbo-parser/src/parser.c +4932 -0
  67. data/gumbo-parser/src/parser.h +41 -0
  68. data/gumbo-parser/src/replacement.h +33 -0
  69. data/gumbo-parser/src/string_buffer.c +103 -0
  70. data/gumbo-parser/src/string_buffer.h +68 -0
  71. data/gumbo-parser/src/string_piece.c +48 -0
  72. data/gumbo-parser/src/svg_attrs.c +174 -0
  73. data/gumbo-parser/src/svg_attrs.gperf +77 -0
  74. data/gumbo-parser/src/svg_tags.c +137 -0
  75. data/gumbo-parser/src/svg_tags.gperf +55 -0
  76. data/gumbo-parser/src/tag.c +223 -0
  77. data/gumbo-parser/src/tag_lookup.c +382 -0
  78. data/gumbo-parser/src/tag_lookup.gperf +170 -0
  79. data/gumbo-parser/src/tag_lookup.h +13 -0
  80. data/gumbo-parser/src/token_buffer.c +79 -0
  81. data/gumbo-parser/src/token_buffer.h +71 -0
  82. data/gumbo-parser/src/token_type.h +17 -0
  83. data/gumbo-parser/src/tokenizer.c +3464 -0
  84. data/gumbo-parser/src/tokenizer.h +112 -0
  85. data/gumbo-parser/src/tokenizer_states.h +339 -0
  86. data/gumbo-parser/src/utf8.c +245 -0
  87. data/gumbo-parser/src/utf8.h +164 -0
  88. data/gumbo-parser/src/util.c +66 -0
  89. data/gumbo-parser/src/util.h +34 -0
  90. data/gumbo-parser/src/vector.c +111 -0
  91. data/gumbo-parser/src/vector.h +45 -0
  92. data/lib/nokogiri/class_resolver.rb +67 -0
  93. data/lib/nokogiri/css/node.rb +14 -8
  94. data/lib/nokogiri/css/parser.rb +399 -377
  95. data/lib/nokogiri/css/parser.y +250 -245
  96. data/lib/nokogiri/css/parser_extras.rb +16 -71
  97. data/lib/nokogiri/css/selector_cache.rb +38 -0
  98. data/lib/nokogiri/css/syntax_error.rb +3 -1
  99. data/lib/nokogiri/css/tokenizer.rb +7 -5
  100. data/lib/nokogiri/css/tokenizer.rex +11 -9
  101. data/lib/nokogiri/css/xpath_visitor.rb +242 -96
  102. data/lib/nokogiri/css.rb +122 -17
  103. data/lib/nokogiri/decorators/slop.rb +11 -11
  104. data/lib/nokogiri/encoding_handler.rb +57 -0
  105. data/lib/nokogiri/extension.rb +32 -0
  106. data/lib/nokogiri/gumbo.rb +15 -0
  107. data/lib/nokogiri/html.rb +38 -27
  108. data/lib/nokogiri/{html → html4}/builder.rb +4 -2
  109. data/lib/nokogiri/html4/document.rb +235 -0
  110. data/lib/nokogiri/html4/document_fragment.rb +166 -0
  111. data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
  112. data/lib/nokogiri/html4/element_description_defaults.rb +2040 -0
  113. data/lib/nokogiri/html4/encoding_reader.rb +121 -0
  114. data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
  115. data/lib/nokogiri/html4/sax/parser.rb +48 -0
  116. data/lib/nokogiri/html4/sax/parser_context.rb +15 -0
  117. data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
  118. data/lib/nokogiri/html4.rb +42 -0
  119. data/lib/nokogiri/html5/builder.rb +40 -0
  120. data/lib/nokogiri/html5/document.rb +199 -0
  121. data/lib/nokogiri/html5/document_fragment.rb +200 -0
  122. data/lib/nokogiri/html5/node.rb +103 -0
  123. data/lib/nokogiri/html5.rb +368 -0
  124. data/lib/nokogiri/jruby/dependencies.rb +3 -0
  125. data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
  126. data/lib/nokogiri/syntax_error.rb +2 -0
  127. data/lib/nokogiri/version/constant.rb +6 -0
  128. data/lib/nokogiri/version/info.rb +224 -0
  129. data/lib/nokogiri/version.rb +3 -108
  130. data/lib/nokogiri/xml/attr.rb +55 -3
  131. data/lib/nokogiri/xml/attribute_decl.rb +6 -2
  132. data/lib/nokogiri/xml/builder.rb +83 -35
  133. data/lib/nokogiri/xml/cdata.rb +3 -1
  134. data/lib/nokogiri/xml/character_data.rb +2 -0
  135. data/lib/nokogiri/xml/document.rb +359 -130
  136. data/lib/nokogiri/xml/document_fragment.rb +170 -54
  137. data/lib/nokogiri/xml/dtd.rb +4 -2
  138. data/lib/nokogiri/xml/element_content.rb +12 -2
  139. data/lib/nokogiri/xml/element_decl.rb +6 -2
  140. data/lib/nokogiri/xml/entity_decl.rb +7 -3
  141. data/lib/nokogiri/xml/entity_reference.rb +2 -0
  142. data/lib/nokogiri/xml/namespace.rb +44 -0
  143. data/lib/nokogiri/xml/node/save_options.rb +23 -8
  144. data/lib/nokogiri/xml/node.rb +1168 -420
  145. data/lib/nokogiri/xml/node_set.rb +145 -67
  146. data/lib/nokogiri/xml/notation.rb +13 -0
  147. data/lib/nokogiri/xml/parse_options.rb +145 -52
  148. data/lib/nokogiri/xml/pp/character_data.rb +9 -6
  149. data/lib/nokogiri/xml/pp/node.rb +47 -30
  150. data/lib/nokogiri/xml/pp.rb +4 -2
  151. data/lib/nokogiri/xml/processing_instruction.rb +4 -1
  152. data/lib/nokogiri/xml/reader.rb +68 -41
  153. data/lib/nokogiri/xml/relax_ng.rb +60 -17
  154. data/lib/nokogiri/xml/sax/document.rb +198 -111
  155. data/lib/nokogiri/xml/sax/parser.rb +144 -67
  156. data/lib/nokogiri/xml/sax/parser_context.rb +119 -6
  157. data/lib/nokogiri/xml/sax/push_parser.rb +9 -5
  158. data/lib/nokogiri/xml/sax.rb +54 -4
  159. data/lib/nokogiri/xml/schema.rb +116 -39
  160. data/lib/nokogiri/xml/searchable.rb +139 -95
  161. data/lib/nokogiri/xml/syntax_error.rb +29 -5
  162. data/lib/nokogiri/xml/text.rb +2 -0
  163. data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
  164. data/lib/nokogiri/xml/xpath.rb +15 -4
  165. data/lib/nokogiri/xml/xpath_context.rb +15 -4
  166. data/lib/nokogiri/xml.rb +45 -55
  167. data/lib/nokogiri/xslt/stylesheet.rb +32 -8
  168. data/lib/nokogiri/xslt.rb +103 -30
  169. data/lib/nokogiri.rb +59 -75
  170. data/lib/xsd/xmlparser/nokogiri.rb +32 -29
  171. data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
  172. data/patches/libxml2/0010-update-config.guess-and-config.sub-for-libxml2.patch +224 -0
  173. data/patches/libxml2/0011-rip-out-libxml2-s-libc_single_threaded-support.patch +30 -0
  174. data/patches/libxml2/0019-xpath-Use-separate-static-hash-table-for-standard-fu.patch +244 -0
  175. data/patches/libxslt/0001-update-config.guess-and-config.sub-for-libxslt.patch +224 -0
  176. data/ports/archives/libxml2-2.13.6.tar.xz +0 -0
  177. data/ports/archives/libxslt-1.1.42.tar.xz +0 -0
  178. metadata +123 -295
  179. data/ext/nokogiri/html_document.c +0 -170
  180. data/ext/nokogiri/html_document.h +0 -10
  181. data/ext/nokogiri/html_element_description.c +0 -279
  182. data/ext/nokogiri/html_element_description.h +0 -10
  183. data/ext/nokogiri/html_entity_lookup.c +0 -32
  184. data/ext/nokogiri/html_entity_lookup.h +0 -8
  185. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  186. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  187. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  188. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  189. data/ext/nokogiri/xml_attr.h +0 -9
  190. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  191. data/ext/nokogiri/xml_cdata.h +0 -9
  192. data/ext/nokogiri/xml_comment.h +0 -9
  193. data/ext/nokogiri/xml_document.h +0 -23
  194. data/ext/nokogiri/xml_document_fragment.h +0 -10
  195. data/ext/nokogiri/xml_dtd.h +0 -10
  196. data/ext/nokogiri/xml_element_content.h +0 -10
  197. data/ext/nokogiri/xml_element_decl.h +0 -9
  198. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  199. data/ext/nokogiri/xml_entity_decl.h +0 -10
  200. data/ext/nokogiri/xml_entity_reference.h +0 -9
  201. data/ext/nokogiri/xml_io.c +0 -61
  202. data/ext/nokogiri/xml_io.h +0 -11
  203. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  204. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  205. data/ext/nokogiri/xml_namespace.h +0 -14
  206. data/ext/nokogiri/xml_node.h +0 -13
  207. data/ext/nokogiri/xml_node_set.h +0 -12
  208. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  209. data/ext/nokogiri/xml_reader.h +0 -10
  210. data/ext/nokogiri/xml_relax_ng.h +0 -9
  211. data/ext/nokogiri/xml_sax_parser.h +0 -39
  212. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  213. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  214. data/ext/nokogiri/xml_schema.h +0 -9
  215. data/ext/nokogiri/xml_syntax_error.h +0 -13
  216. data/ext/nokogiri/xml_text.h +0 -9
  217. data/ext/nokogiri/xml_xpath_context.h +0 -10
  218. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  219. data/lib/nokogiri/html/document.rb +0 -335
  220. data/lib/nokogiri/html/document_fragment.rb +0 -49
  221. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  222. data/lib/nokogiri/html/sax/parser.rb +0 -62
  223. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  224. data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
  225. data/patches/libxml2/0004-libxml2.la-is-in-top_builddir.patch +0 -25
  226. data/patches/libxml2/0005-Fix-infinite-loop-in-xmlStringLenDecodeEntities.patch +0 -32
  227. data/ports/archives/libxml2-2.9.10.tar.gz +0 -0
  228. data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
  229. /data/patches/libxml2/{0002-Remove-script-macro-support.patch → 0001-Remove-script-macro-support.patch} +0 -0
  230. /data/patches/libxml2/{0003-Update-entities-to-remove-handling-of-ssi.patch → 0002-Update-entities-to-remove-handling-of-ssi.patch} +0 -0
@@ -1,13 +1,22 @@
1
+ # frozen_string_literal: true
1
2
  #
2
3
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.4.14
4
- # from Racc grammer file "".
4
+ # This file is automatically generated by Racc 1.8.0
5
+ # from Racc grammar file "parser.y".
5
6
  #
6
7
 
7
8
  require 'racc/parser.rb'
8
9
 
9
10
 
10
- require 'nokogiri/css/parser_extras'
11
+ require_relative "parser_extras"
12
+
13
+ module Nokogiri
14
+ module CSS
15
+ # :nodoc: all
16
+ class Parser < Racc::Parser
17
+ end
18
+ end
19
+ end
11
20
 
12
21
  module Nokogiri
13
22
  module CSS
@@ -30,190 +39,204 @@ end
30
39
  ##### State transition tables begin ###
31
40
 
32
41
  racc_action_table = [
33
- 24, 93, 56, 57, 33, 55, 94, 23, 24, 22,
34
- 12, 93, 33, 27, 35, 52, 44, 22, -23, 25,
35
- 45, 98, 23, 33, 26, 18, 20, 25, 27, -23,
36
- 23, 24, 26, 18, 20, 33, 27, 11, 39, 24,
37
- 22, 23, 74, 33, 18, 91, 90, 27, 22, 12,
38
- 25, 24, -23, 23, 85, 26, 18, 20, 25, 27,
39
- 66, 23, 24, 26, 18, 20, 33, 27, 86, 88,
40
- 51, 22, 89, 92, 24, 26, 56, 87, 95, 60,
41
- 90, 25, 96, 46, 23, 49, 26, 18, 20, 99,
42
- 27, 33, 33, 51, 103, 104, 56, 58, 26, 60,
43
- 93, 106, 33, 33, 33, 109, 39, 39, 110, 23,
44
- 23, nil, 18, 18, 20, 27, 27, 39, 39, 39,
45
- 23, 23, 23, 18, 18, 18, 27, 27, 27, 33,
46
- 33, 101, 100, nil, 102, 22, 56, 87, nil, 60,
47
- 33, nil, nil, nil, 39, 39, nil, 23, 23, nil,
48
- 18, 18, 20, 27, 27, 39, 82, 83, 23, 56,
49
- 87, 18, 60, nil, 27, 82, 83, 78, 79, 80,
50
- nil, 81, nil, nil, nil, 77, 78, 79, 80, nil,
51
- 81, 4, 5, 10, 77, 4, 5, 43, nil, 56,
52
- 87, 6, 60, 8, 7, 6, nil, 8, 7, 4,
53
- 5, 10, nil, nil, nil, nil, nil, nil, nil, 6,
54
- nil, 8, 7 ]
42
+ 27, 11, 38, 99, 36, 12, 40, 26, 48, 25,
43
+ 49, 27, 100, 12, 30, 36, 105, 99, -26, 28,
44
+ 25, -26, 26, 27, 29, 14, 21, 23, 80, 30,
45
+ 28, 36, 72, 26, -26, 29, 14, 21, 23, 27,
46
+ 30, 91, 56, 36, 97, 96, 43, 29, 25, 26,
47
+ 27, 92, 94, 21, 36, 95, 30, 98, 28, 25,
48
+ 101, 26, 102, 29, 14, 21, 23, 96, 30, 28,
49
+ 36, 36, 26, 103, 29, 14, 21, 23, 27, 30,
50
+ 108, 107, 36, 109, 106, 43, 43, 25, 26, 26,
51
+ 27, 110, 21, 21, 111, 30, 30, 28, 99, 50,
52
+ 26, 53, 29, 14, 21, 23, 36, 30, 36, 56,
53
+ 61, 64, 113, 66, 29, 14, 116, 36, 118, 36,
54
+ nil, 43, nil, 43, 26, nil, 26, 14, 21, 23,
55
+ 21, 30, 43, 30, 43, 26, nil, 26, 36, 21,
56
+ 36, 21, 30, 25, 30, nil, nil, nil, nil, nil,
57
+ nil, 61, 62, 43, 60, 43, 26, nil, 26, nil,
58
+ 21, 23, 21, 30, 57, 30, 88, 89, 14, nil,
59
+ nil, 88, 89, nil, nil, nil, nil, 84, 85, 86,
60
+ nil, 87, 84, 85, 86, 83, 87, nil, 61, 93,
61
+ 83, 66, 61, 93, nil, 66, 61, 93, nil, 66,
62
+ 61, 93, nil, 66, nil, 14, nil, 61, 93, 14,
63
+ 66, nil, nil, 14, nil, nil, nil, 14, 4, 5,
64
+ 10, nil, nil, nil, 14, 4, 5, 47, 6, nil,
65
+ 8, 7, 4, 5, 10, 6, nil, 8, 7, nil,
66
+ nil, nil, 6, nil, 8, 7 ]
55
67
 
56
68
  racc_action_check = [
57
- 3, 58, 24, 24, 3, 24, 57, 15, 9, 3,
58
- 64, 57, 9, 15, 11, 24, 18, 9, 58, 3,
59
- 21, 64, 3, 14, 3, 3, 3, 9, 3, 22,
60
- 9, 12, 9, 9, 9, 12, 9, 1, 14, 42,
61
- 12, 14, 45, 42, 14, 55, 55, 14, 42, 1,
62
- 12, 27, 46, 12, 49, 12, 12, 12, 42, 12,
63
- 27, 42, 43, 42, 42, 42, 43, 42, 50, 53,
64
- 27, 43, 54, 56, 23, 27, 51, 51, 59, 51,
65
- 60, 43, 61, 23, 43, 23, 43, 43, 43, 75,
66
- 43, 28, 25, 23, 84, 86, 25, 25, 23, 25,
67
- 87, 91, 29, 30, 31, 94, 28, 25, 106, 28,
68
- 25, nil, 28, 25, 25, 28, 25, 29, 30, 31,
69
- 29, 30, 31, 29, 30, 31, 29, 30, 31, 32,
70
- 39, 76, 76, nil, 76, 39, 90, 90, nil, 90,
71
- 62, nil, nil, nil, 32, 39, nil, 32, 39, nil,
72
- 32, 39, 39, 32, 39, 62, 47, 47, 62, 92,
73
- 92, 62, 92, nil, 62, 48, 48, 47, 47, 47,
74
- nil, 47, nil, nil, nil, 47, 48, 48, 48, nil,
75
- 48, 0, 0, 0, 48, 17, 17, 17, nil, 93,
76
- 93, 0, 93, 0, 0, 17, nil, 17, 17, 26,
77
- 26, 26, nil, nil, nil, nil, nil, nil, nil, 26,
78
- nil, 26, 26 ]
69
+ 3, 1, 11, 64, 3, 70, 14, 17, 21, 3,
70
+ 24, 9, 62, 1, 17, 9, 70, 62, 25, 3,
71
+ 9, 64, 3, 30, 3, 3, 3, 3, 49, 3,
72
+ 9, 16, 30, 9, 50, 9, 9, 9, 9, 12,
73
+ 9, 53, 30, 12, 60, 60, 16, 30, 12, 16,
74
+ 46, 54, 58, 16, 46, 59, 16, 61, 12, 46,
75
+ 63, 12, 65, 12, 12, 12, 12, 66, 12, 46,
76
+ 31, 32, 46, 67, 46, 46, 46, 46, 47, 46,
77
+ 82, 82, 47, 82, 81, 31, 32, 47, 31, 32,
78
+ 26, 90, 31, 32, 92, 31, 32, 47, 93, 26,
79
+ 47, 26, 47, 47, 47, 47, 28, 47, 33, 26,
80
+ 28, 28, 97, 28, 26, 26, 100, 34, 113, 35,
81
+ nil, 28, nil, 33, 28, nil, 33, 28, 28, 28,
82
+ 33, 28, 34, 33, 35, 34, nil, 35, 43, 34,
83
+ 68, 35, 34, 43, 35, nil, nil, nil, nil, nil,
84
+ nil, 27, 27, 43, 27, 68, 43, nil, 68, nil,
85
+ 43, 43, 68, 43, 27, 68, 51, 51, 27, nil,
86
+ nil, 52, 52, nil, nil, nil, nil, 51, 51, 51,
87
+ nil, 51, 52, 52, 52, 51, 52, nil, 56, 56,
88
+ 52, 56, 96, 96, nil, 96, 98, 98, nil, 98,
89
+ 99, 99, nil, 99, nil, 56, nil, 101, 101, 96,
90
+ 101, nil, nil, 98, nil, nil, nil, 99, 0, 0,
91
+ 0, nil, nil, nil, 101, 20, 20, 20, 0, nil,
92
+ 0, 0, 29, 29, 29, 20, nil, 20, 20, nil,
93
+ nil, nil, 29, nil, 29, 29 ]
79
94
 
80
95
  racc_action_pointer = [
81
- 174, 37, nil, -2, nil, nil, nil, nil, nil, 6,
82
- nil, 14, 29, nil, 17, -17, nil, 178, 5, nil,
83
- nil, -9, 0, 72, -8, 86, 192, 49, 85, 96,
84
- 97, 98, 123, nil, nil, nil, nil, nil, nil, 124,
85
- nil, nil, 37, 60, nil, 31, 23, 153, 162, 29,
86
- 39, 66, nil, 46, 49, 34, 61, -1, -11, 55,
87
- 68, 59, 134, nil, -2, nil, nil, nil, nil, nil,
88
- nil, nil, nil, nil, nil, 64, 121, nil, nil, nil,
89
- nil, nil, nil, nil, 69, nil, 84, 88, nil, nil,
90
- 126, 94, 149, 179, 92, nil, nil, nil, nil, nil,
91
- nil, nil, nil, nil, nil, nil, 95, nil, nil, nil,
92
- nil ]
96
+ 211, 1, nil, -2, nil, nil, nil, nil, nil, 9,
97
+ nil, 2, 37, nil, -5, nil, 25, -17, nil, nil,
98
+ 218, -3, nil, nil, -20, -12, 88, 141, 100, 225,
99
+ 21, 64, 65, 102, 111, 113, nil, nil, nil, nil,
100
+ nil, nil, nil, 132, nil, nil, 48, 76, nil, 17,
101
+ 4, 163, 168, 16, 21, nil, 178, nil, 29, 32,
102
+ 33, 45, 5, 48, -9, 39, 55, 50, 134, nil,
103
+ -7, nil, nil, nil, nil, nil, nil, nil, nil, nil,
104
+ nil, 59, 70, nil, nil, nil, nil, nil, nil, nil,
105
+ 66, nil, 83, 86, nil, nil, 182, 105, 186, 190,
106
+ 103, 197, nil, nil, nil, nil, nil, nil, nil, nil,
107
+ nil, nil, nil, 105, nil, nil, nil, nil, nil ]
93
108
 
94
109
  racc_action_default = [
95
- -75, -76, -2, -24, -4, -5, -6, -7, -8, -24,
96
- -74, -76, -24, -3, -47, -10, -13, -17, -76, -19,
97
- -20, -76, -22, -24, -76, -24, -75, -76, -53, -54,
98
- -55, -56, -57, -58, -14, 111, -1, -9, -46, -24,
99
- -11, -12, -24, -24, -18, -76, -29, -62, -62, -76,
100
- -76, -76, -30, -76, -76, -38, -39, -40, -22, -76,
101
- -38, -76, -71, -73, -76, -44, -45, -48, -49, -50,
102
- -51, -52, -15, -16, -21, -76, -76, -63, -64, -65,
103
- -66, -67, -68, -69, -76, -27, -76, -40, -31, -32,
104
- -76, -43, -76, -76, -76, -33, -70, -72, -34, -25,
105
- -59, -60, -61, -26, -28, -35, -76, -36, -37, -42,
106
- -41 ]
110
+ -81, -82, -2, -27, -4, -5, -6, -7, -8, -27,
111
+ -80, -82, -27, -3, -82, -10, -53, -12, -15, -16,
112
+ -20, -82, -22, -23, -82, -25, -27, -82, -27, -81,
113
+ -82, -59, -60, -61, -62, -63, -64, -17, 119, -1,
114
+ -9, -11, -52, -27, -13, -14, -27, -27, -21, -82,
115
+ -32, -68, -68, -82, -82, -33, -82, -34, -82, -82,
116
+ -43, -44, -45, -46, -25, -82, -43, -82, -77, -79,
117
+ -82, -50, -51, -54, -55, -56, -57, -58, -18, -19,
118
+ -24, -82, -82, -69, -70, -71, -72, -73, -74, -75,
119
+ -82, -30, -82, -45, -35, -36, -82, -49, -82, -82,
120
+ -82, -82, -37, -76, -78, -38, -28, -65, -66, -67,
121
+ -29, -31, -39, -82, -40, -41, -48, -42, -47 ]
107
122
 
108
123
  racc_goto_table = [
109
- 53, 38, 13, 1, 42, 48, 62, 37, 34, 65,
110
- 40, 36, 63, 75, 84, 67, 68, 69, 70, 71,
111
- 62, 41, 50, 47, 54, nil, 63, nil, nil, 64,
112
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
113
- nil, 72, 73, nil, nil, nil, nil, nil, nil, 97,
114
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
115
- nil, nil, nil, nil, nil, nil, 105, nil, 107, 108 ]
124
+ 58, 42, 13, 1, 46, 52, 19, 68, 37, 71,
125
+ 41, 39, 19, 69, 44, 19, 73, 74, 75, 76,
126
+ 77, 45, 68, 81, 90, 54, 51, 59, 69, 55,
127
+ nil, nil, 70, nil, nil, nil, nil, nil, nil, nil,
128
+ nil, nil, nil, nil, nil, 78, 79, nil, nil, 19,
129
+ 19, nil, nil, 104, nil, nil, nil, nil, nil, nil,
130
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 112,
131
+ nil, 114, 115, nil, 117 ]
116
132
 
117
133
  racc_goto_check = [
118
- 18, 12, 2, 1, 5, 9, 7, 8, 2, 9,
119
- 10, 2, 12, 17, 17, 12, 12, 12, 12, 12,
120
- 7, 11, 15, 16, 19, nil, 12, nil, nil, 1,
121
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
122
- nil, 2, 2, nil, nil, nil, nil, nil, nil, 12,
123
- nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
124
- nil, nil, nil, nil, nil, nil, 18, nil, 18, 18 ]
134
+ 20, 14, 2, 1, 5, 11, 7, 9, 2, 11,
135
+ 10, 2, 7, 14, 12, 7, 14, 14, 14, 14,
136
+ 14, 13, 9, 19, 19, 17, 18, 21, 14, 7,
137
+ nil, nil, 1, nil, nil, nil, nil, nil, nil, nil,
138
+ nil, nil, nil, nil, nil, 2, 2, nil, nil, 7,
139
+ 7, nil, nil, 14, nil, nil, nil, nil, nil, nil,
140
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 20,
141
+ nil, 20, 20, nil, 20 ]
125
142
 
126
143
  racc_goto_pointer = [
127
- nil, 3, -1, nil, nil, -13, nil, -19, -7, -18,
128
- -5, 6, -13, nil, nil, -1, 0, -34, -24, 0,
129
- nil, nil, nil, nil ]
144
+ nil, 3, -1, nil, nil, -16, nil, 3, nil, -21,
145
+ -6, -21, -3, 4, -15, nil, nil, -1, 0, -28,
146
+ -27, 0, nil, nil, nil, nil ]
130
147
 
131
148
  racc_goto_default = [
132
- nil, nil, nil, 2, 3, 9, 17, 14, nil, 15,
133
- 31, 30, 16, 29, 19, 21, nil, nil, 59, nil,
134
- 28, 32, 76, 61 ]
149
+ nil, nil, nil, 2, 3, 9, 15, 63, 20, 16,
150
+ nil, 17, 34, 33, 18, 32, 22, 24, nil, nil,
151
+ 65, nil, 31, 35, 82, 67 ]
135
152
 
136
153
  racc_reduce_table = [
137
154
  0, 0, :racc_error,
138
- 3, 32, :_reduce_1,
139
- 1, 32, :_reduce_2,
140
- 2, 32, :_reduce_3,
141
- 1, 36, :_reduce_4,
142
- 1, 36, :_reduce_5,
143
- 1, 36, :_reduce_6,
144
- 1, 36, :_reduce_7,
145
- 1, 36, :_reduce_8,
146
- 2, 37, :_reduce_9,
147
- 1, 37, :_reduce_none,
148
- 2, 37, :_reduce_11,
149
- 2, 37, :_reduce_12,
150
- 1, 37, :_reduce_13,
151
- 2, 34, :_reduce_14,
152
- 3, 33, :_reduce_15,
153
- 3, 33, :_reduce_16,
154
- 1, 33, :_reduce_none,
155
- 2, 44, :_reduce_18,
156
- 1, 38, :_reduce_none,
157
- 1, 38, :_reduce_20,
158
- 3, 45, :_reduce_21,
159
- 1, 45, :_reduce_22,
160
- 1, 46, :_reduce_23,
161
- 0, 46, :_reduce_none,
162
- 4, 42, :_reduce_25,
163
- 4, 42, :_reduce_26,
164
- 3, 42, :_reduce_27,
165
- 3, 47, :_reduce_28,
166
- 1, 47, :_reduce_29,
167
- 2, 40, :_reduce_30,
168
- 3, 40, :_reduce_31,
169
- 3, 40, :_reduce_32,
170
- 3, 40, :_reduce_33,
171
- 3, 40, :_reduce_34,
172
- 3, 49, :_reduce_35,
173
- 3, 49, :_reduce_36,
174
- 3, 49, :_reduce_37,
175
- 1, 49, :_reduce_none,
176
- 1, 49, :_reduce_none,
177
- 1, 49, :_reduce_40,
178
- 4, 50, :_reduce_41,
179
- 3, 50, :_reduce_42,
180
- 2, 50, :_reduce_43,
181
- 2, 41, :_reduce_44,
182
- 2, 41, :_reduce_45,
183
- 1, 39, :_reduce_none,
184
- 0, 39, :_reduce_none,
185
- 2, 43, :_reduce_48,
186
- 2, 43, :_reduce_49,
187
- 2, 43, :_reduce_50,
188
- 2, 43, :_reduce_51,
189
- 2, 43, :_reduce_52,
190
- 1, 43, :_reduce_none,
191
- 1, 43, :_reduce_none,
192
- 1, 43, :_reduce_none,
193
- 1, 43, :_reduce_none,
194
- 1, 43, :_reduce_none,
195
- 1, 51, :_reduce_58,
196
- 2, 48, :_reduce_59,
197
- 2, 48, :_reduce_60,
198
- 2, 48, :_reduce_61,
199
- 0, 48, :_reduce_none,
200
- 1, 53, :_reduce_63,
201
- 1, 53, :_reduce_64,
202
- 1, 53, :_reduce_65,
203
- 1, 53, :_reduce_66,
204
- 1, 53, :_reduce_67,
205
- 1, 53, :_reduce_68,
206
- 1, 53, :_reduce_69,
207
- 3, 52, :_reduce_70,
208
- 1, 54, :_reduce_none,
209
- 2, 54, :_reduce_none,
210
- 1, 54, :_reduce_none,
211
- 1, 35, :_reduce_none,
212
- 0, 35, :_reduce_none ]
213
-
214
- racc_reduce_n = 76
215
-
216
- racc_shift_n = 111
155
+ 3, 33, :_reduce_1,
156
+ 1, 33, :_reduce_2,
157
+ 2, 33, :_reduce_3,
158
+ 1, 37, :_reduce_4,
159
+ 1, 37, :_reduce_5,
160
+ 1, 37, :_reduce_6,
161
+ 1, 37, :_reduce_7,
162
+ 1, 37, :_reduce_8,
163
+ 2, 38, :_reduce_9,
164
+ 1, 39, :_reduce_10,
165
+ 2, 40, :_reduce_11,
166
+ 1, 40, :_reduce_none,
167
+ 2, 40, :_reduce_13,
168
+ 2, 40, :_reduce_14,
169
+ 1, 40, :_reduce_15,
170
+ 1, 40, :_reduce_none,
171
+ 2, 35, :_reduce_17,
172
+ 3, 34, :_reduce_18,
173
+ 3, 34, :_reduce_19,
174
+ 1, 34, :_reduce_none,
175
+ 2, 47, :_reduce_21,
176
+ 1, 41, :_reduce_none,
177
+ 1, 41, :_reduce_23,
178
+ 3, 48, :_reduce_24,
179
+ 1, 48, :_reduce_25,
180
+ 1, 49, :_reduce_26,
181
+ 0, 49, :_reduce_none,
182
+ 4, 45, :_reduce_28,
183
+ 4, 45, :_reduce_29,
184
+ 3, 45, :_reduce_30,
185
+ 3, 50, :_reduce_31,
186
+ 1, 50, :_reduce_32,
187
+ 1, 50, :_reduce_none,
188
+ 2, 43, :_reduce_34,
189
+ 3, 43, :_reduce_35,
190
+ 3, 43, :_reduce_36,
191
+ 3, 43, :_reduce_37,
192
+ 3, 43, :_reduce_38,
193
+ 3, 52, :_reduce_39,
194
+ 3, 52, :_reduce_40,
195
+ 3, 52, :_reduce_41,
196
+ 3, 52, :_reduce_42,
197
+ 1, 52, :_reduce_none,
198
+ 1, 52, :_reduce_none,
199
+ 1, 52, :_reduce_45,
200
+ 1, 52, :_reduce_none,
201
+ 4, 53, :_reduce_47,
202
+ 3, 53, :_reduce_48,
203
+ 2, 53, :_reduce_49,
204
+ 2, 44, :_reduce_50,
205
+ 2, 44, :_reduce_51,
206
+ 1, 42, :_reduce_none,
207
+ 0, 42, :_reduce_none,
208
+ 2, 46, :_reduce_54,
209
+ 2, 46, :_reduce_55,
210
+ 2, 46, :_reduce_56,
211
+ 2, 46, :_reduce_57,
212
+ 2, 46, :_reduce_58,
213
+ 1, 46, :_reduce_none,
214
+ 1, 46, :_reduce_none,
215
+ 1, 46, :_reduce_none,
216
+ 1, 46, :_reduce_none,
217
+ 1, 46, :_reduce_none,
218
+ 1, 54, :_reduce_64,
219
+ 2, 51, :_reduce_65,
220
+ 2, 51, :_reduce_66,
221
+ 2, 51, :_reduce_67,
222
+ 0, 51, :_reduce_none,
223
+ 1, 56, :_reduce_69,
224
+ 1, 56, :_reduce_70,
225
+ 1, 56, :_reduce_71,
226
+ 1, 56, :_reduce_72,
227
+ 1, 56, :_reduce_73,
228
+ 1, 56, :_reduce_74,
229
+ 1, 56, :_reduce_75,
230
+ 3, 55, :_reduce_76,
231
+ 1, 57, :_reduce_none,
232
+ 2, 57, :_reduce_none,
233
+ 1, 57, :_reduce_none,
234
+ 1, 36, :_reduce_none,
235
+ 0, 36, :_reduce_none ]
236
+
237
+ racc_reduce_n = 82
238
+
239
+ racc_shift_n = 119
217
240
 
218
241
  racc_token_table = {
219
242
  false => 0,
@@ -243,12 +266,13 @@ racc_token_table = {
243
266
  :LSQUARE => 24,
244
267
  :RSQUARE => 25,
245
268
  :HAS => 26,
246
- "." => 27,
247
- "*" => 28,
248
- "|" => 29,
249
- ":" => 30 }
269
+ "@" => 27,
270
+ "." => 28,
271
+ "*" => 29,
272
+ "|" => 30,
273
+ ":" => 31 }
250
274
 
251
- racc_nt_base = 31
275
+ racc_nt_base = 32
252
276
 
253
277
  racc_use_result_var = true
254
278
 
@@ -267,6 +291,7 @@ Racc_arg = [
267
291
  racc_shift_n,
268
292
  racc_reduce_n,
269
293
  racc_use_result_var ]
294
+ Ractor.make_shareable(Racc_arg) if defined?(Ractor)
270
295
 
271
296
  Racc_token_to_s_table = [
272
297
  "$end",
@@ -296,6 +321,7 @@ Racc_token_to_s_table = [
296
321
  "LSQUARE",
297
322
  "RSQUARE",
298
323
  "HAS",
324
+ "\"@\"",
299
325
  "\".\"",
300
326
  "\"*\"",
301
327
  "\"|\"",
@@ -306,6 +332,8 @@ Racc_token_to_s_table = [
306
332
  "prefixless_combinator_selector",
307
333
  "optional_S",
308
334
  "combinator",
335
+ "xpath_attribute_name",
336
+ "xpath_attribute",
309
337
  "simple_selector",
310
338
  "element_name",
311
339
  "hcap_0toN",
@@ -324,6 +352,7 @@ Racc_token_to_s_table = [
324
352
  "negation",
325
353
  "eql_incl_dash",
326
354
  "negation_arg" ]
355
+ Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)
327
356
 
328
357
  Racc_debug_parser = false
329
358
 
@@ -332,419 +361,412 @@ Racc_debug_parser = false
332
361
  # reduce 0 omitted
333
362
 
334
363
  def _reduce_1(val, _values, result)
335
- result = [val.first, val.last].flatten
336
-
364
+ result = [val[0], val[2]].flatten
365
+
337
366
  result
338
367
  end
339
368
 
340
369
  def _reduce_2(val, _values, result)
341
- result = val.flatten
370
+ result = val.flatten
342
371
  result
343
372
  end
344
373
 
345
374
  def _reduce_3(val, _values, result)
346
- result = [val.last].flatten
375
+ result = [val[1]].flatten
347
376
  result
348
377
  end
349
378
 
350
379
  def _reduce_4(val, _values, result)
351
- result = :DIRECT_ADJACENT_SELECTOR
380
+ result = :DIRECT_ADJACENT_SELECTOR
352
381
  result
353
382
  end
354
383
 
355
384
  def _reduce_5(val, _values, result)
356
- result = :CHILD_SELECTOR
385
+ result = :CHILD_SELECTOR
357
386
  result
358
387
  end
359
388
 
360
389
  def _reduce_6(val, _values, result)
361
- result = :FOLLOWING_SELECTOR
390
+ result = :FOLLOWING_SELECTOR
362
391
  result
363
392
  end
364
393
 
365
394
  def _reduce_7(val, _values, result)
366
- result = :DESCENDANT_SELECTOR
395
+ result = :DESCENDANT_SELECTOR
367
396
  result
368
397
  end
369
398
 
370
399
  def _reduce_8(val, _values, result)
371
- result = :CHILD_SELECTOR
400
+ result = :CHILD_SELECTOR
372
401
  result
373
402
  end
374
403
 
375
404
  def _reduce_9(val, _values, result)
376
- result = if val[1].nil?
377
- val.first
378
- else
379
- Node.new(:CONDITIONAL_SELECTOR, [val.first, val[1]])
380
- end
381
-
405
+ result = val[1]
382
406
  result
383
407
  end
384
408
 
385
- # reduce 10 omitted
386
-
387
- def _reduce_11(val, _values, result)
388
- result = Node.new(:CONDITIONAL_SELECTOR, val)
389
-
409
+ def _reduce_10(val, _values, result)
410
+ result = Node.new(:ATTRIB_NAME, [val[0]])
390
411
  result
391
412
  end
392
413
 
393
- def _reduce_12(val, _values, result)
394
- result = Node.new(:CONDITIONAL_SELECTOR, val)
395
-
414
+ def _reduce_11(val, _values, result)
415
+ result = if val[1].nil?
416
+ val[0]
417
+ else
418
+ Node.new(:CONDITIONAL_SELECTOR, [val[0], val[1]])
419
+ end
420
+
396
421
  result
397
422
  end
398
423
 
424
+ # reduce 12 omitted
425
+
399
426
  def _reduce_13(val, _values, result)
400
- result = Node.new(:CONDITIONAL_SELECTOR,
401
- [Node.new(:ELEMENT_NAME, ['*']), val.first]
402
- )
403
-
427
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
404
428
  result
405
429
  end
406
430
 
407
431
  def _reduce_14(val, _values, result)
408
- result = Node.new(val.first, [nil, val.last])
409
-
432
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
410
433
  result
411
434
  end
412
435
 
413
436
  def _reduce_15(val, _values, result)
414
- result = Node.new(val[1], [val.first, val.last])
415
-
437
+ result = Node.new(:CONDITIONAL_SELECTOR, [Node.new(:ELEMENT_NAME, ['*']), val[0]])
416
438
  result
417
439
  end
418
440
 
419
- def _reduce_16(val, _values, result)
420
- result = Node.new(:DESCENDANT_SELECTOR, [val.first, val.last])
421
-
441
+ # reduce 16 omitted
442
+
443
+ def _reduce_17(val, _values, result)
444
+ result = Node.new(val[0], [nil, val[1]])
422
445
  result
423
446
  end
424
447
 
425
- # reduce 17 omitted
426
-
427
448
  def _reduce_18(val, _values, result)
428
- result = Node.new(:CLASS_CONDITION, [unescape_css_identifier(val[1])])
449
+ result = Node.new(val[1], [val[0], val[2]])
429
450
  result
430
451
  end
431
452
 
432
- # reduce 19 omitted
433
-
434
- def _reduce_20(val, _values, result)
435
- result = Node.new(:ELEMENT_NAME, val)
453
+ def _reduce_19(val, _values, result)
454
+ result = Node.new(:DESCENDANT_SELECTOR, [val[0], val[2]])
436
455
  result
437
456
  end
438
457
 
458
+ # reduce 20 omitted
459
+
439
460
  def _reduce_21(val, _values, result)
440
- result = Node.new(:ELEMENT_NAME,
441
- [[val.first, val.last].compact.join(':')]
442
- )
443
-
461
+ result = Node.new(:CLASS_CONDITION, [unescape_css_identifier(val[1])])
444
462
  result
445
463
  end
446
464
 
447
- def _reduce_22(val, _values, result)
448
- name = @namespaces.key?('xmlns') ? "xmlns:#{val.first}" : val.first
449
- result = Node.new(:ELEMENT_NAME, [name])
450
-
451
- result
452
- end
465
+ # reduce 22 omitted
453
466
 
454
467
  def _reduce_23(val, _values, result)
455
- result = val[0]
468
+ result = Node.new(:ELEMENT_NAME, val)
456
469
  result
457
470
  end
458
471
 
459
- # reduce 24 omitted
472
+ def _reduce_24(val, _values, result)
473
+ result = Node.new(:ELEMENT_NAME, [val[0], val[2]])
474
+ result
475
+ end
460
476
 
461
477
  def _reduce_25(val, _values, result)
462
- result = Node.new(:ATTRIBUTE_CONDITION,
463
- [val[1]] + (val[2] || [])
464
- )
465
-
478
+ name = val[0]
479
+ result = Node.new(:ELEMENT_NAME, [name])
480
+
466
481
  result
467
482
  end
468
483
 
469
484
  def _reduce_26(val, _values, result)
470
- result = Node.new(:ATTRIBUTE_CONDITION,
471
- [val[1]] + (val[2] || [])
472
- )
473
-
485
+ result = val[0]
474
486
  result
475
487
  end
476
488
 
477
- def _reduce_27(val, _values, result)
478
- # Non standard, but hpricot supports it.
479
- result = Node.new(:PSEUDO_CLASS,
480
- [Node.new(:FUNCTION, ['nth-child(', val[1]])]
481
- )
482
-
483
- result
484
- end
489
+ # reduce 27 omitted
485
490
 
486
491
  def _reduce_28(val, _values, result)
487
- result = Node.new(:ELEMENT_NAME,
488
- [[val.first, val.last].compact.join(':')]
489
- )
490
-
492
+ result = Node.new(:ATTRIBUTE_CONDITION, [val[1]] + (val[2] || []))
493
+
491
494
  result
492
495
  end
493
496
 
494
497
  def _reduce_29(val, _values, result)
495
- # Default namespace is not applied to attributes.
496
- # So we don't add prefix "xmlns:" as in namespaced_ident.
497
- result = Node.new(:ELEMENT_NAME, [val.first])
498
-
498
+ result = Node.new(:ATTRIBUTE_CONDITION, [val[1]] + (val[2] || []))
499
+
499
500
  result
500
501
  end
501
502
 
502
503
  def _reduce_30(val, _values, result)
503
- result = Node.new(:FUNCTION, [val.first.strip])
504
-
504
+ result = Node.new(:PSEUDO_CLASS, [Node.new(:FUNCTION, ['nth-child(', val[1]])])
505
+
505
506
  result
506
507
  end
507
508
 
508
509
  def _reduce_31(val, _values, result)
509
- result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
510
-
510
+ result = Node.new(:ATTRIB_NAME, [[val[0], val[2]].compact.join(':')])
511
511
  result
512
512
  end
513
513
 
514
514
  def _reduce_32(val, _values, result)
515
- result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
516
-
515
+ result = Node.new(:ATTRIB_NAME, [val[0]])
517
516
  result
518
517
  end
519
518
 
520
- def _reduce_33(val, _values, result)
521
- result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
522
-
523
- result
524
- end
519
+ # reduce 33 omitted
525
520
 
526
521
  def _reduce_34(val, _values, result)
527
- result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
528
-
522
+ result = Node.new(:FUNCTION, [val[0].strip])
523
+
529
524
  result
530
525
  end
531
526
 
532
527
  def _reduce_35(val, _values, result)
533
- result = [val.first, val.last]
528
+ result = Node.new(:FUNCTION, [val[0].strip, val[1]].flatten)
529
+
534
530
  result
535
531
  end
536
532
 
537
533
  def _reduce_36(val, _values, result)
538
- result = [val.first, val.last]
534
+ result = Node.new(:FUNCTION, [val[0].strip, val[1]].flatten)
535
+
539
536
  result
540
537
  end
541
538
 
542
539
  def _reduce_37(val, _values, result)
543
- result = [val.first, val.last]
540
+ result = Node.new(:FUNCTION, [val[0].strip, val[1]].flatten)
541
+
544
542
  result
545
543
  end
546
544
 
547
- # reduce 38 omitted
548
-
549
- # reduce 39 omitted
545
+ def _reduce_38(val, _values, result)
546
+ result = Node.new(:FUNCTION, [val[0].strip, val[1]].flatten)
550
547
 
551
- def _reduce_40(val, _values, result)
552
- case val[0]
553
- when 'even'
554
- result = Node.new(:NTH, ['2','n','+','0'])
555
- when 'odd'
556
- result = Node.new(:NTH, ['2','n','+','1'])
557
- when 'n'
558
- result = Node.new(:NTH, ['1','n','+','0'])
559
- else
560
- # This is not CSS standard. It allows us to support this:
561
- # assert_xpath("//a[foo(., @href)]", @parser.parse('a:foo(@href)'))
562
- # assert_xpath("//a[foo(., @a, b)]", @parser.parse('a:foo(@a, b)'))
563
- # assert_xpath("//a[foo(., a, 10)]", @parser.parse('a:foo(a, 10)'))
564
- result = val
565
- end
566
-
567
548
  result
568
549
  end
569
550
 
570
- def _reduce_41(val, _values, result)
571
- if val[1] == 'n'
572
- result = Node.new(:NTH, val)
573
- else
574
- raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
575
- end
576
-
551
+ def _reduce_39(val, _values, result)
552
+ result = [val[0], val[2]]
577
553
  result
578
554
  end
579
555
 
580
- def _reduce_42(val, _values, result)
581
- # n+3, -n+3
582
- if val[0] == 'n'
583
- val.unshift("1")
584
- result = Node.new(:NTH, val)
585
- elsif val[0] == '-n'
586
- val[0] = 'n'
587
- val.unshift("-1")
588
- result = Node.new(:NTH, val)
589
- else
590
- raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
591
- end
592
-
556
+ def _reduce_40(val, _values, result)
557
+ result = [val[0], val[2]]
593
558
  result
594
559
  end
595
560
 
596
- def _reduce_43(val, _values, result)
597
- # 5n, -5n, 10n-1
598
- n = val[1]
599
- if n[0, 2] == 'n-'
600
- val[1] = 'n'
601
- val << "-"
602
- # b is contained in n as n is the string "n-b"
603
- val << n[2, n.size]
604
- result = Node.new(:NTH, val)
605
- elsif n == 'n'
606
- val << "+"
607
- val << "0"
608
- result = Node.new(:NTH, val)
609
- else
610
- raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
611
- end
612
-
561
+ def _reduce_41(val, _values, result)
562
+ result = [val[0], val[2]]
613
563
  result
614
564
  end
615
565
 
616
- def _reduce_44(val, _values, result)
617
- result = Node.new(:PSEUDO_CLASS, [val[1]])
618
-
566
+ def _reduce_42(val, _values, result)
567
+ result = [val[0], val[2]]
619
568
  result
620
569
  end
621
570
 
571
+ # reduce 43 omitted
572
+
573
+ # reduce 44 omitted
574
+
622
575
  def _reduce_45(val, _values, result)
623
- result = Node.new(:PSEUDO_CLASS, [val[1]])
576
+ case val[0]
577
+ when 'even'
578
+ result = Node.new(:NTH, ['2','n','+','0'])
579
+ when 'odd'
580
+ result = Node.new(:NTH, ['2','n','+','1'])
581
+ when 'n'
582
+ result = Node.new(:NTH, ['1','n','+','0'])
583
+ else
584
+ result = val
585
+ end
586
+
624
587
  result
625
588
  end
626
589
 
627
590
  # reduce 46 omitted
628
591
 
629
- # reduce 47 omitted
592
+ def _reduce_47(val, _values, result)
593
+ if val[1] == 'n'
594
+ result = Node.new(:NTH, val)
595
+ else
596
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
597
+ end
598
+
599
+ result
600
+ end
630
601
 
631
602
  def _reduce_48(val, _values, result)
632
- result = Node.new(:COMBINATOR, val)
633
-
603
+ # n+3, -n+3
604
+ if val[0] == 'n'
605
+ val.unshift("1")
606
+ result = Node.new(:NTH, val)
607
+ elsif val[0] == '-n'
608
+ val[0] = 'n'
609
+ val.unshift("-1")
610
+ result = Node.new(:NTH, val)
611
+ else
612
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
613
+ end
614
+
634
615
  result
635
616
  end
636
617
 
637
618
  def _reduce_49(val, _values, result)
638
- result = Node.new(:COMBINATOR, val)
639
-
619
+ # 5n, -5n, 10n-1
620
+ n = val[1]
621
+ if n[0, 2] == 'n-'
622
+ val[1] = 'n'
623
+ val << "-"
624
+ # b is contained in n as n is the string "n-b"
625
+ val << n[2, n.size]
626
+ result = Node.new(:NTH, val)
627
+ elsif n == 'n'
628
+ val << "+"
629
+ val << "0"
630
+ result = Node.new(:NTH, val)
631
+ else
632
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
633
+ end
634
+
640
635
  result
641
636
  end
642
637
 
643
638
  def _reduce_50(val, _values, result)
644
- result = Node.new(:COMBINATOR, val)
645
-
639
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
640
+
646
641
  result
647
642
  end
648
643
 
649
644
  def _reduce_51(val, _values, result)
650
- result = Node.new(:COMBINATOR, val)
651
-
645
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
652
646
  result
653
647
  end
654
648
 
655
- def _reduce_52(val, _values, result)
656
- result = Node.new(:COMBINATOR, val)
657
-
658
- result
659
- end
649
+ # reduce 52 omitted
660
650
 
661
651
  # reduce 53 omitted
662
652
 
663
- # reduce 54 omitted
664
-
665
- # reduce 55 omitted
653
+ def _reduce_54(val, _values, result)
654
+ result = Node.new(:COMBINATOR, val)
666
655
 
667
- # reduce 56 omitted
656
+ result
657
+ end
668
658
 
669
- # reduce 57 omitted
659
+ def _reduce_55(val, _values, result)
660
+ result = Node.new(:COMBINATOR, val)
670
661
 
671
- def _reduce_58(val, _values, result)
672
- result = Node.new(:ID, [unescape_css_identifier(val.first)])
673
662
  result
674
663
  end
675
664
 
676
- def _reduce_59(val, _values, result)
677
- result = [val.first, unescape_css_identifier(val[1])]
665
+ def _reduce_56(val, _values, result)
666
+ result = Node.new(:COMBINATOR, val)
667
+
678
668
  result
679
669
  end
680
670
 
681
- def _reduce_60(val, _values, result)
682
- result = [val.first, unescape_css_string(val[1])]
671
+ def _reduce_57(val, _values, result)
672
+ result = Node.new(:COMBINATOR, val)
673
+
683
674
  result
684
675
  end
685
676
 
686
- def _reduce_61(val, _values, result)
687
- result = [val.first, val[1]]
677
+ def _reduce_58(val, _values, result)
678
+ result = Node.new(:COMBINATOR, val)
679
+
688
680
  result
689
681
  end
690
682
 
683
+ # reduce 59 omitted
684
+
685
+ # reduce 60 omitted
686
+
687
+ # reduce 61 omitted
688
+
691
689
  # reduce 62 omitted
692
690
 
693
- def _reduce_63(val, _values, result)
694
- result = :equal
695
- result
696
- end
691
+ # reduce 63 omitted
697
692
 
698
693
  def _reduce_64(val, _values, result)
699
- result = :prefix_match
694
+ result = Node.new(:ID, [unescape_css_identifier(val[0])])
700
695
  result
701
696
  end
702
697
 
703
698
  def _reduce_65(val, _values, result)
704
- result = :suffix_match
699
+ result = [val[0], unescape_css_identifier(val[1])]
705
700
  result
706
701
  end
707
702
 
708
703
  def _reduce_66(val, _values, result)
709
- result = :substring_match
704
+ result = [val[0], unescape_css_string(val[1])]
710
705
  result
711
706
  end
712
707
 
713
708
  def _reduce_67(val, _values, result)
714
- result = :not_equal
709
+ result = [val[0], val[1]]
715
710
  result
716
711
  end
717
712
 
718
- def _reduce_68(val, _values, result)
719
- result = :includes
720
- result
721
- end
713
+ # reduce 68 omitted
722
714
 
723
715
  def _reduce_69(val, _values, result)
724
- result = :dash_match
716
+ result = :equal
725
717
  result
726
718
  end
727
719
 
728
720
  def _reduce_70(val, _values, result)
729
- result = Node.new(:NOT, [val[1]])
730
-
721
+ result = :prefix_match
722
+ result
723
+ end
724
+
725
+ def _reduce_71(val, _values, result)
726
+ result = :suffix_match
727
+ result
728
+ end
729
+
730
+ def _reduce_72(val, _values, result)
731
+ result = :substring_match
732
+ result
733
+ end
734
+
735
+ def _reduce_73(val, _values, result)
736
+ result = :not_equal
737
+ result
738
+ end
739
+
740
+ def _reduce_74(val, _values, result)
741
+ result = :includes
742
+ result
743
+ end
744
+
745
+ def _reduce_75(val, _values, result)
746
+ result = :dash_match
747
+ result
748
+ end
749
+
750
+ def _reduce_76(val, _values, result)
751
+ result = Node.new(:NOT, [val[1]])
752
+
731
753
  result
732
754
  end
733
755
 
734
- # reduce 71 omitted
756
+ # reduce 77 omitted
735
757
 
736
- # reduce 72 omitted
758
+ # reduce 78 omitted
737
759
 
738
- # reduce 73 omitted
760
+ # reduce 79 omitted
739
761
 
740
- # reduce 74 omitted
762
+ # reduce 80 omitted
741
763
 
742
- # reduce 75 omitted
764
+ # reduce 81 omitted
743
765
 
744
766
  def _reduce_none(val, _values, result)
745
767
  val[0]
746
768
  end
747
769
 
748
770
  end # class Parser
749
- end # module CSS
750
- end # module Nokogiri
771
+ end # module CSS
772
+ end # module Nokogiri