regexp_parser 1.7.0 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +9 -3
  3. data/LICENSE +1 -1
  4. data/Rakefile +6 -70
  5. data/lib/regexp_parser/error.rb +4 -0
  6. data/lib/regexp_parser/expression/base.rb +76 -0
  7. data/lib/regexp_parser/expression/classes/alternation.rb +1 -1
  8. data/lib/regexp_parser/expression/classes/anchor.rb +0 -2
  9. data/lib/regexp_parser/expression/classes/{backref.rb → backreference.rb} +22 -2
  10. data/lib/regexp_parser/expression/classes/{set → character_set}/range.rb +4 -8
  11. data/lib/regexp_parser/expression/classes/{set.rb → character_set.rb} +4 -8
  12. data/lib/regexp_parser/expression/classes/{type.rb → character_type.rb} +0 -2
  13. data/lib/regexp_parser/expression/classes/conditional.rb +11 -5
  14. data/lib/regexp_parser/expression/classes/{escape.rb → escape_sequence.rb} +15 -7
  15. data/lib/regexp_parser/expression/classes/free_space.rb +5 -5
  16. data/lib/regexp_parser/expression/classes/group.rb +28 -15
  17. data/lib/regexp_parser/expression/classes/keep.rb +2 -0
  18. data/lib/regexp_parser/expression/classes/literal.rb +1 -5
  19. data/lib/regexp_parser/expression/classes/posix_class.rb +5 -5
  20. data/lib/regexp_parser/expression/classes/root.rb +4 -19
  21. data/lib/regexp_parser/expression/classes/{property.rb → unicode_property.rb} +11 -12
  22. data/lib/regexp_parser/expression/methods/construct.rb +41 -0
  23. data/lib/regexp_parser/expression/methods/human_name.rb +43 -0
  24. data/lib/regexp_parser/expression/methods/match_length.rb +11 -7
  25. data/lib/regexp_parser/expression/methods/negative.rb +20 -0
  26. data/lib/regexp_parser/expression/methods/parts.rb +23 -0
  27. data/lib/regexp_parser/expression/methods/printing.rb +26 -0
  28. data/lib/regexp_parser/expression/methods/strfregexp.rb +1 -1
  29. data/lib/regexp_parser/expression/methods/tests.rb +47 -1
  30. data/lib/regexp_parser/expression/methods/traverse.rb +34 -18
  31. data/lib/regexp_parser/expression/quantifier.rb +57 -17
  32. data/lib/regexp_parser/expression/sequence.rb +11 -47
  33. data/lib/regexp_parser/expression/sequence_operation.rb +4 -9
  34. data/lib/regexp_parser/expression/shared.rb +111 -0
  35. data/lib/regexp_parser/expression/subexpression.rb +27 -19
  36. data/lib/regexp_parser/expression.rb +15 -141
  37. data/lib/regexp_parser/lexer.rb +83 -41
  38. data/lib/regexp_parser/parser.rb +372 -429
  39. data/lib/regexp_parser/scanner/char_type.rl +11 -11
  40. data/lib/regexp_parser/scanner/errors/premature_end_error.rb +8 -0
  41. data/lib/regexp_parser/scanner/errors/scanner_error.rb +6 -0
  42. data/lib/regexp_parser/scanner/errors/validation_error.rb +63 -0
  43. data/lib/regexp_parser/scanner/properties/long.csv +651 -0
  44. data/lib/regexp_parser/scanner/properties/short.csv +249 -0
  45. data/lib/regexp_parser/scanner/property.rl +4 -4
  46. data/lib/regexp_parser/scanner/scanner.rl +303 -368
  47. data/lib/regexp_parser/scanner.rb +1423 -1674
  48. data/lib/regexp_parser/syntax/any.rb +2 -7
  49. data/lib/regexp_parser/syntax/base.rb +92 -67
  50. data/lib/regexp_parser/syntax/token/anchor.rb +15 -0
  51. data/lib/regexp_parser/syntax/{tokens → token}/assertion.rb +2 -2
  52. data/lib/regexp_parser/syntax/token/backreference.rb +33 -0
  53. data/lib/regexp_parser/syntax/token/character_set.rb +16 -0
  54. data/lib/regexp_parser/syntax/{tokens → token}/character_type.rb +3 -3
  55. data/lib/regexp_parser/syntax/{tokens → token}/conditional.rb +3 -3
  56. data/lib/regexp_parser/syntax/token/escape.rb +33 -0
  57. data/lib/regexp_parser/syntax/{tokens → token}/group.rb +7 -7
  58. data/lib/regexp_parser/syntax/{tokens → token}/keep.rb +1 -1
  59. data/lib/regexp_parser/syntax/token/meta.rb +20 -0
  60. data/lib/regexp_parser/syntax/{tokens → token}/posix_class.rb +3 -3
  61. data/lib/regexp_parser/syntax/token/quantifier.rb +35 -0
  62. data/lib/regexp_parser/syntax/token/unicode_property.rb +751 -0
  63. data/lib/regexp_parser/syntax/token/virtual.rb +11 -0
  64. data/lib/regexp_parser/syntax/token.rb +45 -0
  65. data/lib/regexp_parser/syntax/version_lookup.rb +19 -36
  66. data/lib/regexp_parser/syntax/versions/1.8.6.rb +13 -20
  67. data/lib/regexp_parser/syntax/versions/1.9.1.rb +10 -17
  68. data/lib/regexp_parser/syntax/versions/1.9.3.rb +3 -10
  69. data/lib/regexp_parser/syntax/versions/2.0.0.rb +8 -15
  70. data/lib/regexp_parser/syntax/versions/2.2.0.rb +3 -9
  71. data/lib/regexp_parser/syntax/versions/2.3.0.rb +3 -9
  72. data/lib/regexp_parser/syntax/versions/2.4.0.rb +3 -9
  73. data/lib/regexp_parser/syntax/versions/2.4.1.rb +2 -8
  74. data/lib/regexp_parser/syntax/versions/2.5.0.rb +3 -9
  75. data/lib/regexp_parser/syntax/versions/2.6.0.rb +3 -9
  76. data/lib/regexp_parser/syntax/versions/2.6.2.rb +3 -9
  77. data/lib/regexp_parser/syntax/versions/2.6.3.rb +3 -9
  78. data/lib/regexp_parser/syntax/versions/3.1.0.rb +4 -0
  79. data/lib/regexp_parser/syntax/versions/3.2.0.rb +4 -0
  80. data/lib/regexp_parser/syntax/versions.rb +3 -1
  81. data/lib/regexp_parser/syntax.rb +8 -6
  82. data/lib/regexp_parser/token.rb +9 -20
  83. data/lib/regexp_parser/version.rb +1 -1
  84. data/lib/regexp_parser.rb +0 -2
  85. data/regexp_parser.gemspec +19 -23
  86. metadata +53 -171
  87. data/CHANGELOG.md +0 -349
  88. data/README.md +0 -470
  89. data/lib/regexp_parser/scanner/properties/long.yml +0 -594
  90. data/lib/regexp_parser/scanner/properties/short.yml +0 -237
  91. data/lib/regexp_parser/syntax/tokens/anchor.rb +0 -15
  92. data/lib/regexp_parser/syntax/tokens/backref.rb +0 -24
  93. data/lib/regexp_parser/syntax/tokens/character_set.rb +0 -13
  94. data/lib/regexp_parser/syntax/tokens/escape.rb +0 -30
  95. data/lib/regexp_parser/syntax/tokens/meta.rb +0 -13
  96. data/lib/regexp_parser/syntax/tokens/quantifier.rb +0 -35
  97. data/lib/regexp_parser/syntax/tokens/unicode_property.rb +0 -675
  98. data/lib/regexp_parser/syntax/tokens.rb +0 -45
  99. data/spec/expression/base_spec.rb +0 -94
  100. data/spec/expression/clone_spec.rb +0 -120
  101. data/spec/expression/conditional_spec.rb +0 -89
  102. data/spec/expression/free_space_spec.rb +0 -27
  103. data/spec/expression/methods/match_length_spec.rb +0 -161
  104. data/spec/expression/methods/match_spec.rb +0 -25
  105. data/spec/expression/methods/strfregexp_spec.rb +0 -224
  106. data/spec/expression/methods/tests_spec.rb +0 -99
  107. data/spec/expression/methods/traverse_spec.rb +0 -161
  108. data/spec/expression/options_spec.rb +0 -128
  109. data/spec/expression/root_spec.rb +0 -9
  110. data/spec/expression/sequence_spec.rb +0 -9
  111. data/spec/expression/subexpression_spec.rb +0 -50
  112. data/spec/expression/to_h_spec.rb +0 -26
  113. data/spec/expression/to_s_spec.rb +0 -100
  114. data/spec/lexer/all_spec.rb +0 -22
  115. data/spec/lexer/conditionals_spec.rb +0 -53
  116. data/spec/lexer/escapes_spec.rb +0 -14
  117. data/spec/lexer/keep_spec.rb +0 -10
  118. data/spec/lexer/literals_spec.rb +0 -89
  119. data/spec/lexer/nesting_spec.rb +0 -99
  120. data/spec/lexer/refcalls_spec.rb +0 -55
  121. data/spec/parser/all_spec.rb +0 -43
  122. data/spec/parser/alternation_spec.rb +0 -88
  123. data/spec/parser/anchors_spec.rb +0 -17
  124. data/spec/parser/conditionals_spec.rb +0 -179
  125. data/spec/parser/errors_spec.rb +0 -30
  126. data/spec/parser/escapes_spec.rb +0 -121
  127. data/spec/parser/free_space_spec.rb +0 -130
  128. data/spec/parser/groups_spec.rb +0 -108
  129. data/spec/parser/keep_spec.rb +0 -6
  130. data/spec/parser/posix_classes_spec.rb +0 -8
  131. data/spec/parser/properties_spec.rb +0 -115
  132. data/spec/parser/quantifiers_spec.rb +0 -51
  133. data/spec/parser/refcalls_spec.rb +0 -112
  134. data/spec/parser/set/intersections_spec.rb +0 -127
  135. data/spec/parser/set/ranges_spec.rb +0 -111
  136. data/spec/parser/sets_spec.rb +0 -178
  137. data/spec/parser/types_spec.rb +0 -18
  138. data/spec/scanner/all_spec.rb +0 -18
  139. data/spec/scanner/anchors_spec.rb +0 -21
  140. data/spec/scanner/conditionals_spec.rb +0 -128
  141. data/spec/scanner/errors_spec.rb +0 -68
  142. data/spec/scanner/escapes_spec.rb +0 -53
  143. data/spec/scanner/free_space_spec.rb +0 -133
  144. data/spec/scanner/groups_spec.rb +0 -52
  145. data/spec/scanner/keep_spec.rb +0 -10
  146. data/spec/scanner/literals_spec.rb +0 -49
  147. data/spec/scanner/meta_spec.rb +0 -18
  148. data/spec/scanner/properties_spec.rb +0 -64
  149. data/spec/scanner/quantifiers_spec.rb +0 -20
  150. data/spec/scanner/refcalls_spec.rb +0 -36
  151. data/spec/scanner/sets_spec.rb +0 -102
  152. data/spec/scanner/types_spec.rb +0 -14
  153. data/spec/spec_helper.rb +0 -15
  154. data/spec/support/runner.rb +0 -42
  155. data/spec/support/shared_examples.rb +0 -77
  156. data/spec/support/warning_extractor.rb +0 -60
  157. data/spec/syntax/syntax_spec.rb +0 -48
  158. data/spec/syntax/syntax_token_map_spec.rb +0 -23
  159. data/spec/syntax/versions/1.8.6_spec.rb +0 -17
  160. data/spec/syntax/versions/1.9.1_spec.rb +0 -10
  161. data/spec/syntax/versions/1.9.3_spec.rb +0 -9
  162. data/spec/syntax/versions/2.0.0_spec.rb +0 -13
  163. data/spec/syntax/versions/2.2.0_spec.rb +0 -9
  164. data/spec/syntax/versions/aliases_spec.rb +0 -37
  165. data/spec/token/token_spec.rb +0 -85
  166. /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
