gammo 0.2.0 → 0.3.0

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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +32 -0
  3. data/Gemfile.lock +6 -6
  4. data/README.md +334 -10
  5. data/Rakefile +5 -1
  6. data/lib/gammo/attributes.rb +5 -0
  7. data/lib/gammo/css_selector/ast/combinator.rb +92 -0
  8. data/lib/gammo/css_selector/ast/selector/attrib_selector.rb +86 -0
  9. data/lib/gammo/css_selector/ast/selector/class_selector.rb +19 -0
  10. data/lib/gammo/css_selector/ast/selector/id_selector.rb +18 -0
  11. data/lib/gammo/css_selector/ast/selector/negation.rb +21 -0
  12. data/lib/gammo/css_selector/ast/selector/pseudo_class.rb +92 -0
  13. data/lib/gammo/css_selector/ast/selector.rb +100 -0
  14. data/lib/gammo/css_selector/context.rb +17 -0
  15. data/lib/gammo/css_selector/errors.rb +6 -0
  16. data/lib/gammo/css_selector/node_set.rb +44 -0
  17. data/lib/gammo/css_selector/parser.rb +790 -0
  18. data/lib/gammo/css_selector/parser.y +321 -0
  19. data/lib/gammo/css_selector.rb +33 -0
  20. data/lib/gammo/modules/subclassify.rb +31 -0
  21. data/lib/gammo/node.rb +2 -0
  22. data/lib/gammo/parser/foreign.rb +3 -3
  23. data/lib/gammo/parser/insertion_mode/after_after_body.rb +1 -1
  24. data/lib/gammo/parser/insertion_mode/after_after_frameset.rb +1 -1
  25. data/lib/gammo/parser/insertion_mode/after_body.rb +1 -1
  26. data/lib/gammo/parser/insertion_mode/after_frameset.rb +1 -1
  27. data/lib/gammo/parser/insertion_mode/after_head.rb +1 -1
  28. data/lib/gammo/parser/insertion_mode/before_head.rb +1 -1
  29. data/lib/gammo/parser/insertion_mode/before_html.rb +1 -1
  30. data/lib/gammo/parser/insertion_mode/in_body.rb +1 -1
  31. data/lib/gammo/parser/insertion_mode/in_column_group.rb +1 -1
  32. data/lib/gammo/parser/insertion_mode/in_frameset.rb +1 -1
  33. data/lib/gammo/parser/insertion_mode/in_head.rb +3 -2
  34. data/lib/gammo/parser/insertion_mode/in_head_noscript.rb +1 -1
  35. data/lib/gammo/parser/insertion_mode/in_select.rb +1 -1
  36. data/lib/gammo/parser/insertion_mode/in_table.rb +1 -1
  37. data/lib/gammo/parser/insertion_mode/in_template.rb +1 -1
  38. data/lib/gammo/parser/insertion_mode/initial.rb +1 -1
  39. data/lib/gammo/parser/insertion_mode/text.rb +1 -1
  40. data/lib/gammo/parser/insertion_mode.rb +1 -1
  41. data/lib/gammo/tokenizer/tokens.rb +10 -1
  42. data/lib/gammo/tokenizer.rb +10 -10
  43. data/lib/gammo/version.rb +1 -1
  44. data/lib/gammo/xpath/ast/axis.rb +1 -1
  45. data/lib/gammo/xpath/ast/expression.rb +2 -0
  46. data/lib/gammo/xpath/ast/function.rb +1 -1
  47. data/lib/gammo/xpath/ast/node_test.rb +1 -1
  48. data/lib/gammo/xpath/ast/path.rb +1 -0
  49. data/lib/gammo/xpath.rb +4 -5
  50. metadata +17 -4
  51. data/.travis.yml +0 -6
  52. data/lib/gammo/xpath/ast/subclassify.rb +0 -35
