regexp_parser 2.6.0 → 2.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -5
  3. data/LICENSE +1 -1
  4. data/lib/regexp_parser/expression/base.rb +0 -7
  5. data/lib/regexp_parser/expression/classes/alternation.rb +1 -1
  6. data/lib/regexp_parser/expression/classes/backreference.rb +17 -3
  7. data/lib/regexp_parser/expression/classes/character_set/range.rb +2 -7
  8. data/lib/regexp_parser/expression/classes/character_set.rb +4 -8
  9. data/lib/regexp_parser/expression/classes/conditional.rb +2 -6
  10. data/lib/regexp_parser/expression/classes/escape_sequence.rb +3 -1
  11. data/lib/regexp_parser/expression/classes/free_space.rb +3 -1
  12. data/lib/regexp_parser/expression/classes/group.rb +0 -22
  13. data/lib/regexp_parser/expression/classes/keep.rb +1 -1
  14. data/lib/regexp_parser/expression/classes/posix_class.rb +5 -5
  15. data/lib/regexp_parser/expression/classes/unicode_property.rb +11 -11
  16. data/lib/regexp_parser/expression/methods/construct.rb +2 -4
  17. data/lib/regexp_parser/expression/methods/match_length.rb +8 -4
  18. data/lib/regexp_parser/expression/methods/negative.rb +20 -0
  19. data/lib/regexp_parser/expression/methods/parts.rb +23 -0
  20. data/lib/regexp_parser/expression/methods/printing.rb +26 -0
  21. data/lib/regexp_parser/expression/methods/tests.rb +40 -3
  22. data/lib/regexp_parser/expression/methods/traverse.rb +35 -19
  23. data/lib/regexp_parser/expression/quantifier.rb +30 -17
  24. data/lib/regexp_parser/expression/sequence.rb +5 -10
  25. data/lib/regexp_parser/expression/sequence_operation.rb +4 -9
  26. data/lib/regexp_parser/expression/shared.rb +37 -20
  27. data/lib/regexp_parser/expression/subexpression.rb +20 -15
  28. data/lib/regexp_parser/expression.rb +34 -31
  29. data/lib/regexp_parser/lexer.rb +76 -36
  30. data/lib/regexp_parser/parser.rb +101 -100
  31. data/lib/regexp_parser/scanner/errors/premature_end_error.rb +8 -0
  32. data/lib/regexp_parser/scanner/errors/scanner_error.rb +6 -0
  33. data/lib/regexp_parser/scanner/errors/validation_error.rb +63 -0
  34. data/lib/regexp_parser/scanner/properties/long.csv +29 -0
  35. data/lib/regexp_parser/scanner/properties/short.csv +3 -0
  36. data/lib/regexp_parser/scanner/property.rl +2 -2
  37. data/lib/regexp_parser/scanner/scanner.rl +101 -172
  38. data/lib/regexp_parser/scanner.rb +1132 -1283
  39. data/lib/regexp_parser/syntax/token/backreference.rb +3 -0
  40. data/lib/regexp_parser/syntax/token/character_set.rb +3 -0
  41. data/lib/regexp_parser/syntax/token/escape.rb +3 -1
  42. data/lib/regexp_parser/syntax/token/meta.rb +9 -2
  43. data/lib/regexp_parser/syntax/token/unicode_property.rb +35 -1
  44. data/lib/regexp_parser/syntax/token/virtual.rb +11 -0
  45. data/lib/regexp_parser/syntax/token.rb +13 -13
  46. data/lib/regexp_parser/syntax/version_lookup.rb +0 -8
  47. data/lib/regexp_parser/syntax/versions.rb +3 -1
  48. data/lib/regexp_parser/syntax.rb +1 -1
  49. data/lib/regexp_parser/version.rb +1 -1
  50. data/lib/regexp_parser.rb +6 -6
  51. data/regexp_parser.gemspec +5 -5
  52. metadata +14 -8
  53. data/CHANGELOG.md +0 -601
  54. data/README.md +0 -503
@@ -1,157 +1,96 @@
1
1
  # -*- warn-indent:false; -*-
2
-
3
- # line 1 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
4
-
5
- # line 646 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
6
-
7
-
2
+ #
8
3
  # THIS IS A GENERATED FILE, DO NOT EDIT DIRECTLY
9
- # This file was generated from lib/regexp_parser/scanner/scanner.rl
10
-
11
- require 'regexp_parser/error'
12
-
13
- class Regexp::Scanner
14
- # General scanner error (catch all)
15
- class ScannerError < Regexp::Parser::Error; end
4
+ #
5
+ # This file was generated from scanner.rl
6
+ # by running `bundle exec rake ragel:rb`
16
7
 
17
- # Base for all scanner validation errors
18
- class ValidationError < Regexp::Parser::Error
19
- def initialize(reason)
20
- super reason
21
- end
22
- end
23
-
24
- # Unexpected end of pattern
25
- class PrematureEndError < ScannerError
26
- def initialize(where = '')
27
- super "Premature end of pattern at #{where}"
28
- end
29
- end
30
-
31
- # Invalid sequence format. Used for escape sequences, mainly.
32
- class InvalidSequenceError < ValidationError
33
- def initialize(what = 'sequence', where = '')
34
- super "Invalid #{what} at #{where}"
35
- end
36
- end
37
-
38
- # Invalid group. Used for named groups.
39
- class InvalidGroupError < ValidationError
40
- def initialize(what, reason)
41
- super "Invalid #{what}, #{reason}."
42
- end
43
- end
44
-
45
- # Invalid groupOption. Used for inline options.
46
- # TODO: should become InvalidGroupOptionError in v3.0.0 for consistency
47
- class InvalidGroupOption < ValidationError
48
- def initialize(option, text)
49
- super "Invalid group option #{option} in #{text}"
50
- end
51
- end
52
-
53
- # Invalid back reference. Used for name a number refs/calls.
54
- class InvalidBackrefError < ValidationError
55
- def initialize(what, reason)
56
- super "Invalid back reference #{what}, #{reason}"
57
- end
58
- end
59
-
60
- # The property name was not recognized by the scanner.
61
- class UnknownUnicodePropertyError < ValidationError
62
- def initialize(name)
63
- super "Unknown unicode character property name #{name}"
64
- end
65
- end
66
8
 
67
- # The POSIX class name was not recognized by the scanner.
68
- class UnknownPosixClassError < ValidationError
69
- def initialize(text)
70
- super "Unknown POSIX class #{text}"
71
- end
72
- end
9
+ require_relative 'scanner/errors/scanner_error'
10
+ require_relative 'scanner/errors/premature_end_error'
11
+ require_relative 'scanner/errors/validation_error'
73
12
 
13
+ class Regexp::Scanner
74
14
  # Scans the given regular expression text, or Regexp object and collects the
75
15
  # emitted token into an array that gets returned at the end. If a block is
76
16
  # given, it gets called for each emitted token.
77
17
  #
78
18
  # This method may raise errors if a syntax error is encountered.
79
19
  # --------------------------------------------------------------------------
80
- def self.scan(input_object, options: nil, &block)
81
- new.scan(input_object, options: options, &block)
20
+ def self.scan(input_object, options: nil, collect_tokens: true, &block)
21
+ new.scan(input_object, options: options, collect_tokens: collect_tokens, &block)
82
22
  end
83
23
 
84
- def scan(input_object, options: nil, &block)
85
- self.literal = nil
24
+ def scan(input_object, options: nil, collect_tokens: true, &block)
25
+ self.collect_tokens = collect_tokens
26
+ self.literal_run = nil
86
27
  stack = []
87
28
 
88
29
  input = input_object.is_a?(Regexp) ? input_object.source : input_object
89
30
  self.free_spacing = free_spacing?(input_object, options)
90
31
  self.spacing_stack = [{:free_spacing => free_spacing, :depth => 0}]
91
32
 
92
- data = input.unpack("c*") if input.is_a?(String)
33
+ data = input.unpack("c*")
93
34
  eof = data.length
94
35
 
95
36
  self.tokens = []
96
- self.block = block_given? ? block : nil
37
+ self.block = block
97
38
 
98
39
  self.set_depth = 0
99
40
  self.group_depth = 0
100
41
  self.conditional_stack = []
101
42
  self.char_pos = 0
102
43
 
103
-
104
- # line 104 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner.rb"
105
44
  class << self
106
45
  attr_accessor :_re_scanner_trans_keys
107
46
  private :_re_scanner_trans_keys, :_re_scanner_trans_keys=
108
47
  end
109
48
  self._re_scanner_trans_keys = [
110
- 0, 0, -128, -65, -128, -65,
111
- -128, -65, 41, 41, 39,
112
- 57, 39, 39, 33, 62,
113
- 62, 62, 39, 60, 39, 57,
114
- 39, 39, 48, 57, 39,
115
- 57, 39, 57, 48, 57,
116
- 39, 39, 45, 62, 62, 62,
117
- 48, 57, 48, 62, 43,
118
- 62, 48, 57, 62, 62,
119
- 39, 60, 39, 57, 39, 39,
120
- 48, 57, 39, 57, 39,
121
- 57, 48, 57, 45, 62,
122
- 62, 62, 48, 57, 48, 62,
123
- 43, 62, 48, 57, 48,
124
- 57, 48, 125, 44, 125,
125
- 123, 123, 9, 122, 9, 125,
126
- 9, 122, -128, -65, -128,
127
- -65, 38, 38, 58, 93,
128
- 58, 93, -128, -65, -128, -65,
129
- 45, 45, 92, 92, 92,
130
- 92, 45, 45, 92, 92,
131
- 92, 92, 48, 123, 48, 102,
132
- 48, 102, 48, 102, 48,
133
- 102, 9, 125, 9, 125,
134
- 9, 125, 9, 125, 9, 125,
135
- 9, 125, 48, 123, 39,
136
- 39, 41, 41, 41, 57,
137
- 62, 62, -128, 127, -62, -12,
138
- 1, 127, 1, 127, 9,
139
- 32, 33, 126, 10, 10,
140
- 63, 63, 33, 126, 33, 126,
141
- 62, 62, 43, 63, 43,
142
- 63, 43, 63, 65, 122,
143
- 44, 57, 68, 119, 80, 112,
144
- -62, 125, -128, -65, -128,
145
- -65, -128, -65, 38, 38,
146
- 38, 93, 58, 58, 67, 120,
147
- -62, 125, -128, -65, -128,
148
- -65, -128, -65, 48, 55,
149
- 48, 55, 77, 77, 45, 45,
150
- 0, 0, 67, 99, 45,
151
- 45, 0, 0, 92, 92,
152
- 48, 102, 39, 60, 39, 57,
153
- 49, 57, 41, 57, 45,
154
- 62, 0
49
+ 0,0,-128,-65,-128,-65,
50
+ -128,-65,41,41,39,
51
+ 57,39,39,33,62,
52
+ 62,62,39,60,39,57,
53
+ 39,39,48,57,39,
54
+ 57,48,57,39,57,
55
+ 33,62,62,62,48,57,
56
+ 43,62,48,57,48,
57
+ 62,39,60,39,57,
58
+ 39,39,48,57,39,57,
59
+ 48,57,39,57,33,
60
+ 62,62,62,48,57,
61
+ 43,62,48,57,48,62,
62
+ 48,57,48,125,44,
63
+ 125,123,123,9,122,
64
+ 9,125,9,122,-128,-65,
65
+ -128,-65,38,38,58,
66
+ 93,58,93,-128,-65,
67
+ -128,-65,45,45,92,92,
68
+ 92,92,45,45,92,
69
+ 92,92,92,48,123,
70
+ 48,102,48,102,48,102,
71
+ 48,102,9,125,9,
72
+ 125,9,125,9,125,
73
+ 9,125,9,125,48,123,
74
+ 39,39,41,41,41,
75
+ 57,62,62,-128,127,
76
+ -62,-12,1,127,1,127,
77
+ 9,32,33,126,10,
78
+ 10,63,63,33,126,
79
+ 33,126,62,62,43,63,
80
+ 43,63,43,63,65,
81
+ 122,44,57,68,119,
82
+ 80,112,-62,125,-128,-65,
83
+ -128,-65,-128,-65,38,
84
+ 38,38,93,58,58,
85
+ 48,120,48,55,48,55,
86
+ -62,125,-128,-65,-128,
87
+ -65,-128,-65,48,55,
88
+ 48,55,48,57,77,77,
89
+ 45,45,0,0,67,
90
+ 99,45,45,0,0,
91
+ 92,92,48,102,39,60,
92
+ 39,57,48,57,41,
93
+ 57,33,62,0
155
94
  ]
156
95
 
157
96
  class << self
@@ -159,21 +98,21 @@ class << self
159
98
  private :_re_scanner_key_spans, :_re_scanner_key_spans=
160
99
  end
161
100
  self._re_scanner_key_spans = [
162
- 0, 64, 64, 64, 1, 19, 1, 30,
163
- 1, 22, 19, 1, 10, 19, 19, 10,
164
- 1, 18, 1, 10, 15, 20, 10, 1,
165
- 22, 19, 1, 10, 19, 19, 10, 18,
166
- 1, 10, 15, 20, 10, 10, 78, 82,
167
- 1, 114, 117, 114, 64, 64, 1, 36,
168
- 36, 64, 64, 1, 1, 1, 1, 1,
169
- 1, 76, 55, 55, 55, 55, 117, 117,
170
- 117, 117, 117, 117, 76, 1, 1, 17,
171
- 1, 256, 51, 127, 127, 24, 94, 1,
172
- 1, 94, 94, 1, 21, 21, 21, 58,
173
- 14, 52, 33, 188, 64, 64, 64, 1,
174
- 56, 1, 54, 188, 64, 64, 64, 8,
175
- 8, 1, 1, 0, 33, 1, 0, 1,
176
- 55, 22, 19, 9, 17, 18
101
+ 0,64,64,64,1,19,1,30,
102
+ 1,22,19,1,10,19,10,19,
103
+ 30,1,10,20,10,15,22,19,
104
+ 1,10,19,10,19,30,1,10,
105
+ 20,10,15,10,78,82,1,114,
106
+ 117,114,64,64,1,36,36,64,
107
+ 64,1,1,1,1,1,1,76,
108
+ 55,55,55,55,117,117,117,117,
109
+ 117,117,76,1,1,17,1,256,
110
+ 51,127,127,24,94,1,1,94,
111
+ 94,1,21,21,21,58,14,52,
112
+ 33,188,64,64,64,1,56,1,
113
+ 73,8,8,188,64,64,64,8,
114
+ 8,10,1,1,0,33,1,0,
115
+ 1,55,22,19,10,17,30
177
116
  ]
178
117
 
179
118
  class << self
@@ -181,21 +120,21 @@ class << self
181
120
  private :_re_scanner_index_offsets, :_re_scanner_index_offsets=
182
121
  end
183
122
  self._re_scanner_index_offsets = [
184
- 0, 0, 65, 130, 195, 197, 217, 219,
185
- 250, 252, 275, 295, 297, 308, 328, 348,
186
- 359, 361, 380, 382, 393, 409, 430, 441,
187
- 443, 466, 486, 488, 499, 519, 539, 550,
188
- 569, 571, 582, 598, 619, 630, 641, 720,
189
- 803, 805, 920, 1038, 1153, 1218, 1283, 1285,
190
- 1322, 1359, 1424, 1489, 1491, 1493, 1495, 1497,
191
- 1499, 1501, 1578, 1634, 1690, 1746, 1802, 1920,
192
- 2038, 2156, 2274, 2392, 2510, 2587, 2589, 2591,
193
- 2609, 2611, 2868, 2920, 3048, 3176, 3201, 3296,
194
- 3298, 3300, 3395, 3490, 3492, 3514, 3536, 3558,
195
- 3617, 3632, 3685, 3719, 3908, 3973, 4038, 4103,
196
- 4105, 4162, 4164, 4219, 4408, 4473, 4538, 4603,
197
- 4612, 4621, 4623, 4625, 4626, 4660, 4662, 4663,
198
- 4665, 4721, 4744, 4764, 4774, 4792
123
+ 0,0,65,130,195,197,217,219,
124
+ 250,252,275,295,297,308,328,339,
125
+ 359,390,392,403,424,435,451,474,
126
+ 494,496,507,527,538,558,589,591,
127
+ 602,623,634,650,661,740,823,825,
128
+ 940,1058,1173,1238,1303,1305,1342,1379,
129
+ 1444,1509,1511,1513,1515,1517,1519,1521,
130
+ 1598,1654,1710,1766,1822,1940,2058,2176,
131
+ 2294,2412,2530,2607,2609,2611,2629,2631,
132
+ 2888,2940,3068,3196,3221,3316,3318,3320,
133
+ 3415,3510,3512,3534,3556,3578,3637,3652,
134
+ 3705,3739,3928,3993,4058,4123,4125,4182,
135
+ 4184,4258,4267,4276,4465,4530,4595,4660,
136
+ 4669,4678,4689,4691,4693,4694,4728,4730,
137
+ 4731,4733,4789,4812,4832,4843,4861
199
138
  ]
200
139
 
201
140
  class << self
@@ -203,608 +142,618 @@ class << self
203
142
  private :_re_scanner_indicies, :_re_scanner_indicies=
204
143
  end