- # This file was generated from lib/regexp_parser/scanner/scanner.rl
10
-
11
- class Regexp::Scanner
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
- # The property name was not recognized by the scanner.
58
- class UnknownUnicodePropertyError < ValidationError
59
- def initialize(name)
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.literal = nil
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
- if input_object.is_a?(Regexp)
79
- input = input_object.source
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*") if input.is_a?(String)
33
+ data = input.unpack("c*")
88
34
  eof = data.length
89
35
 
90
36
  self.tokens = []
91
- self.block = block_given? ? block : nil
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
- 0, 0, -128, -65, -128, -65,
105
- -128, -65, -128, -65, -128,
106
- -65, -128, -65, 10, 10,
107
- 41, 41, 39, 122, 33, 122,
108
- 48, 122, 39, 60, 39,
109
- 122, 48, 57, 39, 57,
110
- 48, 57, 39, 57, 39, 122,
111
- 43, 122, 48, 57, 48,
112
- 62, 48, 57, 43, 62,
113
- 43, 122, 44, 125, 48, 125,
114
- 123, 123, 9, 122, 9,
115
- 125, 9, 122, -128, -65,
116
- -128, -65, 38, 38, 45, 122,
117
- 45, 122, 93, 93, 94,
118
- 120, 97, 120, 108, 115,
119
- 110, 112, 117, 117, 109, 109,
120
- 58, 58, 93, 93, 104,
121
- 104, 97, 97, 99, 99,
122
- 105, 105, 105, 105, 108, 108,
123
- 97, 97, 110, 110, 107,
124
- 107, 110, 110, 116, 116,
125
- 114, 114, 108, 108, 105, 105,
126
- 103, 103, 105, 105, 116,
127
- 116, 114, 114, 97, 97,
128
- 112, 112, 104, 104, 111, 111,
129
- 119, 119, 101, 101, 114,
130
- 114, 114, 117, 105, 105,
131
- 110, 110, 110, 110, 99, 99,
132
- 112, 112, 97, 97, 99,
133
- 99, 101, 101, 112, 112,
134
- 112, 112, 111, 111, 114, 114,
135
- 100, 100, 100, 100, 65,
136
- 122, 61, 61, 93, 93,
137
- 45, 45, 92, 92, 92, 92,
138
- 45, 45, 92, 92, 92,
139
- 92, 48, 123, 48, 102,
140
- 48, 102, 48, 102, 48, 102,
141
- 9, 125, 9, 125, 9,
142
- 125, 9, 125, 9, 125,
143
- 9, 125, 48, 123, 41, 41,
144
- 39, 122, 41, 57, 48,
145
- 122, -62, 127, -62, -33,
146
- -32, -17, -16, -12, 1, 127,
147
- 1, 127, 9, 32, 33,
148
- 126, 10, 126, 63, 63,
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
- 0, 64, 64, 64, 64, 64, 64, 1,
170
- 1, 84, 90, 75, 22, 84, 10, 19,
171
- 10, 19, 84, 80, 10, 15, 10, 20,
172
- 80, 82, 78, 1, 114, 117, 114, 64,
173
- 64, 1, 78, 78, 1, 27, 24, 8,
174
- 3, 1, 1, 1, 1, 1, 1, 1,
175
- 1, 1, 1, 1, 1, 1, 1, 1,
176
- 1, 1, 1, 1, 1, 1, 1, 1,
177
- 1, 1, 1, 1, 1, 1, 4, 1,
178
- 1, 1, 1, 1, 1, 1, 1, 1,
179
- 1, 1, 1, 1, 1, 58, 1, 1,
180
- 1, 1, 1, 1, 1, 1, 76, 55,
181
- 55, 55, 55, 117, 117, 117, 117, 117,
182
- 117, 76, 1, 84, 17, 75, 190, 30,
183
- 16, 5, 127, 127, 24, 94, 117, 1,
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
- 0, 0, 65, 130, 195, 260, 325, 390,
197
- 392, 394, 479, 570, 646, 669, 754, 765,
198
- 785, 796, 816, 901, 982, 993, 1009, 1020,
199
- 1041, 1122, 1205, 1284, 1286, 1401, 1519, 1634,
200
- 1699, 1764, 1766, 1845, 1924, 1926, 1954, 1979,
201
- 1988, 1992, 1994, 1996, 1998, 2000, 2002, 2004,
202
- 2006, 2008, 2010, 2012, 2014, 2016, 2018, 2020,
203
- 2022, 2024, 2026, 2028, 2030, 2032, 2034, 2036,
204
- 2038, 2040, 2042, 2044, 2046, 2048, 2050, 2055,
205
- 2057, 2059, 2061, 2063, 2065, 2067, 2069, 2071,
206
- 2073, 2075, 2077, 2079, 2081, 2083, 2142, 2144,
207
- 2146, 2148, 2150, 2152, 2154, 2156, 2158, 2235,
208
- 2291, 2347, 2403, 2459, 2577, 2695, 2813, 2931,
209
- 3049, 3167, 3244, 3246, 3331, 3349, 3425, 3616,
210
- 3647, 3664, 3670, 3798, 3926, 3951, 4046, 4164,
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
- 1, 1, 1, 1, 1, 1, 1, 1,
224
- 1, 1, 1, 1, 1, 1, 1, 1,
225
- 1, 1, 1, 1, 1, 1, 1, 1,
226
- 1, 1, 1, 1, 1, 1, 1, 1,
227
- 1, 1, 1, 1, 1, 1, 1, 1,
228
- 1, 1, 1, 1, 1, 1, 1, 1,
229
- 1, 1, 1, 1, 1, 1, 1, 1,
230
- 1, 1, 1, 1, 1, 1, 1, 1,
231
- 0, 2, 2, 2, 2, 2, 2, 2,
232
- 2, 2, 2, 2, 2, 2, 2, 2,
233
- 2, 2, 2, 2, 2, 2, 2, 2,
234
- 2, 2, 2, 2, 2, 2, 2, 2,
235
- 2, 2, 2, 2, 2, 2, 2, 2,
236
- 2, 2, 2, 2, 2, 2, 2, 2,
237
- 2, 2, 2, 2, 2, 2, 2, 2,
238
- 2, 2, 2, 2, 2, 2, 2, 2,
239
- 2, 0, 3, 3, 3, 3, 3, 3,
240
- 3, 3, 3, 3, 3, 3, 3, 3,
241
- 3, 3, 3, 3, 3, 3, 3, 3,
242
- 3, 3, 3, 3, 3, 3, 3, 3,
243
- 3, 3, 3, 3, 3, 3, 3, 3,
244
- 3, 3, 3, 3, 3, 3, 3, 3,
245
- 3, 3, 3, 3, 3, 3, 3, 3,
246
- 3, 3, 3, 3, 3, 3, 3, 3,
247
- 3, 3, 0, 4, 4, 4, 4, 4,
248
- 4, 4, 4, 4, 4, 4, 4, 4,
249
- 4, 4, 4, 4, 4, 4, 4, 4,
250
- 4, 4, 4, 4, 4, 4, 4, 4,
251
- 4, 4, 4, 4, 4, 4, 4, 4,
252
- 4, 4, 4, 4, 4, 4, 4, 4,
253
- 4, 4, 4, 4, 4, 4, 4, 4,
254
- 4, 4, 4, 4, 4, 4, 4, 4,
255
- 4, 4, 4, 0, 5, 5, 5, 5,
256
- 5, 5, 5, 5, 5, 5, 5, 5,
257
- 5, 5, 5, 5, 5, 5, 5, 5,
258
- 5, 5, 5, 5, 5, 5, 5, 5,
259
- 5, 5, 5, 5, 5, 5, 5, 5,
260
- 5, 5, 5, 5, 5, 5, 5, 5,
261
- 5, 5, 5, 5, 5, 5, 5, 5,
262
- 5, 5, 5, 5, 5, 5, 5, 5,
263
- 5, 5, 5, 5, 0, 6, 6, 6,
264
- 6, 6, 6, 6, 6, 6, 6, 6,
265
- 6, 6, 6, 6, 6, 6, 6, 6,
266
- 6, 6, 6, 6, 6, 6, 6, 6,
267
- 6, 6, 6, 6, 6, 6, 6, 6,
268
- 6, 6, 6, 6, 6, 6, 6, 6,
269
- 6, 6, 6, 6, 6, 6, 6, 6,
270
- 6, 6, 6, 6, 6, 6, 6, 6,
271
- 6, 6, 6, 6, 6, 0, 9, 8,
272
- 12, 11, 13, 10, 10, 10, 10, 10,
273
- 10, 10, 10, 14, 14, 14, 14, 14,
274
- 14, 14, 14, 14, 14, 10, 10, 10,
275
- 10, 10, 10, 10, 14, 14, 14, 14,
276
- 14, 14, 14, 14, 14, 14, 14, 14,
277
- 14, 14, 14, 14, 14, 14, 14, 14,
278
- 14, 14, 14, 14, 14, 14, 10, 10,
279
- 10, 10, 14, 10, 14, 14, 14, 14,
280
- 14, 14, 14, 14, 14, 14, 14, 14,
281
- 14, 14, 14, 14, 14, 14, 14, 14,
282
- 14, 14, 14, 14, 14, 14, 10, 15,
283
- 10, 10, 10, 10, 10, 10, 10, 10,
284
- 10, 10, 10, 10, 10, 10, 16, 16,
285
- 16, 16, 16, 16, 16, 16, 16, 16,
286
- 10, 10, 10, 15, 13, 10, 10, 16,
287
- 16, 16, 16, 16, 16, 16, 16, 16,
288
- 16, 16, 16, 16, 16, 16, 16, 16,
289
- 16, 16, 16, 16, 16, 16, 16, 16,
290
- 16, 10, 10, 10, 10, 16, 10, 16,
291
- 16, 16, 16, 16, 16, 16, 16, 16,
292
- 16, 16, 16, 16, 16, 16, 16, 16,
293
- 16, 16, 16, 16, 16, 16, 16, 16,
294
- 16, 10, 16, 16, 16, 16, 16, 16,
295
- 16, 16, 16, 16, 10, 10, 10, 10,
296
- 13, 10, 10, 16, 16, 16, 16, 16,
297
- 16, 16, 16, 16, 16, 16, 16, 16,
298
- 16, 16, 16, 16, 16, 16, 16, 16,
299
- 16, 16, 16, 16, 16, 10, 10, 10,
300
- 10, 16, 10, 16, 16, 16, 16, 16,
301
- 16, 16, 16, 16, 16, 16, 16, 16,
302
- 16, 16, 16, 16, 16, 16, 16, 16,
303
- 16, 16, 16, 16, 16, 10, 18, 17,
304
- 17, 17, 17, 17, 17, 17, 17, 17,
305
- 17, 17, 17, 17, 17, 17, 17, 17,
306
- 17, 17, 17, 19, 17, 20, 17, 17,
307
- 17, 21, 17, 22, 17, 17, 23, 23,
308
- 23, 23, 23, 23, 23, 23, 23, 23,
309
- 17, 17, 17, 17, 17, 17, 17, 23,
310
- 23, 23, 23, 23, 23, 23, 23, 23,
311
- 23, 23, 23, 23, 23, 23, 23, 23,
312
- 23, 23, 23, 23, 23, 23, 23, 23,
313
- 23, 17, 17, 17, 17, 23, 17, 23,
314
- 23, 23, 23, 23, 23, 23, 23, 23,
315
- 23, 23, 23, 23, 23, 23, 23, 23,
316
- 23, 23, 23, 23, 23, 23, 23, 23,
317
- 23, 17, 24, 24, 24, 24, 24, 24,
318
- 24, 24, 24, 24, 17, 20, 17, 17,
319
- 17, 17, 17, 17, 17, 17, 24, 24,
320
- 24, 24, 24, 24, 24, 24, 24, 24,
321
- 17, 24, 25, 25, 25, 25, 25, 25,
322
- 25, 25, 25, 17, 20, 17, 17, 17,
323
- 21, 17, 21, 17, 17, 25, 25, 25,
324
- 25, 25, 25, 25, 25, 25, 25, 17,
325
- 20, 17, 17, 17, 21, 17, 21, 17,
326
- 17, 23, 23, 23, 23, 23, 23, 23,
327
- 23, 23, 23, 17, 17, 17, 17, 17,
328
- 17, 17, 23, 23, 23, 23, 23, 23,
329
- 23, 23, 23, 23, 23, 23, 23, 23,
330
- 23, 23, 23, 23, 23, 23, 23, 23,
331
- 23, 23, 23, 23, 17, 17, 17, 17,
332
- 23, 17, 23, 23, 23, 23, 23, 23,
333
- 23, 23, 23, 23, 23, 23, 23, 23,
334
- 23, 23, 23, 23, 23, 23, 23, 23,
335
- 23, 23, 23, 23, 17, 26, 17, 27,
336
- 17, 17, 28, 28, 28, 28, 28, 28,
337
- 28, 28, 28, 28, 17, 17, 17, 17,
338
- 20, 17, 17, 28, 28, 28, 28, 28,
339
- 28, 28, 28, 28, 28, 28, 28, 28,
340
- 28, 28, 28, 28, 28, 28, 28, 28,
341
- 28, 28, 28, 28, 28, 17, 17, 17,
342
- 17, 28, 17, 28, 28, 28, 28, 28,
343
- 28, 28, 28, 28, 28, 28, 28, 28,
344
- 28, 28, 28, 28, 28, 28, 28, 28,
345
- 28, 28, 28, 28, 28, 17, 29, 29,
346
- 29, 29, 29, 29, 29, 29, 29, 29,
347
- 17, 29, 29, 29, 29, 29, 29, 29,
348
- 29, 29, 29, 17, 17, 17, 17, 20,
349
- 17, 29, 30, 30, 30, 30, 30, 30,
350
- 30, 30, 30, 17, 26, 17, 26, 17,
351
- 17, 30, 30, 30, 30, 30, 30, 30,
352
- 30, 30, 30, 17, 17, 17, 17, 20,
353
- 17, 26, 17, 26, 17, 17, 28, 28,
354
- 28, 28, 28, 28, 28, 28, 28, 28,
355
- 17, 17, 17, 17, 20, 17, 17, 28,
356
- 28, 28, 28, 28, 28, 28, 28, 28,
357
- 28, 28, 28, 28, 28, 28, 28, 28,
358
- 28, 28, 28, 28, 28, 28, 28, 28,
359
- 28, 17, 17, 17, 17, 28, 17, 28,
360
- 28, 28, 28, 28, 28, 28, 28, 28,
361
- 28, 28, 28, 28, 28, 28, 28, 28,
362
- 28, 28, 28, 28, 28, 28, 28, 28,
363
- 28, 17, 32, 31, 31, 31, 33, 33,
364
- 33, 33, 33, 33, 33, 33, 33, 33,
365
- 31, 31, 31, 31, 31, 31, 31, 31,
366
- 31, 31, 31, 31, 31, 31, 31, 31,
367
- 31, 31, 31, 31, 31, 31, 31, 31,
368
- 31, 31, 31, 31, 31, 31, 31, 31,
369
- 31, 31, 31, 31, 31, 31, 31, 31,
370
- 31, 31, 31, 31, 31, 31, 31, 31,
371
- 31, 31, 31, 31, 31, 31, 31, 31,
372
- 31, 31, 31, 31, 31, 31, 31, 31,
373
- 31, 31, 31, 34, 31, 32, 32, 32,
374
- 32, 32, 32, 32, 32, 32, 32, 31,
375
- 31, 31, 31, 31, 31, 31, 31, 31,
376
- 31, 31, 31, 31, 31, 31, 31, 31,
377
- 31, 31, 31, 31, 31, 31, 31, 31,
378
- 31, 31, 31, 31, 31, 31, 31, 31,
379
- 31, 31, 31, 31, 31, 31, 31, 31,
380
- 31, 31, 31, 31, 31, 31, 31, 31,
381
- 31, 31, 31, 31, 31, 31, 31, 31,
382
- 31, 31, 31, 31, 31, 31, 31, 31,
383
- 31, 31, 34, 31, 35, 36, 37, 37,
384
- 37, 37, 37, 36, 36, 36, 36, 36,
385
- 36, 36, 36, 36, 36, 36, 36, 36,
386
- 36, 36, 36, 36, 36, 37, 36, 36,
387
- 36, 36, 36, 36, 36, 36, 36, 36,
388
- 36, 36, 37, 37, 36, 37, 37, 37,
389
- 37, 37, 37, 37, 37, 37, 37, 36,
390
- 36, 36, 37, 36, 36, 36, 37, 37,
391
- 37, 37, 37, 37, 37, 37, 37, 37,
392
- 37, 37, 37, 37, 37, 37, 37, 37,
393
- 37, 37, 37, 37, 37, 37, 37, 37,
394
- 36, 36, 36, 38, 37, 36, 37, 37,
395
- 37, 37, 37, 37, 37, 37, 37, 37,
396
- 37, 37, 37, 37, 37, 37, 37, 37,
397
- 37, 37, 37, 37, 37, 37, 37, 37,
398
- 36, 37, 37, 37, 37, 37, 36, 36,
399
- 36, 36, 36, 36, 36, 36, 36, 36,
400
- 36, 36, 36, 36, 36, 36, 36, 36,
401
- 37, 36, 36, 36, 36, 36, 36, 36,
402
- 36, 36, 36, 36, 36, 37, 37, 36,
403
- 37, 37, 37, 37, 37, 37, 37, 37,
404
- 37, 37, 36, 36, 36, 37, 36, 36,
405
- 36, 37, 37, 37, 37, 37, 37, 37,
406
- 37, 37, 37, 37, 37, 37, 37, 37,
407
- 37, 37, 37, 37, 37, 37, 37, 37,
408
- 37, 37, 37, 36, 36, 36, 36, 37,
409
- 36, 37, 37, 37, 37, 37, 37, 37,
410
- 37, 37, 37, 37, 37, 37, 37, 37,
411
- 37, 37, 37, 37, 37, 37, 37, 37,
412
- 37, 37, 37, 36, 36, 39, 36, 37,
413
- 37, 37, 37, 37, 36, 36, 36, 36,
414
- 36, 36, 36, 36, 36, 36, 36, 36,
415
- 36, 36, 36, 36, 36, 36, 37, 36,
416
- 36, 36, 36, 36, 36, 36, 36, 36,
417
- 36, 36, 36, 37, 37, 36, 37, 37,
418
- 37, 37, 37, 37, 37, 37, 37, 37,
419
- 36, 36, 36, 37, 36, 36, 36, 37,
420
- 37, 37, 37, 37, 37, 37, 37, 37,
421
- 37, 37, 37, 37, 37, 37, 37, 37,
422
- 37, 37, 37, 37, 37, 37, 37, 37,
423
- 37, 36, 36, 36, 36, 37, 36, 37,
424
- 37, 37, 37, 37, 37, 37, 37, 37,
425
- 37, 37, 37, 37, 37, 37, 37, 37,
426
- 37, 37, 37, 37, 37, 37, 37, 37,
427
- 37, 36, 41, 41, 41, 41, 41, 41,
428
- 41, 41, 41, 41, 41, 41, 41, 41,
429
- 41, 41, 41, 41, 41, 41, 41, 41,
430
- 41, 41, 41, 41, 41, 41, 41, 41,
431
- 41, 41, 41, 41, 41, 41, 41, 41,
432
- 41, 41, 41, 41, 41, 41, 41, 41,
433
- 41, 41, 41, 41, 41, 41, 41, 41,
434
- 41, 41, 41, 41, 41, 41, 41, 41,
435
- 41, 41, 40, 42, 42, 42, 42, 42,
436
- 42, 42, 42, 42, 42, 42, 42, 42,
437
- 42, 42, 42, 42, 42, 42, 42, 42,
438
- 42, 42, 42, 42, 42, 42, 42, 42,
439
- 42, 42, 42, 42, 42, 42, 42, 42,
440
- 42, 42, 42, 42, 42, 42, 42, 42,
441
- 42, 42, 42, 42, 42, 42, 42, 42,
442
- 42, 42, 42, 42, 42, 42, 42, 42,
443
- 42, 42, 42, 40, 44, 43, 47, 46,
444
- 46, 46, 46, 46, 46, 46, 46, 46,
445
- 46, 46, 46, 46, 46, 46, 46, 46,
446
- 46, 46, 47, 47, 47, 47, 47, 47,
447
- 47, 47, 47, 47, 47, 47, 47, 47,
448
- 47, 47, 47, 47, 47, 47, 47, 47,
449
- 47, 47, 47, 47, 46, 46, 46, 46,
450
- 46, 46, 47, 47, 47, 47, 47, 47,
451
- 47, 47, 47, 47, 47, 47, 47, 47,
452
- 47, 47, 47, 47, 47, 47, 47, 47,
453
- 47, 47, 47, 47, 46, 47, 48, 46,
454
- 46, 46, 46, 46, 46, 46, 46, 46,
455
- 46, 46, 46, 46, 46, 46, 46, 46,
456
- 46, 47, 47, 47, 47, 47, 47, 47,
457
- 47, 47, 47, 47, 47, 47, 47, 47,
458
- 47, 47, 47, 47, 47, 47, 47, 47,
459
- 47, 47, 47, 46, 46, 46, 46, 46,
460
- 46, 47, 47, 47, 47, 47, 47, 47,
461
- 47, 47, 47, 47, 47, 47, 47, 47,
462
- 47, 47, 47, 47, 47, 47, 47, 47,
463
- 47, 47, 47, 46, 49, 46, 50, 46,
464
- 46, 51, 52, 53, 54, 46, 46, 55,
465
- 46, 46, 46, 46, 56, 46, 46, 46,
466
- 57, 46, 46, 58, 46, 59, 46, 60,
467
- 61, 46, 51, 52, 53, 54, 46, 46,
468
- 55, 46, 46, 46, 46, 56, 46, 46,
469
- 46, 57, 46, 46, 58, 46, 59, 46,
470
- 60, 61, 46, 62, 46, 46, 46, 46,
471
- 46, 46, 63, 46, 64, 46, 65, 46,
472
- 66, 46, 67, 46, 68, 46, 69, 46,
473
- 70, 46, 67, 46, 71, 46, 72, 46,
474
- 67, 46, 73, 46, 74, 46, 75, 46,
475
- 67, 46, 76, 46, 77, 46, 78, 46,
476
- 67, 46, 79, 46, 80, 46, 81, 46,
477
- 67, 46, 82, 46, 83, 46, 84, 46,
478
- 67, 46, 85, 46, 86, 46, 87, 46,
479
- 67, 46, 88, 46, 46, 89, 46, 90,
480
- 46, 81, 46, 91, 46, 81, 46, 92,
481
- 46, 93, 46, 94, 46, 67, 46, 95,
482
- 46, 86, 46, 96, 46, 97, 46, 67,
483
- 46, 54, 46, 98, 98, 98, 98, 98,
484
- 98, 98, 98, 98, 98, 98, 98, 98,
485
- 98, 98, 98, 98, 98, 98, 98, 98,
486
- 98, 98, 98, 98, 98, 46, 46, 46,
487
- 46, 46, 46, 98, 98, 98, 98, 98,
488
- 98, 98, 98, 98, 98, 98, 98, 98,
489
- 98, 98, 98, 98, 98, 98, 98, 98,
490
- 98, 98, 98, 98, 98, 46, 99, 46,
491
- 100, 46, 101, 36, 103, 102, 105, 102,
492
- 106, 36, 108, 107, 110, 107, 111, 111,
493
- 111, 111, 111, 111, 111, 111, 111, 111,
494
- 36, 36, 36, 36, 36, 36, 36, 111,
495
- 111, 111, 111, 111, 111, 36, 36, 36,
496
- 36, 36, 36, 36, 36, 36, 36, 36,
497
- 36, 36, 36, 36, 36, 36, 36, 36,
498
- 36, 36, 36, 36, 36, 36, 36, 111,
499
- 111, 111, 111, 111, 111, 36, 36, 36,
500
- 36, 36, 36, 36, 36, 36, 36, 36,
501
- 36, 36, 36, 36, 36, 36, 36, 36,
502
- 36, 112, 36, 113, 113, 113, 113, 113,
503
- 113, 113, 113, 113, 113, 36, 36, 36,
504
- 36, 36, 36, 36, 113, 113, 113, 113,
505
- 113, 113, 36, 36, 36, 36, 36, 36,
506
- 36, 36, 36, 36, 36, 36, 36, 36,
507
- 36, 36, 36, 36, 36, 36, 36, 36,
508
- 36, 36, 36, 36, 113, 113, 113, 113,
509
- 113, 113, 36, 114, 114, 114, 114, 114,
510
- 114, 114, 114, 114, 114, 36, 36, 36,
511
- 36, 36, 36, 36, 114, 114, 114, 114,
512
- 114, 114, 36, 36, 36, 36, 36, 36,
513
- 36, 36, 36, 36, 36, 36, 36, 36,
514
- 36, 36, 36, 36, 36, 36, 36, 36,
515
- 36, 36, 36, 36, 114, 114, 114, 114,
516
- 114, 114, 36, 115, 115, 115, 115, 115,
517
- 115, 115, 115, 115, 115, 36, 36, 36,
518
- 36, 36, 36, 36, 115, 115, 115, 115,
519
- 115, 115, 36, 36, 36, 36, 36, 36,
520
- 36, 36, 36, 36, 36, 36, 36, 36,
521
- 36, 36, 36, 36, 36, 36, 36, 36,
522
- 36, 36, 36, 36, 115, 115, 115, 115,
523
- 115, 115, 36, 116, 116, 116, 116, 116,
524
- 116, 116, 116, 116, 116, 36, 36, 36,
525
- 36, 36, 36, 36, 116, 116, 116, 116,
526
- 116, 116, 36, 36, 36, 36, 36, 36,
527
- 36, 36, 36, 36, 36, 36, 36, 36,
528
- 36, 36, 36, 36, 36, 36, 36, 36,
529
- 36, 36, 36, 36, 116, 116, 116, 116,
530
- 116, 116, 36, 112, 112, 112, 112, 112,
531
- 36, 36, 36, 36, 36, 36, 36, 36,
532
- 36, 36, 36, 36, 36, 36, 36, 36,
533
- 36, 36, 112, 36, 36, 36, 36, 36,
534
- 36, 36, 36, 36, 36, 36, 36, 36,
535
- 36, 36, 117, 117, 117, 117, 117, 117,
536
- 117, 117, 117, 117, 36, 36, 36, 36,
537
- 36, 36, 36, 117, 117, 117, 117, 117,
538
- 117, 36, 36, 36, 36, 36, 36, 36,
539
- 36, 36, 36, 36, 36, 36, 36, 36,
540
- 36, 36, 36, 36, 36, 36, 36, 36,
541
- 36, 36, 36, 117, 117, 117, 117, 117,
542
- 117, 36, 36, 36, 36, 36, 36, 36,
543
- 36, 36, 36, 36, 36, 36, 36, 36,
544
- 36, 36, 36, 36, 36, 36, 36, 115,
545
- 36, 112, 112, 112, 112, 112, 36, 36,
546
- 36, 36, 36, 36, 36, 36, 36, 36,
547
- 36, 36, 36, 36, 36, 36, 36, 36,
548
- 112, 36, 36, 36, 36, 36, 36, 36,
549
- 36, 36, 36, 36, 36, 36, 36, 36,
550
- 118, 118, 118, 118, 118, 118, 118, 118,
551
- 118, 118, 36, 36, 36, 36, 36, 36,
552
- 36, 118, 118, 118, 118, 118, 118, 36,
553
- 36, 36, 36, 36, 36, 36, 36, 36,
554
- 36, 36, 36, 36, 36, 36, 36, 36,
555
- 36, 36, 36, 36, 36, 36, 36, 36,
556
- 36, 118, 118, 118, 118, 118, 118, 36,
557
- 36, 36, 36, 36, 36, 36, 36, 36,
558
- 36, 36, 36, 36, 36, 36, 36, 36,
559
- 36, 36, 36, 36, 36, 115, 36, 112,
560
- 112, 112, 112, 112, 36, 36, 36, 36,
561
- 36, 36, 36, 36, 36, 36, 36, 36,
562
- 36, 36, 36, 36, 36, 36, 112, 36,
563
- 36, 36, 36, 36, 36, 36, 36, 36,
564
- 36, 36, 36, 36, 36, 36, 119, 119,
565
- 119, 119, 119, 119, 119, 119, 119, 119,
566
- 36, 36, 36, 36, 36, 36, 36, 119,
567
- 119, 119, 119, 119, 119, 36, 36, 36,
568
- 36, 36, 36, 36, 36, 36, 36, 36,
569
- 36, 36, 36, 36, 36, 36, 36, 36,
570
- 36, 36, 36, 36, 36, 36, 36, 119,
571
- 119, 119, 119, 119, 119, 36, 36, 36,
572
- 36, 36, 36, 36, 36, 36, 36, 36,
573
- 36, 36, 36, 36, 36, 36, 36, 36,
574
- 36, 36, 36, 115, 36, 112, 112, 112,
575
- 112, 112, 36, 36, 36, 36, 36, 36,
576
- 36, 36, 36, 36, 36, 36, 36, 36,
577
- 36, 36, 36, 36, 112, 36, 36, 36,
578
- 36, 36, 36, 36, 36, 36, 36, 36,
579
- 36, 36, 36, 36, 120, 120, 120, 120,
580
- 120, 120, 120, 120, 120, 120, 36, 36,
581
- 36, 36, 36, 36, 36, 120, 120, 120,
582
- 120, 120, 120, 36, 36, 36, 36, 36,
583
- 36, 36, 36, 36, 36, 36, 36, 36,
584
- 36, 36, 36, 36, 36, 36, 36, 36,
585
- 36, 36, 36, 36, 36, 120, 120, 120,
586
- 120, 120, 120, 36, 36, 36, 36, 36,
587
- 36, 36, 36, 36, 36, 36, 36, 36,
588
- 36, 36, 36, 36, 36, 36, 36, 36,
589
- 36, 115, 36, 112, 112, 112, 112, 112,
590
- 36, 36, 36, 36, 36, 36, 36, 36,
591
- 36, 36, 36, 36, 36, 36, 36, 36,
592
- 36, 36, 112, 36, 36, 36, 36, 36,
593
- 36, 36, 36, 36, 36, 36, 36, 36,
594
- 36, 36, 121, 121, 121, 121, 121, 121,
595
- 121, 121, 121, 121, 36, 36, 36, 36,
596
- 36, 36, 36, 121, 121, 121, 121, 121,
597
- 121, 36, 36, 36, 36, 36, 36, 36,
598
- 36, 36, 36, 36, 36, 36, 36, 36,
599
- 36, 36, 36, 36, 36, 36, 36, 36,
600
- 36, 36, 36, 121, 121, 121, 121, 121,
601
- 121, 36, 36, 36, 36, 36, 36, 36,
602
- 36, 36, 36, 36, 36, 36, 36, 36,
603
- 36, 36, 36, 36, 36, 36, 36, 115,
604
- 36, 112, 112, 112, 112, 112, 36, 36,
605
- 36, 36, 36, 36, 36, 36, 36, 36,
606
- 36, 36, 36, 36, 36, 36, 36, 36,
607
- 112, 36, 36, 36, 36, 36, 36, 36,
608
- 36, 36, 36, 36, 36, 36, 36, 36,
609
- 36, 36, 36, 36, 36, 36, 36, 36,
610
- 36, 36, 36, 36, 36, 36, 36, 36,
611
- 36, 36, 36, 36, 36, 36, 36, 36,
612
- 36, 36, 36, 36, 36, 36, 36, 36,
613
- 36, 36, 36, 36, 36, 36, 36, 36,
614
- 36, 36, 36, 36, 36, 36, 36, 36,
615
- 36, 36, 36, 36, 36, 36, 36, 36,
616
- 36, 36, 36, 36, 36, 36, 36, 36,
617
- 36, 36, 36, 36, 36, 36, 36, 36,
618
- 36, 36, 36, 36, 36, 115, 36, 123,
619
- 123, 123, 123, 123, 123, 123, 123, 123,
620
- 123, 122, 122, 122, 122, 122, 122, 122,
621
- 123, 123, 123, 123, 123, 123, 122, 122,
622
- 122, 122, 122, 122, 122, 122, 122, 122,
623
- 122, 122, 122, 122, 122, 122, 122, 122,
624
- 122, 122, 122, 122, 122, 122, 122, 122,
625
- 123, 123, 123, 123, 123, 123, 122, 122,
626
- 122, 122, 122, 122, 122, 122, 122, 122,
627
- 122, 122, 122, 122, 122, 122, 122, 122,
628
- 122, 122, 36, 122, 125, 124, 126, 124,
629
- 124, 124, 124, 124, 124, 124, 124, 127,
630
- 127, 127, 127, 127, 127, 127, 127, 127,
631
- 127, 124, 124, 124, 124, 124, 124, 124,
632
- 127, 127, 127, 127, 127, 127, 127, 127,
633
- 127, 127, 127, 127, 127, 127, 127, 127,
634
- 127, 127, 127, 127, 127, 127, 127, 127,
635
- 127, 127, 124, 124, 124, 124, 127, 124,
636
- 127, 127, 127, 127, 127, 127, 127, 127,
637
- 127, 127, 127, 127, 127, 127, 127, 127,
638
- 127, 127, 127, 127, 127, 127, 127, 127,
639
- 127, 127, 124, 125, 124, 124, 124, 124,
640
- 124, 124, 128, 128, 128, 128, 128, 128,
641
- 128, 128, 128, 128, 124, 129, 129, 129,
642
- 129, 129, 129, 129, 129, 129, 129, 124,
643
- 124, 124, 124, 126, 124, 124, 129, 129,
644
- 129, 129, 129, 129, 129, 129, 129, 129,
645
- 129, 129, 129, 129, 129, 129, 129, 129,
646
- 129, 129, 129, 129, 129, 129, 129, 129,
647
- 124, 124, 124, 124, 129, 124, 129, 129,
648
- 129, 129, 129, 129, 129, 129, 129, 129,
649
- 129, 129, 129, 129, 129, 129, 129, 129,
650
- 129, 129, 129, 129, 129, 129, 129, 129,
651
- 124, 130, 130, 130, 130, 130, 130, 130,
652
- 130, 130, 130, 130, 130, 130, 130, 130,
653
- 130, 130, 130, 130, 130, 130, 130, 130,
654
- 130, 130, 130, 130, 130, 130, 130, 131,
655
- 131, 131, 131, 131, 131, 131, 131, 131,
656
- 131, 131, 131, 131, 131, 131, 131, 132,
657
- 132, 132, 132, 132, 31, 31, 31, 31,
658
- 31, 31, 31, 31, 31, 31, 31, 31,
659
- 133, 133, 133, 133, 133, 133, 133, 133,
660
- 134, 134, 134, 134, 134, 133, 133, 133,
661
- 133, 133, 133, 133, 133, 133, 133, 133,
662
- 133, 133, 133, 133, 133, 133, 133, 135,
663
- 136, 136, 137, 138, 136, 136, 136, 139,
664
- 140, 141, 142, 136, 136, 143, 136, 136,
665
- 136, 136, 136, 136, 136, 136, 136, 136,
666
- 136, 136, 136, 136, 136, 136, 144, 136,
667
- 136, 136, 136, 136, 136, 136, 136, 136,
668
- 136, 136, 136, 136, 136, 136, 136, 136,
669
- 136, 136, 136, 136, 136, 136, 136, 136,
670
- 136, 136, 145, 146, 31, 147, 136, 136,
671
- 136, 136, 136, 136, 136, 136, 136, 136,
672
- 136, 136, 136, 136, 136, 136, 136, 136,
673
- 136, 136, 136, 136, 136, 136, 136, 136,
674
- 136, 136, 33, 148, 31, 136, 133, 31,
675
- 130, 130, 130, 130, 130, 130, 130, 130,
676
- 130, 130, 130, 130, 130, 130, 130, 130,
677
- 130, 130, 130, 130, 130, 130, 130, 130,
678
- 130, 130, 130, 130, 130, 130, 149, 131,
679
- 131, 131, 131, 131, 131, 131, 131, 131,
680
- 131, 131, 131, 131, 131, 131, 131, 149,
681
- 132, 132, 132, 132, 132, 149, 133, 133,
682
- 133, 133, 133, 133, 133, 133, 133, 133,
683
- 133, 133, 133, 133, 133, 133, 133, 133,
684
- 133, 133, 133, 133, 133, 133, 133, 133,
685
- 133, 133, 133, 133, 133, 149, 149, 149,
686
- 149, 149, 149, 149, 149, 149, 149, 149,
687
- 149, 149, 149, 149, 149, 149, 149, 149,
688
- 149, 149, 149, 149, 149, 149, 149, 149,
689
- 149, 149, 149, 149, 149, 149, 149, 149,
690
- 149, 149, 149, 149, 149, 149, 149, 149,
691
- 149, 149, 149, 149, 149, 149, 149, 149,
692
- 149, 149, 149, 149, 149, 149, 149, 149,
693
- 149, 149, 149, 149, 149, 149, 149, 149,
694
- 149, 149, 149, 149, 149, 149, 149, 149,
695
- 149, 149, 149, 149, 149, 149, 149, 149,
696
- 149, 149, 149, 149, 149, 149, 149, 149,
697
- 149, 149, 149, 149, 133, 149, 133, 133,
698
- 133, 133, 133, 133, 133, 133, 134, 134,
699
- 134, 134, 134, 133, 133, 133, 133, 133,
700
- 133, 133, 133, 133, 133, 133, 133, 133,
701
- 133, 133, 133, 133, 133, 135, 150, 150,
702
- 150, 150, 150, 150, 150, 150, 150, 150,
703
- 150, 150, 150, 150, 150, 150, 150, 150,
704
- 150, 150, 150, 150, 150, 150, 150, 150,
705
- 150, 150, 150, 150, 150, 150, 150, 150,
706
- 150, 150, 150, 150, 150, 150, 150, 150,
707
- 150, 150, 150, 150, 150, 150, 150, 150,
708
- 150, 150, 150, 150, 150, 150, 150, 150,
709
- 150, 150, 150, 150, 150, 150, 150, 150,
710
- 150, 150, 150, 150, 150, 150, 150, 150,
711
- 150, 150, 150, 150, 150, 150, 150, 150,
712
- 150, 150, 150, 150, 150, 150, 150, 150,
713
- 150, 150, 150, 150, 133, 150, 135, 135,
714
- 135, 135, 135, 150, 150, 150, 150, 150,
715
- 150, 150, 150, 150, 150, 150, 150, 150,
716
- 150, 150, 150, 150, 150, 135, 150, 136,
717
- 136, 136, 149, 136, 136, 136, 149, 149,
718
- 149, 149, 136, 136, 149, 136, 136, 136,
719
- 136, 136, 136, 136, 136, 136, 136, 136,
720
- 136, 136, 136, 136, 136, 149, 136, 136,
721
- 136, 136, 136, 136, 136, 136, 136, 136,
722
- 136, 136, 136, 136, 136, 136, 136, 136,
723
- 136, 136, 136, 136, 136, 136, 136, 136,
724
- 136, 149, 149, 149, 149, 136, 136, 136,
725
- 136, 136, 136, 136, 136, 136, 136, 136,
726
- 136, 136, 136, 136, 136, 136, 136, 136,
727
- 136, 136, 136, 136, 136, 136, 136, 136,
728
- 136, 149, 149, 149, 136, 149, 9, 8,
729
- 8, 8, 8, 8, 8, 8, 8, 8,
730
- 8, 8, 8, 8, 8, 8, 8, 8,
731
- 8, 8, 8, 8, 8, 137, 137, 137,
732
- 8, 137, 137, 137, 8, 8, 8, 8,
733
- 137, 137, 8, 137, 137, 137, 137, 137,
734
- 137, 137, 137, 137, 137, 137, 137, 137,
735
- 137, 137, 137, 8, 137, 137, 137, 137,
736
- 137, 137, 137, 137, 137, 137, 137, 137,
737
- 137, 137, 137, 137, 137, 137, 137, 137,
738
- 137, 137, 137, 137, 137, 137, 137, 8,
739
- 8, 8, 8, 137, 137, 137, 137, 137,
740
- 137, 137, 137, 137, 137, 137, 137, 137,
741
- 137, 137, 137, 137, 137, 137, 137, 137,
742
- 137, 137, 137, 137, 137, 137, 137, 8,
743
- 8, 8, 137, 8, 152, 151, 15, 154,
744
- 11, 154, 154, 154, 14, 155, 153, 154,
745
- 154, 154, 154, 154, 154, 154, 154, 154,
746
- 154, 154, 154, 154, 154, 154, 154, 13,
747
- 154, 156, 15, 13, 154, 154, 154, 154,
748
- 154, 154, 154, 154, 154, 154, 154, 154,
749
- 154, 154, 154, 154, 154, 154, 154, 154,
750
- 154, 154, 154, 154, 154, 154, 154, 154,
751
- 154, 154, 154, 154, 154, 154, 154, 154,
752
- 154, 154, 154, 154, 154, 154, 154, 154,
753
- 154, 154, 154, 154, 154, 154, 154, 154,
754
- 154, 154, 154, 154, 154, 154, 154, 154,
755
- 154, 154, 154, 13, 154, 153, 154, 153,
756
- 154, 154, 154, 153, 153, 153, 154, 154,
757
- 154, 154, 154, 154, 154, 154, 154, 154,
758
- 154, 154, 154, 154, 154, 154, 157, 154,
759
- 153, 153, 153, 154, 154, 154, 154, 154,
760
- 154, 154, 154, 154, 154, 154, 154, 154,
761
- 154, 154, 154, 154, 154, 154, 154, 154,
762
- 154, 154, 154, 154, 154, 154, 154, 154,
763
- 154, 154, 154, 154, 154, 154, 154, 154,
764
- 154, 154, 154, 154, 154, 154, 154, 154,
765
- 154, 154, 154, 154, 154, 154, 154, 154,
766
- 154, 154, 154, 154, 154, 154, 154, 154,
767
- 154, 154, 153, 154, 159, 158, 158, 158,
768
- 158, 158, 158, 158, 158, 158, 158, 158,
769
- 158, 158, 158, 158, 158, 158, 158, 158,
770
- 159, 158, 161, 160, 160, 160, 160, 160,
771
- 160, 160, 160, 160, 160, 160, 160, 160,
772
- 160, 160, 160, 160, 160, 160, 161, 160,
773
- 163, 162, 162, 162, 162, 162, 162, 162,
774
- 162, 162, 162, 162, 162, 162, 162, 162,
775
- 162, 162, 162, 162, 163, 162, 165, 165,
776
- 164, 164, 164, 164, 165, 164, 164, 164,
777
- 166, 164, 164, 164, 164, 164, 164, 164,
778
- 164, 164, 164, 164, 164, 164, 164, 165,
779
- 164, 164, 164, 164, 164, 164, 164, 165,
780
- 164, 164, 164, 164, 167, 164, 164, 164,
781
- 167, 164, 164, 164, 164, 164, 164, 164,
782
- 164, 164, 164, 164, 164, 164, 164, 165,
783
- 164, 169, 168, 168, 168, 168, 168, 168,
784
- 168, 168, 168, 168, 168, 168, 168, 168,
785
- 168, 168, 168, 168, 168, 169, 168, 170,
786
- 36, 36, 36, 170, 36, 36, 36, 36,
787
- 36, 36, 36, 36, 36, 170, 170, 36,
788
- 36, 36, 170, 170, 36, 36, 36, 36,
789
- 36, 36, 36, 36, 36, 36, 36, 170,
790
- 36, 36, 36, 170, 36, 36, 36, 36,
791
- 36, 36, 36, 36, 36, 36, 170, 36,
792
- 36, 36, 170, 36, 171, 36, 36, 36,
793
- 36, 36, 36, 36, 36, 36, 36, 36,
794
- 36, 36, 36, 36, 36, 36, 36, 36,
795
- 36, 36, 36, 36, 36, 36, 36, 36,
796
- 36, 36, 36, 36, 171, 36, 172, 172,
797
- 172, 172, 172, 172, 172, 172, 172, 172,
798
- 172, 172, 172, 172, 172, 172, 172, 172,
799
- 172, 172, 172, 172, 172, 172, 172, 172,
800
- 172, 172, 172, 172, 173, 173, 173, 173,
801
- 173, 173, 173, 173, 173, 173, 173, 173,
802
- 173, 173, 173, 173, 174, 174, 174, 174,
803
- 174, 41, 41, 41, 41, 41, 41, 41,
804
- 41, 41, 41, 41, 41, 41, 41, 41,
805
- 41, 41, 41, 41, 41, 41, 41, 41,
806
- 41, 41, 41, 41, 41, 41, 41, 41,
807
- 41, 41, 41, 41, 41, 41, 41, 41,
808
- 41, 41, 41, 41, 41, 41, 41, 41,
809
- 175, 41, 176, 41, 175, 175, 175, 175,
810
- 41, 177, 175, 41, 41, 41, 41, 41,
811
- 41, 41, 41, 41, 41, 41, 41, 41,
812
- 41, 41, 41, 175, 41, 41, 41, 41,
813
- 41, 41, 41, 41, 41, 41, 41, 41,
814
- 41, 41, 41, 41, 41, 41, 41, 41,
815
- 41, 41, 41, 41, 41, 41, 41, 178,
816
- 179, 180, 181, 41, 41, 41, 41, 41,
817
- 41, 41, 41, 41, 41, 41, 41, 41,
818
- 41, 41, 41, 41, 41, 41, 41, 41,
819
- 41, 41, 41, 41, 41, 41, 41, 175,
820
- 175, 175, 41, 41, 41, 41, 41, 41,
821
- 41, 41, 41, 41, 41, 41, 41, 41,
822
- 41, 41, 41, 41, 41, 41, 41, 41,
823
- 41, 41, 41, 41, 41, 41, 41, 41,
824
- 41, 41, 41, 41, 41, 41, 41, 41,
825
- 41, 41, 41, 41, 41, 41, 41, 41,
826
- 41, 41, 41, 41, 41, 41, 41, 41,
827
- 41, 41, 41, 41, 41, 41, 41, 41,
828
- 41, 41, 41, 182, 42, 42, 42, 42,
829
- 42, 42, 42, 42, 42, 42, 42, 42,
830
- 42, 42, 42, 42, 42, 42, 42, 42,
831
- 42, 42, 42, 42, 42, 42, 42, 42,
832
- 42, 42, 42, 42, 42, 42, 42, 42,
833
- 42, 42, 42, 42, 42, 42, 42, 42,
834
- 42, 42, 42, 42, 42, 42, 42, 42,
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
- 110, 111, 3, 112, 5, 6, 113, 110,
925
- 7, 110, 110, 8, 110, 110, 9, 110,
926
- 11, 110, 13, 19, 110, 14, 16, 18,
927
- 15, 17, 20, 22, 24, 21, 23, 0,
928
- 26, 25, 126, 28, 0, 29, 30, 128,
929
- 129, 129, 31, 129, 129, 129, 129, 35,
930
- 36, 129, 38, 39, 50, 54, 58, 62,
931
- 66, 70, 75, 79, 81, 84, 40, 47,
932
- 41, 45, 42, 43, 44, 129, 46, 48,
933
- 49, 51, 52, 53, 55, 56, 57, 59,
934
- 60, 61, 63, 64, 65, 67, 68, 69,
935
- 71, 73, 72, 74, 76, 77, 78, 80,
936
- 82, 83, 86, 87, 129, 89, 137, 140,
937
- 137, 142, 92, 137, 143, 137, 145, 95,
938
- 98, 96, 97, 137, 99, 100, 101, 102,
939
- 103, 104, 137, 147, 148, 148, 106, 107,
940
- 108, 109, 1, 2, 4, 114, 115, 116,
941
- 117, 118, 110, 119, 110, 122, 123, 110,
942
- 124, 110, 125, 110, 110, 110, 110, 110,
943
- 120, 110, 121, 110, 10, 110, 110, 110,
944
- 110, 110, 110, 110, 110, 110, 110, 12,
945
- 110, 110, 127, 27, 130, 131, 132, 129,
946
- 133, 134, 135, 129, 129, 129, 129, 32,
947
- 129, 129, 33, 129, 129, 129, 34, 37,
948
- 85, 136, 136, 137, 137, 138, 138, 137,
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
- 1, 2, 0, 2, 0, 0, 2, 3,
961
- 0, 4, 5, 6, 7, 8, 0, 9,
962
- 0, 10, 0, 0, 11, 0, 0, 0,
963
- 0, 0, 0, 0, 0, 0, 0, 12,
964
- 0, 0, 0, 0, 0, 0, 0, 14,
965
- 15, 16, 0, 17, 18, 19, 20, 0,
966
- 0, 21, 0, 0, 0, 0, 0, 0,
967
- 0, 0, 0, 0, 0, 0, 0, 0,
968
- 0, 0, 0, 0, 0, 22, 0, 0,
969
- 0, 0, 0, 0, 0, 0, 0, 0,
970
- 0, 0, 0, 0, 0, 0, 0, 0,
971
- 0, 0, 0, 0, 0, 0, 0, 0,
972
- 0, 0, 0, 0, 23, 0, 24, 0,
973
- 25, 0, 0, 26, 0, 27, 0, 0,
974
- 0, 0, 0, 28, 0, 0, 0, 0,
975
- 0, 0, 29, 0, 30, 31, 0, 0,
976
- 0, 0, 0, 0, 0, 0, 0, 0,
977
- 0, 34, 35, 36, 37, 0, 0, 38,
978
- 0, 39, 34, 40, 41, 42, 43, 44,
979
- 45, 46, 0, 47, 0, 48, 49, 50,
980
- 51, 52, 53, 54, 55, 56, 57, 0,
981
- 58, 59, 61, 0, 0, 34, 34, 62,
982
- 0, 34, 63, 64, 65, 66, 67, 0,
983
- 68, 69, 0, 70, 71, 72, 0, 0,
984
- 0, 73, 74, 75, 76, 77, 78, 79,
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
- 0, 0, 0, 0, 0, 0, 0, 0,
997
- 0, 0, 0, 0, 0, 0, 0, 0,
998
- 0, 0, 0, 0, 0, 0, 0, 0,
999
- 0, 0, 0, 0, 0, 0, 0, 0,
1000
- 0, 0, 0, 0, 0, 0, 0, 0,
1001
- 0, 0, 0, 0, 0, 0, 0, 0,
1002
- 0, 0, 0, 0, 0, 0, 0, 0,
1003
- 0, 0, 0, 0, 0, 0, 0, 0,
1004
- 0, 0, 0, 0, 0, 0, 0, 0,
1005
- 0, 0, 0, 0, 0, 0, 0, 0,
1006
- 0, 0, 0, 0, 0, 0, 0, 0,
1007
- 0, 0, 0, 0, 0, 0, 0, 0,
1008
- 0, 0, 0, 0, 0, 0, 0, 0,
1009
- 0, 0, 0, 0, 0, 0, 32, 0,
1010
- 0, 0, 0, 0, 0, 0, 0, 0,
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
- 0, 0, 0, 0, 0, 0, 0, 0,
1024
- 0, 0, 0, 0, 0, 0, 0, 0,
1025
- 0, 0, 0, 0, 0, 0, 0, 0,
1026
- 0, 0, 0, 0, 0, 0, 0, 0,
1027
- 0, 0, 0, 0, 0, 0, 0, 0,
1028
- 0, 0, 0, 0, 0, 0, 0, 0,
1029
- 0, 0, 0, 0, 0, 0, 0, 0,
1030
- 0, 0, 0, 0, 0, 0, 0, 0,
1031
- 0, 0, 0, 0, 0, 0, 0, 0,
1032
- 0, 0, 0, 0, 0, 0, 0, 0,
1033
- 0, 0, 0, 0, 0, 0, 0, 0,
1034
- 0, 0, 0, 0, 0, 0, 0, 0,
1035
- 0, 0, 0, 0, 0, 0, 0, 0,
1036
- 0, 0, 0, 0, 0, 0, 33, 0,
1037
- 0, 0, 0, 0, 0, 0, 0, 0,
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
- 0, 0, 0, 0, 0, 0, 0, 0,
1051
- 0, 0, 0, 0, 0, 0, 0, 0,
1052
- 0, 0, 0, 0, 0, 0, 0, 0,
1053
- 0, 12, 12, 13, 13, 13, 13, 0,
1054
- 0, 0, 0, 0, 0, 0, 0, 0,
1055
- 0, 0, 0, 0, 0, 0, 0, 0,
1056
- 0, 0, 0, 0, 0, 0, 0, 0,
1057
- 0, 0, 0, 0, 0, 0, 0, 0,
1058
- 0, 0, 0, 0, 0, 0, 0, 0,
1059
- 0, 0, 0, 0, 0, 0, 0, 0,
1060
- 0, 0, 0, 0, 0, 0, 0, 0,
1061
- 12, 12, 0, 12, 12, 0, 12, 12,
1062
- 12, 12, 12, 12, 12, 12, 12, 12,
1063
- 12, 12, 0, 0, 0, 0, 0, 0,
1064
- 0, 0, 0, 0, 0, 0, 0, 0,
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
- 0, 1, 1, 1, 1, 1, 1, 8,
1078
- 11, 11, 11, 11, 18, 18, 18, 18,
1079
- 18, 18, 18, 18, 18, 18, 18, 18,
1080
- 18, 0, 0, 0, 0, 0, 0, 41,
1081
- 41, 44, 46, 46, 46, 46, 46, 46,
1082
- 46, 46, 46, 46, 46, 46, 46, 46,
1083
- 46, 46, 46, 46, 46, 46, 46, 46,
1084
- 46, 46, 46, 46, 46, 46, 46, 46,
1085
- 46, 46, 46, 46, 46, 46, 46, 46,
1086
- 46, 46, 46, 46, 46, 46, 46, 46,
1087
- 46, 46, 46, 46, 46, 46, 46, 46,
1088
- 0, 0, 105, 0, 0, 110, 0, 0,
1089
- 0, 0, 0, 0, 0, 0, 0, 0,
1090
- 0, 0, 125, 125, 125, 125, 0, 150,
1091
- 150, 150, 150, 151, 151, 150, 150, 152,
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 = 110;
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 = 110;
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 = 127;
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 = 128;
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 = 129;
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 = 136;
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 = 137;
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 = 148;
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 = 110;
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 33 then
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 6 then
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 61 then
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 = text(data, ts, te, 1).first
1230
- when '\d'; emit(:type, :digit, text, ts - 1, te)
1231
- when '\D'; emit(:type, :nondigit, text, ts - 1, te)
1232
- when '\h'; emit(:type, :hex, text, ts - 1, te)
1233
- when '\H'; emit(:type, :nonhex, text, ts - 1, te)
1234
- when '\s'; emit(:type, :space, text, ts - 1, te)
1235
- when '\S'; emit(:type, :nonspace, text, ts - 1, te)
1236
- when '\w'; emit(:type, :word, text, ts - 1, te)
1237
- when '\W'; emit(:type, :nonword, text, ts - 1, te)
1238
- when '\R'; emit(:type, :linebreak, text, ts - 1, te)
1239
- when '\X'; emit(:type, :xgrapheme, text, ts - 1, te)
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 = text(data, ts, te, 1).first
1042
+ begin
1043
+ text = copy(data, ts-1,te)
1256
1044
  type = (text[1] == 'P') ^ (text[3] == '^') ? :nonproperty : :property