@@ -0,0 +1,790 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.5.0
4
+ # from Racc grammar file "".
5
+ #
6
+
7
+ require 'racc/parser.rb'
8
+ module Gammo
9
+ module CSSSelector
10
+ class Parser < Racc::Parser
11
+
12
+ module_eval(<<'...end parser.y/module_eval...', 'parser.y', 197)
13
+
14
+ NONASCII = /[^\0-\177]/
15
+ UNICODE = /\\[0-9a-f]{1,6}(\r\n|[ \n\r\t\f])?/
16
+ ESCAPE = /#{UNICODE}|\\[^\n\r\f0-9a-f]/
17
+ NMCHAR = /[_a-z0-9-]|#{NONASCII}|#{ESCAPE}/
18
+ NMSTART = /[_a-z]|#{NONASCII}|#{ESCAPE}/
19
+ NUM = /[0-9]+|[0-9]*\.[0-9]+/
20
+ NAME = /#{NMCHAR}+/
21
+ IDENT = /[-]?#{NMSTART}#{NMCHAR}*/
22
+ NL = /\n|\r\n|\r|\f/
23
+ STRING1 = /\"([^\n\r\f\\"]|\\#{NL}|#{NONASCII}|#{ESCAPE})*\"/
24
+ STRING2 = /\'([^\n\r\f\\']|\\#{NL}|#{NONASCII}|#{ESCAPE})*\'/
25
+ STRING = /#{STRING1}|#{STRING2}/
26
+ INVALID1 = /\"([^\n\r\f\\"]|\\#{NL}|#{NONASCII}|#{ESCAPE})*/
27
+ INVALID2 = /\'([^\n\r\f\\']|\\#{NL}|#{NONASCII}|#{ESCAPE})*/
28
+ INVALID = /#{INVALID1}|#{INVALID2}/
29
+ W = /[ \t\r\n\f]*/
30
+ D = /d|\\0{0,4}(44|64)(\r\n|[ \t\r\n\f])?/
31
+ E = /e|\\0{0,4}(45|65)(\r\n|[ \t\r\n\f])?/
32
+ N = /n|\\0{0,4}(4e|6e)(\r\n|[ \t\r\n\f])?|\\n/
33
+ O = /o|\\0{0,4}(4f|6f)(\r\n|[ \t\r\n\f])?|\\o/
34
+ T = /t|\\0{0,4}(54|74)(\r\n|[ \t\r\n\f])?|\\t/
35
+ V = /v|\\0{0,4}(58|78)(\r\n|[ \t\r\n\f])?|\\v/
36
+ S = /[ \t\r\n\f]+/
37
+
38
+ require 'strscan'
39
+ require 'forwardable'
40
+ require 'gammo/css_selector/errors'
41
+ require 'gammo/css_selector/ast/selector'
42
+ require 'gammo/css_selector/ast/combinator'
43
+
44
+ extend Forwardable
45
+ def_delegators :@scanner, :scan, :eos?
46
+
47
+ def initialize(input)
48
+ super()
49
+ @yydebug = true
50
+ @input = input
51
+ @scanner = StringScanner.new(input)
52
+ end
53
+
54
+ def parse
55
+ @query = []
56
+ advance { |symbol, val| @query << [symbol, val] }
57
+ do_parse
58
+ end
59
+
60
+ def token(symbol, val, &block)
61
+ @prev_token = symbol
62
+ block.call(symbol, val)
63
+ end
64
+
65
+ def next_token
66
+ @query.shift
67
+ end
68
+
69
+ EXPR_TOKENS = {
70
+ '=' => :T_EQUAL,
71
+ '[' => :T_LBRACK,
72
+ ']' => :T_RBRACK,
73
+ ')' => :T_RPAREN,
74
+ '.' => :T_DOT,
75
+ ',' => :T_COMMA,
76
+ ':' => :T_COLON
77
+ }.freeze
78
+
79
+ # Declaring the regexp consisting of EXPR_TOKENS keys to keep the token order.
80
+ EXPRS = /=|\[|\]|@|,|\.|\)|\:/
81
+
82
+ def fetch(key, constraints)
83
+ unless symbol = constraints[key]
84
+ fail ParseError, "unexpected token: #{symbol}, want = #{constraints.keys}"
85
+ end
86
+ yield symbol
87
+ end
88
+
89
+ LEXER_TOKENS = []
90
+ Pattern = Struct.new(:pattern, :token, :range)
91
+ def self.map(pattern, token, range: nil)
92
+ LEXER_TOKENS << Pattern.new(pattern, token, range)
93
+ end
94
+
95
+ map(S, :T_S)
96
+ map(/\~=/, :T_INCLUDES)
97
+ map(/\|=/, :T_DASHMATCH)
98
+ map(/\^=/, :T_PREFIXMATCH)
99
+ map(/\$=/, :T_SUFFIXMATCH)
100
+ map(/\*=/, :T_SUBSTRINGMATCH)
101
+ map(/<!--/, :T_CDO)
102
+ map(/-->/, :T_CDC)
103
+ map(/#{IDENT}\(/, :T_FUNCTION)
104
+ map(/#{NUM}%/, :T_PERCENTAGE)
105
+ map(/#{NUM}#{IDENT}/, :T_DIMENSION)
106
+ map(IDENT, :T_IDENT)
107
+ map(STRING, :T_STRING, range: 1..-2) # Remove quotes
108
+ map(NUM, :T_NUMBER)
109
+ map(/##{NAME}/, :T_HASH, range: 1..-1) # Remove hash ('#')
110
+ map(/#{W}\+/, :T_PLUS)
111
+ map(/#{W}\-/, :T_MINUS)
112
+ map(/#{W}>/, :T_GREATER)
113
+ map(/#{W},/, :T_COMMA)
114
+ map(/#{W}~/, :T_TILDE)
115
+ map(/:#{N}#{O}#{T}\(/, :T_NOT)
116
+ map(/@#{IDENT}/, :T_ATKEYWORD)
117
+ map(/#{INVALID}/, :T_INVALID)
118
+ map(/\|/, :T_PIPE)
119
+ map(/\*/, :T_ASTERISK)
120
+
121
+ # TODO: ignore comment token
122
+ def advance(&block)
123
+ @prev_token = nil
124
+ until eos?
125
+ next if LEXER_TOKENS.find do |pattern|
126
+ next false unless matched = scan(pattern.pattern)
127
+ matched = matched[pattern.range] if pattern.range
128
+ token pattern.token, matched, &block
129
+ break true
130
+ end
131
+ if expr = scan(EXPRS)
132
+ fetch(expr, EXPR_TOKENS) { |symbol| token symbol, expr, &block }
133
+ next
134
+ end
135
+ fail ParseError, "unexpected token: '#{@scanner.string[@scanner.pos..-1]}'"
136
+ end
137
+ end
138
+ ...end parser.y/module_eval...
139
+ ##### State transition tables begin ###
140
+
141
+ racc_action_table = [
142
+ 84, 85, 86, 87, 88, 89, 90, 52, 55, 39,
143
+ 18, 23, 38, 24, 27, 17, 53, 20, 17, 19,
144
+ 21, 18, 23, -5, 24, 96, 57, 22, 20, 17,
145
+ 19, 21, 18, 27, 27, 24, 27, 38, 22, 20,
146
+ 17, 19, 21, 18, 23, 36, 24, 100, 99, 22,
147
+ 20, 17, 19, 21, 37, 23, 23, 24, 24, 27,
148
+ 22, 20, 20, 27, 21, 21, 39, 23, 23, 24,
149
+ 24, 22, 22, 20, 20, 48, 21, 21, -8, 23,
150
+ -8, 24, -2, 22, 22, 20, 49, 50, 21, 70,
151
+ 27, 27, 46, -2, -2, 22, 84, 85, 86, 87,
152
+ 88, 89, 90, 76, 77, 78, 79, 80, 81, 76,
153
+ 77, 78, 79, 80, 81, 27, 27, 92, 93, 27,
154
+ 25, 27, 101, 27, 27, 46, 45, 47, 27, 27,
155
+ 43, 27, 40 ]
156
+
157
+ racc_action_check = [
158
+ 83, 83, 83, 83, 83, 83, 83, 41, 42, 19,
159
+ 0, 0, 18, 0, 47, 41, 41, 0, 0, 0,
160
+ 0, 65, 65, 2, 65, 83, 42, 0, 65, 65,
161
+ 65, 65, 44, 52, 48, 44, 2, 52, 65, 44,
162
+ 44, 44, 44, 31, 31, 16, 31, 94, 94, 44,
163
+ 31, 31, 31, 31, 16, 8, 33, 8, 33, 49,
164
+ 31, 8, 33, 50, 8, 33, 53, 32, 6, 32,
165
+ 6, 8, 33, 32, 6, 30, 32, 6, 4, 7,
166
+ 4, 7, 29, 32, 6, 7, 30, 30, 7, 54,
167
+ 57, 4, 29, 29, 29, 7, 71, 71, 71, 71,
168
+ 71, 71, 71, 69, 69, 69, 69, 69, 69, 82,
169
+ 82, 82, 82, 82, 82, 58, 70, 72, 74, 75,
170
+ 1, 91, 95, 97, 99, 26, 25, 28, 100, 23,
171
+ 22, 21, 20 ]
172
+
173
+ racc_action_pointer = [
174
+ 1, 120, 23, nil, 78, nil, 58, 69, 45, nil,
175
+ nil, nil, nil, nil, nil, nil, 36, nil, -5, -8,
176
+ 123, 118, 104, 116, nil, 126, 112, nil, 125, 79,
177
+ 72, 34, 57, 46, nil, nil, nil, nil, nil, nil,
178
+ nil, -2, -1, nil, 23, nil, nil, 1, 21, 46,
179
+ 50, nil, 20, 49, 80, nil, nil, 77, 102, nil,
180
+ nil, nil, nil, nil, nil, 12, nil, nil, nil, 83,
181
+ 103, 93, 89, nil, 107, 106, nil, nil, nil, nil,
182
+ nil, nil, 89, -3, nil, nil, nil, nil, nil, nil,
183
+ nil, 108, nil, nil, 39, 111, nil, 110, nil, 111,
184
+ 115, nil, nil, nil, nil ]
185
+
186
+ racc_action_default = [
187
+ -69, -69, -1, -6, -1, -13, -15, -16, -19, -20,
188
+ -22, -23, -24, -25, -26, -27, -69, -29, -32, -34,
189
+ -69, -1, -49, -1, -68, -69, -2, -3, -69, -12,
190
+ -69, -69, -17, -18, -21, -28, -32, -33, -30, -31,
191
+ -35, -69, -69, -50, -69, 105, -4, -1, -1, -1,
192
+ -1, -14, -1, -69, -69, -47, -48, -1, -1, -62,
193
+ -63, -64, -65, -66, -67, -69, -9, -10, -11, -38,
194
+ -1, -69, -69, -7, -69, -1, -41, -42, -43, -44,
195
+ -45, -46, -38, -69, -52, -53, -54, -55, -56, -57,
196
+ -58, -1, -61, -37, -69, -69, -51, -1, -59, -1,
197
+ -1, -36, -60, -39, -40 ]
198
+
199
+ racc_goto_table = [
200
+ 28, 3, 30, 34, 74, 60, 91, 32, 33, 61,
201
+ 62, 63, 64, 35, 54, 42, 56, 95, 97, 41,
202
+ 83, 44, 1, 58, 29, 2, 31, 34, 34, 51,
203
+ 59, nil, nil, nil, nil, nil, nil, nil, nil, nil,
204
+ nil, nil, nil, nil, nil, 65, 66, 67, 68, nil,
205
+ 69, nil, nil, nil, nil, 71, 72, nil, nil, nil,
206
+ nil, nil, nil, nil, nil, nil, 73, nil, 82, nil,
207
+ nil, nil, nil, 94, nil, nil, nil, nil, nil, nil,
208
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 98,
209
+ nil, nil, nil, nil, nil, 102, nil, 103, 104 ]
210
+
211
+ racc_goto_check = [
212
+ 2, 5, 2, 12, 20, 10, 25, 11, 11, 13,
213
+ 14, 15, 16, 18, 19, 22, 23, 20, 25, 2,
214
+ 24, 2, 1, 26, 3, 4, 7, 12, 12, 8,
215
+ 9, nil, nil, nil, nil, nil, nil, nil, nil, nil,
216
+ nil, nil, nil, nil, nil, 2, 2, 2, 2, nil,
217
+ 2, nil, nil, nil, nil, 2, 2, nil, nil, nil,
218
+ nil, nil, nil, nil, nil, nil, 5, nil, 2, nil,
219
+ nil, nil, nil, 2, nil, nil, nil, nil, nil, nil,
220
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, 2,
221
+ nil, nil, nil, nil, nil, 2, nil, 2, 2 ]
222
+
223
+ racc_goto_pointer = [
224
+ nil, 22, -2, 20, 25, 1, nil, 22, -2, -14,
225
+ -39, 1, -5, -35, -34, -33, -32, nil, -3, -27,
226
+ -65, nil, -7, -26, -51, -65, -21 ]
227
+
228
+ racc_goto_default = [
229
+ nil, nil, nil, 26, nil, nil, 4, nil, 5, 6,
230
+ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
231
+ nil, 75, nil, nil, nil, nil, nil ]
232
+
233
+ racc_reduce_table = [
234
+ 0, 0, :racc_error,
235
+ 0, 31, :_reduce_none,
236
+ 1, 31, :_reduce_none,
237
+ 1, 32, :_reduce_none,
238
+ 2, 32, :_reduce_none,
239
+ 1, 30, :_reduce_5,
240
+ 1, 33, :_reduce_6,
241
+ 5, 33, :_reduce_7,
242
+ 1, 34, :_reduce_none,
243
+ 3, 36, :_reduce_9,
244
+ 3, 36, :_reduce_10,
245
+ 3, 36, :_reduce_11,
246
+ 1, 36, :_reduce_12,
247
+ 1, 35, :_reduce_13,
248
+ 3, 35, :_reduce_14,
249
+ 1, 37, :_reduce_none,
250
+ 1, 37, :_reduce_none,
251
+ 2, 37, :_reduce_17,
252
+ 2, 37, :_reduce_18,
253
+ 1, 37, :_reduce_19,
254
+ 1, 40, :_reduce_20,
255
+ 2, 40, :_reduce_21,
256
+ 1, 41, :_reduce_none,
257
+ 1, 41, :_reduce_none,
258
+ 1, 41, :_reduce_none,
259
+ 1, 41, :_reduce_none,
260
+ 1, 41, :_reduce_none,
261
+ 1, 38, :_reduce_27,
262
+ 2, 38, :_reduce_28,
263
+ 1, 48, :_reduce_29,
264
+ 2, 48, :_reduce_30,
265
+ 2, 48, :_reduce_31,
266
+ 1, 47, :_reduce_32,
267
+ 2, 39, :_reduce_33,
268
+ 1, 39, :_reduce_34,
269
+ 2, 43, :_reduce_35,
270
+ 7, 44, :_reduce_36,
271
+ 6, 44, :_reduce_37,
272
+ 0, 49, :_reduce_none,
273
+ 4, 49, :_reduce_39,
274
+ 4, 49, :_reduce_40,
275
+ 1, 50, :_reduce_41,
276
+ 1, 50, :_reduce_42,
277
+ 1, 50, :_reduce_43,
278
+ 1, 50, :_reduce_44,
279
+ 1, 50, :_reduce_45,
280
+ 1, 50, :_reduce_46,
281
+ 3, 45, :_reduce_47,
282
+ 3, 45, :_reduce_48,
283
+ 0, 51, :_reduce_none,
284
+ 1, 51, :_reduce_none,
285
+ 4, 52, :_reduce_51,
286
+ 1, 54, :_reduce_none,
287
+ 1, 54, :_reduce_none,
288
+ 1, 54, :_reduce_none,
289
+ 1, 54, :_reduce_none,
290
+ 1, 54, :_reduce_none,
291
+ 1, 54, :_reduce_none,
292
+ 1, 54, :_reduce_58,
293
+ 2, 53, :_reduce_59,
294
+ 3, 53, :_reduce_60,
295
+ 5, 46, :_reduce_61,
296
+ 1, 55, :_reduce_none,
297
+ 1, 55, :_reduce_none,
298
+ 1, 55, :_reduce_none,
299
+ 1, 55, :_reduce_none,
300
+ 1, 55, :_reduce_none,
301
+ 1, 55, :_reduce_none,
302
+ 1, 42, :_reduce_68 ]
303
+
304
+ racc_reduce_n = 69
305
+
306
+ racc_shift_n = 105
307
+
308
+ racc_token_table = {
309
+ false => 0,
310
+ :error => 1,
311
+ :T_COMMA => 2,
312
+ :T_PLUS => 3,
313
+ :T_MINUS => 4,
314
+ :T_HYPHEN => 5,
315
+ :T_DIMENSION => 6,
316
+ :T_NUMBER => 7,
317
+ :T_STRING => 8,
318
+ :T_IDENT => 9,
319
+ :T_NOT => 10,
320
+ :T_RBRACK => 11,
321
+ :T_HASH => 12,
322
+ :T_S => 13,
323
+ :T_GREATER => 14,
324
+ :T_TILDE => 15,
325
+ :T_DOT => 16,
326
+ :T_PIPE => 17,
327
+ :T_ASTERISK => 18,
328
+ :T_LBRACK => 19,
329
+ :T_PREFIXMATCH => 20,
330
+ :T_SUFFIXMATCH => 21,
331
+ :T_SUBSTRINGMATCH => 22,
332
+ :T_EQUAL => 23,
333
+ :T_INCLUDES => 24,
334
+ :T_DASHMATCH => 25,
335
+ :T_COLON => 26,
336
+ :T_FUNCTION => 27,
337
+ :T_RPAREN => 28 }
338
+
339
+ racc_nt_base = 29
340
+
341
+ racc_use_result_var = true
342
+
343
+ Racc_arg = [
344
+ racc_action_table,
345
+ racc_action_check,
346
+ racc_action_default,
347
+ racc_action_pointer,
348
+ racc_goto_table,
349
+ racc_goto_check,
350
+ racc_goto_default,
351
+ racc_goto_pointer,
352
+ racc_nt_base,
353
+ racc_reduce_table,
354
+ racc_token_table,
355
+ racc_shift_n,
356
+ racc_reduce_n,
357
+ racc_use_result_var ]
358
+
359
+ Racc_token_to_s_table = [
360
+ "$end",
361
+ "error",
362
+ "T_COMMA",
363
+ "T_PLUS",
364
+ "T_MINUS",
365
+ "T_HYPHEN",
366
+ "T_DIMENSION",
367
+ "T_NUMBER",
368
+ "T_STRING",
369
+ "T_IDENT",
370
+ "T_NOT",
371
+ "T_RBRACK",
372
+ "T_HASH",
373
+ "T_S",
374
+ "T_GREATER",
375
+ "T_TILDE",
376
+ "T_DOT",
377
+ "T_PIPE",
378
+ "T_ASTERISK",
379
+ "T_LBRACK",
380
+ "T_PREFIXMATCH",
381
+ "T_SUFFIXMATCH",
382
+ "T_SUBSTRINGMATCH",
383
+ "T_EQUAL",
384
+ "T_INCLUDES",
385
+ "T_DASHMATCH",
386
+ "T_COLON",
387
+ "T_FUNCTION",
388
+ "T_RPAREN",
389
+ "$start",
390
+ "selectors_group",
391
+ "optional_whitespaces",
392
+ "repeatable_whitespaces",
393
+ "repeatable_selectors",
394
+ "selector",
395
+ "repeatable_simple_selector_sequence",
396
+ "combinator",
397
+ "simple_selector_sequence",
398
+ "type_selector",
399
+ "universal",
400
+ "repeatable_selector_operators",
401
+ "selector_operators",
402
+ "hash",
403
+ "class",
404
+ "attrib",
405
+ "pseudo",
406
+ "negation",
407
+ "element_name",
408
+ "namespace_prefix",
409
+ "optional_attrib_clause",
410
+ "attrib_operators",
411
+ "optional_colon",
412
+ "functional_pseudo",
413
+ "repeatable_expressions",
414
+ "expression",
415
+ "negation_arg" ]
416
+
417
+ Racc_debug_parser = false
418
+
419
+ ##### State transition tables end #####
420
+
421
+ # reduce 0 omitted
422
+
423
+ # reduce 1 omitted
424
+
425
+ # reduce 2 omitted
426
+
427
+ # reduce 3 omitted
428
+
429
+ # reduce 4 omitted
430
+
431
+ module_eval(<<'.,.,', 'parser.y', 43)
432
+ def _reduce_5(val, _values, result)
433
+ result = val[0]
434
+ result
435
+ end
436
+ .,.,
437
+
438
+ module_eval(<<'.,.,', 'parser.y', 47)
439
+ def _reduce_6(val, _values, result)
440
+ result = AST::SelectorsGroup.new
441
+ result << val[0]
442
+
443
+ result
444
+ end
445
+ .,.,
446
+
447
+ module_eval(<<'.,.,', 'parser.y', 51)
448
+ def _reduce_7(val, _values, result)
449
+ result = val[0]
450
+ result << val[4]
451
+
452
+ result
453
+ end
454
+ .,.,
455
+
456
+ # reduce 8 omitted
457
+
458
+ module_eval(<<'.,.,', 'parser.y', 62)
459
+ def _reduce_9(val, _values, result)
460
+ result = :next_sibling
461
+ result
462
+ end
463
+ .,.,
464
+
465
+ module_eval(<<'.,.,', 'parser.y', 63)
466
+ def _reduce_10(val, _values, result)
467
+ result = :child
468
+ result
469
+ end
470
+ .,.,
471
+
472
+ module_eval(<<'.,.,', 'parser.y', 64)
473
+ def _reduce_11(val, _values, result)
474
+ result = :subsequent_sibling
475
+ result
476
+ end
477
+ .,.,
478
+
479
+ module_eval(<<'.,.,', 'parser.y', 65)
480
+ def _reduce_12(val, _values, result)
481
+ result = :descendant
482
+ result
483
+ end
484
+ .,.,
485
+
486
+ module_eval(<<'.,.,', 'parser.y', 69)
487
+ def _reduce_13(val, _values, result)
488
+ result = val[0]
489
+
490
+ result
491
+ end
492
+ .,.,
493
+
494
+ module_eval(<<'.,.,', 'parser.y', 72)
495
+ def _reduce_14(val, _values, result)
496
+ result = val[0]
497
+ result.combine(AST::Combinator.fetch(val[1]).new(val[2]))
498
+
499
+ result
500
+ end
501
+ .,.,
502
+
503
+ # reduce 15 omitted
504
+
505
+ # reduce 16 omitted
506
+
507
+ module_eval(<<'.,.,', 'parser.y', 84)
508
+ def _reduce_17(val, _values, result)
509
+ val[0].selectors.concat(val[1])
510
+ result = val[0]
511
+
512
+ result
513
+ end
514
+ .,.,
515
+
516
+ module_eval(<<'.,.,', 'parser.y', 88)
517
+ def _reduce_18(val, _values, result)
518
+ val[0].selectors.concat(val[1])
519
+ result = val[0]
520
+
521
+ result
522
+ end
523
+ .,.,
524
+
525
+ module_eval(<<'.,.,', 'parser.y', 92)
526
+ def _reduce_19(val, _values, result)
527
+ any = AST::Selector::Universal.new
528
+ any.selectors.concat(val[0])
529
+ result = any
530
+
531
+ result
532
+ end
533
+ .,.,
534
+
535
+ module_eval(<<'.,.,', 'parser.y', 98)
536
+ def _reduce_20(val, _values, result)
537
+ result = [val[0]]
538
+ result
539
+ end
540
+ .,.,
541
+
542
+ module_eval(<<'.,.,', 'parser.y', 99)
543
+ def _reduce_21(val, _values, result)
544
+ result = val[0] << val[1]
545
+ result
546
+ end
547
+ .,.,
548
+
549
+ # reduce 22 omitted
550
+
551
+ # reduce 23 omitted
552
+
553
+ # reduce 24 omitted
554
+
555
+ # reduce 25 omitted
556
+
557
+ # reduce 26 omitted
558
+
559
+ module_eval(<<'.,.,', 'parser.y', 110)
560
+ def _reduce_27(val, _values, result)
561
+ result = AST::Selector::Type.new(element_name: val[0])
562
+ result
563
+ end
564
+ .,.,
565
+
566
+ module_eval(<<'.,.,', 'parser.y', 111)
567
+ def _reduce_28(val, _values, result)
568
+ result = AST::Selector::Type.new(element_name: val[1], namespace_prefix: val[0])
569
+ result
570
+ end
571
+ .,.,
572
+
573
+ module_eval(<<'.,.,', 'parser.y', 115)
574
+ def _reduce_29(val, _values, result)
575
+ result = val[0]
576
+ result
577
+ end
578
+ .,.,
579
+
580
+ module_eval(<<'.,.,', 'parser.y', 116)
581
+ def _reduce_30(val, _values, result)
582
+ result = val[0]
583
+ result
584
+ end
585
+ .,.,
586
+
587
+ module_eval(<<'.,.,', 'parser.y', 117)
588
+ def _reduce_31(val, _values, result)
589
+ result = val[1]
590
+ result
591
+ end
592
+ .,.,
593
+
594
+ module_eval(<<'.,.,', 'parser.y', 120)
595
+ def _reduce_32(val, _values, result)
596
+ result = val[0]
597
+ result
598
+ end
599
+ .,.,
600
+
601
+ module_eval(<<'.,.,', 'parser.y', 124)
602
+ def _reduce_33(val, _values, result)
603
+ result = AST::Selector::Universal.new(namespace_prefix: val[0])
604
+ result
605
+ end
606
+ .,.,
607
+
608
+ module_eval(<<'.,.,', 'parser.y', 125)
609
+ def _reduce_34(val, _values, result)
610
+ result = AST::Selector::Universal.new
611
+ result
612
+ end
613
+ .,.,
614
+
615
+ module_eval(<<'.,.,', 'parser.y', 128)
616
+ def _reduce_35(val, _values, result)
617
+ result = AST::Selector::Class.new(val[1])
618
+ result
619
+ end
620
+ .,.,
621
+
622
+ module_eval(<<'.,.,', 'parser.y', 140)
623
+ def _reduce_36(val, _values, result)
624
+ op, value = val[4]
625
+ result = AST::Selector::Attrib.fetch(op).new(key: val[2], value: value, namespace_prefix: val[2])
626
+
627
+ result
628
+ end
629
+ .,.,
630
+
631
+ module_eval(<<'.,.,', 'parser.y', 144)
632
+ def _reduce_37(val, _values, result)
633
+ op, value = val[4]
634
+ result = AST::Selector::Attrib.fetch(op).new(key: val[2], value: value)
635
+
636
+ result
637
+ end
638
+ .,.,
639
+
640
+ # reduce 38 omitted
641
+
642
+ module_eval(<<'.,.,', 'parser.y', 149)
643
+ def _reduce_39(val, _values, result)
644
+ result = [val[0], val[2]]
645
+ result
646
+ end
647
+ .,.,
648
+
649
+ module_eval(<<'.,.,', 'parser.y', 150)
650
+ def _reduce_40(val, _values, result)
651
+ result = [val[0], val[2]]
652
+ result
653
+ end
654
+ .,.,
655
+
656
+ module_eval(<<'.,.,', 'parser.y', 153)
657
+ def _reduce_41(val, _values, result)
658
+ result = :prefix_match
659
+ result
660
+ end
661
+ .,.,
662
+
663
+ module_eval(<<'.,.,', 'parser.y', 154)
664
+ def _reduce_42(val, _values, result)
665
+ result = :suffix_match
666
+ result
667
+ end
668
+ .,.,
669
+
670
+ module_eval(<<'.,.,', 'parser.y', 155)
671
+ def _reduce_43(val, _values, result)
672
+ result = :substring_match
673
+ result
674
+ end
675
+ .,.,
676
+
677
+ module_eval(<<'.,.,', 'parser.y', 156)
678
+ def _reduce_44(val, _values, result)
679
+ result = :equal
680
+ result
681
+ end
682
+ .,.,
683
+
684
+ module_eval(<<'.,.,', 'parser.y', 157)
685
+ def _reduce_45(val, _values, result)
686
+ result = :includes
687
+ result
688
+ end
689
+ .,.,
690
+
691
+ module_eval(<<'.,.,', 'parser.y', 158)
692
+ def _reduce_46(val, _values, result)
693
+ result = :dash_match
694
+ result
695
+ end
696
+ .,.,
697
+
698
+ module_eval(<<'.,.,', 'parser.y', 162)
699
+ def _reduce_47(val, _values, result)
700
+ result = AST::Selector::Pseudo.fetch(val[2]).new
701
+ result
702
+ end
703
+ .,.,
704
+
705
+ module_eval(<<'.,.,', 'parser.y', 163)
706
+ def _reduce_48(val, _values, result)
707
+ result = val[2]
708
+ result
709
+ end
710
+ .,.,
711
+
712
+ # reduce 49 omitted
713
+
714
+ # reduce 50 omitted
715
+
716
+ module_eval(<<'.,.,', 'parser.y', 169)
717
+ def _reduce_51(val, _values, result)
718
+ result = AST::Selector::Pseudo.fetch(val[0].slice(0..-2)).new(val[2])
719
+ result
720
+ end
721
+ .,.,
722
+
723
+ # reduce 52 omitted
724
+
725
+ # reduce 53 omitted
726
+
727
+ # reduce 54 omitted
728
+
729
+ # reduce 55 omitted
730
+
731
+ # reduce 56 omitted
732
+
733
+ # reduce 57 omitted
734
+
735
+ module_eval(<<'.,.,', 'parser.y', 173)
736
+ def _reduce_58(val, _values, result)
737
+ result = val[0]
738
+ result
739
+ end
740
+ .,.,
741
+
742
+ module_eval(<<'.,.,', 'parser.y', 176)
743
+ def _reduce_59(val, _values, result)
744
+ result = [val[0]]
745
+ result
746
+ end
747
+ .,.,
748
+
749
+ module_eval(<<'.,.,', 'parser.y', 178)
750
+ def _reduce_60(val, _values, result)
751
+ val[0] << val[1]
752
+ result = val[0]
753
+
754
+ result
755
+ end
756
+ .,.,
757
+
758
+ module_eval(<<'.,.,', 'parser.y', 184)
759
+ def _reduce_61(val, _values, result)
760
+ result = AST::Selector::Negation.new(val[2])
761
+ result
762
+ end
763
+ .,.,
764
+
765
+ # reduce 62 omitted
766
+
767
+ # reduce 63 omitted
768
+
769
+ # reduce 64 omitted
770
+
771
+ # reduce 65 omitted
772
+
773
+ # reduce 66 omitted
774
+
775
+ # reduce 67 omitted
776
+
777
+ module_eval(<<'.,.,', 'parser.y', 191)
778
+ def _reduce_68(val, _values, result)
779
+ result = AST::Selector::ID.new(val[0])
780
+ result
781
+ end
782
+ .,.,
783
+
784
+ def _reduce_none(val, _values, result)
785
+ val[0]
786
+ end
787
+
788
+ end # class Parser
789
+ end # module CSSSelector
790
+ end # module Gammo