205
144
  self._re_scanner_indicies = [
206
- 1, 1, 1, 1, 1, 1, 1, 1,
207
- 1, 1, 1, 1, 1, 1, 1, 1,
208
- 1, 1, 1, 1, 1, 1, 1, 1,
209
- 1, 1, 1, 1, 1, 1, 1, 1,
210
- 1, 1, 1, 1, 1, 1, 1, 1,
211
- 1, 1, 1, 1, 1, 1, 1, 1,
212
- 1, 1, 1, 1, 1, 1, 1, 1,
213
- 1, 1, 1, 1, 1, 1, 1, 1,
214
- 0, 2, 2, 2, 2, 2, 2, 2,
215
- 2, 2, 2, 2, 2, 2, 2, 2,
216
- 2, 2, 2, 2, 2, 2, 2, 2,
217
- 2, 2, 2, 2, 2, 2, 2, 2,
218
- 2, 2, 2, 2, 2, 2, 2, 2,
219
- 2, 2, 2, 2, 2, 2, 2, 2,
220
- 2, 2, 2, 2, 2, 2, 2, 2,
221
- 2, 2, 2, 2, 2, 2, 2, 2,
222
- 2, 0, 3, 3, 3, 3, 3, 3,
223
- 3, 3, 3, 3, 3, 3, 3, 3,
224
- 3, 3, 3, 3, 3, 3, 3, 3,
225
- 3, 3, 3, 3, 3, 3, 3, 3,
226
- 3, 3, 3, 3, 3, 3, 3, 3,
227
- 3, 3, 3, 3, 3, 3, 3, 3,
228
- 3, 3, 3, 3, 3, 3, 3, 3,
229
- 3, 3, 3, 3, 3, 3, 3, 3,
230
- 3, 3, 0, 6, 5, 8, 7, 7,
231
- 7, 7, 7, 4, 7, 7, 4, 4,
232
- 4, 4, 4, 4, 4, 4, 4, 4,
233
- 7, 8, 7, 10, 9, 9, 9, 9,
234
- 9, 9, 9, 9, 9, 9, 9, 4,
235
- 9, 9, 4, 4, 4, 4, 4, 4,
236
- 4, 4, 4, 4, 9, 9, 9, 10,
237
- 8, 9, 8, 9, 12, 11, 11, 11,
238
- 11, 11, 11, 11, 11, 11, 11, 11,
239
- 11, 11, 11, 11, 11, 11, 11, 11,
240
- 11, 13, 11, 15, 14, 14, 14, 14,
241
- 14, 16, 14, 14, 17, 18, 18, 18,
242
- 18, 18, 18, 18, 18, 18, 14, 15,
243
- 14, 19, 18, 18, 18, 18, 18, 18,
244
- 18, 18, 18, 11, 15, 11, 11, 11,
245
- 11, 11, 11, 11, 11, 19, 19, 19,
246
- 19, 19, 19, 19, 19, 19, 19, 11,
247
- 15, 11, 11, 11, 20, 11, 20, 11,
248
- 11, 18, 18, 18, 18, 18, 18, 18,
249
- 18, 18, 18, 11, 19, 19, 19, 19,
250
- 19, 19, 19, 19, 19, 19, 11, 15,
251
- 11, 22, 21, 21, 23, 24, 24, 24,
252
- 24, 24, 24, 24, 24, 24, 21, 21,
253
- 21, 21, 15, 21, 15, 21, 25, 24,
254
- 24, 24, 24, 24, 24, 24, 24, 24,
255
- 11, 25, 25, 25, 25, 25, 25, 25,
256
- 25, 25, 25, 11, 11, 11, 11, 15,
257
- 11, 26, 11, 26, 11, 11, 24, 24,
258
- 24, 24, 24, 24, 24, 24, 24, 24,
259
- 11, 11, 11, 11, 15, 11, 25, 25,
260
- 25, 25, 25, 25, 25, 25, 25, 25,
261
- 11, 15, 11, 27, 11, 11, 11, 11,
262
- 11, 11, 11, 11, 11, 11, 11, 11,
263
- 11, 11, 11, 11, 11, 11, 11, 11,
264
- 28, 11, 30, 29, 29, 29, 29, 29,
265
- 31, 29, 29, 11, 32, 32, 32, 32,
266
- 32, 32, 32, 32, 32, 29, 30, 29,
267
- 33, 32, 32, 32, 32, 32, 32, 32,
268
- 32, 32, 11, 30, 11, 11, 11, 11,
269
- 11, 11, 11, 11, 33, 33, 33, 33,
270
- 33, 33, 33, 33, 33, 33, 11, 30,
271
- 11, 11, 11, 34, 11, 34, 11, 11,
272
- 32, 32, 32, 32, 32, 32, 32, 32,
273
- 32, 32, 11, 33, 33, 33, 33, 33,
274
- 33, 33, 33, 33, 33, 11, 36, 35,
275
- 35, 11, 37, 37, 37, 37, 37, 37,
276
- 37, 37, 37, 35, 35, 35, 35, 30,
277
- 35, 30, 35, 38, 37, 37, 37, 37,
278
- 37, 37, 37, 37, 37, 11, 38, 38,
279
- 38, 38, 38, 38, 38, 38, 38, 38,
280
- 11, 11, 11, 11, 30, 11, 39, 11,
281
- 39, 11, 11, 37, 37, 37, 37, 37,
282
- 37, 37, 37, 37, 37, 11, 11, 11,
283
- 11, 30, 11, 38, 38, 38, 38, 38,
284
- 38, 38, 38, 38, 38, 11, 41, 41,
285
- 41, 41, 41, 41, 41, 41, 41, 41,
286
- 40, 41, 41, 41, 41, 41, 41, 41,
287
- 41, 41, 41, 40, 40, 40, 40, 40,
288
- 40, 40, 40, 40, 40, 40, 40, 40,
289
- 40, 40, 40, 40, 40, 40, 40, 40,
290
- 40, 40, 40, 40, 40, 40, 40, 40,
291
- 40, 40, 40, 40, 40, 40, 40, 40,
292
- 40, 40, 40, 40, 40, 40, 40, 40,
293
- 40, 40, 40, 40, 40, 40, 40, 40,
294
- 40, 40, 40, 40, 40, 40, 40, 40,
295
- 40, 40, 40, 40, 40, 40, 42, 40,
296
- 41, 40, 40, 40, 43, 43, 43, 43,
297
- 43, 43, 43, 43, 43, 43, 40, 40,
298
- 40, 40, 40, 40, 40, 40, 40, 40,
299
- 40, 40, 40, 40, 40, 40, 40, 40,
300
- 40, 40, 40, 40, 40, 40, 40, 40,
301
- 40, 40, 40, 40, 40, 40, 40, 40,
302
- 40, 40, 40, 40, 40, 40, 40, 40,
303
- 40, 40, 40, 40, 40, 40, 40, 40,
304
- 40, 40, 40, 40, 40, 40, 40, 40,
305
- 40, 40, 40, 40, 40, 40, 40, 40,
306
- 40, 42, 40, 44, 45, 46, 46, 46,
307
- 46, 46, 45, 45, 45, 45, 45, 45,
308
- 45, 45, 45, 45, 45, 45, 45, 45,
309
- 45, 45, 45, 45, 46, 45, 45, 45,
310
- 45, 45, 45, 45, 45, 45, 45, 45,
311
- 45, 46, 46, 45, 46, 46, 46, 46,
312
- 46, 46, 46, 46, 46, 46, 45, 45,
313
- 45, 46, 45, 45, 45, 46, 46, 46,
314
- 46, 46, 46, 46, 46, 46, 46, 46,
315
- 46, 46, 46, 46, 46, 46, 46, 46,
316
- 46, 46, 46, 46, 46, 46, 46, 45,
317
- 45, 45, 47, 46, 45, 46, 46, 46,
318
- 46, 46, 46, 46, 46, 46, 46, 46,
319
- 46, 46, 46, 46, 46, 46, 46, 46,
320
- 46, 46, 46, 46, 46, 46, 46, 45,
321
- 46, 46, 46, 46, 46, 45, 45, 45,
322
- 45, 45, 45, 45, 45, 45, 45, 45,
323
- 45, 45, 45, 45, 45, 45, 45, 46,
324
- 45, 45, 45, 45, 45, 45, 45, 45,
325
- 45, 45, 45, 45, 46, 46, 45, 46,
326
- 46, 46, 46, 46, 46, 46, 46, 46,
327
- 46, 45, 45, 45, 46, 45, 45, 45,
328
- 46, 46, 46, 46, 46, 46, 46, 46,
329
- 46, 46, 46, 46, 46, 46, 46, 46,
330
- 46, 46, 46, 46, 46, 46, 46, 46,
331
- 46, 46, 45, 45, 45, 45, 46, 45,
332
- 46, 46, 46, 46, 46, 46, 46, 46,
333
- 46, 46, 46, 46, 46, 46, 46, 46,
334
- 46, 46, 46, 46, 46, 46, 46, 46,
335
- 46, 46, 45, 45, 48, 45, 46, 46,
336
- 46, 46, 46, 45, 45, 45, 45, 45,
337
- 45, 45, 45, 45, 45, 45, 45, 45,
338
- 45, 45, 45, 45, 45, 46, 45, 45,
339
- 45, 45, 45, 45, 45, 45, 45, 45,
340
- 45, 45, 46, 46, 45, 46, 46, 46,
341
- 46, 46, 46, 46, 46, 46, 46, 45,
342
- 45, 45, 46, 45, 45, 45, 46, 46,
343
- 46, 46, 46, 46, 46, 46, 46, 46,
344
- 46, 46, 46, 46, 46, 46, 46, 46,
345
- 46, 46, 46, 46, 46, 46, 46, 46,
346
- 45, 45, 45, 45, 46, 45, 46, 46,
347
- 46, 46, 46, 46, 46, 46, 46, 46,
348
- 46, 46, 46, 46, 46, 46, 46, 46,
349
- 46, 46, 46, 46, 46, 46, 46, 46,
350
- 45, 50, 50, 50, 50, 50, 50, 50,
351
- 50, 50, 50, 50, 50, 50, 50, 50,
352
- 50, 50, 50, 50, 50, 50, 50, 50,
353
- 50, 50, 50, 50, 50, 50, 50, 50,
354
- 50, 50, 50, 50, 50, 50, 50, 50,
355
- 50, 50, 50, 50, 50, 50, 50, 50,
356
- 50, 50, 50, 50, 50, 50, 50, 50,
357
- 50, 50, 50, 50, 50, 50, 50, 50,
358
- 50, 49, 51, 51, 51, 51, 51, 51,
359
- 51, 51, 51, 51, 51, 51, 51, 51,
360
- 51, 51, 51, 51, 51, 51, 51, 51,
361
- 51, 51, 51, 51, 51, 51, 51, 51,
362
- 51, 51, 51, 51, 51, 51, 51, 51,
363
- 51, 51, 51, 51, 51, 51, 51, 51,
364
- 51, 51, 51, 51, 51, 51, 51, 51,
365
- 51, 51, 51, 51, 51, 51, 51, 51,
366
- 51, 51, 49, 53, 52, 56, 55, 55,
367
- 55, 55, 55, 55, 55, 55, 55, 55,
368
- 55, 55, 55, 55, 55, 55, 55, 55,
369
- 55, 55, 55, 55, 55, 55, 55, 55,
370
- 55, 55, 55, 55, 55, 55, 57, 55,
371
- 57, 55, 56, 55, 55, 55, 55, 55,
372
- 55, 55, 55, 55, 55, 55, 55, 55,
373
- 55, 55, 55, 55, 55, 55, 55, 55,
374
- 55, 55, 55, 55, 55, 55, 55, 55,
375
- 55, 55, 55, 57, 55, 58, 55, 60,
376
- 60, 60, 60, 60, 60, 60, 60, 60,
377
- 60, 60, 60, 60, 60, 60, 60, 60,
378
- 60, 60, 60, 60, 60, 60, 60, 60,
379
- 60, 60, 60, 60, 60, 60, 60, 60,
380
- 60, 60, 60, 60, 60, 60, 60, 60,
381
- 60, 60, 60, 60, 60, 60, 60, 60,
382
- 60, 60, 60, 60, 60, 60, 60, 60,
383
- 60, 60, 60, 60, 60, 60, 60, 59,
384
- 61, 61, 61, 61, 61, 61, 61, 61,
385
- 61, 61, 61, 61, 61, 61, 61, 61,
386
- 61, 61, 61, 61, 61, 61, 61, 61,
387
- 61, 61, 61, 61, 61, 61, 61, 61,
388
- 61, 61, 61, 61, 61, 61, 61, 61,
389
- 61, 61, 61, 61, 61, 61, 61, 61,
390
- 61, 61, 61, 61, 61, 61, 61, 61,
391
- 61, 61, 61, 61, 61, 61, 61, 61,
392
- 59, 62, 45, 64, 63, 66, 63, 67,
393
- 45, 69, 68, 71, 68, 72, 72, 72,
394
- 72, 72, 72, 72, 72, 72, 72, 45,
395
- 45, 45, 45, 45, 45, 45, 72, 72,
396
- 72, 72, 72, 72, 45, 45, 45, 45,
397
- 45, 45, 45, 45, 45, 45, 45, 45,
398
- 45, 45, 45, 45, 45, 45, 45, 45,
399
- 45, 45, 45, 45, 45, 45, 72, 72,
400
- 72, 72, 72, 72, 45, 45, 45, 45,
401
- 45, 45, 45, 45, 45, 45, 45, 45,
402
- 45, 45, 45, 45, 45, 45, 45, 45,
403
- 73, 45, 74, 74, 74, 74, 74, 74,
404
- 74, 74, 74, 74, 45, 45, 45, 45,
405
- 45, 45, 45, 74, 74, 74, 74, 74,
406
- 74, 45, 45, 45, 45, 45, 45, 45,
407
- 45, 45, 45, 45, 45, 45, 45, 45,
408
- 45, 45, 45, 45, 45, 45, 45, 45,
409
- 45, 45, 45, 74, 74, 74, 74, 74,
410
- 74, 45, 75, 75, 75, 75, 75, 75,
411
- 75, 75, 75, 75, 45, 45, 45, 45,
412
- 45, 45, 45, 75, 75, 75, 75, 75,
413
- 75, 45, 45, 45, 45, 45, 45, 45,
414
- 45, 45, 45, 45, 45, 45, 45, 45,
415
- 45, 45, 45, 45, 45, 45, 45, 45,
416
- 45, 45, 45, 75, 75, 75, 75, 75,
417
- 75, 45, 76, 76, 76, 76, 76, 76,
418
- 76, 76, 76, 76, 45, 45, 45, 45,
419
- 45, 45, 45, 76, 76, 76, 76, 76,
420
- 76, 45, 45, 45, 45, 45, 45, 45,
421
- 45, 45, 45, 45, 45, 45, 45, 45,
422
- 45, 45, 45, 45, 45, 45, 45, 45,
423
- 45, 45, 45, 76, 76, 76, 76, 76,
424
- 76, 45, 77, 77, 77, 77, 77, 77,
425
- 77, 77, 77, 77, 45, 45, 45, 45,
426
- 45, 45, 45, 77, 77, 77, 77, 77,
427
- 77, 45, 45, 45, 45, 45, 45, 45,
428
- 45, 45, 45, 45, 45, 45, 45, 45,
429
- 45, 45, 45, 45, 45, 45, 45, 45,
430
- 45, 45, 45, 77, 77, 77, 77, 77,
431
- 77, 45, 73, 73, 73, 73, 73, 45,
432
- 45, 45, 45, 45, 45, 45, 45, 45,
433
- 45, 45, 45, 45, 45, 45, 45, 45,
434
- 45, 73, 45, 45, 45, 45, 45, 45,
435
- 45, 45, 45, 45, 45, 45, 45, 45,
436
- 45, 78, 78, 78, 78, 78, 78, 78,
437
- 78, 78, 78, 45, 45, 45, 45, 45,
438
- 45, 45, 78, 78, 78, 78, 78, 78,
439
- 45, 45, 45, 45, 45, 45, 45, 45,
440
- 45, 45, 45, 45, 45, 45, 45, 45,
441
- 45, 45, 45, 45, 45, 45, 45, 45,
442
- 45, 45, 78, 78, 78, 78, 78, 78,
443
- 45, 45, 45, 45, 45, 45, 45, 45,
444
- 45, 45, 45, 45, 45, 45, 45, 45,
445
- 45, 45, 45, 45, 45, 45, 76, 45,
446
- 73, 73, 73, 73, 73, 45, 45, 45,
447
- 45, 45, 45, 45, 45, 45, 45, 45,
448
- 45, 45, 45, 45, 45, 45, 45, 73,
449
- 45, 45, 45, 45, 45, 45, 45, 45,
450
- 45, 45, 45, 45, 45, 45, 45, 79,
451
- 79, 79, 79, 79, 79, 79, 79, 79,
452
- 79, 45, 45, 45, 45, 45, 45, 45,
453
- 79, 79, 79, 79, 79, 79, 45, 45,
454
- 45, 45, 45, 45, 45, 45, 45, 45,
455
- 45, 45, 45, 45, 45, 45, 45, 45,
456
- 45, 45, 45, 45, 45, 45, 45, 45,
457
- 79, 79, 79, 79, 79, 79, 45, 45,
458
- 45, 45, 45, 45, 45, 45, 45, 45,
459
- 45, 45, 45, 45, 45, 45, 45, 45,
460
- 45, 45, 45, 45, 76, 45, 73, 73,
461
- 73, 73, 73, 45, 45, 45, 45, 45,
462
- 45, 45, 45, 45, 45, 45, 45, 45,
463
- 45, 45, 45, 45, 45, 73, 45, 45,
464
- 45, 45, 45, 45, 45, 45, 45, 45,
465
- 45, 45, 45, 45, 45, 80, 80, 80,
466
- 80, 80, 80, 80, 80, 80, 80, 45,
467
- 45, 45, 45, 45, 45, 45, 80, 80,
468
- 80, 80, 80, 80, 45, 45, 45, 45,
469
- 45, 45, 45, 45, 45, 45, 45, 45,
470
- 45, 45, 45, 45, 45, 45, 45, 45,
471
- 45, 45, 45, 45, 45, 45, 80, 80,
472
- 80, 80, 80, 80, 45, 45, 45, 45,
473
- 45, 45, 45, 45, 45, 45, 45, 45,
474
- 45, 45, 45, 45, 45, 45, 45, 45,
475
- 45, 45, 76, 45, 73, 73, 73, 73,
476
- 73, 45, 45, 45, 45, 45, 45, 45,
477
- 45, 45, 45, 45, 45, 45, 45, 45,
478
- 45, 45, 45, 73, 45, 45, 45, 45,
479
- 45, 45, 45, 45, 45, 45, 45, 45,
480
- 45, 45, 45, 81, 81, 81, 81, 81,
481
- 81, 81, 81, 81, 81, 45, 45, 45,
482
- 45, 45, 45, 45, 81, 81, 81, 81,
483
- 81, 81, 45, 45, 45, 45, 45, 45,
484
- 45, 45, 45, 45, 45, 45, 45, 45,
485
- 45, 45, 45, 45, 45, 45, 45, 45,
486
- 45, 45, 45, 45, 81, 81, 81, 81,
487
- 81, 81, 45, 45, 45, 45, 45, 45,
488
- 45, 45, 45, 45, 45, 45, 45, 45,
489
- 45, 45, 45, 45, 45, 45, 45, 45,
490
- 76, 45, 73, 73, 73, 73, 73, 45,
491
- 45, 45, 45, 45, 45, 45, 45, 45,
492
- 45, 45, 45, 45, 45, 45, 45, 45,
493
- 45, 73, 45, 45, 45, 45, 45, 45,
494
- 45, 45, 45, 45, 45, 45, 45, 45,
495
- 45, 82, 82, 82, 82, 82, 82, 82,
496
- 82, 82, 82, 45, 45, 45, 45, 45,
497
- 45, 45, 82, 82, 82, 82, 82, 82,
498
- 45, 45, 45, 45, 45, 45, 45, 45,
499
- 45, 45, 45, 45, 45, 45, 45, 45,
500
- 45, 45, 45, 45, 45, 45, 45, 45,
501
- 45, 45, 82, 82, 82, 82, 82, 82,
502
- 45, 45, 45, 45, 45, 45, 45, 45,
503
- 45, 45, 45, 45, 45, 45, 45, 45,
504
- 45, 45, 45, 45, 45, 45, 76, 45,
505
- 73, 73, 73, 73, 73, 45, 45, 45,
506
- 45, 45, 45, 45, 45, 45, 45, 45,
507
- 45, 45, 45, 45, 45, 45, 45, 73,
508
- 45, 45, 45, 45, 45, 45, 45, 45,
509
- 45, 45, 45, 45, 45, 45, 45, 45,
510
- 45, 45, 45, 45, 45, 45, 45, 45,
511
- 45, 45, 45, 45, 45, 45, 45, 45,
512
- 45, 45, 45, 45, 45, 45, 45, 45,
513
- 45, 45, 45, 45, 45, 45, 45, 45,
514
- 45, 45, 45, 45, 45, 45, 45, 45,
515
- 45, 45, 45, 45, 45, 45, 45, 45,
516
- 45, 45, 45, 45, 45, 45, 45, 45,
517
- 45, 45, 45, 45, 45, 45, 45, 45,
518
- 45, 45, 45, 45, 45, 45, 45, 45,
519
- 45, 45, 45, 45, 76, 45, 84, 84,
520
- 84, 84, 84, 84, 84, 84, 84, 84,
521
- 83, 83, 83, 83, 83, 83, 83, 84,
522
- 84, 84, 84, 84, 84, 83, 83, 83,
523
- 83, 83, 83, 83, 83, 83, 83, 83,
524
- 83, 83, 83, 83, 83, 83, 83, 83,
525
- 83, 83, 83, 83, 83, 83, 83, 84,
526
- 84, 84, 84, 84, 84, 83, 83, 83,
527
- 83, 83, 83, 83, 83, 83, 83, 83,
528
- 83, 83, 83, 83, 83, 83, 83, 83,
529
- 83, 45, 83, 87, 86, 88, 85, 88,
530
- 85, 85, 85, 85, 85, 85, 89, 89,
531
- 89, 89, 89, 89, 89, 89, 89, 89,
532
- 85, 87, 90, 45, 45, 45, 45, 45,
533
- 45, 45, 45, 45, 45, 45, 45, 45,
534
- 45, 45, 45, 45, 45, 45, 45, 45,
535
- 45, 45, 45, 45, 45, 45, 45, 45,
536
- 45, 45, 45, 45, 45, 45, 45, 45,
537
- 45, 45, 45, 45, 45, 45, 45, 45,
538
- 45, 45, 45, 45, 45, 45, 45, 45,
539
- 45, 45, 45, 45, 45, 45, 45, 45,
540
- 45, 45, 45, 45, 45, 2, 2, 2,
541
- 2, 2, 2, 2, 2, 2, 2, 2,
542
- 2, 2, 2, 2, 2, 2, 2, 2,
543
- 2, 2, 2, 2, 2, 2, 2, 2,
544
- 2, 2, 2, 3, 3, 3, 3, 3,
545
- 3, 3, 3, 3, 3, 3, 3, 3,
546
- 3, 3, 3, 91, 91, 91, 91, 91,
547
- 45, 45, 45, 45, 45, 45, 45, 45,
548
- 45, 45, 45, 45, 92, 92, 92, 92,
549
- 92, 92, 92, 92, 93, 93, 93, 93,
550
- 93, 92, 92, 92, 92, 92, 92, 92,
551
- 92, 92, 92, 92, 92, 92, 92, 92,
552
- 92, 92, 92, 94, 95, 95, 96, 97,
553
- 95, 95, 95, 98, 99, 100, 101, 95,
554
- 95, 102, 95, 95, 95, 95, 95, 95,
555
- 95, 95, 95, 95, 95, 95, 95, 95,
556
- 95, 95, 103, 95, 95, 95, 95, 95,
557
- 95, 95, 95, 95, 95, 95, 95, 95,
558
- 95, 95, 95, 95, 95, 95, 95, 95,
559
- 95, 95, 95, 95, 95, 95, 104, 105,
560
- 106, 107, 95, 95, 95, 95, 95, 95,
561
- 95, 95, 95, 95, 95, 95, 95, 95,
562
- 95, 95, 95, 95, 95, 95, 95, 95,
563
- 95, 95, 95, 95, 95, 95, 108, 109,
564
- 106, 95, 92, 95, 2, 2, 2, 2,
565
- 2, 2, 2, 2, 2, 2, 2, 2,
566
- 2, 2, 2, 2, 2, 2, 2, 2,
567
- 2, 2, 2, 2, 2, 2, 2, 2,
568
- 2, 2, 3, 3, 3, 3, 3, 3,
569
- 3, 3, 3, 3, 3, 3, 3, 3,
570
- 3, 3, 91, 91, 91, 91, 91, 110,
571
- 92, 92, 92, 92, 92, 92, 92, 92,
572
- 92, 92, 92, 92, 92, 92, 92, 92,
573
- 92, 92, 92, 92, 92, 92, 92, 92,
574
- 92, 92, 92, 92, 92, 92, 92, 110,
575
- 110, 110, 110, 110, 110, 110, 110, 110,
576
- 110, 110, 110, 110, 110, 110, 110, 110,
577
- 110, 110, 110, 110, 110, 110, 110, 110,
578
- 110, 110, 110, 110, 110, 110, 110, 110,
579
- 110, 110, 110, 110, 110, 110, 110, 110,
580
- 110, 110, 110, 110, 110, 110, 110, 110,
581
- 110, 110, 110, 110, 110, 110, 110, 110,
582
- 110, 110, 110, 110, 110, 110, 110, 110,
583
- 110, 110, 110, 110, 110, 110, 110, 110,
584
- 110, 110, 110, 110, 110, 110, 110, 110,
585
- 110, 110, 110, 110, 110, 110, 110, 110,
586
- 110, 110, 110, 110, 110, 110, 92, 110,
587
- 92, 92, 92, 92, 92, 92, 92, 92,
588
- 93, 93, 93, 93, 93, 92, 92, 92,
589
- 92, 92, 92, 92, 92, 92, 92, 92,
590
- 92, 92, 92, 92, 92, 92, 92, 94,
591
- 111, 111, 111, 111, 111, 111, 111, 111,
592
- 111, 111, 111, 111, 111, 111, 111, 111,
593
- 111, 111, 111, 111, 111, 111, 111, 111,
594
- 111, 111, 111, 111, 111, 111, 111, 111,
595
- 111, 111, 111, 111, 111, 111, 111, 111,
596
- 111, 111, 111, 111, 111, 111, 111, 111,
597
- 111, 111, 111, 111, 111, 111, 111, 111,
598
- 111, 111, 111, 111, 111, 111, 111, 111,
599
- 111, 111, 111, 111, 111, 111, 111, 111,
600
- 111, 111, 111, 111, 111, 111, 111, 111,
601
- 111, 111, 111, 111, 111, 111, 111, 111,
602
- 111, 111, 111, 111, 111, 111, 92, 111,
603
- 94, 94, 94, 94, 94, 111, 111, 111,
604
- 111, 111, 111, 111, 111, 111, 111, 111,
605
- 111, 111, 111, 111, 111, 111, 111, 94,
606
- 111, 95, 95, 110, 110, 95, 95, 95,
607
- 110, 110, 110, 110, 95, 95, 110, 95,
608
- 95, 95, 95, 95, 95, 95, 95, 95,
609
- 95, 95, 95, 95, 95, 95, 95, 110,
610
- 95, 95, 95, 95, 95, 95, 95, 95,
611
- 95, 95, 95, 95, 95, 95, 95, 95,
612
- 95, 95, 95, 95, 95, 95, 95, 95,
613
- 95, 95, 95, 110, 110, 110, 110, 95,
614
- 95, 95, 95, 95, 95, 95, 95, 95,
615
- 95, 95, 95, 95, 95, 95, 95, 95,
616
- 95, 95, 95, 95, 95, 95, 95, 95,
617
- 95, 95, 95, 110, 110, 110, 95, 110,
618
- 113, 96, 115, 114, 118, 117, 5, 117,
619
- 117, 117, 119, 120, 116, 117, 117, 117,
620
- 117, 117, 117, 117, 117, 117, 117, 117,
621
- 117, 117, 117, 117, 117, 8, 117, 121,
622
- 118, 8, 117, 117, 117, 117, 117, 117,
623
- 117, 117, 117, 117, 117, 117, 117, 117,
624
- 117, 117, 117, 117, 117, 117, 117, 117,
625
- 117, 117, 117, 117, 117, 117, 117, 117,
626
- 117, 117, 117, 117, 117, 117, 117, 117,
627
- 117, 117, 117, 117, 117, 117, 117, 117,
628
- 117, 117, 117, 117, 117, 117, 117, 117,
629
- 117, 117, 117, 117, 117, 117, 117, 117,
630
- 117, 8, 117, 116, 117, 116, 117, 117,
631
- 117, 116, 116, 116, 117, 117, 117, 117,
632
- 117, 117, 117, 117, 117, 117, 117, 117,
633
- 117, 117, 117, 117, 122, 117, 116, 116,
634
- 116, 117, 117, 117, 117, 117, 117, 117,
635
- 117, 117, 117, 117, 117, 117, 117, 117,
636
- 117, 117, 117, 117, 117, 117, 117, 117,
637
- 117, 117, 117, 117, 117, 117, 117, 117,
638
- 117, 117, 117, 117, 117, 117, 117, 117,
639
- 117, 117, 117, 117, 117, 117, 117, 117,
640
- 117, 117, 117, 117, 117, 117, 117, 117,
641
- 117, 117, 117, 117, 117, 117, 117, 117,
642
- 116, 117, 8, 9, 125, 124, 124, 124,
643
- 124, 124, 124, 124, 124, 124, 124, 124,
644
- 124, 124, 124, 124, 124, 124, 124, 124,
645
- 125, 124, 127, 126, 126, 126, 126, 126,
646
- 126, 126, 126, 126, 126, 126, 126, 126,
647
- 126, 126, 126, 126, 126, 126, 127, 126,
648
- 129, 128, 128, 128, 128, 128, 128, 128,
649
- 128, 128, 128, 128, 128, 128, 128, 128,
650
- 128, 128, 128, 128, 129, 128, 131, 131,
651
- 130, 130, 130, 130, 131, 130, 130, 130,
652
- 132, 130, 130, 130, 130, 130, 130, 130,
653
- 130, 130, 130, 130, 130, 130, 130, 131,
654
- 130, 130, 130, 130, 130, 130, 130, 131,
655
- 130, 130, 130, 130, 133, 130, 130, 130,
656
- 134, 130, 130, 130, 130, 130, 130, 130,
657
- 130, 130, 130, 130, 130, 130, 130, 131,
658
- 130, 136, 135, 135, 135, 43, 43, 43,
659
- 43, 43, 43, 43, 43, 43, 43, 135,
660
- 137, 45, 45, 45, 137, 45, 45, 45,
661
- 45, 45, 45, 45, 45, 45, 137, 137,
662
- 45, 45, 45, 137, 137, 45, 45, 45,
663
- 45, 45, 45, 45, 45, 45, 45, 45,
664
- 137, 45, 45, 45, 137, 45, 45, 45,
665
- 45, 45, 45, 45, 45, 45, 45, 137,
666
- 45, 45, 45, 137, 45, 138, 45, 45,
667
- 45, 45, 45, 45, 45, 45, 45, 45,
668
- 45, 45, 45, 45, 45, 45, 45, 45,
669
- 45, 45, 45, 45, 45, 45, 45, 45,
670
- 45, 45, 45, 45, 45, 138, 45, 139,
671
- 139, 139, 139, 139, 139, 139, 139, 139,
672
- 139, 139, 139, 139, 139, 139, 139, 139,
673
- 139, 139, 139, 139, 139, 139, 139, 139,
674
- 139, 139, 139, 139, 139, 140, 140, 140,
675
- 140, 140, 140, 140, 140, 140, 140, 140,
676
- 140, 140, 140, 140, 140, 141, 141, 141,
677
- 141, 141, 50, 50, 50, 50, 50, 50,
678
- 50, 50, 50, 50, 50, 50, 50, 50,
679
- 50, 50, 50, 50, 50, 50, 50, 50,
680
- 50, 50, 50, 50, 50, 50, 50, 50,
681
- 50, 50, 50, 50, 50, 50, 50, 50,
682
- 50, 50, 50, 50, 50, 50, 50, 50,
683
- 50, 142, 50, 143, 50, 142, 142, 142,
684
- 142, 50, 144, 142, 50, 50, 50, 50,
685
- 50, 50, 50, 50, 50, 50, 50, 50,
686
- 50, 50, 50, 50, 142, 50, 50, 50,
687
- 50, 50, 50, 50, 50, 50, 50, 50,
688
- 50, 50, 50, 50, 50, 50, 50, 50,
689
- 50, 50, 50, 50, 50, 50, 50, 50,
690
- 145, 146, 147, 148, 50, 50, 50, 50,
691
- 50, 50, 50, 50, 50, 50, 50, 50,
692
- 50, 50, 50, 50, 50, 50, 50, 50,
693
- 50, 50, 50, 50, 50, 50, 50, 50,
694
- 142, 142, 142, 50, 50, 50, 50, 50,
695
- 50, 50, 50, 50, 50, 50, 50, 50,
696
- 50, 50, 50, 50, 50, 50, 50, 50,
697
- 50, 50, 50, 50, 50, 50, 50, 50,
698
- 50, 50, 50, 50, 50, 50, 50, 50,
699
- 50, 50, 50, 50, 50, 50, 50, 50,
700
- 50, 50, 50, 50, 50, 50, 50, 50,
701
- 50, 50, 50, 50, 50, 50, 50, 50,
702
- 50, 50, 50, 50, 149, 51, 51, 51,
703
- 51, 51, 51, 51, 51, 51, 51, 51,
704
- 51, 51, 51, 51, 51, 51, 51, 51,
705
- 51, 51, 51, 51, 51, 51, 51, 51,
706
- 51, 51, 51, 51, 51, 51, 51, 51,
707
- 51, 51, 51, 51, 51, 51, 51, 51,
708
- 51, 51, 51, 51, 51, 51, 51, 51,
709
- 51, 51, 51, 51, 51, 51, 51, 51,
710
- 51, 51, 51, 51, 51, 149, 150, 150,
711
- 150, 150, 150, 150, 150, 150, 150, 150,
712
- 150, 150, 150, 150, 150, 150, 150, 150,
713
- 150, 150, 150, 150, 150, 150, 150, 150,
714
- 150, 150, 150, 150, 150, 150, 150, 150,
715
- 150, 150, 150, 150, 150, 150, 150, 150,
716
- 150, 150, 150, 150, 150, 150, 150, 150,
717
- 150, 150, 150, 150, 150, 150, 150, 150,
718
- 150, 150, 150, 150, 150, 150, 149, 151,
719
- 149, 153, 152, 152, 152, 152, 152, 152,
720
- 152, 152, 152, 152, 152, 152, 152, 152,
721
- 152, 152, 152, 152, 152, 152, 152, 152,
722
- 152, 152, 152, 152, 152, 152, 152, 152,
723
- 152, 152, 152, 152, 152, 152, 152, 152,
724
- 152, 152, 152, 152, 152, 152, 152, 152,
725
- 152, 152, 152, 152, 152, 152, 152, 152,
726
- 154, 152, 55, 156, 158, 158, 157, 157,
727
- 157, 158, 157, 157, 157, 157, 158, 157,
728
- 157, 158, 157, 157, 158, 157, 157, 157,
729
- 158, 157, 157, 157, 158, 158, 158, 157,
730
- 157, 157, 158, 158, 158, 158, 158, 158,
731
- 157, 158, 157, 157, 157, 157, 157, 158,
732
- 157, 158, 157, 158, 158, 158, 158, 158,
733
- 158, 158, 157, 159, 159, 159, 159, 159,
734
- 159, 159, 159, 159, 159, 159, 159, 159,
735
- 159, 159, 159, 159, 159, 159, 159, 159,
736
- 159, 159, 159, 159, 159, 159, 159, 159,
737
- 159, 160, 160, 160, 160, 160, 160, 160,
738
- 160, 160, 160, 160, 160, 160, 160, 160,
739
- 160, 161, 161, 161, 161, 161, 60, 60,
740
- 60, 60, 60, 60, 60, 60, 60, 60,
741
- 60, 60, 60, 60, 60, 60, 60, 60,
742
- 60, 60, 60, 60, 60, 60, 60, 60,
743
- 60, 60, 60, 60, 60, 60, 60, 60,
744
- 60, 60, 60, 60, 60, 60, 60, 60,
745
- 60, 60, 60, 60, 60, 162, 60, 60,
746
- 60, 162, 162, 162, 162, 60, 60, 162,
747
- 60, 163, 164, 164, 164, 164, 164, 164,
748
- 164, 165, 165, 60, 60, 60, 60, 60,
749
- 162, 60, 45, 45, 166, 167, 60, 60,
750
- 45, 167, 60, 60, 45, 60, 168, 60,
751
- 60, 169, 60, 167, 167, 60, 60, 60,
752
- 167, 167, 60, 45, 162, 162, 162, 162,
753
- 60, 60, 170, 170, 62, 167, 170, 170,
754
- 60, 167, 60, 60, 60, 60, 60, 170,
755
- 60, 169, 60, 170, 167, 170, 171, 170,
756
- 167, 172, 60, 45, 162, 162, 162, 60,
757
- 60, 60, 60, 60, 60, 60, 60, 60,
758
- 60, 60, 60, 60, 60, 60, 60, 60,
759
- 60, 60, 60, 60, 60, 60, 60, 60,
760
- 60, 60, 60, 60, 60, 60, 60, 60,
761
- 60, 60, 60, 60, 60, 60, 60, 60,
762
- 60, 60, 60, 60, 60, 60, 60, 60,
763
- 60, 60, 60, 60, 60, 60, 60, 60,
764
- 60, 60, 60, 60, 60, 60, 60, 60,
765
- 173, 61, 61, 61, 61, 61, 61, 61,
766
- 61, 61, 61, 61, 61, 61, 61, 61,
767
- 61, 61, 61, 61, 61, 61, 61, 61,
768
- 61, 61, 61, 61, 61, 61, 61, 61,
769
- 61, 61, 61, 61, 61, 61, 61, 61,
770
- 61, 61, 61, 61, 61, 61, 61, 61,
771
- 61, 61, 61, 61, 61, 61, 61, 61,
772
- 61, 61, 61, 61, 61, 61, 61, 61,
773
- 61, 173, 174, 174, 174, 174, 174, 174,
774
- 174, 174, 174, 174, 174, 174, 174, 174,
775
- 174, 174, 174, 174, 174, 174, 174, 174,
776
- 174, 174, 174, 174, 174, 174, 174, 174,
777
- 174, 174, 174, 174, 174, 174, 174, 174,
778
- 174, 174, 174, 174, 174, 174, 174, 174,
779
- 174, 174, 174, 174, 174, 174, 174, 174,
780
- 174, 174, 174, 174, 174, 174, 174, 174,
781
- 174, 174, 173, 176, 176, 176, 176, 176,
782
- 176, 176, 176, 175, 178, 178, 178, 178,
783
- 178, 178, 178, 178, 177, 180, 63, 182,
784
- 181, 63, 184, 68, 68, 68, 68, 68,
785
- 68, 68, 68, 68, 68, 68, 68, 68,
786
- 68, 68, 68, 68, 68, 68, 68, 68,
787
- 68, 68, 68, 68, 68, 68, 68, 68,
788
- 68, 68, 185, 68, 187, 186, 68, 71,
789
- 68, 189, 189, 189, 189, 189, 189, 189,
790
- 189, 189, 189, 188, 188, 188, 188, 188,
791
- 188, 188, 189, 189, 189, 189, 189, 189,
792
- 188, 188, 188, 188, 188, 188, 188, 188,
793
- 188, 188, 188, 188, 188, 188, 188, 188,
794
- 188, 188, 188, 188, 188, 188, 188, 188,
795
- 188, 188, 189, 189, 189, 189, 189, 189,
796
- 188, 191, 190, 190, 190, 190, 190, 192,
797
- 190, 190, 190, 193, 193, 193, 193, 193,
798
- 193, 193, 193, 193, 190, 190, 194, 190,
799
- 87, 86, 86, 86, 86, 86, 195, 86,
800
- 86, 195, 195, 195, 195, 195, 195, 195,
801
- 195, 195, 195, 86, 89, 89, 89, 89,
802
- 89, 89, 89, 89, 89, 195, 88, 195,
803
- 195, 195, 195, 195, 195, 89, 89, 89,
804
- 89, 89, 89, 89, 89, 89, 89, 195,
805
- 195, 90, 90, 195, 195, 195, 195, 195,
806
- 195, 195, 195, 195, 195, 90, 90, 90,
807
- 90, 87, 90, 0
145
+ 1,1,1,1,1,1,1,1,
146
+ 1,1,1,1,1,1,1,1,
147
+ 1,1,1,1,1,1,1,1,
148
+ 1,1,1,1,1,1,1,1,
149
+ 1,1,1,1,1,1,1,1,
150
+ 1,1,1,1,1,1,1,1,
151
+ 1,1,1,1,1,1,1,1,
152
+ 1,1,1,1,1,1,1,1,
153
+ 0,2,2,2,2,2,2,2,
154
+ 2,2,2,2,2,2,2,2,
155
+ 2,2,2,2,2,2,2,2,
156
+ 2,2,2,2,2,2,2,2,
157
+ 2,2,2,2,2,2,2,2,
158
+ 2,2,2,2,2,2,2,2,
159
+ 2,2,2,2,2,2,2,2,
160
+ 2,2,2,2,2,2,2,2,
161
+ 2,0,3,3,3,3,3,3,
162
+ 3,3,3,3,3,3,3,3,
163
+ 3,3,3,3,3,3,3,3,
164
+ 3,3,3,3,3,3,3,3,
165
+ 3,3,3,3,3,3,3,3,
166
+ 3,3,3,3,3,3,3,3,
167
+ 3,3,3,3,3,3,3,3,
168
+ 3,3,3,3,3,3,3,3,
169
+ 3,3,0,6,5,8,7,7,
170
+ 7,7,7,4,7,7,4,4,
171
+ 4,4,4,4,4,4,4,4,
172
+ 7,8,7,10,9,9,9,9,
173
+ 9,9,9,9,9,9,9,4,
174
+ 9,9,4,4,4,4,4,4,
175
+ 4,4,4,4,9,9,9,11,
176
+ 8,9,8,9,13,12,12,12,
177
+ 12,12,12,12,12,12,12,12,
178
+ 12,12,12,12,12,12,12,12,
179
+ 12,14,12,16,15,15,15,15,
180
+ 15,17,15,15,18,18,18,18,
181
+ 18,18,18,18,18,18,15,16,
182
+ 15,18,18,18,18,18,18,18,
183
+ 18,18,18,12,16,12,12,12,
184
+ 19,12,19,12,12,18,18,18,
185
+ 18,18,18,18,18,18,18,12,
186
+ 20,20,20,20,20,20,20,20,
187
+ 20,20,12,16,12,12,12,12,
188
+ 12,12,12,12,20,20,20,20,
189
+ 20,20,20,20,20,20,12,12,
190
+ 21,21,21,21,21,21,21,21,
191
+ 21,21,21,22,21,21,23,23,
192
+ 23,23,23,23,23,23,23,23,
193
+ 21,21,21,21,16,21,16,21,
194
+ 23,23,23,23,23,23,23,23,
195
+ 23,23,12,24,12,24,12,12,
196
+ 23,23,23,23,23,23,23,23,
197
+ 23,23,12,12,12,12,16,12,
198
+ 25,25,25,25,25,25,25,25,
199
+ 25,25,12,25,25,25,25,25,
200
+ 25,25,25,25,25,12,12,12,
201
+ 12,16,12,26,12,12,12,12,
202
+ 12,12,12,12,12,12,12,12,
203
+ 12,12,12,12,12,12,12,12,
204
+ 27,12,29,28,28,28,28,28,
205
+ 30,28,28,31,31,31,31,31,
206
+ 31,31,31,31,31,28,29,28,
207
+ 31,31,31,31,31,31,31,31,
208
+ 31,31,12,29,12,12,12,32,
209
+ 12,32,12,12,31,31,31,31,
210
+ 31,31,31,31,31,31,12,33,
211
+ 33,33,33,33,33,33,33,33,
212
+ 33,12,29,12,12,12,12,12,
213
+ 12,12,12,33,33,33,33,33,
214
+ 33,33,33,33,33,12,12,34,
215
+ 34,34,34,34,34,34,34,34,
216
+ 34,34,35,34,34,36,36,36,
217
+ 36,36,36,36,36,36,36,34,
218
+ 34,34,34,29,34,29,34,36,
219
+ 36,36,36,36,36,36,36,36,
220
+ 36,12,37,12,37,12,12,36,
221
+ 36,36,36,36,36,36,36,36,
222
+ 36,12,12,12,12,29,12,38,
223
+ 38,38,38,38,38,38,38,38,
224
+ 38,12,38,38,38,38,38,38,
225
+ 38,38,38,38,12,12,12,12,
226
+ 29,12,40,40,40,40,40,40,
227
+ 40,40,40,40,39,40,40,40,
228
+ 40,40,40,40,40,40,40,39,
229
+ 39,39,39,39,39,39,39,39,
230
+ 39,39,39,39,39,39,39,39,
231
+ 39,39,39,39,39,39,39,39,
232
+ 39,39,39,39,39,39,39,39,
233
+ 39,39,39,39,39,39,39,39,
234
+ 39,39,39,39,39,39,39,39,
235
+ 39,39,39,39,39,39,39,39,
236
+ 39,39,39,39,39,39,39,39,
237
+ 39,39,41,39,40,39,39,39,
238
+ 42,42,42,42,42,42,42,42,
239
+ 42,42,39,39,39,39,39,39,
240
+ 39,39,39,39,39,39,39,39,
241
+ 39,39,39,39,39,39,39,39,
242
+ 39,39,39,39,39,39,39,39,
243
+ 39,39,39,39,39,39,39,39,
244
+ 39,39,39,39,39,39,39,39,
245
+ 39,39,39,39,39,39,39,39,
246
+ 39,39,39,39,39,39,39,39,
247
+ 39,39,39,39,39,41,39,43,
248
+ 44,45,45,45,45,45,44,44,
249
+ 44,44,44,44,44,44,44,44,
250
+ 44,44,44,44,44,44,44,44,
251
+ 45,44,44,44,44,44,44,44,
252
+ 44,44,44,44,44,45,45,44,
253
+ 45,45,45,45,45,45,45,45,
254
+ 45,45,44,44,44,45,44,44,
255
+ 44,45,45,45,45,45,45,45,
256
+ 45,45,45,45,45,45,45,45,
257
+ 45,45,45,45,45,45,45,45,
258
+ 45,45,45,44,44,44,46,45,
259
+ 44,45,45,45,45,45,45,45,
260
+ 45,45,45,45,45,45,45,45,
261
+ 45,45,45,45,45,45,45,45,
262
+ 45,45,45,44,45,45,45,45,
263
+ 45,44,44,44,44,44,44,44,
264
+ 44,44,44,44,44,44,44,44,
265
+ 44,44,44,45,44,44,44,44,
266
+ 44,44,44,44,44,44,44,44,
267
+ 45,45,44,45,45,45,45,45,
268
+ 45,45,45,45,45,44,44,44,
269
+ 45,44,44,44,45,45,45,45,
270
+ 45,45,45,45,45,45,45,45,
271
+ 45,45,45,45,45,45,45,45,
272
+ 45,45,45,45,45,45,44,44,
273
+ 44,44,45,44,45,45,45,45,
274
+ 45,45,45,45,45,45,45,45,
275
+ 45,45,45,45,45,45,45,45,
276
+ 45,45,45,45,45,45,44,44,
277
+ 47,44,45,45,45,45,45,44,
278
+ 44,44,44,44,44,44,44,44,
279
+ 44,44,44,44,44,44,44,44,
280
+ 44,45,44,44,44,44,44,44,
281
+ 44,44,44,44,44,44,45,45,
282
+ 44,45,45,45,45,45,45,45,
283
+ 45,45,45,44,44,44,45,44,
284
+ 44,44,45,45,45,45,45,45,
285
+ 45,45,45,45,45,45,45,45,
286
+ 45,45,45,45,45,45,45,45,
287
+ 45,45,45,45,44,44,44,44,
288
+ 45,44,45,45,45,45,45,45,
289
+ 45,45,45,45,45,45,45,45,
290
+ 45,45,45,45,45,45,45,45,
291
+ 45,45,45,45,44,49,49,49,
292
+ 49,49,49,49,49,49,49,49,
293
+ 49,49,49,49,49,49,49,49,
294
+ 49,49,49,49,49,49,49,49,
295
+ 49,49,49,49,49,49,49,49,
296
+ 49,49,49,49,49,49,49,49,
297
+ 49,49,49,49,49,49,49,49,
298
+ 49,49,49,49,49,49,49,49,
299
+ 49,49,49,49,49,48,50,50,
300
+ 50,50,50,50,50,50,50,50,
301
+ 50,50,50,50,50,50,50,50,
302
+ 50,50,50,50,50,50,50,50,
303
+ 50,50,50,50,50,50,50,50,
304
+ 50,50,50,50,50,50,50,50,
305
+ 50,50,50,50,50,50,50,50,
306
+ 50,50,50,50,50,50,50,50,
307
+ 50,50,50,50,50,50,48,52,
308
+ 51,55,54,54,54,54,54,54,
309
+ 54,54,54,54,54,54,54,54,
310
+ 54,54,54,54,54,54,54,54,
311
+ 54,54,54,54,54,54,54,54,
312
+ 54,54,56,54,56,54,55,54,
313
+ 54,54,54,54,54,54,54,54,
314
+ 54,54,54,54,54,54,54,54,
315
+ 54,54,54,54,54,54,54,54,
316
+ 54,54,54,54,54,54,54,56,
317
+ 54,57,54,59,59,59,59,59,
318
+ 59,59,59,59,59,59,59,59,
319
+ 59,59,59,59,59,59,59,59,
320
+ 59,59,59,59,59,59,59,59,
321
+ 59,59,59,59,59,59,59,59,
322
+ 59,59,59,59,59,59,59,59,
323
+ 59,59,59,59,59,59,59,59,
324
+ 59,59,59,59,59,59,59,59,
325
+ 59,59,59,58,60,60,60,60,
326
+ 60,60,60,60,60,60,60,60,
327
+ 60,60,60,60,60,60,60,60,
328
+ 60,60,60,60,60,60,60,60,
329
+ 60,60,60,60,60,60,60,60,
330
+ 60,60,60,60,60,60,60,60,
331
+ 60,60,60,60,60,60,60,60,
332
+ 60,60,60,60,60,60,60,60,
333
+ 60,60,60,60,58,61,44,63,
334
+ 62,65,62,66,44,68,67,70,
335
+ 67,71,71,71,71,71,71,71,
336
+ 71,71,71,44,44,44,44,44,
337
+ 44,44,71,71,71,71,71,71,
338
+ 44,44,44,44,44,44,44,44,
339
+ 44,44,44,44,44,44,44,44,
340
+ 44,44,44,44,44,44,44,44,
341
+ 44,44,71,71,71,71,71,71,
342
+ 44,44,44,44,44,44,44,44,
343
+ 44,44,44,44,44,44,44,44,
344
+ 44,44,44,44,72,44,73,73,
345
+ 73,73,73,73,73,73,73,73,
346
+ 44,44,44,44,44,44,44,73,
347
+ 73,73,73,73,73,44,44,44,
348
+ 44,44,44,44,44,44,44,44,
349
+ 44,44,44,44,44,44,44,44,
350
+ 44,44,44,44,44,44,44,73,
351
+ 73,73,73,73,73,44,74,74,
352
+ 74,74,74,74,74,74,74,74,
353
+ 44,44,44,44,44,44,44,74,
354
+ 74,74,74,74,74,44,44,44,
355
+ 44,44,44,44,44,44,44,44,
356
+ 44,44,44,44,44,44,44,44,
357
+ 44,44,44,44,44,44,44,74,
358
+ 74,74,74,74,74,44,75,75,
359
+ 75,75,75,75,75,75,75,75,
360
+ 44,44,44,44,44,44,44,75,
361
+ 75,75,75,75,75,44,44,44,
362
+ 44,44,44,44,44,44,44,44,
363
+ 44,44,44,44,44,44,44,44,
364
+ 44,44,44,44,44,44,44,75,
365
+ 75,75,75,75,75,44,76,76,
366
+ 76,76,76,76,76,76,76,76,
367
+ 44,44,44,44,44,44,44,76,
368
+ 76,76,76,76,76,44,44,44,
369
+ 44,44,44,44,44,44,44,44,
370
+ 44,44,44,44,44,44,44,44,
371
+ 44,44,44,44,44,44,44,76,
372
+ 76,76,76,76,76,44,72,72,
373
+ 72,72,72,44,44,44,44,44,
374
+ 44,44,44,44,44,44,44,44,
375
+ 44,44,44,44,44,72,44,44,
376
+ 44,44,44,44,44,44,44,44,
377
+ 44,44,44,44,44,77,77,77,
378
+ 77,77,77,77,77,77,77,44,
379
+ 44,44,44,44,44,44,77,77,
380
+ 77,77,77,77,44,44,44,44,
381
+ 44,44,44,44,44,44,44,44,
382
+ 44,44,44,44,44,44,44,44,
383
+ 44,44,44,44,44,44,77,77,
384
+ 77,77,77,77,44,44,44,44,
385
+ 44,44,44,44,44,44,44,44,
386
+ 44,44,44,44,44,44,44,44,
387
+ 44,44,75,44,72,72,72,72,
388
+ 72,44,44,44,44,44,44,44,
389
+ 44,44,44,44,44,44,44,44,
390
+ 44,44,44,72,44,44,44,44,
391
+ 44,44,44,44,44,44,44,44,
392
+ 44,44,44,78,78,78,78,78,
393
+ 78,78,78,78,78,44,44,44,
394
+ 44,44,44,44,78,78,78,78,
395
+ 78,78,44,44,44,44,44,44,
396
+ 44,44,44,44,44,44,44,44,
397
+ 44,44,44,44,44,44,44,44,
398
+ 44,44,44,44,78,78,78,78,
399
+ 78,78,44,44,44,44,44,44,
400
+ 44,44,44,44,44,44,44,44,
401
+ 44,44,44,44,44,44,44,44,
402
+ 75,44,72,72,72,72,72,44,
403
+ 44,44,44,44,44,44,44,44,
404
+ 44,44,44,44,44,44,44,44,
405
+ 44,72,44,44,44,44,44,44,
406
+ 44,44,44,44,44,44,44,44,
407
+ 44,79,79,79,79,79,79,79,
408
+ 79,79,79,44,44,44,44,44,
409
+ 44,44,79,79,79,79,79,79,
410
+ 44,44,44,44,44,44,44,44,
411
+ 44,44,44,44,44,44,44,44,
412
+ 44,44,44,44,44,44,44,44,
413
+ 44,44,79,79,79,79,79,79,
414
+ 44,44,44,44,44,44,44,44,
415
+ 44,44,44,44,44,44,44,44,
416
+ 44,44,44,44,44,44,75,44,
417
+ 72,72,72,72,72,44,44,44,
418
+ 44,44,44,44,44,44,44,44,
419
+ 44,44,44,44,44,44,44,72,
420
+ 44,44,44,44,44,44,44,44,
421
+ 44,44,44,44,44,44,44,80,
422
+ 80,80,80,80,80,80,80,80,
423
+ 80,44,44,44,44,44,44,44,
424
+ 80,80,80,80,80,80,44,44,
425
+ 44,44,44,44,44,44,44,44,
426
+ 44,44,44,44,44,44,44,44,
427
+ 44,44,44,44,44,44,44,44,
428
+ 80,80,80,80,80,80,44,44,
429
+ 44,44,44,44,44,44,44,44,
430
+ 44,44,44,44,44,44,44,44,
431
+ 44,44,44,44,75,44,72,72,
432
+ 72,72,72,44,44,44,44,44,
433
+ 44,44,44,44,44,44,44,44,
434
+ 44,44,44,44,44,72,44,44,
435
+ 44,44,44,44,44,44,44,44,
436
+ 44,44,44,44,44,81,81,81,
437
+ 81,81,81,81,81,81,81,44,
438
+ 44,44,44,44,44,44,81,81,
439
+ 81,81,81,81,44,44,44,44,
440
+ 44,44,44,44,44,44,44,44,
441
+ 44,44,44,44,44,44,44,44,
442
+ 44,44,44,44,44,44,81,81,
443
+ 81,81,81,81,44,44,44,44,
444
+ 44,44,44,44,44,44,44,44,
445
+ 44,44,44,44,44,44,44,44,
446
+ 44,44,75,44,72,72,72,72,
447
+ 72,44,44,44,44,44,44,44,
448
+ 44,44,44,44,44,44,44,44,
449
+ 44,44,44,72,44,44,44,44,
450
+ 44,44,44,44,44,44,44,44,
451
+ 44,44,44,44,44,44,44,44,
452
+ 44,44,44,44,44,44,44,44,
453
+ 44,44,44,44,44,44,44,44,
454
+ 44,44,44,44,44,44,44,44,
455
+ 44,44,44,44,44,44,44,44,
456
+ 44,44,44,44,44,44,44,44,
457
+ 44,44,44,44,44,44,44,44,
458
+ 44,44,44,44,44,44,44,44,
459
+ 44,44,44,44,44,44,44,44,
460
+ 44,44,44,44,44,44,44,44,
461
+ 75,44,83,83,83,83,83,83,
462
+ 83,83,83,83,82,82,82,82,
463
+ 82,82,82,83,83,83,83,83,
464
+ 83,82,82,82,82,82,82,82,
465
+ 82,82,82,82,82,82,82,82,
466
+ 82,82,82,82,82,82,82,82,
467
+ 82,82,82,83,83,83,83,83,
468
+ 83,82,82,82,82,82,82,82,
469
+ 82,82,82,82,82,82,82,82,
470
+ 82,82,82,82,82,44,82,86,
471
+ 85,87,84,87,84,84,84,84,
472
+ 84,84,88,88,88,88,88,88,
473
+ 88,88,88,88,84,86,89,44,
474
+ 44,44,44,44,44,44,44,44,
475
+ 44,44,44,44,44,44,44,44,
476
+ 44,44,44,44,44,44,44,44,
477
+ 44,44,44,44,44,44,44,44,
478
+ 44,44,44,44,44,44,44,44,
479
+ 44,44,44,44,44,44,44,44,
480
+ 44,44,44,44,44,44,44,44,
481
+ 44,44,44,44,44,44,44,44,
482
+ 44,2,2,2,2,2,2,2,
483
+ 2,2,2,2,2,2,2,2,
484
+ 2,2,2,2,2,2,2,2,
485
+ 2,2,2,2,2,2,2,3,
486
+ 3,3,3,3,3,3,3,3,
487
+ 3,3,3,3,3,3,3,90,
488
+ 90,90,90,90,44,44,44,44,
489
+ 44,44,44,44,44,44,44,44,
490
+ 91,91,91,91,91,91,91,91,
491
+ 92,92,92,92,92,91,91,91,
492
+ 91,91,91,91,91,91,91,91,
493
+ 91,91,91,91,91,91,91,93,
494
+ 94,94,95,96,94,94,94,97,
495
+ 98,99,100,94,94,101,94,94,
496
+ 94,94,94,94,94,94,94,94,
497
+ 94,94,94,94,94,94,102,94,
498
+ 94,94,94,94,94,94,94,94,
499
+ 94,94,94,94,94,94,94,94,
500
+ 94,94,94,94,94,94,94,94,
501
+ 94,94,103,104,105,106,94,94,
502
+ 94,94,94,94,94,94,94,94,
503
+ 94,94,94,94,94,94,94,94,
504
+ 94,94,94,94,94,94,94,94,
505
+ 94,94,107,108,105,94,91,94,
506
+ 2,2,2,2,2,2,2,2,
507
+ 2,2,2,2,2,2,2,2,
508
+ 2,2,2,2,2,2,2,2,
509
+ 2,2,2,2,2,2,3,3,
510
+ 3,3,3,3,3,3,3,3,
511
+ 3,3,3,3,3,3,90,90,
512
+ 90,90,90,109,91,91,91,91,
513
+ 91,91,91,91,91,91,91,91,
514
+ 91,91,91,91,91,91,91,91,
515
+ 91,91,91,91,91,91,91,91,
516
+ 91,91,91,109,109,109,109,109,
517
+ 109,109,109,109,109,109,109,109,
518
+ 109,109,109,109,109,109,109,109,
519
+ 109,109,109,109,109,109,109,109,
520
+ 109,109,109,109,109,109,109,109,
521
+ 109,109,109,109,109,109,109,109,
522
+ 109,109,109,109,109,109,109,109,
523
+ 109,109,109,109,109,109,109,109,
524
+ 109,109,109,109,109,109,109,109,
525
+ 109,109,109,109,109,109,109,109,
526
+ 109,109,109,109,109,109,109,109,
527
+ 109,109,109,109,109,109,109,109,
528
+ 109,109,91,109,91,91,91,91,
529
+ 91,91,91,91,92,92,92,92,
530
+ 92,91,91,91,91,91,91,91,
531
+ 91,91,91,91,91,91,91,91,
532
+ 91,91,91,93,110,110,110,110,
533
+ 110,110,110,110,110,110,110,110,
534
+ 110,110,110,110,110,110,110,110,
535
+ 110,110,110,110,110,110,110,110,
536
+ 110,110,110,110,110,110,110,110,
537
+ 110,110,110,110,110,110,110,110,
538
+ 110,110,110,110,110,110,110,110,
539
+ 110,110,110,110,110,110,110,110,
540
+ 110,110,110,110,110,110,110,110,
541
+ 110,110,110,110,110,110,110,110,
542
+ 110,110,110,110,110,110,110,110,
543
+ 110,110,110,110,110,110,110,110,
544
+ 110,110,91,110,93,93,93,93,
545
+ 93,110,110,110,110,110,110,110,
546
+ 110,110,110,110,110,110,110,110,
547
+ 110,110,110,93,110,94,94,109,
548
+ 109,94,94,94,109,109,109,109,
549
+ 94,94,109,94,94,94,94,94,
550
+ 94,94,94,94,94,94,94,94,
551
+ 94,94,94,109,94,94,94,94,
552
+ 94,94,94,94,94,94,94,94,
553
+ 94,94,94,94,94,94,94,94,
554
+ 94,94,94,94,94,94,94,109,
555
+ 109,109,109,94,94,94,94,94,
556
+ 94,94,94,94,94,94,94,94,
557
+ 94,94,94,94,94,94,94,94,
558
+ 94,94,94,94,94,94,94,109,
559
+ 109,109,94,109,112,95,114,113,
560
+ 10,116,5,116,116,116,117,118,
561
+ 115,116,116,116,116,116,116,116,
562
+ 116,116,116,116,116,116,116,116,
563
+ 116,8,116,119,10,8,116,116,
564
+ 116,116,116,116,116,116,116,116,
565
+ 116,116,116,116,116,116,116,116,
566
+ 116,116,116,116,116,116,116,116,
567
+ 116,116,116,116,116,116,116,116,
568
+ 116,116,116,116,116,116,116,116,
569
+ 116,116,116,116,116,116,116,116,
570
+ 116,116,116,116,116,116,116,116,
571
+ 116,116,116,116,116,8,116,115,
572
+ 116,115,116,116,116,115,115,115,
573
+ 116,116,116,116,116,116,116,116,
574
+ 116,116,116,116,116,116,116,116,
575
+ 120,116,115,115,115,116,116,116,
576
+ 116,116,116,116,116,116,116,116,
577
+ 116,116,116,116,116,116,116,116,
578
+ 116,116,116,116,116,116,116,116,
579
+ 116,116,116,116,116,116,116,116,
580
+ 116,116,116,116,116,116,116,116,
581
+ 116,116,116,116,116,116,116,116,
582
+ 116,116,116,116,116,116,116,116,
583
+ 116,116,116,116,115,116,8,9,
584
+ 123,122,122,122,122,122,122,122,
585
+ 122,122,122,122,122,122,122,122,
586
+ 122,122,122,122,123,122,125,124,
587
+ 124,124,124,124,124,124,124,124,
588
+ 124,124,124,124,124,124,124,124,
589
+ 124,124,125,124,127,126,126,126,
590
+ 126,126,126,126,126,126,126,126,
591
+ 126,126,126,126,126,126,126,126,
592
+ 127,126,129,129,128,128,128,128,
593
+ 129,128,128,128,130,128,128,128,
594
+ 128,128,128,128,128,128,128,128,
595
+ 128,128,128,129,128,128,128,128,
596
+ 128,128,128,129,128,128,128,128,
597
+ 131,128,128,128,132,128,128,128,
598
+ 128,128,128,128,128,128,128,128,
599
+ 128,128,128,129,128,134,133,133,
600
+ 133,42,42,42,42,42,42,42,
601
+ 42,42,42,133,135,44,44,44,
602
+ 135,44,44,44,44,44,44,44,
603
+ 44,44,135,135,44,44,44,135,
604
+ 135,44,44,44,44,44,44,44,
605
+ 44,44,44,44,135,44,44,44,
606
+ 135,44,44,44,44,44,44,44,
607
+ 44,44,44,135,44,44,44,135,
608
+ 44,136,44,44,44,44,44,44,
609
+ 44,44,44,44,44,44,44,44,
610
+ 44,44,44,44,44,44,44,44,
611
+ 44,44,44,44,44,44,44,44,
612
+ 44,136,44,137,137,137,137,137,
613
+ 137,137,137,137,137,137,137,137,
614
+ 137,137,137,137,137,137,137,137,
615
+ 137,137,137,137,137,137,137,137,
616
+ 137,138,138,138,138,138,138,138,
617
+ 138,138,138,138,138,138,138,138,
618
+ 138,139,139,139,139,139,49,49,
619
+ 49,49,49,49,49,49,49,49,
620
+ 49,49,49,49,49,49,49,49,
621
+ 49,49,49,49,49,49,49,49,
622
+ 49,49,49,49,49,49,49,49,
623
+ 49,49,49,49,49,49,49,49,
624
+ 49,49,49,49,49,140,49,141,
625
+ 49,140,140,140,140,49,142,140,
626
+ 49,49,49,49,49,49,49,49,
627
+ 49,49,49,49,49,49,49,49,
628
+ 140,49,49,49,49,49,49,49,
629
+ 49,49,49,49,49,49,49,49,
630
+ 49,49,49,49,49,49,49,49,
631
+ 49,49,49,49,143,144,145,146,
632
+ 49,49,49,49,49,49,49,49,
633
+ 49,49,49,49,49,49,49,49,
634
+ 49,49,49,49,49,49,49,49,
635
+ 49,49,49,49,140,140,140,49,
636
+ 49,49,49,49,49,49,49,49,
637
+ 49,49,49,49,49,49,49,49,
638
+ 49,49,49,49,49,49,49,49,
639
+ 49,49,49,49,49,49,49,49,
640
+ 49,49,49,49,49,49,49,49,
641
+ 49,49,49,49,49,49,49,49,
642
+ 49,49,49,49,49,49,49,49,
643
+ 49,49,49,49,49,49,49,49,
644
+ 147,50,50,50,50,50,50,50,
645
+ 50,50,50,50,50,50,50,50,
646
+ 50,50,50,50,50,50,50,50,
647
+ 50,50,50,50,50,50,50,50,
648
+ 50,50,50,50,50,50,50,50,
649
+ 50,50,50,50,50,50,50,50,
650
+ 50,50,50,50,50,50,50,50,
651
+ 50,50,50,50,50,50,50,50,
652
+ 50,147,148,148,148,148,148,148,
653
+ 148,148,148,148,148,148,148,148,
654
+ 148,148,148,148,148,148,148,148,
655
+ 148,148,148,148,148,148,148,148,
656
+ 148,148,148,148,148,148,148,148,
657
+ 148,148,148,148,148,148,148,148,
658
+ 148,148,148,148,148,148,148,148,
659
+ 148,148,148,148,148,148,148,148,
660
+ 148,148,147,149,147,151,150,150,
661
+ 150,150,150,150,150,150,150,150,
662
+ 150,150,150,150,150,150,150,150,
663
+ 150,150,150,150,150,150,150,150,
664
+ 150,150,150,150,150,150,150,150,
665
+ 150,150,150,150,150,150,150,150,
666
+ 150,150,150,150,150,150,150,150,
667
+ 150,150,150,150,152,150,54,154,
668
+ 156,156,156,156,156,156,156,156,
669
+ 155,155,155,155,155,155,155,155,
670
+ 155,155,155,157,157,155,155,155,
671
+ 157,155,155,155,155,157,155,155,
672
+ 157,155,155,157,155,155,155,157,
673
+ 155,155,155,157,157,157,155,155,
674
+ 155,157,157,157,157,157,157,155,
675
+ 157,155,155,155,155,155,157,155,
676
+ 157,155,157,157,157,157,157,157,
677
+ 157,155,159,159,159,159,159,159,
678
+ 159,159,158,160,160,160,160,160,
679
+ 160,160,160,158,161,161,161,161,
680
+ 161,161,161,161,161,161,161,161,
681
+ 161,161,161,161,161,161,161,161,
682
+ 161,161,161,161,161,161,161,161,
683
+ 161,161,162,162,162,162,162,162,
684
+ 162,162,162,162,162,162,162,162,
685
+ 162,162,163,163,163,163,163,59,
686
+ 59,59,59,59,59,59,59,59,
687
+ 59,59,59,59,59,59,59,59,
688
+ 59,59,59,59,59,59,59,59,
689
+ 59,59,59,59,59,59,59,59,
690
+ 59,59,59,59,59,59,59,59,
691
+ 59,59,59,59,59,59,164,59,
692
+ 59,59,164,164,164,164,59,59,
693
+ 164,59,165,166,166,166,166,166,
694
+ 166,166,167,167,59,59,59,59,
695
+ 59,164,59,44,44,168,169,59,
696
+ 59,44,169,59,59,44,59,170,
697
+ 59,59,171,59,169,169,59,59,
698
+ 59,169,169,59,44,164,164,164,
699
+ 164,59,59,172,172,61,169,172,
700
+ 172,59,169,59,59,59,59,59,
701
+ 172,59,171,59,172,169,172,173,
702
+ 172,169,174,59,44,164,164,164,
703
+ 59,59,59,59,59,59,59,59,
704
+ 59,59,59,59,59,59,59,59,
705
+ 59,59,59,59,59,59,59,59,
706
+ 59,59,59,59,59,59,59,59,
707
+ 59,59,59,59,59,59,59,59,
708
+ 59,59,59,59,59,59,59,59,
709
+ 59,59,59,59,59,59,59,59,
710
+ 59,59,59,59,59,59,59,59,
711
+ 59,175,60,60,60,60,60,60,
712
+ 60,60,60,60,60,60,60,60,
713
+ 60,60,60,60,60,60,60,60,
714
+ 60,60,60,60,60,60,60,60,
715
+ 60,60,60,60,60,60,60,60,
716
+ 60,60,60,60,60,60,60,60,
717
+ 60,60,60,60,60,60,60,60,
718
+ 60,60,60,60,60,60,60,60,
719
+ 60,60,175,176,176,176,176,176,
720
+ 176,176,176,176,176,176,176,176,
721
+ 176,176,176,176,176,176,176,176,
722
+ 176,176,176,176,176,176,176,176,
723
+ 176,176,176,176,176,176,176,176,
724
+ 176,176,176,176,176,176,176,176,
725
+ 176,176,176,176,176,176,176,176,
726
+ 176,176,176,176,176,176,176,176,
727
+ 176,176,176,175,178,178,178,178,
728
+ 178,178,178,178,177,180,180,180,
729
+ 180,180,180,180,180,179,182,182,
730
+ 182,182,182,182,182,182,182,182,
731
+ 181,184,62,186,185,62,188,67,
732
+ 67,67,67,67,67,67,67,67,
733
+ 67,67,67,67,67,67,67,67,
734
+ 67,67,67,67,67,67,67,67,
735
+ 67,67,67,67,67,67,189,67,
736
+ 191,190,67,70,67,193,193,193,
737
+ 193,193,193,193,193,193,193,192,
738
+ 192,192,192,192,192,192,193,193,
739
+ 193,193,193,193,192,192,192,192,
740
+ 192,192,192,192,192,192,192,192,
741
+ 192,192,192,192,192,192,192,192,
742
+ 192,192,192,192,192,192,193,193,
743
+ 193,193,193,193,192,195,194,194,
744
+ 194,194,194,196,194,194,197,197,
745
+ 197,197,197,197,197,197,197,197,
746
+ 194,194,198,194,86,85,85,85,
747
+ 85,85,199,85,85,199,199,199,
748
+ 199,199,199,199,199,199,199,85,
749
+ 88,88,88,88,88,88,88,88,
750
+ 88,88,199,87,199,199,199,199,
751
+ 199,199,88,88,88,88,88,88,
752
+ 88,88,88,88,199,199,89,89,
753
+ 89,89,89,89,89,89,89,89,
754
+ 89,199,89,89,199,199,199,199,
755
+ 199,199,199,199,199,199,89,89,
756
+ 89,89,86,89,0
808
757
  ]