1257
1045
 
1258
- name = data[ts+2..te-2].pack('c*').gsub(/[\^\s_\-]/, '').downcase
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 UnknownUnicodePropertyError.new(name) unless token
1049
+ raise ValidationError.for(:property, name) unless token
1262
1050
 
1263
- self.emit(type, token.to_sym, text, ts-1, te)
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, '-', ts, te)
1280
- emit(:set, :intersection, '&&', ts, te)
1066
+ emit(:literal, :literal, '-')
1067
+ emit(:set, :intersection, '&&')
1281
1068
  end
1282
1069
  end
1283
- when 66 then
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
- text = text(data, ts, te).first
1289
- if tokens.last[1] == :open
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, text, ts, te)
1077
+ emit(:literal, :literal, '^')
1293
1078
  end
1294
1079
  end
1295
1080
  end
1296
- when 68 then
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, *text(data, ts, te))
1084
+ begin
1085
+ emit(:set, :intersection, '&&')
1302
1086
  end
1303
1087
  end
1304
- when 64 then
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 = 136
1095
+ cs = 96
1313
1096
  _goto_level = _again
1314
1097
  next
1315
1098
  end
1316
1099
 
1317
1100
  end
1318
1101
  end
1319
- when 62 then
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, *text(data, ts, te))
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
- char, *rest = *text(data, ts, te)
1333
- char.force_encoding('utf-8') if char.respond_to?(:force_encoding)
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 69 then
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
- text = text(data, ts, te).first
1343
- # ranges cant start with a subset or intersection/negation/range operator
1344
- if tokens.last[0] == :set
1345
- emit(:literal, :literal, text, ts, te)
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, text, ts, te)
1126
+ emit(:set, :range, '-')
1348
1127
  end
