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