809
758
 
810
759
  class << self
@@ -812,31 +761,31 @@ class << self
812
761
  private :_re_scanner_trans_targs, :_re_scanner_trans_targs=
813
762
  end
814
763
  self._re_scanner_trans_targs = [
815
- 73, 74, 1, 2, 73, 4, 73, 6,
816
- 73, 8, 83, 73, 10, 17, 11, 73,
817
- 12, 16, 14, 13, 15, 18, 19, 23,
818
- 21, 20, 22, 25, 31, 26, 73, 27,
819
- 29, 28, 30, 32, 33, 35, 34, 36,
820
- 73, 38, 73, 39, 41, 0, 42, 43,
821
- 90, 91, 91, 44, 91, 91, 91, 47,
822
- 48, 91, 91, 99, 99, 49, 52, 99,
823
- 105, 99, 107, 55, 99, 108, 99, 110,
824
- 58, 61, 59, 60, 99, 62, 63, 64,
825
- 65, 66, 67, 99, 112, 113, 69, 70,
826
- 113, 71, 72, 3, 75, 76, 77, 78,
827
- 79, 73, 80, 73, 84, 85, 73, 86,
828
- 73, 87, 73, 73, 88, 73, 73, 73,
829
- 73, 73, 73, 81, 73, 82, 73, 5,
830
- 73, 7, 73, 73, 73, 73, 73, 73,
831
- 73, 73, 73, 73, 73, 9, 24, 73,
832
- 37, 89, 40, 92, 93, 94, 91, 95,
833
- 96, 97, 91, 91, 91, 91, 45, 91,
834
- 91, 46, 91, 91, 91, 98, 98, 100,
835
- 101, 102, 99, 103, 103, 99, 51, 99,
836
- 54, 99, 99, 57, 68, 99, 50, 99,
837
- 104, 99, 99, 99, 106, 99, 53, 99,
838
- 109, 111, 99, 56, 99, 99, 113, 114,
839
- 115, 116, 117, 113
764
+ 71,72,1,2,71,4,71,6,
765
+ 71,8,71,81,71,10,16,11,
766
+ 71,12,13,14,15,17,18,19,
767
+ 20,21,23,29,24,71,25,26,
768
+ 27,28,30,31,32,33,34,71,
769
+ 36,71,37,39,0,40,41,88,
770
+ 89,89,42,89,89,89,45,46,
771
+ 89,89,99,99,47,50,99,106,
772
+ 99,108,53,99,109,99,111,56,
773
+ 59,57,58,99,60,61,62,63,
774
+ 64,65,99,113,114,67,68,114,
775
+ 69,70,3,73,74,75,76,77,
776
+ 71,78,71,82,83,71,84,71,
777
+ 85,71,71,86,71,71,71,71,
778
+ 71,71,79,71,80,5,71,7,
779
+ 71,71,71,71,71,71,71,71,
780
+ 71,71,71,9,22,71,35,87,
781
+ 38,90,91,92,89,93,94,95,
782
+ 89,89,89,89,43,89,89,44,
783
+ 89,89,89,96,97,96,96,98,
784
+ 96,100,101,102,99,103,103,105,
785
+ 49,99,52,99,99,55,66,99,
786
+ 48,99,104,99,99,99,99,99,
787
+ 107,99,51,99,110,112,99,54,
788
+ 99,99,114,115,116,117,118,114
840
789
  ]