1349
1128
  end
1350
1129
  end
1351
- when 72 then
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, *text(data, ts, te))
1133
+ p = p - 1; begin
1134
+ emit(:set, :open, '[')
1357
1135
  begin
1358
1136
  stack[top] = cs
1359
1137
  top+= 1
1360
- cs = 129
1138
+ cs = 89
1361
1139
  _goto_level = _again
1362
1140
  next
1363
1141
  end
1364
1142
 
1365
1143
  end
1366
1144
  end
1367
- when 67 then
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
- char, *rest = *text(data, ts, te)
1373
- char.force_encoding('utf-8') if char.respond_to?(:force_encoding)
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
- text = text(data, ts, te).first
1383
- # ranges cant start with a subset or intersection/negation/range operator
1384
- if tokens.last[0] == :set
1385
- emit(:literal, :literal, text, ts, te)
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, text, ts, te)
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, *text(data, ts, te))
1169
+ begin
1170
+ emit(:set, :open, '[')
1397
1171
  begin
1398
1172
  stack[top] = cs
1399
1173
  top+= 1
1400
- cs = 129
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
- char, *rest = *text(data, ts, te)
1413
- char.force_encoding('utf-8') if char.respond_to?(:force_encoding)
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 74 then
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, :literal, *text(data, ts, te, 1))
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 73 then
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 = 129;
1208
+ cs = 89;
1439
1209
  begin
1440
1210
  stack[top] = cs
1441
1211
  top+= 1
1442
- cs = 137
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
- # line 265 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
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
- text = text(data, ts, te, 1).first
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 85 then
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
- emit(:escape, :octal, *text(data, ts, te, 1))
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 76 then
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 = text(data, ts, te, 1).first
1486
- when '\.'; emit(:escape, :dot, text, ts-1, te)
1487
- when '\|'; emit(:escape, :alternation, text, ts-1, te)
1488
- when '\^'; emit(:escape, :bol, text, ts-1, te)
1489
- when '\$'; emit(:escape, :eol, text, ts-1, te)
1490
- when '\?'; emit(:escape, :zero_or_one, text, ts-1, te)
1491
- when '\*'; emit(:escape, :zero_or_more, text, ts-1, te)
1492
- when '\+'; emit(:escape, :one_or_more, text, ts-1, te)
1493
- when '\('; emit(:escape, :group_open, text, ts-1, te)
1494
- when '\)'; emit(:escape, :group_close, text, ts-1, te)
1495
- when '\{'; emit(:escape, :interval_open, text, ts-1, te)
1496
- when '\}'; emit(:escape, :interval_close, text, ts-1, te)
1497
- when '\['; emit(:escape, :set_open, text, ts-1, te)
1498
- when '\]'; emit(:escape, :set_close, text, ts-1, te)
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, ts-1, te)
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 82 then
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 = text(data, ts, te, 1).first
1519
- when '\a'; emit(:escape, :bell, text, ts-1, te)
1520
- when '\b'; emit(:escape, :backspace, text, ts-1, te)
1521
- when '\e'; emit(:escape, :escape, text, ts-1, te)
1522
- when '\f'; emit(:escape, :form_feed, text, ts-1, te)
1523
- when '\n'; emit(:escape, :newline, text, ts-1, te)
1524
- when '\r'; emit(:escape, :carriage, text, ts-1, te)
1525
- when '\t'; emit(:escape, :tab, text, ts-1, te)
1526
- when '\v'; emit(:escape, :vertical_tab, text, ts-1, te)
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 28 then
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 = text(data, ts, te, 1).first
1543
- if text[2].chr == '{'
1544
- emit(:escape, :codepoint_list, text, ts-1, te)
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, ts-1, te)
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 92 then
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, *text(data, ts, te, 1))
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 24 then
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 26 then
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 80 then
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? ? 129 : 110));
1398
+ cs = ((in_set? ? 89 : 71));
1609
1399
  begin