841
790
 
842
791
  class << self
@@ -844,31 +793,31 @@ class << self
844
793
  private :_re_scanner_trans_actions, :_re_scanner_trans_actions=
845
794
  end
846
795
  self._re_scanner_trans_actions = [
847
- 1, 2, 0, 0, 3, 4, 5, 0,
848
- 6, 0, 7, 8, 0, 0, 0, 9,
849
- 0, 0, 0, 0, 0, 0, 0, 0,
850
- 0, 0, 0, 0, 0, 0, 10, 0,
851
- 0, 0, 0, 0, 0, 0, 0, 0,
852
- 11, 0, 12, 0, 0, 0, 0, 0,
853
- 14, 15, 16, 0, 17, 18, 19, 0,
854
- 0, 20, 21, 22, 23, 0, 0, 25,
855
- 0, 26, 0, 0, 27, 0, 28, 0,
856
- 0, 0, 0, 0, 29, 0, 0, 0,
857
- 0, 0, 0, 30, 0, 31, 0, 0,
858
- 32, 0, 0, 0, 0, 0, 0, 0,
859
- 0, 35, 36, 37, 0, 0, 38, 0,
860
- 39, 40, 41, 42, 40, 43, 44, 45,
861
- 46, 47, 48, 49, 50, 0, 51, 0,
862
- 52, 0, 53, 54, 55, 56, 57, 58,
863
- 59, 60, 61, 62, 63, 0, 0, 64,
864
- 0, 66, 0, 0, 40, 40, 67, 0,
865
- 40, 68, 69, 70, 71, 72, 0, 73,
866
- 74, 0, 75, 76, 77, 78, 79, 0,
867
- 40, 40, 80, 81, 82, 83, 0, 84,
868
- 0, 85, 86, 0, 0, 87, 0, 88,
869
- 0, 89, 90, 91, 40, 92, 0, 93,
870
- 40, 0, 94, 0, 95, 96, 97, 40,
871
- 40, 40, 40, 98
796
+ 1,2,0,0,3,0,4,0,
797
+ 5,0,6,7,8,0,0,0,
798
+ 9,0,0,0,0,0,0,0,
799
+ 0,0,0,0,0,10,0,0,
800
+ 0,0,0,0,0,0,0,11,
801
+ 0,12,0,0,0,0,0,14,
802
+ 15,16,0,17,18,19,0,0,
803
+ 20,21,22,23,0,0,25,0,
804
+ 26,0,0,27,0,28,0,0,
805
+ 0,0,0,29,0,0,0,0,
806
+ 0,0,30,0,31,0,0,32,
807
+ 0,0,0,0,0,0,0,0,
808
+ 35,36,37,0,0,38,0,39,
809
+ 40,41,42,40,43,44,45,46,
810
+ 47,48,49,50,0,0,51,0,
811
+ 52,53,54,55,56,57,58,59,
812
+ 60,61,62,0,0,63,0,65,
813
+ 0,0,40,40,66,0,40,67,
814
+ 68,69,70,71,0,72,73,0,
815
+ 74,75,76,77,0,78,79,0,
816
+ 80,0,40,40,81,82,83,0,
817
+ 0,84,0,85,86,0,0,87,
818
+ 0,88,0,89,90,91,92,93,
819
+ 40,94,0,95,40,0,96,0,
820
+ 97,98,99,40,40,40,40,100
872
821
  ]
873
822
 
874
823
  class << self
@@ -876,21 +825,21 @@ class << self
876
825
  private :_re_scanner_to_state_actions, :_re_scanner_to_state_actions=
877
826
  end
878
827
  self._re_scanner_to_state_actions = [
879
- 0, 0, 0, 0, 0, 0, 0, 0,
880
- 0, 0, 0, 0, 0, 0, 0, 0,
881
- 0, 0, 0, 0, 0, 0, 0, 0,
882
- 0, 0, 0, 0, 0, 0, 0, 0,
883
- 0, 0, 0, 0, 0, 0, 0, 0,
884
- 0, 0, 0, 0, 0, 0, 0, 0,
885
- 0, 0, 0, 0, 0, 0, 0, 0,
886
- 0, 0, 0, 0, 0, 0, 0, 0,
887
- 0, 0, 0, 0, 0, 0, 0, 0,
888
- 0, 33, 0, 0, 0, 0, 0, 0,
889
- 0, 0, 0, 0, 0, 0, 0, 0,
890
- 0, 65, 65, 65, 0, 0, 0, 0,
891
- 0, 0, 65, 65, 0, 0, 0, 0,
892
- 0, 0, 0, 0, 0, 0, 0, 0,
893
- 0, 65, 0, 0, 0, 0
828
+ 0,0,0,0,0,0,0,0,
829
+ 0,0,0,0,0,0,0,0,
830
+ 0,0,0,0,0,0,0,0,
831
+ 0,0,0,0,0,0,0,0,
832
+ 0,0,0,0,0,0,0,0,
833
+ 0,0,0,0,0,0,0,0,
834
+ 0,0,0,0,0,0,0,0,
835
+ 0,0,0,0,0,0,0,0,
836
+ 0,0,0,0,0,0,0,33,
837
+ 0,0,0,0,0,0,0,0,
838
+ 0,0,0,0,0,0,0,64,
839
+ 64,64,0,0,0,0,0,0,
840
+ 64,0,0,64,0,0,0,0,
841
+ 0,0,0,0,0,0,0,0,
842
+ 0,0,64,0,0,0,0
894
843
  ]
895
844
 
896
845
  class << self
@@ -898,21 +847,21 @@ class << self
898
847
  private :_re_scanner_from_state_actions, :_re_scanner_from_state_actions=
899
848
  end
900
849
  self._re_scanner_from_state_actions = [
901
- 0, 0, 0, 0, 0, 0, 0, 0,
902
- 0, 0, 0, 0, 0, 0, 0, 0,
903
- 0, 0, 0, 0, 0, 0, 0, 0,
904
- 0, 0, 0, 0, 0, 0, 0, 0,
905
- 0, 0, 0, 0, 0, 0, 0, 0,
906
- 0, 0, 0, 0, 0, 0, 0, 0,
907
- 0, 0, 0, 0, 0, 0, 0, 0,
908
- 0, 0, 0, 0, 0, 0, 0, 0,
909
- 0, 0, 0, 0, 0, 0, 0, 0,
910
- 0, 34, 0, 0, 0, 0, 0, 0,
911
- 0, 0, 0, 0, 0, 0, 0, 0,
912
- 0, 34, 34, 34, 0, 0, 0, 0,
913
- 0, 0, 34, 34, 0, 0, 0, 0,
914
- 0, 0, 0, 0, 0, 0, 0, 0,
915
- 0, 34, 0, 0, 0, 0
850
+ 0,0,0,0,0,0,0,0,
851
+ 0,0,0,0,0,0,0,0,
852
+ 0,0,0,0,0,0,0,0,
853
+ 0,0,0,0,0,0,0,0,
854
+ 0,0,0,0,0,0,0,0,
855
+ 0,0,0,0,0,0,0,0,
856
+ 0,0,0,0,0,0,0,0,
857
+ 0,0,0,0,0,0,0,0,
858
+ 0,0,0,0,0,0,0,34,
859
+ 0,0,0,0,0,0,0,0,
860
+ 0,0,0,0,0,0,0,34,
861
+ 34,34,0,0,0,0,0,0,
862
+ 34,0,0,34,0,0,0,0,
863
+ 0,0,0,0,0,0,0,0,
864
+ 0,0,34,0,0,0,0
916
865
  ]
917
866
 
918
867
  class << self
@@ -920,21 +869,21 @@ class << self
920
869
  private :_re_scanner_eof_actions, :_re_scanner_eof_actions=
921
870
  end
922
871
  self._re_scanner_eof_actions = [
923
- 0, 0, 0, 0, 0, 0, 0, 0,
924
- 0, 0, 0, 0, 0, 0, 0, 0,
925
- 0, 0, 0, 0, 0, 0, 0, 0,
926
- 0, 0, 0, 0, 0, 0, 0, 0,
927
- 0, 0, 0, 0, 0, 0, 0, 0,
928
- 13, 13, 13, 13, 0, 0, 0, 0,
929
- 0, 0, 0, 24, 24, 0, 24, 24,
930
- 0, 24, 24, 24, 24, 24, 24, 24,
931
- 24, 24, 24, 24, 24, 0, 0, 0,
932
- 0, 0, 0, 0, 0, 0, 0, 0,
933
- 0, 0, 0, 0, 0, 0, 0, 0,
934
- 0, 0, 0, 24, 0, 0, 0, 0,
935
- 0, 0, 0, 24, 0, 0, 0, 0,
936
- 0, 0, 0, 0, 0, 0, 0, 0,
937
- 0, 0, 0, 0, 0, 0
872
+ 0,0,0,0,0,0,0,0,
873
+ 0,0,0,0,0,0,0,0,
874
+ 0,0,0,0,0,0,0,0,
875
+ 0,0,0,0,0,0,0,0,
876
+ 0,0,0,0,0,0,13,13,
877
+ 13,13,0,0,0,0,0,0,
878
+ 0,24,24,0,24,24,0,24,
879
+ 24,24,24,24,24,24,24,24,
880
+ 24,24,24,0,0,0,0,0,
881
+ 0,0,0,0,0,0,0,0,
882
+ 0,0,0,0,0,0,0,0,
883
+ 0,24,0,0,0,0,0,0,
884
+ 0,0,0,24,0,0,0,0,
885
+ 0,0,0,0,0,0,0,0,
886
+ 0,0,0,0,0,0,0
938
887
  ]
939
888
 
940
889
  class << self
@@ -942,31 +891,31 @@ class << self
942
891
  private :_re_scanner_eof_trans, :_re_scanner_eof_trans=
943
892
  end
944
893
  self._re_scanner_eof_trans = [
945
- 0, 1, 1, 1, 5, 5, 5, 5,
946
- 1, 12, 12, 12, 12, 12, 12, 12,
947
- 12, 12, 12, 12, 12, 12, 12, 12,
948
- 12, 12, 12, 12, 12, 12, 12, 12,
949
- 12, 12, 12, 12, 12, 41, 41, 41,
950
- 0, 0, 0, 0, 50, 50, 53, 55,
951
- 55, 60, 60, 0, 0, 66, 0, 0,
952
- 71, 0, 0, 0, 0, 0, 0, 0,
953
- 0, 0, 0, 0, 0, 86, 86, 86,
954
- 86, 0, 111, 111, 112, 112, 111, 113,
955
- 115, 117, 117, 124, 125, 127, 129, 131,
956
- 136, 0, 0, 0, 150, 150, 150, 150,
957
- 153, 156, 0, 0, 174, 174, 174, 176,
958
- 178, 180, 180, 180, 184, 184, 184, 184,
959
- 189, 0, 196, 196, 196, 196
894
+ 0,1,1,1,5,5,5,5,
895
+ 1,13,13,13,13,13,13,13,
896
+ 13,13,13,13,13,13,13,13,
897
+ 13,13,13,13,13,13,13,13,
898
+ 13,13,13,40,40,40,0,0,
899
+ 0,0,49,49,52,54,54,59,
900
+ 59,0,0,65,0,0,70,0,
901
+ 0,0,0,0,0,0,0,0,
902
+ 0,0,0,85,85,85,85,0,
903
+ 110,110,111,111,110,112,114,116,
904
+ 116,122,123,125,127,129,134,0,
905
+ 0,0,148,148,148,148,151,154,
906
+ 0,159,159,0,176,176,176,178,
907
+ 180,182,184,184,184,188,188,188,
908
+ 188,193,0,200,200,200,200
960
909
  ]