1610
1400
  stack[top] = cs
1611
1401
  top+= 1
1612
- cs = 127
1402
+ cs = 87
1613
1403
  _goto_level = _again
1614
1404
  next
1615
1405
  end
1616
1406
 
1617
1407
  end
1618
1408
  end
1619
- when 81 then
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? ? 129 : 110));
1414
+ cs = ((in_set? ? 89 : 71));
1626
1415
  begin
1627
1416
  stack[top] = cs
1628
1417
  top+= 1
1629
- cs = 128
1418
+ cs = 88
1630
1419
  _goto_level = _again
1631
1420
  next
1632
1421
  end
1633
1422
 
1634
1423
  end
1635
1424
  end
1636
- when 75 then
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, *text(data, ts, te, 1))
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 84 then
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
- emit(:escape, :octal, *text(data, ts, te, 1))
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 91 then
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, :hex, *text(data, ts, te, 1))
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 87 then
1682
- # line 332 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
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 89 then
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 83 then
1712
- # line 1 "NONE"
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 18 then
1541
+ when 17 then
1716
1542
  begin begin p = ((te))-1; end
1717
1543
 
1718
- text = text(data, ts, te, 1).first
1719
- emit(:backref, :number, text, ts-1, te)
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 19 then
1554
+ when 18 then
1729
1555
  begin begin p = ((te))-1; end
1730
1556
 
1731
- emit(:escape, :octal, *text(data, ts, te, 1))
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 31 then
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 = text(data, ts, te-1).first
1748
- emit(:conditional, :condition, text, ts, te-1)
1749
- emit(:conditional, :condition_close, ')', te-1, te)
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 93 then
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 = 110
1586
+ cs = 71
1762
1587
  _goto_level = _again
1763
1588
  next
1764
1589
  end
1765
1590
 
1766
1591
  end
1767
1592
  end
1768
- when 94 then
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 = 110
1601
+ cs = 71
1778
1602
  _goto_level = _again
1779
1603
  next
1780
1604
  end
1781
1605
 
1782
1606
  end
1783
1607
  end
1784
- when 30 then
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 = 110
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, *text(data, ts, te))
1626
+ begin
1627
+ emit(:meta, :dot, copy(data, ts, te))
1806
1628
  end
1807
1629
  end
1808
- when 41 then
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, *text(data, ts, te))
1635
+ emit(:conditional, :separator, copy(data, ts, te))
1815
1636
  else
1816
- emit(:meta, :alternation, *text(data, ts, te))
1637
+ emit(:meta, :alternation, copy(data, ts, te))
1817
1638
  end
1818
1639
  end
1819
1640
  end
1820
- when 40 then
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, *text(data, ts, te))
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, *text(data, ts, te))
1651
+ begin
1652
+ emit(:anchor, :eol, copy(data, ts, te))
1834
1653
  end
1835
1654
  end
1836
- when 57 then
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, *text(data, ts, te))
1658
+ begin
1659
+ emit(:keep, :mark, copy(data, ts, te))
1842
1660
  end
1843
1661
  end