961
910
 
962
911
  class << self
963
912
  attr_accessor :re_scanner_start
964
913
  end
965
- self.re_scanner_start = 73;
914
+ self.re_scanner_start = 71;
966
915
  class << self
967
916
  attr_accessor :re_scanner_first_final
968
917
  end
969
- self.re_scanner_first_final = 73;
918
+ self.re_scanner_first_final = 71;
970
919
  class << self
971
920
  attr_accessor :re_scanner_error
972
921
  end
@@ -975,19 +924,19 @@ self.re_scanner_error = 0;
975
924
  class << self
976
925
  attr_accessor :re_scanner_en_char_type
977
926
  end
978
- self.re_scanner_en_char_type = 89;
927
+ self.re_scanner_en_char_type = 87;
979
928
  class << self
980
929
  attr_accessor :re_scanner_en_unicode_property
981
930
  end
982
- self.re_scanner_en_unicode_property = 90;
931
+ self.re_scanner_en_unicode_property = 88;
983
932
  class << self
984
933
  attr_accessor :re_scanner_en_character_set
985
934
  end
986
- self.re_scanner_en_character_set = 91;
935
+ self.re_scanner_en_character_set = 89;
987
936
  class << self
988
937
  attr_accessor :re_scanner_en_set_escape_sequence
989
938
  end
990
- self.re_scanner_en_set_escape_sequence = 98;
939
+ self.re_scanner_en_set_escape_sequence = 96;
991
940
  class << self
992
941
  attr_accessor :re_scanner_en_escape_sequence
993
942
  end
@@ -995,16 +944,12 @@ self.re_scanner_en_escape_sequence = 99;
995
944
  class << self
996
945
  attr_accessor :re_scanner_en_conditional_expression
997
946
  end
998
- self.re_scanner_en_conditional_expression = 113;
947
+ self.re_scanner_en_conditional_expression = 114;
999
948
  class << self
1000
949
  attr_accessor :re_scanner_en_main
1001
950
  end
1002
- self.re_scanner_en_main = 73;
1003
-
951
+ self.re_scanner_en_main = 71;
1004
952
 
1005
- # line 744 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1006
-
1007
- # line 1007 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner.rb"
1008
953
  begin
1009
954
  p ||= 0
1010
955
  pe ||= data.length
@@ -1015,9 +960,6 @@ begin
1015
960
  act = 0
1016
961
  end
1017
962
 
1018
- # line 745 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1019
-
1020
- # line 1020 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner.rb"
1021
963
  begin
1022
964
  testEof = false
1023
965
  _slen, _trans, _keys, _inds, _acts, _nacts = nil
@@ -1039,24 +981,22 @@ begin
1039
981
  end
1040
982
  end
1041
983
  if _goto_level <= _resume
1042
- case _re_scanner_from_state_actions[cs]
984
+ case _re_scanner_from_state_actions[cs]
1043
985
  when 34 then
1044
- # line 1 "NONE"
1045
986
  begin
1046
987
  ts = p
1047
988
  end
1048
- # line 1048 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner.rb"
1049
989
  end
1050
990
  _keys = cs << 1
1051
991
  _inds = _re_scanner_index_offsets[cs]
1052
992
  _slen = _re_scanner_key_spans[cs]
1053
993
  _wide = data[p].ord