1844
- when 56 then
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 = text(data, ts, te).first
1850
- when '\\A'; emit(:anchor, :bos, text, ts, te)
1851
- when '\\z'; emit(:anchor, :eos, text, ts, te)
1852
- when '\\Z'; emit(:anchor, :eos_ob_eol, text, ts, te)
1853
- when '\\b'; emit(:anchor, :word_boundary, text, ts, te)
1854
- when '\\B'; emit(:anchor, :nonword_boundary, text, ts, te)
1855
- when '\\G'; emit(:anchor, :match_start, text, ts, te)
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 47 then
1860
- # line 431 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
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 = text(data, ts, te).first
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], ts, te-1)
1869
- emit(:conditional, :condition_open, '(', te-1, te)
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 = 148
1696
+ cs = 114
1874
1697
  _goto_level = _again
1875
1698
  next
1876
1699
  end
1877
1700
 
1878
1701
  end
1879
1702
  end
1880
- when 48 then
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 = text(data, ts, te).first
1706
+ begin
1707
+ text = copy(data, ts, te)
1886
1708
  if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/
1887
- raise InvalidGroupOption.new($1 || "-#{$2}", text)
1709
+ raise ValidationError.for(:group_option, $1 || "-#{$2}", text)
1888
1710
  end
1889
- emit_options(text, ts, te)
1711
+ emit_options(text)
1890
1712
  end
1891
1713
  end
1892
- when 9 then
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 = text(data, ts, te).first
1898
- when '(?='; emit(:assertion, :lookahead, text, ts, te)
1899
- when '(?!'; emit(:assertion, :nlookahead, text, ts, te)
1900
- when '(?<='; emit(:assertion, :lookbehind, text, ts, te)
1901
- when '(?<!'; emit(:assertion, :nlookbehind, text, ts, te)
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 8 then
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 = text(data, ts, te).first
1911
- when '(?:'; emit(:group, :passive, text, ts, te)
1912
- when '(?>'; emit(:group, :atomic, text, ts, te)
1913
- when '(?~'; emit(:group, :absence, text, ts, te)
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
- validation_error(:group, 'named group', 'name is empty')
1736
+ raise ValidationError.for(:group, 'named group', 'name is empty')
1917
1737
 
1918
- when /^\(\?<\w*>/
1919
- emit(:group, :named_ab, text, ts, te)
1738
+ when /^\(\?<[^>]+>/
1739
+ emit(:group, :named_ab, text)
1920
1740
 
1921
- when /^\(\?'\w*'/
1922
- emit(:group, :named_sq, text, ts, te)
1741
+ when /^\(\?'[^']+'/
1742
+ emit(:group, :named_sq, text)
1923
1743
 
1924
1744
  end
1925
1745
  end
1926
1746
  end
1927
- when 11 then
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 = text(data, ts, te).first
1933
- when /^\\([gk])(<>|'')/ # angle brackets
1934
- validation_error(:backref, 'ref/call', 'ref ID is empty')
1935
-
1936
- when /^\\([gk])<[^\d+-]\w*>/ # angle-brackets
1937
- if $1 == 'k'
1938
- emit(:backref, :name_ref_ab, text, ts, te)
1939
- else
1940
- emit(:backref, :name_call_ab, text, ts, te)
1941
- end
1942
-
1943
- when /^\\([gk])'[^\d+-]\w*'/ #single quotes
1944
- if $1 == 'k'
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 54 then
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 = text(data, ts, te).first
1999
- when '?' ; emit(:quantifier, :zero_or_one, text, ts, te)
2000
- when '??'; emit(:quantifier, :zero_or_one_reluctant, text, ts, te)
2001
- when '?+'; emit(:quantifier, :zero_or_one_possessive, text, ts, te)
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 50 then
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 = text(data, ts, te).first
2011
- when '*' ; emit(:quantifier, :zero_or_more, text, ts, te)
2012
- when '*?'; emit(:quantifier, :zero_or_more_reluctant, text, ts, te)
2013
- when '*+'; emit(:quantifier, :zero_or_more_possessive, text, ts, te)
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 52 then
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 = text(data, ts, te).first
2023
- when '+' ; emit(:quantifier, :one_or_more, text, ts, te)
2024
- when '+?'; emit(:quantifier, :one_or_more_reluctant, text, ts, te)
2025
- when '++'; emit(:quantifier, :one_or_more_possessive, text, ts, te)
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 59 then
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
- emit(:quantifier, :interval, *text(data, ts, te))
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 4 then
2038
- # line 633 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
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, *text(data, ts, te))
1828
+ emit(:free_space, :comment, copy(data, ts, te))
2044
1829
  else
2045
- append_literal(data, ts, te)
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 46 then
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 = text(data, ts, te).first
1840
+ p = p - 1; begin
1841
+ text = copy(data, ts, te)
2055
1842
  if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/
2056
- raise InvalidGroupOption.new($1 || "-#{$2}", text)
1843
+ raise ValidationError.for(:group_option, $1 || "-#{$2}", text)
2057
1844
  end
2058
- emit_options(text, ts, te)
1845
+ emit_options(text)
2059
1846
  end
2060
1847
  end
2061
- when 44 then
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 = text(data, ts, te).first
2067
- emit(:group, :capture, text, ts, te)
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 53 then
2071
- # line 599 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
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 = text(data, ts, te).first
2076
- when '?' ; emit(:quantifier, :zero_or_one, text, ts, te)
2077
- when '??'; emit(:quantifier, :zero_or_one_reluctant, text, ts, te)
2078
- when '?+'; emit(:quantifier, :zero_or_one_possessive, text, ts, te)
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 49 then
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 = text(data, ts, te).first
2088
- when '*' ; emit(:quantifier, :zero_or_more, text, ts, te)
2089
- when '*?'; emit(:quantifier, :zero_or_more_reluctant, text, ts, te)
2090
- when '*+'; emit(:quantifier, :zero_or_more_possessive, text, ts, te)
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 51 then
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 = text(data, ts, te).first
2100
- when '+' ; emit(:quantifier, :one_or_more, text, ts, te)
2101
- when '+?'; emit(:quantifier, :one_or_more_reluctant, text, ts, te)
2102
- when '++'; emit(:quantifier, :one_or_more_possessive, text, ts, te)
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 58 then
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
- emit(:quantifier, :interval, *text(data, ts, te))
1904
+ p = p - 1; begin
1905
+ append_literal(data, ts, te)
2112
1906
  end
2113
1907
  end
2114
- when 55 then
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 = 137
1915
+ cs = 99
2123
1916
  _goto_level = _again
2124
1917
  next
2125
1918
  end
2126
1919
 
2127
1920
  end
2128
1921
  end
2129
- when 43 then
2130
- # line 641 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
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, *text(data, ts, te))
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 42 then
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 5 then
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 = text(data, ts, te).first
1957
+ begin
1958
+ text = copy(data, ts, te)
2155
1959
  if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/
2156
- raise InvalidGroupOption.new($1 || "-#{$2}", text)
1960
+ raise ValidationError.for(:group_option, $1 || "-#{$2}", text)
2157
1961
  end
2158
- emit_options(text, ts, te)
1962
+ emit_options(text)
2159
1963
  end
2160
1964
  end
2161
- when 10 then
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 = 137
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 54 then
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 71 then
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 = ts ? copy(data, ts-1..-1) : data.pack('c*')
2207
- raise PrematureEndError.new( text )
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, *text(data, ts, te))
2030
+ p = p - 1; begin
2031
+ emit(:set, :open, '[')
2214
2032
  begin
2215
2033
  stack[top] = cs
2216
2034
  top+= 1
2217
- cs = 129
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 = ts ? copy(data, ts-1..-1) : data.pack('c*')
2229
- raise PrematureEndError.new( text )
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, *text(data, ts, te))
2050
+ begin
2051
+ emit(:set, :open, '[')
2236
2052
  begin
2237
2053
  stack[top] = cs
2238
2054
  top+= 1
2239
- cs = 129
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 86 then
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 = ts ? copy(data, ts-1..-1) : data.pack('c*')
2272
- raise PrematureEndError.new( text )
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 88 then
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 = ts ? copy(data, ts-1..-1) : data.pack('c*')
2293
- raise PrematureEndError.new( text )
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 25 then
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 = ts ? copy(data, ts-1..-1) : data.pack('c*')
2314
- raise PrematureEndError.new( text )
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 27 then
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 = ts ? copy(data, ts-1..-1) : data.pack('c*')
2335
- raise PrematureEndError.new( text )
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 29 then
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 = ts ? copy(data, ts-1..-1) : data.pack('c*')
2356
- validation_error(:sequence, 'sequence', text)
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 7 then
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, *text(data, ts, te))
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, *text(data, ts, te))
2393
- else
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, *text(data, ts, te))
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, *text(data, ts, te))
2192
+ begin
2193
+ emit(:set, :open, copy(data, ts, te))
2413
2194
  begin
2414
2195
  stack[top] = cs
2415
2196
  top+= 1
2416
- cs = 129
2197
+ cs = 89
2417
2198
  _goto_level = _again
2418
2199
  next
2419
2200
  end
2420
2201
 
2421
2202
  end
2422
2203
  end
2423
- when 65 then
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, *text(data, ts, te))
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 = 110
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 70 then
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, copy(data, ts..te-2), ts, te - 1)
2459
- emit(:set, :close, copy(data, ts+1..te-1), ts + 1, te)
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 = 110
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 22 then
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 = text(data, ts, te).first
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].chr == '^'
2265
+ if class_name[0] == '^'
2491
2266
  class_name = class_name[1..-1]
2492
2267
  type = :nonposixclass
2493
2268
  end
2494
2269
 
2495
- emit(type, class_name.to_sym, text, ts, te)
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 21 then
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
- te = p+1
2516
- begin
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
- self.set_depth = set_depth + 1 end
2528
- when 78 then
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 77 then
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 = 19; end
2544
- when 2 then
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 = 54; end
2552
- when 45 then
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
- self.group_depth = group_depth - 1 end
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 60 then
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 32 then
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 12 then
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 = ts ? copy(data, ts-1..-1) : data.pack('c*')
2613
- raise PrematureEndError.new( text )
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 = ts ? copy(data, ts-1..-1) : data.pack('c*')
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 literal
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 ||= YAML.load_file("#{PROP_MAPS_DIR}/short.yml")
2389
+ @short_prop_map ||= parse_prop_map('short')
2653
2390
  end
2654
2391
 
2655
2392
  def self.long_prop_map
2656
- @long_prop_map ||= YAML.load_file("#{PROP_MAPS_DIR}/long.yml")
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, ts, te)
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 literal
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, ts, te
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 :tokens, :literal, :block, :free_spacing, :spacing_stack,
2675
- :group_depth, :set_depth, :conditional_stack
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, range)
2687
- data[range].pack('c*')
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. Contents can be a mix of ASCII and UTF-8.
2467
+ # by a call to emit_literal.
2698
2468
  def append_literal(data, ts, te)
2699
- self.literal = literal || []
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
- ts, te = literal.first[1], literal.last[2]
2707
- text = literal.map {|t| t[0]}.join
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, ts, te)
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, $2, $3
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, ts, te)
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
- validation_error(:sequence, 'escape', token.to_s)
2510
+ raise ValidationError.for(:sequence, 'escape', token.to_s)
2747
2511
  end
2748
- emit(:escape, token, *text(data, ts, te, 1))
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