1054
- _trans = if ( _slen > 0 &&
1055
- _re_scanner_trans_keys[_keys] <= _wide &&
1056
- _wide <= _re_scanner_trans_keys[_keys + 1]
994
+ _trans = if ( _slen > 0 &&
995
+ _re_scanner_trans_keys[_keys] <= _wide &&
996
+ _wide <= _re_scanner_trans_keys[_keys + 1]
1057
997
  ) then
1058
- _re_scanner_indicies[ _inds + _wide - _re_scanner_trans_keys[_keys] ]
1059
- else
998
+ _re_scanner_indicies[ _inds + _wide - _re_scanner_trans_keys[_keys] ]
999
+ else
1060
1000
  _re_scanner_indicies[ _inds + _slen ]
1061
1001
  end
1062
1002
  end
@@ -1065,24 +1005,17 @@ ts = p
1065
1005
  if _re_scanner_trans_actions[_trans] != 0
1066
1006
  case _re_scanner_trans_actions[_trans]
1067
1007
  when 36 then
1068
- # line 152 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1069
1008
  begin
1070
1009
  self.group_depth = group_depth + 1 end
1071
- when 4 then
1072
- # line 153 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1073
- begin
1074
- self.group_depth = group_depth - 1 end
1075
1010
  when 40 then
1076
- # line 1 "NONE"
1077
1011
  begin
1078
1012
  te = p+1
1079
1013
  end
1080
- when 66 then
1081
- # line 12 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/char_type.rl"
1014
+ when 65 then
1082
1015
  begin
1083
1016
  te = p+1
1084
- begin
1085
- case text = copy(data, ts-1, te)
1017
+ begin
1018
+ case text = copy(data, ts-1,te)
1086
1019
  when '\d'; emit(:type, :digit, text)
1087
1020
  when '\D'; emit(:type, :nondigit, text)
1088
1021
  when '\h'; emit(:type, :hex, text)
@@ -1104,17 +1037,16 @@ te = p+1
1104
1037
  end
1105
1038
  end
1106
1039
  when 14 then
1107
- # line 16 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/property.rl"
1108
1040
  begin
1109
1041
  te = p+1
1110
- begin
1111
- text = copy(data, ts-1, te)
1042
+ begin
1043
+ text = copy(data, ts-1,te)
1112
1044
  type = (text[1] == 'P') ^ (text[3] == '^') ? :nonproperty : :property
1113
1045
 
1114
- name = data[ts+2..te-2].pack('c*').gsub(/[\^\s_\-]/, '').downcase
1046
+ name = text[3..-2].gsub(/[\^\s_\-]/, '').downcase
1115
1047
 
1116
1048
  token = self.class.short_prop_map[name] || self.class.long_prop_map[name]
1117
- validation_error(:property, name) unless token
1049
+ raise ValidationError.for(:property, name) unless token
1118
1050
 
1119
1051
  self.emit(type, token.to_sym, text)
1120
1052
 
@@ -1128,7 +1060,6 @@ te = p+1
1128
1060
  end
1129
1061
  end
1130
1062
  when 18 then
1131
- # line 180 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1132
1063
  begin
1133
1064
  te = p+1
1134
1065
  begin # special case, emits two tokens
@@ -1136,122 +1067,111 @@ te = p+1
1136
1067
  emit(:set, :intersection, '&&')
1137
1068
  end
1138
1069
  end
1139
- when 71 then
1140
- # line 185 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1070
+ when 70 then
1141
1071
  begin
1142
1072
  te = p+1
1143
- begin
1144
- text = copy(data, ts, te)
1145
- if tokens.last[1] == :open
1146
- emit(:set, :negate, text)
1073
+ begin
1074
+ if prev_token[1] == :open
1075
+ emit(:set, :negate, '^')
1147
1076
  else
1148
- emit(:literal, :literal, text)
1077
+ emit(:literal, :literal, '^')
1149
1078
  end
1150
1079
  end
1151
1080
  end
1152
- when 73 then
1153
- # line 206 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1081
+ when 72 then
1154
1082
  begin
1155
1083
  te = p+1
1156
- begin
1157
- emit(:set, :intersection, copy(data, ts, te))
1084
+ begin
1085
+ emit(:set, :intersection, '&&')
1158
1086
  end
1159
1087
  end
1160
- when 69 then
1161
- # line 210 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1088
+ when 68 then
1162
1089
  begin
1163
1090
  te = p+1
1164
- begin
1091
+ begin
1165
1092
  begin
1166
1093
  stack[top] = cs
1167
1094
  top+= 1
1168
- cs = 98
1095
+ cs = 96
1169
1096
  _goto_level = _again
1170
1097
  next
1171
1098
  end
1172
1099
 
1173
1100
  end
1174
1101
  end
1175
- when 67 then
1176
- # line 244 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1102
+ when 66 then
1177
1103
  begin
1178
1104
  te = p+1
1179
- begin
1105
+ begin
1180
1106
  emit(:literal, :literal, copy(data, ts, te))
1181
1107
  end
1182
1108
  end
1183
1109
  when 16 then
1184
- # line 248 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1185
1110
  begin
1186
1111
  te = p+1
1187
- begin
1112
+ begin
1188
1113
  text = copy(data, ts, te)
1189
1114
  emit(:literal, :literal, text)
1190
1115
  end
1191
1116
  end
1192
- when 74 then
1193
- # line 194 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1117
+ when 73 then
1194
1118
  begin
1195
1119
  te = p
1196
- p = p - 1; begin
1197
- text = copy(data, ts, te)
1198
- # ranges cant start with a subset or intersection/negation/range operator
1199
- if tokens.last[0] == :set
1200
- emit(:literal, :literal, text)
1120
+ p = p - 1; begin
1121
+ # ranges cant start with the opening bracket, a subset, or
1122
+ # intersection/negation/range operators
1123
+ if prev_token[0] == :set
1124
+ emit(:literal, :literal, '-')
1201
1125
  else
1202
- emit(:set, :range, text)
1126
+ emit(:set, :range, '-')
1203
1127
  end
1204
1128
  end
1205
1129
  end
1206
- when 77 then
1207
- # line 214 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1130
+ when 76 then
1208
1131
  begin
1209
1132
  te = p
1210
- p = p - 1; begin
1211
- emit(:set, :open, copy(data, ts, te))
1133
+ p = p - 1; begin
1134
+ emit(:set, :open, '[')
1212
1135
  begin
1213
1136
  stack[top] = cs
1214
1137
  top+= 1
1215
- cs = 91
1138
+ cs = 89
1216
1139
  _goto_level = _again
1217
1140
  next
1218
1141
  end
1219
1142
 
1220
1143
  end
1221
1144
  end
1222
- when 72 then
1223
- # line 248 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1145
+ when 71 then
1224
1146
  begin
1225
1147
  te = p
1226
- p = p - 1; begin
1148
+ p = p - 1; begin
1227
1149
  text = copy(data, ts, te)
1228
1150
  emit(:literal, :literal, text)
1229
1151
  end
1230
1152
  end
1231
1153
  when 17 then
1232
- # line 194 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1233
1154
  begin
1234
1155
  begin p = ((te))-1; end
1235
- begin
1236
- text = copy(data, ts, te)
1237
- # ranges cant start with a subset or intersection/negation/range operator
1238
- if tokens.last[0] == :set
1239
- emit(:literal, :literal, text)
1156
+ begin
1157
+ # ranges cant start with the opening bracket, a subset, or
1158
+ # intersection/negation/range operators
1159
+ if prev_token[0] == :set
1160
+ emit(:literal, :literal, '-')
1240
1161
  else
1241
- emit(:set, :range, text)
1162
+ emit(:set, :range, '-')
1242
1163
  end
1243
1164
  end
1244
1165
  end
1245
1166
  when 20 then
1246
- # line 214 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1247
1167
  begin
1248
1168
  begin p = ((te))-1; end
1249
- begin
1250
- emit(:set, :open, copy(data, ts, te))
1169
+ begin
1170
+ emit(:set, :open, '[')
1251
1171
  begin
1252
1172
  stack[top] = cs
1253
1173
  top+= 1
1254
- cs = 91
1174
+ cs = 89
1255
1175
  _goto_level = _again
1256
1176
  next
1257
1177
  end
@@ -1259,21 +1179,33 @@ p = p - 1; begin
1259
1179
  end
1260
1180
  end
1261
1181
  when 15 then
1262
- # line 248 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1263
1182
  begin
1264
1183
  begin p = ((te))-1; end
1265
- begin
1184
+ begin
1266
1185
  text = copy(data, ts, te)
1267
1186
  emit(:literal, :literal, text)
1268
1187
  end
1269
1188
  end
1270
- when 79 then
1271
- # line 257 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1189
+ when 80 then
1272
1190
  begin
1273
1191
  te = p+1
1274
- begin
1192
+ begin
1193
+ emit(:escape, :octal, copy(data, ts-1,te))
1194
+ begin
1195
+ top -= 1
1196
+ cs = stack[top]
1197
+ _goto_level = _again
1198
+ next
1199
+ end
1200
+
1201
+ end
1202
+ end
1203
+ when 78 then
1204
+ begin
1205
+ te = p+1
1206
+ begin
1275
1207
  p = p - 1;
1276
- cs = 91;
1208
+ cs = 89;
1277
1209
  begin
1278
1210
  stack[top] = cs
1279
1211
  top+= 1
@@ -1284,12 +1216,11 @@ te = p+1
1284
1216
 
1285
1217
  end
1286
1218
  end
1287
- when 78 then
1288
- # line 263 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1219
+ when 77 then
1289
1220
  begin
1290
1221
  te = p+1
1291
- begin
1292
- emit(:escape, :literal, copy(data, ts-1, te))
1222
+ begin
1223
+ emit(:escape, :literal, copy(data, ts-1,te))
1293
1224
  begin
1294
1225
  top -= 1
1295
1226
  cs = stack[top]
@@ -1299,13 +1230,11 @@ te = p+1
1299
1230
 
1300
1231
  end
1301
1232
  end
1302
- when 83 then
1303
- # line 273 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1233
+ when 79 then
1304
1234
  begin
1305
- te = p+1
1306
- begin
1307
- text = copy(data, ts-1, te)
1308
- emit(:backref, :number, text)
1235
+ te = p
1236
+ p = p - 1; begin
1237
+ emit(:escape, :octal, copy(data, ts-1,te))
1309
1238
  begin
1310
1239
  top -= 1
1311
1240
  cs = stack[top]
@@ -1316,11 +1245,10 @@ te = p+1
1316
1245
  end
1317
1246
  end
1318
1247
  when 90 then
1319
- # line 279 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1320
1248
  begin
1321
1249
  te = p+1
1322
- begin
1323
- emit(:escape, :octal, copy(data, ts-1, te))
1250
+ begin
1251
+ emit(:escape, :octal, copy(data, ts-1,te))
1324
1252
  begin
1325
1253
  top -= 1
1326
1254
  cs = stack[top]
@@ -1330,12 +1258,27 @@ te = p+1
1330
1258
 
1331
1259
  end
1332
1260
  end
1333
- when 80 then
1334
- # line 284 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1261
+ when 92 then
1335
1262
  begin
1336
1263
  te = p+1
1337
- begin
1338
- case text = copy(data, ts-1, te)
1264
+ begin # special case, emits two tokens
1265
+ text = copy(data, ts-1,te)
1266
+ emit(:escape, :literal, text[0,2])
1267
+ emit(:literal, :literal, text[2])
1268
+ begin
1269
+ top -= 1
1270
+ cs = stack[top]
1271
+ _goto_level = _again
1272
+ next
1273
+ end
1274
+
1275
+ end
1276
+ end
1277
+ when 81 then
1278
+ begin
1279
+ te = p+1
1280
+ begin
1281
+ case text = copy(data, ts-1,te)
1339
1282
  when '\.'; emit(:escape, :dot, text)
1340
1283
  when '\|'; emit(:escape, :alternation, text)
1341
1284
  when '\^'; emit(:escape, :bol, text)
@@ -1362,13 +1305,12 @@ te = p+1
1362
1305
  end
1363
1306
  end
1364
1307
  when 86 then
1365
- # line 305 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1366
1308
  begin
1367
1309
  te = p+1
1368
- begin
1310
+ begin
1369
1311
  # \b is emitted as backspace only when inside a character set, otherwise
1370
1312
  # it is a word boundary anchor. A syntax might "normalize" it if needed.
1371
- case text = copy(data, ts-1, te)
1313
+ case text = copy(data, ts-1,te)
1372
1314
  when '\a'; emit(:escape, :bell, text)
1373
1315
  when '\b'; emit(:escape, :backspace, text)
1374
1316
  when '\e'; emit(:escape, :escape, text)
@@ -1388,11 +1330,10 @@ te = p+1
1388
1330
  end
1389
1331
  end
1390
1332
  when 29 then
1391
- # line 321 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1392
1333
  begin
1393
1334
  te = p+1
1394
- begin
1395
- text = copy(data, ts-1, te)
1335
+ begin
1336
+ text = copy(data, ts-1,te)
1396
1337
  if text[2] == '{'
1397
1338
  emit(:escape, :codepoint_list, text)
1398
1339
  else
@@ -1407,12 +1348,11 @@ te = p+1
1407
1348
 
1408
1349
  end
1409
1350
  end
1410
- when 96 then
1411
- # line 331 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1351
+ when 98 then
1412
1352
  begin
1413
1353
  te = p+1
1414
- begin
1415
- emit(:escape, :hex, copy(data, ts-1, te))
1354
+ begin
1355
+ emit(:escape, :hex, copy(data, ts-1,te))
1416
1356
  begin
1417
1357
  top -= 1
1418
1358
  cs = stack[top]
@@ -1423,10 +1363,9 @@ te = p+1
1423
1363
  end
1424
1364
  end
1425
1365
  when 25 then
1426
- # line 340 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1427
1366
  begin
1428
1367
  te = p+1
1429
- begin
1368
+ begin
1430
1369
  emit_meta_control_sequence(data, ts, te, :control)
1431
1370
  begin
1432
1371
  top -= 1
@@ -1438,10 +1377,9 @@ te = p+1
1438
1377
  end
1439
1378
  end
1440
1379
  when 27 then
1441
- # line 345 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1442
1380
  begin
1443
1381
  te = p+1
1444
- begin
1382
+ begin
1445
1383
  emit_meta_control_sequence(data, ts, te, :meta_sequence)
1446
1384
  begin
1447
1385
  top -= 1
@@ -1453,16 +1391,15 @@ te = p+1
1453
1391
  end
1454
1392
  end
1455
1393
  when 84 then
1456
- # line 350 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1457
1394
  begin
1458
1395
  te = p+1
1459
- begin
1396
+ begin
1460
1397
  p = p - 1;
1461
- cs = ((in_set? ? 91 : 73));
1398
+ cs = ((in_set? ? 89 : 71));
1462
1399
  begin
1463
1400
  stack[top] = cs
1464
1401
  top+= 1
1465
- cs = 89
1402
+ cs = 87
1466
1403
  _goto_level = _again
1467
1404
  next
1468
1405
  end
@@ -1470,16 +1407,15 @@ te = p+1
1470
1407
  end
1471
1408
  end
1472
1409
  when 85 then
1473
- # line 356 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1474
1410
  begin
1475
1411
  te = p+1
1476
- begin
1412
+ begin
1477
1413
  p = p - 1;
1478
- cs = ((in_set? ? 91 : 73));
1414
+ cs = ((in_set? ? 89 : 71));
1479
1415
  begin
1480
1416
  stack[top] = cs
1481
1417
  top+= 1
1482
- cs = 90
1418
+ cs = 88
1483
1419
  _goto_level = _again
1484
1420
  next
1485
1421
  end
@@ -1487,11 +1423,25 @@ te = p+1
1487
1423
  end
1488
1424
  end
1489
1425
  when 23 then
1490
- # line 362 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1491
1426
  begin
1492
1427
  te = p+1
1493
- begin
1494
- emit(:escape, :literal, copy(data, ts-1, te))
1428
+ begin
1429
+ emit(:escape, :literal, copy(data, ts-1,te))
1430
+ begin
1431
+ top -= 1
1432
+ cs = stack[top]
1433
+ _goto_level = _again
1434
+ next
1435
+ end
1436
+
1437
+ end
1438
+ end
1439
+ when 91 then
1440
+ begin
1441
+ te = p
1442
+ p = p - 1; begin
1443
+ text = copy(data, ts-1,te)
1444
+ emit(:backref, :number, text)
1495
1445
  begin
1496
1446
  top -= 1
1497
1447
  cs = stack[top]
@@ -1502,11 +1452,10 @@ te = p+1
1502
1452
  end
1503
1453
  end
1504
1454
  when 89 then
1505
- # line 279 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1506
1455
  begin
1507
1456
  te = p
1508
- p = p - 1; begin
1509
- emit(:escape, :octal, copy(data, ts-1, te))
1457
+ p = p - 1; begin
1458
+ emit(:escape, :octal, copy(data, ts-1,te))
1510
1459
  begin
1511
1460
  top -= 1
1512
1461
  cs = stack[top]
@@ -1516,12 +1465,11 @@ p = p - 1; begin
1516
1465
 
1517
1466
  end
1518
1467
  end
1519
- when 95 then
1520
- # line 331 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1468
+ when 97 then
1521
1469
  begin
1522
1470
  te = p
1523
- p = p - 1; begin
1524
- emit(:escape, :hex, copy(data, ts-1, te))
1471
+ p = p - 1; begin
1472
+ emit(:escape, :hex, copy(data, ts-1,te))
1525
1473
  begin
1526
1474
  top -= 1
1527
1475
  cs = stack[top]
@@ -1531,11 +1479,10 @@ p = p - 1; begin
1531
1479
 
1532
1480
  end
1533
1481
  end
1534
- when 92 then
1535
- # line 340 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1482
+ when 94 then
1536
1483
  begin
1537
1484
  te = p
1538
- p = p - 1; begin
1485
+ p = p - 1; begin
1539
1486
  emit_meta_control_sequence(data, ts, te, :control)
1540
1487
  begin
1541
1488
  top -= 1
@@ -1546,11 +1493,10 @@ p = p - 1; begin
1546
1493
 
1547
1494
  end
1548
1495
  end
1549
- when 94 then
1550
- # line 345 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1496
+ when 96 then
1551
1497
  begin
1552
1498
  te = p
1553
- p = p - 1; begin
1499
+ p = p - 1; begin
1554
1500
  emit_meta_control_sequence(data, ts, te, :meta_sequence)
1555
1501
  begin
1556
1502
  top -= 1
@@ -1562,11 +1508,10 @@ p = p - 1; begin
1562
1508
  end
1563
1509
  end
1564
1510
  when 87 then
1565
- # line 362 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1566
1511
  begin
1567
1512
  te = p
1568
- p = p - 1; begin
1569
- emit(:escape, :literal, copy(data, ts-1, te))
1513
+ p = p - 1; begin
1514
+ emit(:escape, :literal, copy(data, ts-1,te))
1570
1515
  begin
1571
1516
  top -= 1
1572
1517
  cs = stack[top]
@@ -1577,11 +1522,10 @@ p = p - 1; begin
1577
1522
  end
1578
1523
  end
1579
1524
  when 22 then
1580
- # line 362 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1581
1525
  begin
1582
1526
  begin p = ((te))-1; end
1583
- begin
1584
- emit(:escape, :literal, copy(data, ts-1, te))
1527
+ begin
1528
+ emit(:escape, :literal, copy(data, ts-1,te))
1585
1529
  begin
1586
1530
  top -= 1
1587
1531
  cs = stack[top]
@@ -1592,13 +1536,12 @@ p = p - 1; begin
1592
1536
  end
1593
1537
  end
1594
1538
  when 88 then
1595
- # line 1 "NONE"
1596
1539
  begin
1597
1540
  case act
1598
- when 16 then
1541
+ when 17 then
1599
1542
  begin begin p = ((te))-1; end
1600
1543
 
1601
- text = copy(data, ts-1, te)
1544
+ text = copy(data, ts-1,te)
1602
1545
  emit(:backref, :number, text)
1603
1546
  begin
1604
1547
  top -= 1
@@ -1608,10 +1551,10 @@ p = p - 1; begin
1608
1551
  end
1609
1552
 
1610
1553
  end
1611
- when 17 then
1554
+ when 18 then
1612
1555
  begin begin p = ((te))-1; end
1613
1556
 
1614
- emit(:escape, :octal, copy(data, ts-1, te))
1557
+ emit(:escape, :octal, copy(data, ts-1,te))
1615
1558
  begin
1616
1559
  top -= 1
1617
1560
  cs = stack[top]
@@ -1620,44 +1563,42 @@ p = p - 1; begin
1620
1563
  end
1621
1564
 
1622
1565
  end
1623
- end
1566
+ end
1624
1567
  end
1625
1568
  when 32 then
1626
- # line 372 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1627
1569
  begin
1628
1570
  te = p+1
1629
- begin
1571
+ begin
1630
1572
  text = copy(data, ts, te-1)
1573
+ text =~ /[^0]/ or raise ValidationError.for(:backref, 'condition', 'invalid ref ID')
1631
1574
  emit(:conditional, :condition, text)
1632
1575
  emit(:conditional, :condition_close, ')')
1633
1576
  end
1634
1577
  end
1635
- when 97 then
1636
- # line 378 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1578
+ when 99 then
1637
1579
  begin
1638
1580
  te = p+1
1639
- begin
1581
+ begin
1640
1582
  p = p - 1;
1641
1583
  begin
1642
1584
  stack[top] = cs
1643
1585
  top+= 1
1644
- cs = 73
1586
+ cs = 71
1645
1587
  _goto_level = _again
1646
1588
  next
1647
1589
  end
1648
1590
 
1649
1591
  end
1650
1592
  end
1651
- when 98 then
1652
- # line 378 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1593
+ when 100 then
1653
1594
  begin
1654
1595
  te = p
1655
- p = p - 1; begin
1596
+ p = p - 1; begin
1656
1597
  p = p - 1;
1657
1598
  begin
1658
1599
  stack[top] = cs
1659
1600
  top+= 1
1660
- cs = 73
1601
+ cs = 71
1661
1602
  _goto_level = _again
1662
1603
  next
1663
1604
  end
@@ -1665,15 +1606,14 @@ p = p - 1; begin
1665
1606
  end
1666
1607
  end
1667
1608
  when 31 then
1668
- # line 378 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1669
1609
  begin
1670
1610
  begin p = ((te))-1; end
1671
- begin
1611
+ begin
1672
1612
  p = p - 1;
1673
1613
  begin
1674
1614
  stack[top] = cs
1675
1615
  top+= 1
1676
- cs = 73
1616
+ cs = 71
1677
1617
  _goto_level = _again
1678
1618
  next
1679
1619
  end
@@ -1681,18 +1621,16 @@ p = p - 1; begin
1681
1621
  end
1682
1622
  end
1683
1623
  when 38 then
1684
- # line 391 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1685
1624
  begin
1686
1625
  te = p+1
1687
- begin
1626
+ begin
1688
1627
  emit(:meta, :dot, copy(data, ts, te))
1689
1628
  end
1690
1629
  end
1691
1630
  when 43 then
1692
- # line 395 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1693
1631
  begin
1694
1632
  te = p+1
1695
- begin
1633
+ begin
1696
1634
  if conditional_stack.last == group_depth
1697
1635
  emit(:conditional, :separator, copy(data, ts, te))
1698
1636
  else
@@ -1701,34 +1639,30 @@ te = p+1
1701
1639
  end
1702
1640
  end
1703
1641
  when 42 then
1704
- # line 405 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1705
1642
  begin
1706
1643
  te = p+1
1707
- begin
1644
+ begin
1708
1645
  emit(:anchor, :bol, copy(data, ts, te))
1709
1646
  end
1710
1647
  end
1711
1648
  when 35 then
1712
- # line 409 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1713
1649
  begin
1714
1650
  te = p+1
1715
- begin
1651
+ begin
1716
1652
  emit(:anchor, :eol, copy(data, ts, te))
1717
1653
  end
1718
1654
  end
1719
- when 63 then
1720
- # line 413 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1655
+ when 62 then
1721
1656
  begin
1722
1657
  te = p+1
1723
- begin
1658
+ begin
1724
1659
  emit(:keep, :mark, copy(data, ts, te))
1725
1660
  end
1726
1661
  end
1727
- when 62 then
1728
- # line 417 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1662
+ when 61 then
1729
1663
  begin
1730
1664
  te = p+1
1731
- begin
1665
+ begin
1732
1666
  case text = copy(data, ts, te)
1733
1667
  when '\A'; emit(:anchor, :bos, text)
1734
1668
  when '\z'; emit(:anchor, :eos, text)
@@ -1740,18 +1674,16 @@ te = p+1
1740
1674
  end
1741
1675
  end
1742
1676
  when 41 then
1743
- # line 428 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1744
1677
  begin
1745
1678
  te = p+1
1746
- begin
1679
+ begin
1747
1680
  append_literal(data, ts, te)
1748
1681
  end
1749
1682
  end
1750
- when 52 then
1751
- # line 443 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1683
+ when 51 then
1752
1684
  begin
1753
1685
  te = p+1
1754
- begin
1686
+ begin
1755
1687
  text = copy(data, ts, te)
1756
1688
 
1757
1689
  conditional_stack << group_depth
@@ -1761,30 +1693,28 @@ te = p+1
1761
1693
  begin
1762
1694
  stack[top] = cs
1763
1695
  top+= 1
1764
- cs = 113
1696
+ cs = 114
1765
1697
  _goto_level = _again
1766
1698
  next
1767
1699
  end
1768
1700
 
1769
1701
  end
1770
1702
  end
1771
- when 53 then
1772
- # line 474 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1703
+ when 52 then
1773
1704
  begin
1774
1705
  te = p+1
1775
- begin
1706
+ begin
1776
1707
  text = copy(data, ts, te)
1777
1708
  if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/
1778
- validation_error(:group_option, $1 || "-#{$2}", text)
1709
+ raise ValidationError.for(:group_option, $1 || "-#{$2}", text)
1779
1710
  end
1780
1711
  emit_options(text)
1781
1712
  end
1782
1713
  end
1783
- when 51 then
1784
- # line 488 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1714
+ when 6 then
1785
1715
  begin
1786
1716
  te = p+1
1787
- begin
1717
+ begin
1788
1718
  case text = copy(data, ts, te)
1789
1719
  when '(?='; emit(:assertion, :lookahead, text)
1790
1720
  when '(?!'; emit(:assertion, :nlookahead, text)
@@ -1793,18 +1723,17 @@ te = p+1
1793
1723
  end
1794
1724
  end
1795
1725
  end
1796
- when 6 then
1797
- # line 505 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1726
+ when 5 then
1798
1727
  begin
1799
1728
  te = p+1
1800
- begin
1729
+ begin
1801
1730
  case text = copy(data, ts, te)
1802
1731
  when '(?:'; emit(:group, :passive, text)
1803
1732
  when '(?>'; emit(:group, :atomic, text)
1804
1733
  when '(?~'; emit(:group, :absence, text)
1805
1734
 
1806
1735
  when /^\(\?(?:<>|'')/
1807
- validation_error(:group, 'named group', 'name is empty')
1736
+ raise ValidationError.for(:group, 'named group', 'name is empty')
1808
1737
 
1809
1738
  when /^\(\?<[^>]+>/
1810
1739
  emit(:group, :named_ab, text)
@@ -1816,48 +1745,45 @@ te = p+1
1816
1745
  end
1817
1746
  end
1818
1747
  when 10 then
1819
- # line 546 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1820
1748
  begin
1821
1749
  te = p+1
1822
- begin
1750
+ begin
1823
1751
  case text = copy(data, ts, te)
1824
- when /^\\k(<>|'')/
1825
- validation_error(:backref, 'backreference', 'ref ID is empty')
1826
- when /^\\k(.)[^\p{digit}\-][^+\-]*\D$/
1752
+ when /^\\k(.)[^0-9\-][^+\-]*['>]$/
1827
1753
  emit(:backref, $1 == '<' ? :name_ref_ab : :name_ref_sq, text)
1828
- when /^\\k(.)\d+\D$/
1754
+ when /^\\k(.)0*[1-9]\d*['>]$/
1829
1755
  emit(:backref, $1 == '<' ? :number_ref_ab : :number_ref_sq, text)
1830
- when /^\\k(.)-\d+\D$/
1756
+ when /^\\k(.)-0*[1-9]\d*['>]$/
1831
1757
  emit(:backref, $1 == '<' ? :number_rel_ref_ab : :number_rel_ref_sq, text)
1832
- when /^\\k(.)[^\p{digit}\-].*[+\-]\d+\D$/
1758
+ when /^\\k(.)[^0-9\-].*[+\-]\d+['>]$/
1833
1759
  emit(:backref, $1 == '<' ? :name_recursion_ref_ab : :name_recursion_ref_sq, text)
1834
- when /^\\k(.)-?\d+[+\-]\d+\D$/
1760
+ when /^\\k(.)-?0*[1-9]\d*[+\-]\d+['>]$/
1835
1761
  emit(:backref, $1 == '<' ? :number_recursion_ref_ab : :number_recursion_ref_sq, text)
1762
+ else
1763
+ raise ValidationError.for(:backref, 'backreference', 'invalid ref ID')
1836
1764
  end
1837
1765
  end
1838
1766
  end
1839
1767
  when 9 then
1840
- # line 565 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1841
1768
  begin
1842
1769
  te = p+1
1843
- begin
1770
+ begin
1844
1771
  case text = copy(data, ts, te)
1845
- when /^\\g(<>|'')/
1846
- validation_error(:backref, 'subexpression call', 'ref ID is empty')
1847
- when /^\\g(.)[^\p{digit}+\->][^+\-]*/
1772
+ when /^\\g(.)[^0-9+\-].*['>]$/
1848
1773
  emit(:backref, $1 == '<' ? :name_call_ab : :name_call_sq, text)
1849
- when /^\\g(.)\d+\D$/
1774
+ when /^\\g(.)(?:0|0*[1-9]\d*)['>]$/
1850
1775
  emit(:backref, $1 == '<' ? :number_call_ab : :number_call_sq, text)
1851
- when /^\\g(.)[+-]\d+/
1776
+ when /^\\g(.)[+-]0*[1-9]\d*/
1852
1777
  emit(:backref, $1 == '<' ? :number_rel_call_ab : :number_rel_call_sq, text)
1778
+ else
1779
+ raise ValidationError.for(:backref, 'subexpression call', 'invalid ref ID')
1853
1780
  end
1854
1781
  end
1855
1782
  end
1856
- when 60 then
1857
- # line 581 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1783
+ when 59 then
1858
1784
  begin
1859
1785
  te = p+1
1860
- begin
1786
+ begin
1861
1787
  case text = copy(data, ts, te)
1862
1788
  when '?' ; emit(:quantifier, :zero_or_one, text)
1863
1789
  when '??'; emit(:quantifier, :zero_or_one_reluctant, text)
@@ -1865,11 +1791,10 @@ te = p+1
1865
1791
  end
1866
1792
  end
1867
1793
  end
1868
- when 56 then
1869
- # line 589 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1794
+ when 55 then
1870
1795
  begin
1871
1796
  te = p+1
1872
- begin
1797
+ begin
1873
1798
  case text = copy(data, ts, te)
1874
1799
  when '*' ; emit(:quantifier, :zero_or_more, text)
1875
1800
  when '*?'; emit(:quantifier, :zero_or_more_reluctant, text)
@@ -1877,11 +1802,10 @@ te = p+1
1877
1802
  end
1878
1803
  end
1879
1804
  end
1880
- when 58 then
1881
- # line 597 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1805
+ when 57 then
1882
1806
  begin
1883
1807
  te = p+1
1884
- begin
1808
+ begin
1885
1809
  case text = copy(data, ts, te)
1886
1810
  when '+' ; emit(:quantifier, :one_or_more, text)
1887
1811
  when '+?'; emit(:quantifier, :one_or_more_reluctant, text)
@@ -1890,18 +1814,16 @@ te = p+1
1890
1814
  end
1891
1815
  end
1892
1816
  when 12 then
1893
- # line 605 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1894
1817
  begin
1895
1818
  te = p+1
1896
- begin
1819
+ begin
1897
1820
  emit(:quantifier, :interval, copy(data, ts, te))
1898
1821
  end
1899
1822
  end
1900
1823
  when 47 then
1901
- # line 620 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1902
1824
  begin
1903
1825
  te = p+1
1904
- begin
1826
+ begin
1905
1827
  if free_spacing
1906
1828
  emit(:free_space, :comment, copy(data, ts, te))
1907
1829
  else
@@ -1913,22 +1835,20 @@ te = p+1
1913
1835
  end
1914
1836
  end
1915
1837
  when 50 then
1916
- # line 474 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1917
1838
  begin
1918
1839
  te = p
1919
- p = p - 1; begin
1840
+ p = p - 1; begin
1920
1841
  text = copy(data, ts, te)
1921
1842
  if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/
1922
- validation_error(:group_option, $1 || "-#{$2}", text)
1843
+ raise ValidationError.for(:group_option, $1 || "-#{$2}", text)
1923
1844
  end
1924
1845
  emit_options(text)
1925
1846
  end
1926
1847
  end
1927
- when 54 then
1928
- # line 488 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1848
+ when 53 then
1929
1849
  begin
1930
1850
  te = p
1931
- p = p - 1; begin
1851
+ p = p - 1; begin
1932
1852
  case text = copy(data, ts, te)
1933
1853
  when '(?='; emit(:assertion, :lookahead, text)
1934
1854
  when '(?!'; emit(:assertion, :nlookahead, text)
@@ -1938,19 +1858,17 @@ p = p - 1; begin
1938
1858
  end
1939
1859
  end
1940
1860
  when 48 then
1941
- # line 523 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1942
1861
  begin
1943
1862
  te = p
1944
- p = p - 1; begin
1863
+ p = p - 1; begin
1945
1864
  text = copy(data, ts, te)
1946
1865
  emit(:group, :capture, text)
1947
1866
  end
1948
1867
  end
1949
- when 59 then
1950
- # line 581 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1868
+ when 58 then
1951
1869
  begin
1952
1870
  te = p
1953
- p = p - 1; begin
1871
+ p = p - 1; begin
1954
1872
  case text = copy(data, ts, te)
1955
1873
  when '?' ; emit(:quantifier, :zero_or_one, text)
1956
1874
  when '??'; emit(:quantifier, :zero_or_one_reluctant, text)
@@ -1958,11 +1876,10 @@ p = p - 1; begin
1958
1876
  end
1959
1877
  end
1960
1878
  end
1961
- when 55 then
1962
- # line 589 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1879
+ when 54 then
1963
1880
  begin
1964
1881
  te = p
1965
- p = p - 1; begin
1882
+ p = p - 1; begin
1966
1883
  case text = copy(data, ts, te)
1967
1884
  when '*' ; emit(:quantifier, :zero_or_more, text)
1968
1885
  when '*?'; emit(:quantifier, :zero_or_more_reluctant, text)
@@ -1970,11 +1887,10 @@ p = p - 1; begin
1970
1887
  end
1971
1888
  end
1972
1889
  end
1973
- when 57 then
1974
- # line 597 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1890
+ when 56 then
1975
1891
  begin
1976
1892
  te = p
1977
- p = p - 1; begin
1893
+ p = p - 1; begin
1978
1894
  case text = copy(data, ts, te)
1979
1895
  when '+' ; emit(:quantifier, :one_or_more, text)
1980
1896
  when '+?'; emit(:quantifier, :one_or_more_reluctant, text)
@@ -1982,19 +1898,17 @@ p = p - 1; begin
1982
1898
  end
1983
1899
  end
1984
1900
  end
1985
- when 64 then
1986
- # line 610 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1901
+ when 63 then
1987
1902
  begin
1988
1903
  te = p
1989
- p = p - 1; begin
1904
+ p = p - 1; begin
1990
1905
  append_literal(data, ts, te)
1991
1906
  end
1992
1907
  end
1993
- when 61 then
1994
- # line 616 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
1908
+ when 60 then
1995
1909
  begin
1996
1910
  te = p
1997
- p = p - 1; begin
1911
+ p = p - 1; begin
1998
1912
  begin
1999
1913
  stack[top] = cs
2000
1914
  top+= 1
@@ -2006,10 +1920,9 @@ p = p - 1; begin
2006
1920
  end
2007
1921
  end
2008
1922
  when 46 then
2009
- # line 620 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2010
1923
  begin
2011
1924
  te = p
2012
- p = p - 1; begin
1925
+ p = p - 1; begin
2013
1926
  if free_spacing
2014
1927
  emit(:free_space, :comment, copy(data, ts, te))
2015
1928
  else
@@ -2021,10 +1934,9 @@ p = p - 1; begin
2021
1934
  end
2022
1935
  end
2023
1936
  when 45 then
2024
- # line 630 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2025
1937
  begin
2026
1938
  te = p
2027
- p = p - 1; begin
1939
+ p = p - 1; begin
2028
1940
  if free_spacing
2029
1941
  emit(:free_space, :whitespace, copy(data, ts, te))
2030
1942
  else
@@ -2033,38 +1945,34 @@ p = p - 1; begin
2033
1945
  end
2034
1946
  end
2035
1947
  when 44 then
2036
- # line 641 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2037
1948
  begin
2038
1949
  te = p
2039
- p = p - 1; begin
1950
+ p = p - 1; begin
2040
1951
  append_literal(data, ts, te)
2041
1952
  end
2042
1953
  end
2043
1954
  when 3 then
2044
- # line 474 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2045
1955
  begin
2046
1956
  begin p = ((te))-1; end
2047
- begin
1957
+ begin
2048
1958
  text = copy(data, ts, te)
2049
1959
  if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/
2050
- validation_error(:group_option, $1 || "-#{$2}", text)
1960
+ raise ValidationError.for(:group_option, $1 || "-#{$2}", text)
2051
1961
  end
2052
1962
  emit_options(text)
2053
1963
  end
2054
1964
  end
2055
1965
  when 11 then
2056
- # line 610 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2057
1966
  begin
2058
1967
  begin p = ((te))-1; end
2059
- begin
1968
+ begin
2060
1969
  append_literal(data, ts, te)
2061
1970
  end
2062
1971
  end
2063
1972
  when 8 then
2064
- # line 616 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2065
1973
  begin
2066
1974
  begin p = ((te))-1; end
2067
- begin
1975
+ begin
2068
1976
  begin
2069
1977
  stack[top] = cs
2070
1978
  top+= 1
@@ -2076,7 +1984,6 @@ p = p - 1; begin
2076
1984
  end
2077
1985
  end
2078
1986
  when 1 then
2079
- # line 1 "NONE"
2080
1987
  begin
2081
1988
  case act
2082
1989
  when 0 then
@@ -2086,16 +1993,16 @@ p = p - 1; begin
2086
1993
  next
2087
1994
  end
2088
1995
  end
2089
- when 40 then
1996
+ when 42 then
2090
1997
  begin begin p = ((te))-1; end
2091
1998
 
2092
1999
  text = copy(data, ts, te)
2093
2000
  if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/
2094
- validation_error(:group_option, $1 || "-#{$2}", text)
2001
+ raise ValidationError.for(:group_option, $1 || "-#{$2}", text)
2095
2002
  end
2096
2003
  emit_options(text)
2097
2004
  end
2098
- when 41 then
2005
+ when 43 then
2099
2006
  begin begin p = ((te))-1; end
2100
2007
 
2101
2008
  case text = copy(data, ts, te)
@@ -2105,29 +2012,27 @@ end
2105
2012
  when '(?<!'; emit(:assertion, :nlookbehind, text)
2106
2013
  end
2107
2014
  end
2108
- when 55 then
2015
+ when 57 then
2109
2016
  begin begin p = ((te))-1; end
2110
2017
 
2111
2018
  append_literal(data, ts, te)
2112
2019
  end
2113
- end
2020
+ end
2114
2021
  end
2115
- when 76 then
2116
- # line 140 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2022
+ when 75 then
2117
2023
  begin
2118
2024
 
2119
- text = copy(data, ts ? ts-1 : 0, -1)
2120
- raise PrematureEndError.new( text )
2025
+ text = copy(data, ts ? ts-1 : 0,-1)
2026
+ raise PrematureEndError.new(text)
2121
2027
  end
2122
- # line 214 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2123
2028
  begin
2124
2029
  te = p
2125
- p = p - 1; begin
2126
- emit(:set, :open, copy(data, ts, te))
2030
+ p = p - 1; begin
2031
+ emit(:set, :open, '[')
2127
2032
  begin
2128
2033
  stack[top] = cs
2129
2034
  top+= 1
2130
- cs = 91
2035
+ cs = 89
2131
2036
  _goto_level = _again
2132
2037
  next
2133
2038
  end
@@ -2135,38 +2040,34 @@ p = p - 1; begin
2135
2040
  end
2136
2041
  end
2137
2042
  when 19 then
2138
- # line 140 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2139
2043
  begin
2140
2044
 
2141
- text = copy(data, ts ? ts-1 : 0, -1)
2142
- raise PrematureEndError.new( text )
2045
+ text = copy(data, ts ? ts-1 : 0,-1)
2046
+ raise PrematureEndError.new(text)
2143
2047
  end
2144
- # line 214 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2145
2048
  begin
2146
2049
  begin p = ((te))-1; end
2147
- begin
2148
- emit(:set, :open, copy(data, ts, te))
2050
+ begin
2051
+ emit(:set, :open, '[')
2149
2052
  begin
2150
2053
  stack[top] = cs
2151
2054
  top+= 1
2152
- cs = 91
2055
+ cs = 89
2153
2056
  _goto_level = _again
2154
2057
  next
2155
2058
  end
2156
2059
 
2157
2060
  end
2158
2061
  end
2159
- when 91 then
2160
- # line 140 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2062
+ when 93 then
2161
2063
  begin
2162
2064
 
2163
- text = copy(data, ts ? ts-1 : 0, -1)
2164
- raise PrematureEndError.new( text )
2065
+ text = copy(data, ts ? ts-1 : 0,-1)
2066
+ raise PrematureEndError.new(text)
2165
2067
  end
2166
- # line 340 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2167
2068
  begin
2168
2069
  te = p
2169
- p = p - 1; begin
2070
+ p = p - 1; begin
2170
2071
  emit_meta_control_sequence(data, ts, te, :control)
2171
2072
  begin
2172
2073
  top -= 1
@@ -2177,17 +2078,15 @@ p = p - 1; begin
2177
2078
 
2178
2079
  end
2179
2080
  end
2180
- when 93 then
2181
- # line 140 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2081
+ when 95 then
2182
2082
  begin
2183
2083
 
2184
- text = copy(data, ts ? ts-1 : 0, -1)
2185
- raise PrematureEndError.new( text )
2084
+ text = copy(data, ts ? ts-1 : 0,-1)
2085
+ raise PrematureEndError.new(text)
2186
2086
  end
2187
- # line 345 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2188
2087
  begin
2189
2088
  te = p
2190
- p = p - 1; begin
2089
+ p = p - 1; begin
2191
2090
  emit_meta_control_sequence(data, ts, te, :meta_sequence)
2192
2091
  begin
2193
2092
  top -= 1
@@ -2199,16 +2098,14 @@ p = p - 1; begin
2199
2098
  end
2200
2099
  end
2201
2100
  when 26 then
2202
- # line 140 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2203
2101
  begin
2204
2102
 
2205
- text = copy(data, ts ? ts-1 : 0, -1)
2206
- raise PrematureEndError.new( text )
2103
+ text = copy(data, ts ? ts-1 : 0,-1)
2104
+ raise PrematureEndError.new(text)
2207
2105
  end
2208
- # line 340 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2209
2106
  begin
2210
2107
  begin p = ((te))-1; end
2211
- begin
2108
+ begin
2212
2109
  emit_meta_control_sequence(data, ts, te, :control)
2213
2110
  begin
2214
2111
  top -= 1
@@ -2220,16 +2117,14 @@ p = p - 1; begin
2220
2117
  end
2221
2118
  end
2222
2119
  when 28 then
2223
- # line 140 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2224
2120
  begin
2225
2121
 
2226
- text = copy(data, ts ? ts-1 : 0, -1)
2227
- raise PrematureEndError.new( text )
2122
+ text = copy(data, ts ? ts-1 : 0,-1)
2123
+ raise PrematureEndError.new(text)
2228
2124
  end
2229
- # line 345 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2230
2125
  begin
2231
2126
  begin p = ((te))-1; end
2232
- begin
2127
+ begin
2233
2128
  emit_meta_control_sequence(data, ts, te, :meta_sequence)
2234
2129
  begin
2235
2130
  top -= 1
@@ -2241,16 +2136,14 @@ p = p - 1; begin
2241
2136
  end
2242
2137
  end
2243
2138
  when 30 then
2244
- # line 146 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2245
2139
  begin
2246
2140
 
2247
- text = copy(data, ts ? ts-1 : 0, -1)
2248
- validation_error(:sequence, 'sequence', text)
2141
+ text = copy(data, ts ? ts-1 : 0,-1)
2142
+ raise ValidationError.for(:sequence, 'sequence', text)
2249
2143
  end
2250
- # line 336 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2251
2144
  begin
2252
2145
  te = p+1
2253
- begin
2146
+ begin
2254
2147
  begin
2255
2148
  top -= 1
2256
2149
  cs = stack[top]
@@ -2260,66 +2153,60 @@ te = p+1
2260
2153
 
2261
2154
  end
2262
2155
  end
2263
- when 5 then
2264
- # line 153 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2156
+ when 4 then
2265
2157
  begin
2266
2158
  self.group_depth = group_depth - 1 end
2267
- # line 459 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2268
2159
  begin
2269
2160
  te = p+1
2270
- begin
2161
+ begin
2271
2162
  emit(:group, :comment, copy(data, ts, te))
2272
2163
  end
2273
2164
  end
2274
2165
  when 37 then
2275
- # line 153 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2276
2166
  begin
2277
2167
  self.group_depth = group_depth - 1 end
2278
- # line 528 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2279
2168
  begin
2280
2169
  te = p+1
2281
- begin
2170
+ begin
2282
2171
  if conditional_stack.last == group_depth + 1
2283
2172
  conditional_stack.pop
2284
- emit(:conditional, :close, copy(data, ts, te))
2285
- else
2173
+ emit(:conditional, :close, ')')
2174
+ elsif group_depth >= 0
2286
2175
  if spacing_stack.length > 1 &&
2287
2176
  spacing_stack.last[:depth] == group_depth + 1
2288
2177
  spacing_stack.pop
2289
2178
  self.free_spacing = spacing_stack.last[:free_spacing]
2290
2179
  end
2291
2180
 
2292
- emit(:group, :close, copy(data, ts, te))
2181
+ emit(:group, :close, ')')
2182
+ else
2183
+ raise ValidationError.for(:group, 'group', 'unmatched close parenthesis')
2293
2184
  end
2294
2185
  end
2295
2186
  end
2296
2187
  when 39 then
2297
- # line 154 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2298
2188
  begin
2299
2189
  self.set_depth = set_depth + 1 end
2300
- # line 434 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2301
2190
  begin
2302
2191
  te = p+1
2303
- begin
2192
+ begin
2304
2193
  emit(:set, :open, copy(data, ts, te))
2305
2194
  begin
2306
2195
  stack[top] = cs
2307
2196
  top+= 1
2308
- cs = 91
2197
+ cs = 89
2309
2198
  _goto_level = _again
2310
2199
  next
2311
2200
  end
2312
2201
 
2313
2202
  end
2314
2203
  end
2315
- when 70 then
2316
- # line 155 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2204
+ when 69 then
2317
2205
  begin
2318
2206
  self.set_depth = set_depth - 1 end
2319
- # line 161 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2320
2207
  begin
2321
2208
  te = p+1
2322
- begin
2209
+ begin
2323
2210
  emit(:set, :close, copy(data, ts, te))
2324
2211
  if in_set?
2325
2212
  begin
@@ -2331,7 +2218,7 @@ te = p+1
2331
2218
 
2332
2219
  else
2333
2220
  begin
2334
- cs = 73
2221
+ cs = 71
2335
2222
  _goto_level = _again
2336
2223
  next
2337
2224
  end
@@ -2339,16 +2226,14 @@ te = p+1
2339
2226
  end
2340
2227
  end
2341
2228
  end
2342
- when 75 then
2343
- # line 155 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2229
+ when 74 then
2344
2230
  begin
2345
2231
  self.set_depth = set_depth - 1 end
2346
- # line 170 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2347
2232
  begin
2348
2233
  te = p+1
2349
2234
  begin # special case, emits two tokens
2350
- emit(:literal, :literal, copy(data, ts, te-1))
2351
- emit(:set, :close, copy(data, ts+1, te))
2235
+ emit(:literal, :literal, '-')
2236
+ emit(:set, :close, ']')
2352
2237
  if in_set?
2353
2238
  begin
2354
2239
  top -= 1
@@ -2359,7 +2244,7 @@ te = p+1
2359
2244
 
2360
2245
  else
2361
2246
  begin
2362
- cs = 73
2247
+ cs = 71
2363
2248
  _goto_level = _again
2364
2249
  next
2365
2250
  end
@@ -2368,13 +2253,11 @@ te = p+1
2368
2253
  end
2369
2254
  end
2370
2255
  when 21 then
2371
- # line 155 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2372
2256
  begin
2373
2257
  self.set_depth = set_depth - 1 end
2374
- # line 219 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2375
2258
  begin
2376
2259
  te = p+1
2377
- begin
2260
+ begin
2378
2261
  text = copy(data, ts, te)
2379
2262
 
2380
2263
  type = :posixclass
@@ -2385,85 +2268,62 @@ te = p+1
2385
2268
  end
2386
2269
 
2387
2270
  unless self.class.posix_classes.include?(class_name)
2388
- validation_error(:posix_class, text)
2271
+ raise ValidationError.for(:posix_class, text)
2389
2272
  end
2390
2273
 
2391
2274
  emit(type, class_name.to_sym, text)
2392
2275
  end
2393
2276
  end
2394
- when 68 then
2395
- # line 1 "NONE"
2277
+ when 67 then
2396
2278
  begin
2397
2279
  te = p+1
2398
2280
  end
2399
- # line 154 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2400
2281
  begin
2401
2282
  self.set_depth = set_depth + 1 end
2402
- when 82 then
2403
- # line 1 "NONE"
2283
+ when 83 then
2404
2284
  begin
2405
2285
  te = p+1
2406
2286
  end
2407
- # line 273 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2408
2287
  begin
2409
- act = 16; end
2410
- when 81 then
2411
- # line 1 "NONE"
2288
+ act = 17; end
2289
+ when 82 then
2412
2290
  begin
2413
2291
  te = p+1
2414
2292
  end
2415
- # line 279 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2416
2293
  begin
2417
- act = 17; end
2418
- when 7 then
2419
- # line 1 "NONE"
2294
+ act = 18; end
2295
+ when 49 then
2420
2296
  begin
2421
2297
  te = p+1
2422
2298
  end
2423
- # line 488 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2424
2299
  begin
2425
- act = 41; end
2426
- when 2 then
2427
- # line 1 "NONE"
2300
+ act = 42; end
2301
+ when 7 then
2428
2302
  begin
2429
2303
  te = p+1
2430
2304
  end
2431
- # line 641 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2432
2305
  begin
2433
- act = 55; end
2434
- when 49 then
2435
- # line 1 "NONE"
2306
+ act = 43; end
2307
+ when 2 then
2436
2308
  begin
2437
2309
  te = p+1
2438
2310
  end
2439
- # line 153 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2440
2311
  begin
2441
- self.group_depth = group_depth - 1 end
2442
- # line 152 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2443
- begin
2444
- self.group_depth = group_depth + 1 end
2445
- # line 474 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2446
- begin
2447
- act = 40; end
2448
- # line 2448 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner.rb"
2312
+ act = 57; end
2449
2313
  end
2450
2314
  end
2451
2315
  end
2452
2316
  if _goto_level <= _again
2453
- case _re_scanner_to_state_actions[cs]
2454
- when 65 then
2455
- # line 1 "NONE"
2317
+ case _re_scanner_to_state_actions[cs]
2318
+ when 64 then
2456
2319
  begin
2457
2320
  ts = nil; end
2458
2321
  when 33 then
2459
- # line 1 "NONE"
2460
2322
  begin
2461
2323
  ts = nil; end
2462
- # line 1 "NONE"
2463
2324
  begin
2464
2325
  act = 0
2465
2326
  end
2466
- # line 2466 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner.rb"
2467
2327
  end
2468
2328
 
2469
2329
  if cs == 0
@@ -2485,19 +2345,16 @@ act = 0
2485
2345
  end
2486
2346
  case _re_scanner_eof_actions[cs]
2487
2347
  when 13 then
2488
- # line 8 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/property.rl"
2489
2348
  begin
2490
2349
 
2491
2350
  raise PrematureEndError.new('unicode property')
2492
2351
  end
2493
2352
  when 24 then
2494
- # line 140 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2495
2353
  begin
2496
2354
 
2497
- text = copy(data, ts ? ts-1 : 0, -1)
2498
- raise PrematureEndError.new( text )
2355
+ text = copy(data, ts ? ts-1 : 0,-1)
2356
+ raise PrematureEndError.new(text)
2499
2357
  end
2500
- # line 2500 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner.rb"
2501
2358
  end
2502
2359
  end
2503
2360
 
@@ -2508,13 +2365,11 @@ act = 0
2508
2365
  end
2509
2366
  end
2510
2367
 
2511
- # line 746 "/Users/janoschmuller/code/regexp_parser/tasks/../lib/regexp_parser/scanner/scanner.rl"
2512
-
2513
2368
  # to avoid "warning: assigned but unused variable - testEof"
2514
2369
  testEof = testEof
2515
2370
 
2516
2371
  if cs == re_scanner_error
2517
- text = copy(data, ts ? ts-1 : 0, -1)
2372
+ text = copy(data, ts ? ts-1 : 0,-1)
2518
2373
  raise ScannerError.new("Scan error at '#{text}'")
2519
2374
  end
2520
2375
 
@@ -2524,7 +2379,7 @@ end
2524
2379
  "[#{set_depth}]") if in_set?
2525
2380
 
2526
2381
  # when the entire expression is a literal run
2527
- emit_literal if literal
2382
+ emit_literal if literal_run
2528
2383
 
2529
2384
  tokens
2530
2385
  end
@@ -2551,26 +2406,37 @@ end
2551
2406
  def emit(type, token, text)
2552
2407
  #puts "EMIT: type: #{type}, token: #{token}, text: #{text}, ts: #{ts}, te: #{te}"
2553
2408
 
2554
- emit_literal if literal
2409
+ emit_literal if literal_run
2555
2410
 
2556
2411
  # Ragel runs with byte-based indices (ts, te). These are of little value to
2557
2412
  # end-users, so we keep track of char-based indices and emit those instead.
2558
2413
  ts_char_pos = char_pos
2559
2414
  te_char_pos = char_pos + text.length
2560
2415
 
2561
- if block
2562
- block.call type, token, text, ts_char_pos, te_char_pos
2563
- end
2416
+ tok = [type, token, text, ts_char_pos, te_char_pos]
2564
2417
 
2565
- tokens << [type, token, text, ts_char_pos, te_char_pos]
2418
+ self.prev_token = tok
2566
2419
 
2567
2420
  self.char_pos = te_char_pos
2421
+
2422
+ if block
2423
+ block.call type, token, text, ts_char_pos, te_char_pos
2424
+ # TODO: in v3.0.0,remove `collect_tokens:` kwarg and only collect if no block given
2425
+ tokens << tok if collect_tokens
2426
+ elsif collect_tokens
2427
+ tokens << tok
2428
+ end
2568
2429
  end
2569
2430
 
2431
+ attr_accessor :literal_run # only public for #||= to work on ruby <= 2.5
2432
+
2570
2433
  private
2571
2434
 
2572
- attr_accessor :tokens, :literal, :block, :free_spacing, :spacing_stack,
2573
- :group_depth, :set_depth, :conditional_stack, :char_pos
2435
+ attr_accessor :block,
2436
+ :collect_tokens, :tokens, :prev_token,
2437
+ :free_spacing, :spacing_stack,
2438
+ :group_depth, :set_depth, :conditional_stack,
2439
+ :char_pos
2574
2440
 
2575
2441
  def free_spacing?(input_object, options)
2576
2442
  if options && !input_object.is_a?(String)
@@ -2600,14 +2466,13 @@ end
2600
2466
  # Appends one or more characters to the literal buffer, to be emitted later
2601
2467
  # by a call to emit_literal.
2602
2468
  def append_literal(data, ts, te)
2603
- self.literal = literal || []
2604
- literal << copy(data, ts, te)
2469
+ (self.literal_run ||= []) << copy(data, ts, te)
2605
2470
  end
2606
2471
 
2607
2472
  # Emits the literal run collected by calls to the append_literal method.
2608
2473
  def emit_literal
2609
- text = literal.join
2610
- self.literal = nil
2474
+ text = literal_run.join
2475
+ self.literal_run = nil
2611
2476
  emit(:literal, :literal, text)
2612
2477
  end
2613
2478
 
@@ -2616,7 +2481,7 @@ end
2616
2481
 
2617
2482
  # Ruby allows things like '(?-xxxx)' or '(?xx-xx--xx-:abc)'.
2618
2483
  text =~ /\(\?([mixdau]*)(-(?:[mix]*))*(:)?/
2619
- positive, negative, group_local = $1, $2, $3
2484
+ positive, negative, group_local = $1,$2,$3
2620
2485
 
2621
2486
  if positive.include?('x')
2622
2487
  self.free_spacing = true
@@ -2642,24 +2507,8 @@ end
2642
2507
 
2643
2508
  def emit_meta_control_sequence(data, ts, te, token)
2644
2509
  if data.last < 0x00 || data.last > 0x7F
2645
- validation_error(:sequence, 'escape', token.to_s)
2510
+ raise ValidationError.for(:sequence, 'escape', token.to_s)
2646
2511
  end
2647
- emit(:escape, token, copy(data, ts-1, te))
2648
- end
2649
-
2650
- # Centralizes and unifies the handling of validation related
2651
- # errors.
2652
- def validation_error(type, what, reason = nil)
2653
- error =
2654
- case type
2655
- when :backref then InvalidBackrefError.new(what, reason)
2656
- when :group then InvalidGroupError.new(what, reason)
2657
- when :group_option then InvalidGroupOption.new(what, reason)
2658
- when :posix_class then UnknownPosixClassError.new(what)
2659
- when :property then UnknownUnicodePropertyError.new(what)
2660
- when :sequence then InvalidSequenceError.new(what, reason)
2661
- end
2662
-
2663
- raise error # unless @@config.validation_ignore
2512
+ emit(:escape, token, copy(data, ts-1,te))
2664
2513
  end
2665
2514
  end # module Regexp::Scanner