regexp_parser 1.7.0 → 2.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +364 -22
  3. data/Gemfile +8 -2
  4. data/LICENSE +1 -1
  5. data/README.md +124 -88
  6. data/Rakefile +6 -70
  7. data/lib/regexp_parser/error.rb +4 -0
  8. data/lib/regexp_parser/expression/base.rb +76 -0
  9. data/lib/regexp_parser/expression/classes/alternation.rb +1 -1
  10. data/lib/regexp_parser/expression/classes/anchor.rb +0 -2
  11. data/lib/regexp_parser/expression/classes/{backref.rb → backreference.rb} +22 -2
  12. data/lib/regexp_parser/expression/classes/{set → character_set}/range.rb +4 -8
  13. data/lib/regexp_parser/expression/classes/{set.rb → character_set.rb} +3 -4
  14. data/lib/regexp_parser/expression/classes/{type.rb → character_type.rb} +0 -2
  15. data/lib/regexp_parser/expression/classes/conditional.rb +11 -5
  16. data/lib/regexp_parser/expression/classes/{escape.rb → escape_sequence.rb} +15 -7
  17. data/lib/regexp_parser/expression/classes/free_space.rb +5 -5
  18. data/lib/regexp_parser/expression/classes/group.rb +28 -15
  19. data/lib/regexp_parser/expression/classes/keep.rb +2 -0
  20. data/lib/regexp_parser/expression/classes/literal.rb +1 -5
  21. data/lib/regexp_parser/expression/classes/posix_class.rb +5 -1
  22. data/lib/regexp_parser/expression/classes/root.rb +4 -19
  23. data/lib/regexp_parser/expression/classes/{property.rb → unicode_property.rb} +5 -3
  24. data/lib/regexp_parser/expression/methods/construct.rb +41 -0
  25. data/lib/regexp_parser/expression/methods/human_name.rb +43 -0
  26. data/lib/regexp_parser/expression/methods/match_length.rb +11 -7
  27. data/lib/regexp_parser/expression/methods/parts.rb +23 -0
  28. data/lib/regexp_parser/expression/methods/printing.rb +26 -0
  29. data/lib/regexp_parser/expression/methods/strfregexp.rb +1 -1
  30. data/lib/regexp_parser/expression/methods/tests.rb +47 -1
  31. data/lib/regexp_parser/expression/methods/traverse.rb +34 -18
  32. data/lib/regexp_parser/expression/quantifier.rb +57 -17
  33. data/lib/regexp_parser/expression/sequence.rb +11 -47
  34. data/lib/regexp_parser/expression/sequence_operation.rb +4 -9
  35. data/lib/regexp_parser/expression/shared.rb +111 -0
  36. data/lib/regexp_parser/expression/subexpression.rb +27 -19
  37. data/lib/regexp_parser/expression.rb +14 -141
  38. data/lib/regexp_parser/lexer.rb +83 -41
  39. data/lib/regexp_parser/parser.rb +371 -429
  40. data/lib/regexp_parser/scanner/char_type.rl +11 -11
  41. data/lib/regexp_parser/scanner/errors/premature_end_error.rb +8 -0
  42. data/lib/regexp_parser/scanner/errors/scanner_error.rb +6 -0
  43. data/lib/regexp_parser/scanner/errors/validation_error.rb +63 -0
  44. data/lib/regexp_parser/scanner/properties/long.csv +633 -0
  45. data/lib/regexp_parser/scanner/properties/short.csv +248 -0
  46. data/lib/regexp_parser/scanner/property.rl +4 -4
  47. data/lib/regexp_parser/scanner/scanner.rl +295 -368
  48. data/lib/regexp_parser/scanner.rb +1405 -1674
  49. data/lib/regexp_parser/syntax/any.rb +2 -7
  50. data/lib/regexp_parser/syntax/base.rb +92 -67
  51. data/lib/regexp_parser/syntax/token/anchor.rb +15 -0
  52. data/lib/regexp_parser/syntax/{tokens → token}/assertion.rb +2 -2
  53. data/lib/regexp_parser/syntax/token/backreference.rb +33 -0
  54. data/lib/regexp_parser/syntax/token/character_set.rb +16 -0
  55. data/lib/regexp_parser/syntax/{tokens → token}/character_type.rb +3 -3
  56. data/lib/regexp_parser/syntax/{tokens → token}/conditional.rb +3 -3
  57. data/lib/regexp_parser/syntax/token/escape.rb +33 -0
  58. data/lib/regexp_parser/syntax/{tokens → token}/group.rb +7 -7
  59. data/lib/regexp_parser/syntax/{tokens → token}/keep.rb +1 -1
  60. data/lib/regexp_parser/syntax/token/meta.rb +20 -0
  61. data/lib/regexp_parser/syntax/{tokens → token}/posix_class.rb +3 -3
  62. data/lib/regexp_parser/syntax/token/quantifier.rb +35 -0
  63. data/lib/regexp_parser/syntax/token/unicode_property.rb +733 -0
  64. data/lib/regexp_parser/syntax/token/virtual.rb +11 -0
  65. data/lib/regexp_parser/syntax/token.rb +45 -0
  66. data/lib/regexp_parser/syntax/version_lookup.rb +19 -36
  67. data/lib/regexp_parser/syntax/versions/1.8.6.rb +13 -20
  68. data/lib/regexp_parser/syntax/versions/1.9.1.rb +10 -17
  69. data/lib/regexp_parser/syntax/versions/1.9.3.rb +3 -10
  70. data/lib/regexp_parser/syntax/versions/2.0.0.rb +8 -15
  71. data/lib/regexp_parser/syntax/versions/2.2.0.rb +3 -9
  72. data/lib/regexp_parser/syntax/versions/2.3.0.rb +3 -9
  73. data/lib/regexp_parser/syntax/versions/2.4.0.rb +3 -9
  74. data/lib/regexp_parser/syntax/versions/2.4.1.rb +2 -8
  75. data/lib/regexp_parser/syntax/versions/2.5.0.rb +3 -9
  76. data/lib/regexp_parser/syntax/versions/2.6.0.rb +3 -9
  77. data/lib/regexp_parser/syntax/versions/2.6.2.rb +3 -9
  78. data/lib/regexp_parser/syntax/versions/2.6.3.rb +3 -9
  79. data/lib/regexp_parser/syntax/versions/3.1.0.rb +4 -0
  80. data/lib/regexp_parser/syntax/versions/3.2.0.rb +4 -0
  81. data/lib/regexp_parser/syntax/versions.rb +3 -1
  82. data/lib/regexp_parser/syntax.rb +8 -6
  83. data/lib/regexp_parser/token.rb +9 -20
  84. data/lib/regexp_parser/version.rb +1 -1
  85. data/lib/regexp_parser.rb +0 -2
  86. data/regexp_parser.gemspec +20 -22
  87. metadata +49 -166
  88. data/lib/regexp_parser/scanner/properties/long.yml +0 -594
  89. data/lib/regexp_parser/scanner/properties/short.yml +0 -237
  90. data/lib/regexp_parser/syntax/tokens/anchor.rb +0 -15
  91. data/lib/regexp_parser/syntax/tokens/backref.rb +0 -24
  92. data/lib/regexp_parser/syntax/tokens/character_set.rb +0 -13
  93. data/lib/regexp_parser/syntax/tokens/escape.rb +0 -30
  94. data/lib/regexp_parser/syntax/tokens/meta.rb +0 -13
  95. data/lib/regexp_parser/syntax/tokens/quantifier.rb +0 -35
  96. data/lib/regexp_parser/syntax/tokens/unicode_property.rb +0 -675
  97. data/lib/regexp_parser/syntax/tokens.rb +0 -45
  98. data/spec/expression/base_spec.rb +0 -94
  99. data/spec/expression/clone_spec.rb +0 -120
  100. data/spec/expression/conditional_spec.rb +0 -89
  101. data/spec/expression/free_space_spec.rb +0 -27
  102. data/spec/expression/methods/match_length_spec.rb +0 -161
  103. data/spec/expression/methods/match_spec.rb +0 -25
  104. data/spec/expression/methods/strfregexp_spec.rb +0 -224
  105. data/spec/expression/methods/tests_spec.rb +0 -99
  106. data/spec/expression/methods/traverse_spec.rb +0 -161
  107. data/spec/expression/options_spec.rb +0 -128
  108. data/spec/expression/root_spec.rb +0 -9
  109. data/spec/expression/sequence_spec.rb +0 -9
  110. data/spec/expression/subexpression_spec.rb +0 -50
  111. data/spec/expression/to_h_spec.rb +0 -26
  112. data/spec/expression/to_s_spec.rb +0 -100
  113. data/spec/lexer/all_spec.rb +0 -22
  114. data/spec/lexer/conditionals_spec.rb +0 -53
  115. data/spec/lexer/escapes_spec.rb +0 -14
  116. data/spec/lexer/keep_spec.rb +0 -10
  117. data/spec/lexer/literals_spec.rb +0 -89
  118. data/spec/lexer/nesting_spec.rb +0 -99
  119. data/spec/lexer/refcalls_spec.rb +0 -55
  120. data/spec/parser/all_spec.rb +0 -43
  121. data/spec/parser/alternation_spec.rb +0 -88
  122. data/spec/parser/anchors_spec.rb +0 -17
  123. data/spec/parser/conditionals_spec.rb +0 -179
  124. data/spec/parser/errors_spec.rb +0 -30
  125. data/spec/parser/escapes_spec.rb +0 -121
  126. data/spec/parser/free_space_spec.rb +0 -130
  127. data/spec/parser/groups_spec.rb +0 -108
  128. data/spec/parser/keep_spec.rb +0 -6
  129. data/spec/parser/posix_classes_spec.rb +0 -8
  130. data/spec/parser/properties_spec.rb +0 -115
  131. data/spec/parser/quantifiers_spec.rb +0 -51
  132. data/spec/parser/refcalls_spec.rb +0 -112
  133. data/spec/parser/set/intersections_spec.rb +0 -127
  134. data/spec/parser/set/ranges_spec.rb +0 -111
  135. data/spec/parser/sets_spec.rb +0 -178
  136. data/spec/parser/types_spec.rb +0 -18
  137. data/spec/scanner/all_spec.rb +0 -18
  138. data/spec/scanner/anchors_spec.rb +0 -21
  139. data/spec/scanner/conditionals_spec.rb +0 -128
  140. data/spec/scanner/errors_spec.rb +0 -68
  141. data/spec/scanner/escapes_spec.rb +0 -53
  142. data/spec/scanner/free_space_spec.rb +0 -133
  143. data/spec/scanner/groups_spec.rb +0 -52
  144. data/spec/scanner/keep_spec.rb +0 -10
  145. data/spec/scanner/literals_spec.rb +0 -49
  146. data/spec/scanner/meta_spec.rb +0 -18
  147. data/spec/scanner/properties_spec.rb +0 -64
  148. data/spec/scanner/quantifiers_spec.rb +0 -20
  149. data/spec/scanner/refcalls_spec.rb +0 -36
  150. data/spec/scanner/sets_spec.rb +0 -102
  151. data/spec/scanner/types_spec.rb +0 -14
  152. data/spec/spec_helper.rb +0 -15
  153. data/spec/support/runner.rb +0 -42
  154. data/spec/support/shared_examples.rb +0 -77
  155. data/spec/support/warning_extractor.rb +0 -60
  156. data/spec/syntax/syntax_spec.rb +0 -48
  157. data/spec/syntax/syntax_token_map_spec.rb +0 -23
  158. data/spec/syntax/versions/1.8.6_spec.rb +0 -17
  159. data/spec/syntax/versions/1.9.1_spec.rb +0 -10
  160. data/spec/syntax/versions/1.9.3_spec.rb +0 -9
  161. data/spec/syntax/versions/2.0.0_spec.rb +0 -13
  162. data/spec/syntax/versions/2.2.0_spec.rb +0 -9
  163. data/spec/syntax/versions/aliases_spec.rb +0 -37
  164. data/spec/token/token_spec.rb +0 -85
  165. /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,77,77,45,45,
89
+ 0,0,67,99,45,
90
+ 45,0,0,92,92,
91
+ 48,102,39,60,39,57,
92
+ 48,57,41,57,33,
93
+ 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,1,1,0,33,1,0,1,
115
+ 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,4680,4682,4683,4717,4719,4720,
137
+ 4722,4778,4801,4821,4832,4850
216
138
  ]
217
139
 
218
140
  class << self
@@ -220,700 +142,617 @@ 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,62,
730
+ 184,183,62,186,67,67,67,67,
731
+ 67,67,67,67,67,67,67,67,
732
+ 67,67,67,67,67,67,67,67,
733
+ 67,67,67,67,67,67,67,67,
734
+ 67,67,67,187,67,189,188,67,
735
+ 70,67,191,191,191,191,191,191,
736
+ 191,191,191,191,190,190,190,190,
737
+ 190,190,190,191,191,191,191,191,
738
+ 191,190,190,190,190,190,190,190,
739
+ 190,190,190,190,190,190,190,190,
740
+ 190,190,190,190,190,190,190,190,
741
+ 190,190,190,191,191,191,191,191,
742
+ 191,190,193,192,192,192,192,192,
743
+ 194,192,192,195,195,195,195,195,
744
+ 195,195,195,195,195,192,192,196,
745
+ 192,86,85,85,85,85,85,197,
746
+ 85,85,197,197,197,197,197,197,
747
+ 197,197,197,197,85,88,88,88,
748
+ 88,88,88,88,88,88,88,197,
749
+ 87,197,197,197,197,197,197,88,
750
+ 88,88,88,88,88,88,88,88,
751
+ 88,197,197,89,89,89,89,89,
752
+ 89,89,89,89,89,89,197,89,
753
+ 89,197,197,197,197,197,197,197,
754
+ 197,197,197,89,89,89,89,86,
755
+ 89,0
917
756
  ]
918
757
 
919
758
  class << self
@@ -921,35 +760,31 @@ class << self
921
760
  private :_re_scanner_trans_targs, :_re_scanner_trans_targs=
922
761
  end
923
762
  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
763
+ 71,72,1,2,71,4,71,6,
764
+ 71,8,71,81,71,10,16,11,
765
+ 71,12,13,14,15,17,18,19,
766
+ 20,21,23,29,24,71,25,26,
767
+ 27,28,30,31,32,33,34,71,
768
+ 36,71,37,39,0,40,41,88,
769
+ 89,89,42,89,89,89,45,46,
770
+ 89,89,99,99,47,50,99,105,
771
+ 99,107,53,99,108,99,110,56,
772
+ 59,57,58,99,60,61,62,63,
773
+ 64,65,99,112,113,67,68,113,
774
+ 69,70,3,73,74,75,76,77,
775
+ 71,78,71,82,83,71,84,71,
776
+ 85,71,71,86,71,71,71,71,
777
+ 71,71,79,71,80,5,71,7,
778
+ 71,71,71,71,71,71,71,71,
779
+ 71,71,71,9,22,71,35,87,
780
+ 38,90,91,92,89,93,94,95,
781
+ 89,89,89,89,43,89,89,44,
782
+ 89,89,89,96,97,96,96,98,
783
+ 96,100,101,102,99,103,103,99,
784
+ 49,99,52,99,99,55,66,99,
785
+ 48,99,104,99,99,99,106,99,
786
+ 51,99,109,111,99,54,99,99,
787
+ 113,114,115,116,117,113
953
788
  ]
954
789
 
955
790
  class << self
@@ -957,35 +792,31 @@ class << self
957
792
  private :_re_scanner_trans_actions, :_re_scanner_trans_actions=
958
793
  end
959
794
  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
795
+ 1,2,0,0,3,0,4,0,
796
+ 5,0,6,7,8,0,0,0,
797
+ 9,0,0,0,0,0,0,0,
798
+ 0,0,0,0,0,10,0,0,
799
+ 0,0,0,0,0,0,0,11,
800
+ 0,12,0,0,0,0,0,14,
801
+ 15,16,0,17,18,19,0,0,
802
+ 20,21,22,23,0,0,25,0,
803
+ 26,0,0,27,0,28,0,0,
804
+ 0,0,0,29,0,0,0,0,
805
+ 0,0,30,0,31,0,0,32,
806
+ 0,0,0,0,0,0,0,0,
807
+ 35,36,37,0,0,38,0,39,
808
+ 40,41,42,40,43,44,45,46,
809
+ 47,48,49,50,0,0,51,0,
810
+ 52,53,54,55,56,57,58,59,
811
+ 60,61,62,0,0,63,0,65,
812
+ 0,0,40,40,66,0,40,67,
813
+ 68,69,70,71,0,72,73,0,
814
+ 74,75,76,77,0,78,79,0,
815
+ 80,0,40,40,81,82,83,84,
816
+ 0,85,0,86,87,0,0,88,
817
+ 0,89,0,90,91,92,40,93,
818
+ 0,94,40,0,95,0,96,97,
819
+ 98,40,40,40,40,99
989
820
  ]
990
821
 
991
822
  class << self
@@ -993,26 +824,21 @@ class << self
993
824
  private :_re_scanner_to_state_actions, :_re_scanner_to_state_actions=
994
825
  end
995
826
  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
827
+ 0,0,0,0,0,0,0,0,
828
+ 0,0,0,0,0,0,0,0,
829
+ 0,0,0,0,0,0,0,0,
830
+ 0,0,0,0,0,0,0,0,
831
+ 0,0,0,0,0,0,0,0,
832
+ 0,0,0,0,0,0,0,0,
833
+ 0,0,0,0,0,0,0,0,
834
+ 0,0,0,0,0,0,0,0,
835
+ 0,0,0,0,0,0,0,33,
836
+ 0,0,0,0,0,0,0,0,
837
+ 0,0,0,0,0,0,0,64,
838
+ 64,64,0,0,0,0,0,0,
839
+ 64,0,0,64,0,0,0,0,
840
+ 0,0,0,0,0,0,0,0,
841
+ 0,64,0,0,0,0
1016
842
  ]
1017
843
 
1018
844
  class << self
@@ -1020,26 +846,21 @@ class << self
1020
846
  private :_re_scanner_from_state_actions, :_re_scanner_from_state_actions=
1021
847
  end
1022
848
  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
849
+ 0,0,0,0,0,0,0,0,
850
+ 0,0,0,0,0,0,0,0,
851
+ 0,0,0,0,0,0,0,0,
852
+ 0,0,0,0,0,0,0,0,
853
+ 0,0,0,0,0,0,0,0,
854
+ 0,0,0,0,0,0,0,0,
855
+ 0,0,0,0,0,0,0,0,
856
+ 0,0,0,0,0,0,0,0,
857
+ 0,0,0,0,0,0,0,34,
858
+ 0,0,0,0,0,0,0,0,
859
+ 0,0,0,0,0,0,0,34,
860
+ 34,34,0,0,0,0,0,0,
861
+ 34,0,0,34,0,0,0,0,
862
+ 0,0,0,0,0,0,0,0,
863
+ 0,34,0,0,0,0
1043
864
  ]
1044
865
 
1045
866
  class << self
@@ -1047,26 +868,21 @@ class << self
1047
868
  private :_re_scanner_eof_actions, :_re_scanner_eof_actions=
1048
869
  end
1049
870
  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
871
+ 0,0,0,0,0,0,0,0,
872
+ 0,0,0,0,0,0,0,0,
873
+ 0,0,0,0,0,0,0,0,
874
+ 0,0,0,0,0,0,0,0,
875
+ 0,0,0,0,0,0,13,13,
876
+ 13,13,0,0,0,0,0,0,
877
+ 0,24,24,0,24,24,0,24,
878
+ 24,24,24,24,24,24,24,24,
879
+ 24,24,24,0,0,0,0,0,
880
+ 0,0,0,0,0,0,0,0,
881
+ 0,0,0,0,0,0,0,0,
882
+ 0,24,0,0,0,0,0,0,
883
+ 0,0,0,24,0,0,0,0,
884
+ 0,0,0,0,0,0,0,0,
885
+ 0,0,0,0,0,0
1070
886
  ]
1071
887
 
1072
888
  class << self
@@ -1074,36 +890,31 @@ class << self
1074
890
  private :_re_scanner_eof_trans, :_re_scanner_eof_trans=
1075
891
  end
1076
892
  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
893
+ 0,1,1,1,5,5,5,5,
894
+ 1,13,13,13,13,13,13,13,
895
+ 13,13,13,13,13,13,13,13,
896
+ 13,13,13,13,13,13,13,13,
897
+ 13,13,13,40,40,40,0,0,
898
+ 0,0,49,49,52,54,54,59,
899
+ 59,0,0,65,0,0,70,0,
900
+ 0,0,0,0,0,0,0,0,
901
+ 0,0,0,85,85,85,85,0,
902
+ 110,110,111,111,110,112,114,116,
903
+ 116,122,123,125,127,129,134,0,
904
+ 0,0,148,148,148,148,151,154,
905
+ 0,159,159,0,176,176,176,178,
906
+ 180,182,182,182,186,186,186,186,
907
+ 191,0,198,198,198,198
1097
908
  ]
1098
909
 
1099
910
  class << self
1100
911
  attr_accessor :re_scanner_start
1101
912
  end
1102
- self.re_scanner_start = 110;
913
+ self.re_scanner_start = 71;
1103
914
  class << self
1104
915
  attr_accessor :re_scanner_first_final
1105
916
  end
1106
- self.re_scanner_first_final = 110;
917
+ self.re_scanner_first_final = 71;
1107
918
  class << self
1108
919
  attr_accessor :re_scanner_error
1109
920
  end
@@ -1112,36 +923,32 @@ self.re_scanner_error = 0;
1112
923
  class << self
1113
924
  attr_accessor :re_scanner_en_char_type
1114
925
  end
1115
- self.re_scanner_en_char_type = 127;
926
+ self.re_scanner_en_char_type = 87;
1116
927
  class << self
1117
928
  attr_accessor :re_scanner_en_unicode_property
1118
929
  end
1119
- self.re_scanner_en_unicode_property = 128;
930
+ self.re_scanner_en_unicode_property = 88;
1120
931
  class << self
1121
932
  attr_accessor :re_scanner_en_character_set
1122
933
  end
1123
- self.re_scanner_en_character_set = 129;
934
+ self.re_scanner_en_character_set = 89;
1124
935
  class << self
1125
936
  attr_accessor :re_scanner_en_set_escape_sequence
1126
937
  end
1127
- self.re_scanner_en_set_escape_sequence = 136;
938
+ self.re_scanner_en_set_escape_sequence = 96;
1128
939
  class << self
1129
940
  attr_accessor :re_scanner_en_escape_sequence
1130
941
  end
1131
- self.re_scanner_en_escape_sequence = 137;
942
+ self.re_scanner_en_escape_sequence = 99;
1132
943
  class << self
1133
944
  attr_accessor :re_scanner_en_conditional_expression
1134
945
  end
1135
- self.re_scanner_en_conditional_expression = 148;
946
+ self.re_scanner_en_conditional_expression = 113;
1136
947
  class << self
1137
948
  attr_accessor :re_scanner_en_main
1138
949
  end
1139
- self.re_scanner_en_main = 110;
950
+ self.re_scanner_en_main = 71;
1140
951
 
1141
-
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
952
  begin
1146
953
  p ||= 0
1147
954
  pe ||= data.length
@@ -1152,9 +959,6 @@ begin
1152
959
  act = 0
1153
960
  end
1154
961
 
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
962
  begin
1159
963
  testEof = false
1160
964
  _slen, _trans, _keys, _inds, _acts, _nacts = nil
@@ -1176,24 +980,22 @@ begin
1176
980
  end
1177
981
  end
1178
982
  if _goto_level <= _resume
1179
- case _re_scanner_from_state_actions[cs]
1180
- when 33 then
1181
- # line 1 "NONE"
983
+ case _re_scanner_from_state_actions[cs]
984
+ when 34 then
1182
985
  begin
1183
986
  ts = p
1184
987
  end
1185
- # line 1185 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner.rb"
1186
988
  end
1187
989
  _keys = cs << 1
1188
990
  _inds = _re_scanner_index_offsets[cs]
1189
991
  _slen = _re_scanner_key_spans[cs]
1190
992
  _wide = data[p].ord
1191
- _trans = if ( _slen > 0 &&
1192
- _re_scanner_trans_keys[_keys] <= _wide &&
1193
- _wide <= _re_scanner_trans_keys[_keys + 1]
993
+ _trans = if ( _slen > 0 &&
994
+ _re_scanner_trans_keys[_keys] <= _wide &&
995
+ _wide <= _re_scanner_trans_keys[_keys + 1]
1194
996
  ) then
1195
- _re_scanner_indicies[ _inds + _wide - _re_scanner_trans_keys[_keys] ]
1196
- else
997
+ _re_scanner_indicies[ _inds + _wide - _re_scanner_trans_keys[_keys] ]
998
+ else
1197
999
  _re_scanner_indicies[ _inds + _slen ]
1198
1000
  end
1199
1001
  end
@@ -1201,42 +1003,28 @@ ts = p
1201
1003
  cs = _re_scanner_trans_targs[_trans]
1202
1004
  if _re_scanner_trans_actions[_trans] != 0
1203
1005
  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
1006
  when 36 then
1212
- # line 143 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1213
1007
  begin
1214
1008
  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"
1009
+ when 40 then
1221
1010
  begin
1222
1011
  te = p+1
1223
1012
  end
1224
- when 61 then
1225
- # line 12 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/char_type.rl"
1013
+ when 65 then
1226
1014
  begin
1227
1015
  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)
1016
+ begin
1017
+ case text = copy(data, ts-1,te)
1018
+ when '\d'; emit(:type, :digit, text)
1019
+ when '\D'; emit(:type, :nondigit, text)
1020
+ when '\h'; emit(:type, :hex, text)
1021
+ when '\H'; emit(:type, :nonhex, text)
1022
+ when '\s'; emit(:type, :space, text)
1023
+ when '\S'; emit(:type, :nonspace, text)
1024
+ when '\w'; emit(:type, :word, text)
1025
+ when '\W'; emit(:type, :nonword, text)
1026
+ when '\R'; emit(:type, :linebreak, text)
1027
+ when '\X'; emit(:type, :xgrapheme, text)
1240
1028
  end
1241
1029
  begin
1242
1030
  top -= 1
@@ -1248,19 +1036,18 @@ te = p+1
1248
1036
  end
1249
1037
  end
1250
1038
  when 14 then
1251
- # line 16 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/property.rl"
1252
1039
  begin
1253
1040
  te = p+1
1254
- begin
1255
- text = text(data, ts, te, 1).first
1041
+ begin
1042
+ text = copy(data, ts-1,te)
1256
1043
  type = (text[1] == 'P') ^ (text[3] == '^') ? :nonproperty : :property
1257
1044
 
1258
- name = data[ts+2..te-2].pack('c*').gsub(/[\^\s_\-]/, '').downcase
1045
+ name = text[3..-2].gsub(/[\^\s_\-]/, '').downcase
1259
1046
 
1260
1047
  token = self.class.short_prop_map[name] || self.class.long_prop_map[name]
1261
- raise UnknownUnicodePropertyError.new(name) unless token
1048
+ raise ValidationError.for(:property, name) unless token
1262
1049
 
1263
- self.emit(type, token.to_sym, text, ts-1, te)
1050
+ self.emit(type, token.to_sym, text)
1264
1051
 
1265
1052
  begin
1266
1053
  top -= 1
@@ -1272,132 +1059,118 @@ te = p+1
1272
1059
  end
1273
1060
  end
1274
1061
  when 18 then
1275
- # line 171 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1276
1062
  begin
1277
1063
  te = p+1
1278
1064
  begin # special case, emits two tokens
1279
- emit(:literal, :literal, '-', ts, te)
1280
- emit(:set, :intersection, '&&', ts, te)
1065
+ emit(:literal, :literal, '-')
1066
+ emit(:set, :intersection, '&&')
1281
1067
  end
1282
1068
  end
1283
- when 66 then
1284
- # line 176 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1069
+ when 70 then
1285
1070
  begin
1286
1071
  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)
1072
+ begin
1073
+ if prev_token[1] == :open
1074
+ emit(:set, :negate, '^')
1291
1075
  else
1292
- emit(:literal, :literal, text, ts, te)
1076
+ emit(:literal, :literal, '^')
1293
1077
  end
1294
1078
  end
1295
1079
  end
1296
- when 68 then
1297
- # line 197 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1080
+ when 72 then
1298
1081
  begin
1299
1082
  te = p+1
1300
- begin
1301
- emit(:set, :intersection, *text(data, ts, te))
1083
+ begin
1084
+ emit(:set, :intersection, '&&')
1302
1085
  end
1303
1086
  end
1304
- when 64 then
1305
- # line 201 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1087
+ when 68 then
1306
1088
  begin
1307
1089
  te = p+1
1308
- begin
1090
+ begin
1309
1091
  begin
1310
1092
  stack[top] = cs
1311
1093
  top+= 1
1312
- cs = 136
1094
+ cs = 96
1313
1095
  _goto_level = _again
1314
1096
  next
1315
1097
  end
1316
1098
 
1317
1099
  end
1318
1100
  end
1319
- when 62 then
1320
- # line 231 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1101
+ when 66 then
1321
1102
  begin
1322
1103
  te = p+1
1323
- begin
1324
- emit(:literal, :literal, *text(data, ts, te))
1104
+ begin
1105
+ emit(:literal, :literal, copy(data, ts, te))
1325
1106
  end
1326
1107
  end
1327
1108
  when 16 then
1328
- # line 239 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1329
1109
  begin
1330
1110
  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)
1111
+ begin
1112
+ text = copy(data, ts, te)
1113
+ emit(:literal, :literal, text)
1335
1114
  end
1336
1115
  end
1337
- when 69 then
1338
- # line 185 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1116
+ when 73 then
1339
1117
  begin
1340
1118
  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)
1119
+ p = p - 1; begin
1120
+ # ranges cant start with the opening bracket, a subset, or
1121
+ # intersection/negation/range operators
1122
+ if prev_token[0] == :set
1123
+ emit(:literal, :literal, '-')
1346
1124
  else
1347
- emit(:set, :range, text, ts, te)
1125
+ emit(:set, :range, '-')
1348
1126
  end
1349
1127
  end
1350
1128
  end
1351
- when 72 then
1352
- # line 205 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1129
+ when 76 then
1353
1130
  begin
1354
1131
  te = p
1355
- p = p - 1; begin
1356
- emit(:set, :open, *text(data, ts, te))
1132
+ p = p - 1; begin
1133
+ emit(:set, :open, '[')
1357
1134
  begin
1358
1135
  stack[top] = cs
1359
1136
  top+= 1
1360
- cs = 129
1137
+ cs = 89
1361
1138
  _goto_level = _again
1362
1139
  next
1363
1140
  end
1364
1141
 
1365
1142
  end
1366
1143
  end
1367
- when 67 then
1368
- # line 239 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1144
+ when 71 then
1369
1145
  begin
1370
1146
  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)
1147
+ p = p - 1; begin
1148
+ text = copy(data, ts, te)
1149
+ emit(:literal, :literal, text)
1375
1150
  end
1376
1151
  end
1377
1152
  when 17 then
1378
- # line 185 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1379
1153
  begin
1380
1154
  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)
1155
+ begin
1156
+ # ranges cant start with the opening bracket, a subset, or
1157
+ # intersection/negation/range operators
1158
+ if prev_token[0] == :set
1159
+ emit(:literal, :literal, '-')
1386
1160
  else
1387
- emit(:set, :range, text, ts, te)
1161
+ emit(:set, :range, '-')
1388
1162
  end
1389
1163
  end
1390
1164
  end
1391
1165
  when 20 then
1392
- # line 205 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1393
1166
  begin
1394
1167
  begin p = ((te))-1; end
1395
- begin
1396
- emit(:set, :open, *text(data, ts, te))
1168
+ begin
1169
+ emit(:set, :open, '[')
1397
1170
  begin
1398
1171
  stack[top] = cs
1399
1172
  top+= 1
1400
- cs = 129
1173
+ cs = 89
1401
1174
  _goto_level = _again
1402
1175
  next
1403
1176
  end
@@ -1405,21 +1178,18 @@ p = p - 1; begin
1405
1178
  end
1406
1179
  end
1407
1180
  when 15 then
1408
- # line 239 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1409
1181
  begin
1410
1182
  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)
1183
+ begin
1184
+ text = copy(data, ts, te)
1185
+ emit(:literal, :literal, text)
1415
1186
  end
1416
1187
  end
1417
- when 74 then
1418
- # line 249 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1188
+ when 80 then
1419
1189
  begin
1420
1190
  te = p+1
1421
- begin
1422
- emit(:escape, :literal, *text(data, ts, te, 1))
1191
+ begin
1192
+ emit(:escape, :octal, copy(data, ts-1,te))
1423
1193
  begin
1424
1194
  top -= 1
1425
1195
  cs = stack[top]
@@ -1429,17 +1199,30 @@ te = p+1
1429
1199
 
1430
1200
  end
1431
1201
  end
1432
- when 73 then
1433
- # line 254 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1202
+ when 78 then
1434
1203
  begin
1435
1204
  te = p+1
1436
- begin
1205
+ begin
1437
1206
  p = p - 1;
1438
- cs = 129;
1207
+ cs = 89;
1439
1208
  begin
1440
1209
  stack[top] = cs
1441
1210
  top+= 1
1442
- cs = 137
1211
+ cs = 99
1212
+ _goto_level = _again
1213
+ next
1214
+ end
1215
+
1216
+ end
1217
+ end
1218
+ when 77 then
1219
+ begin
1220
+ te = p+1
1221
+ begin
1222
+ emit(:escape, :literal, copy(data, ts-1,te))
1223
+ begin
1224
+ top -= 1
1225
+ cs = stack[top]
1443
1226
  _goto_level = _again
1444
1227
  next
1445
1228
  end
@@ -1447,12 +1230,25 @@ te = p+1
1447
1230
  end
1448
1231
  end
1449
1232
  when 79 then
1450
- # line 265 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1233
+ begin
1234
+ te = p
1235
+ p = p - 1; begin
1236
+ emit(:escape, :octal, copy(data, ts-1,te))
1237
+ begin
1238
+ top -= 1
1239
+ cs = stack[top]
1240
+ _goto_level = _again
1241
+ next
1242
+ end
1243
+
1244
+ end
1245
+ end
1246
+ when 84 then
1451
1247
  begin
1452
1248
  te = p+1
1453
- begin
1454
- text = text(data, ts, te, 1).first
1455
- emit(:backref, :number, text, ts-1, te)
1249
+ begin
1250
+ text = copy(data, ts-1,te)
1251
+ emit(:backref, :number, text)
1456
1252
  begin
1457
1253
  top -= 1
1458
1254
  cs = stack[top]
@@ -1462,12 +1258,11 @@ 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 91 then
1467
1262
  begin
1468
1263
  te = p+1
1469
- begin
1470
- emit(:escape, :octal, *text(data, ts, te, 1))
1264
+ begin
1265
+ emit(:escape, :octal, copy(data, ts-1,te))
1471
1266
  begin
1472
1267
  top -= 1
1473
1268
  cs = stack[top]
@@ -1477,27 +1272,26 @@ te = p+1
1477
1272
 
1478
1273
  end
1479
1274
  end
1480
- when 76 then
1481
- # line 276 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1275
+ when 81 then
1482
1276
  begin
1483
1277
  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)
1278
+ begin
1279
+ case text = copy(data, ts-1,te)
1280
+ when '\.'; emit(:escape, :dot, text)
1281
+ when '\|'; emit(:escape, :alternation, text)
1282
+ when '\^'; emit(:escape, :bol, text)
1283
+ when '\$'; emit(:escape, :eol, text)
1284
+ when '\?'; emit(:escape, :zero_or_one, text)
1285
+ when '\*'; emit(:escape, :zero_or_more, text)
1286
+ when '\+'; emit(:escape, :one_or_more, text)
1287
+ when '\('; emit(:escape, :group_open, text)
1288
+ when '\)'; emit(:escape, :group_close, text)
1289
+ when '\{'; emit(:escape, :interval_open, text)
1290
+ when '\}'; emit(:escape, :interval_close, text)
1291
+ when '\['; emit(:escape, :set_open, text)
1292
+ when '\]'; emit(:escape, :set_close, text)
1499
1293
  when "\\\\";
1500
- emit(:escape, :backslash, text, ts-1, te)
1294
+ emit(:escape, :backslash, text)
1501
1295
  end
1502
1296
  begin
1503
1297
  top -= 1
@@ -1508,22 +1302,21 @@ te = p+1
1508
1302
 
1509
1303
  end
1510
1304
  end
1511
- when 82 then
1512
- # line 297 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1305
+ when 87 then
1513
1306
  begin
1514
1307
  te = p+1
1515
- begin
1308
+ begin
1516
1309
  # \b is emitted as backspace only when inside a character set, otherwise
1517
1310
  # 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)
1311
+ case text = copy(data, ts-1,te)
1312
+ when '\a'; emit(:escape, :bell, text)
1313
+ when '\b'; emit(:escape, :backspace, text)
1314
+ when '\e'; emit(:escape, :escape, text)
1315
+ when '\f'; emit(:escape, :form_feed, text)
1316
+ when '\n'; emit(:escape, :newline, text)
1317
+ when '\r'; emit(:escape, :carriage, text)
1318
+ when '\t'; emit(:escape, :tab, text)
1319
+ when '\v'; emit(:escape, :vertical_tab, text)
1527
1320
  end
1528
1321
  begin
1529
1322
  top -= 1
@@ -1534,16 +1327,15 @@ te = p+1
1534
1327
 
1535
1328
  end
1536
1329
  end
1537
- when 28 then
1538
- # line 313 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1330
+ when 29 then
1539
1331
  begin
1540
1332
  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)
1333
+ begin
1334
+ text = copy(data, ts-1,te)
1335
+ if text[2] == '{'
1336
+ emit(:escape, :codepoint_list, text)
1545
1337
  else
1546
- emit(:escape, :codepoint, text, ts-1, te)
1338
+ emit(:escape, :codepoint, text)
1547
1339
  end
1548
1340
  begin
1549
1341
  top -= 1
@@ -1554,12 +1346,11 @@ te = p+1
1554
1346
 
1555
1347
  end
1556
1348
  end
1557
- when 92 then
1558
- # line 323 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1349
+ when 97 then
1559
1350
  begin
1560
1351
  te = p+1
1561
- begin
1562
- emit(:escape, :hex, *text(data, ts, te, 1))
1352
+ begin
1353
+ emit(:escape, :hex, copy(data, ts-1,te))
1563
1354
  begin
1564
1355
  top -= 1
1565
1356
  cs = stack[top]
@@ -1569,11 +1360,10 @@ te = p+1
1569
1360
 
1570
1361
  end
1571
1362
  end
1572
- when 24 then
1573
- # line 332 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1363
+ when 25 then
1574
1364
  begin
1575
1365
  te = p+1
1576
- begin
1366
+ begin
1577
1367
  emit_meta_control_sequence(data, ts, te, :control)
1578
1368
  begin
1579
1369
  top -= 1
@@ -1584,11 +1374,10 @@ te = p+1
1584
1374
 
1585
1375
  end
1586
1376
  end
1587
- when 26 then
1588
- # line 337 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1377
+ when 27 then
1589
1378
  begin
1590
1379
  te = p+1
1591
- begin
1380
+ begin
1592
1381
  emit_meta_control_sequence(data, ts, te, :meta_sequence)
1593
1382
  begin
1594
1383
  top -= 1
@@ -1599,46 +1388,43 @@ te = p+1
1599
1388
 
1600
1389
  end
1601
1390
  end
1602
- when 80 then
1603
- # line 342 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1391
+ when 85 then
1604
1392
  begin
1605
1393
  te = p+1
1606
- begin
1394
+ begin
1607
1395
  p = p - 1;
1608
- cs = ((in_set? ? 129 : 110));
1396
+ cs = ((in_set? ? 89 : 71));
1609
1397
  begin
1610
1398
  stack[top] = cs
1611
1399
  top+= 1
1612
- cs = 127
1400
+ cs = 87
1613
1401
  _goto_level = _again
1614
1402
  next
1615
1403
  end
1616
1404
 
1617
1405
  end
1618
1406
  end
1619
- when 81 then
1620
- # line 348 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1407
+ when 86 then
1621
1408
  begin
1622
1409
  te = p+1
1623
- begin
1410
+ begin
1624
1411
  p = p - 1;
1625
- cs = ((in_set? ? 129 : 110));
1412
+ cs = ((in_set? ? 89 : 71));
1626
1413
  begin
1627
1414
  stack[top] = cs
1628
1415
  top+= 1
1629
- cs = 128
1416
+ cs = 88
1630
1417
  _goto_level = _again
1631
1418
  next
1632
1419
  end
1633
1420
 
1634
1421
  end
1635
1422
  end
1636
- when 75 then
1637
- # line 354 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1423
+ when 23 then
1638
1424
  begin
1639
1425
  te = p+1
1640
- begin
1641
- emit(:escape, :literal, *text(data, ts, te, 1))
1426
+ begin
1427
+ emit(:escape, :literal, copy(data, ts-1,te))
1642
1428
  begin
1643
1429
  top -= 1
1644
1430
  cs = stack[top]
@@ -1648,12 +1434,11 @@ te = p+1
1648
1434
 
1649
1435
  end
1650
1436
  end
1651
- when 84 then
1652
- # line 271 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1437
+ when 90 then
1653
1438
  begin
1654
1439
  te = p
1655
- p = p - 1; begin
1656
- emit(:escape, :octal, *text(data, ts, te, 1))
1440
+ p = p - 1; begin
1441
+ emit(:escape, :octal, copy(data, ts-1,te))
1657
1442
  begin
1658
1443
  top -= 1
1659
1444
  cs = stack[top]
@@ -1663,12 +1448,11 @@ p = p - 1; begin
1663
1448
 
1664
1449
  end
1665
1450
  end
1666
- when 91 then
1667
- # line 323 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1451
+ when 96 then
1668
1452
  begin
1669
1453
  te = p
1670
- p = p - 1; begin
1671
- emit(:escape, :hex, *text(data, ts, te, 1))
1454
+ p = p - 1; begin
1455
+ emit(:escape, :hex, copy(data, ts-1,te))
1672
1456
  begin
1673
1457
  top -= 1
1674
1458
  cs = stack[top]
@@ -1678,11 +1462,10 @@ p = p - 1; begin
1678
1462
 
1679
1463
  end
1680
1464
  end
1681
- when 87 then
1682
- # line 332 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1465
+ when 93 then
1683
1466
  begin
1684
1467
  te = p
1685
- p = p - 1; begin
1468
+ p = p - 1; begin
1686
1469
  emit_meta_control_sequence(data, ts, te, :control)
1687
1470
  begin
1688
1471
  top -= 1
@@ -1693,11 +1476,10 @@ p = p - 1; begin
1693
1476
 
1694
1477
  end
1695
1478
  end
1696
- when 89 then
1697
- # line 337 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1479
+ when 95 then
1698
1480
  begin
1699
1481
  te = p
1700
- p = p - 1; begin
1482
+ p = p - 1; begin
1701
1483
  emit_meta_control_sequence(data, ts, te, :meta_sequence)
1702
1484
  begin
1703
1485
  top -= 1
@@ -1708,15 +1490,42 @@ p = p - 1; begin
1708
1490
 
1709
1491
  end
1710
1492
  end
1711
- when 83 then
1712
- # line 1 "NONE"
1493
+ when 88 then
1494
+ begin
1495
+ te = p
1496
+ p = p - 1; begin
1497
+ emit(:escape, :literal, copy(data, ts-1,te))
1498
+ begin
1499
+ top -= 1
1500
+ cs = stack[top]
1501
+ _goto_level = _again
1502
+ next
1503
+ end
1504
+
1505
+ end
1506
+ end
1507
+ when 22 then
1508
+ begin
1509
+ begin p = ((te))-1; end
1510
+ begin
1511
+ emit(:escape, :literal, copy(data, ts-1,te))
1512
+ begin
1513
+ top -= 1
1514
+ cs = stack[top]
1515
+ _goto_level = _again
1516
+ next
1517
+ end
1518
+
1519
+ end
1520
+ end
1521
+ when 89 then
1713
1522
  begin
1714
1523
  case act
1715
- when 18 then
1524
+ when 17 then
1716
1525
  begin begin p = ((te))-1; end
1717
1526
 
1718
- text = text(data, ts, te, 1).first
1719
- emit(:backref, :number, text, ts-1, te)
1527
+ text = copy(data, ts-1,te)
1528
+ emit(:backref, :number, text)
1720
1529
  begin
1721
1530
  top -= 1
1722
1531
  cs = stack[top]
@@ -1725,10 +1534,10 @@ p = p - 1; begin
1725
1534
  end
1726
1535
 
1727
1536
  end
1728
- when 19 then
1537
+ when 18 then
1729
1538
  begin begin p = ((te))-1; end
1730
1539
 
1731
- emit(:escape, :octal, *text(data, ts, te, 1))
1540
+ emit(:escape, :octal, copy(data, ts-1,te))
1732
1541
  begin
1733
1542
  top -= 1
1734
1543
  cs = stack[top]
@@ -1737,60 +1546,56 @@ p = p - 1; begin
1737
1546
  end
1738
1547
 
1739
1548
  end
1740
- end
1549
+ end
1741
1550
  end
1742
- when 31 then
1743
- # line 364 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1551
+ when 32 then
1744
1552
  begin
1745
1553
  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)
1554
+ begin
1555
+ text = copy(data, ts, te-1)
1556
+ emit(:conditional, :condition, text)
1557
+ emit(:conditional, :condition_close, ')')
1750
1558
  end
1751
1559
  end
1752
- when 93 then
1753
- # line 370 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1560
+ when 98 then
1754
1561
  begin
1755
1562
  te = p+1
1756
- begin
1563
+ begin
1757
1564
  p = p - 1;
1758
1565
  begin
1759
1566
  stack[top] = cs
1760
1567
  top+= 1
1761
- cs = 110
1568
+ cs = 71
1762
1569
  _goto_level = _again
1763
1570
  next
1764
1571
  end
1765
1572
 
1766
1573
  end
1767
1574
  end
1768
- when 94 then
1769
- # line 370 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1575
+ when 99 then
1770
1576
  begin
1771
1577
  te = p
1772
- p = p - 1; begin
1578
+ p = p - 1; begin
1773
1579
  p = p - 1;
1774
1580
  begin
1775
1581
  stack[top] = cs
1776
1582
  top+= 1
1777
- cs = 110
1583
+ cs = 71
1778
1584
  _goto_level = _again
1779
1585
  next
1780
1586
  end
1781
1587
 
1782
1588
  end
1783
1589
  end
1784
- when 30 then
1785
- # line 370 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1590
+ when 31 then
1786
1591
  begin
1787
1592
  begin p = ((te))-1; end
1788
- begin
1593
+ begin
1789
1594
  p = p - 1;
1790
1595
  begin
1791
1596
  stack[top] = cs
1792
1597
  top+= 1
1793
- cs = 110
1598
+ cs = 71
1794
1599
  _goto_level = _again
1795
1600
  next
1796
1601
  end
@@ -1798,391 +1603,369 @@ p = p - 1; begin
1798
1603
  end
1799
1604
  end
1800
1605
  when 38 then
1801
- # line 383 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1802
1606
  begin
1803
1607
  te = p+1
1804
- begin
1805
- emit(:meta, :dot, *text(data, ts, te))
1608
+ begin
1609
+ emit(:meta, :dot, copy(data, ts, te))
1806
1610
  end
1807
1611
  end
1808
- when 41 then
1809
- # line 387 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1612
+ when 43 then
1810
1613
  begin
1811
1614
  te = p+1
1812
- begin
1615
+ begin
1813
1616
  if conditional_stack.last == group_depth
1814
- emit(:conditional, :separator, *text(data, ts, te))
1617
+ emit(:conditional, :separator, copy(data, ts, te))
1815
1618
  else
1816
- emit(:meta, :alternation, *text(data, ts, te))
1619
+ emit(:meta, :alternation, copy(data, ts, te))
1817
1620
  end
1818
1621
  end
1819
1622
  end
1820
- when 40 then
1821
- # line 397 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1623
+ when 42 then
1822
1624
  begin
1823
1625
  te = p+1
1824
- begin
1825
- emit(:anchor, :bol, *text(data, ts, te))
1626
+ begin
1627
+ emit(:anchor, :bol, copy(data, ts, te))
1826
1628
  end
1827
1629
  end
1828
1630
  when 35 then
1829
- # line 401 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1830
1631
  begin
1831
1632
  te = p+1
1832
- begin
1833
- emit(:anchor, :eol, *text(data, ts, te))
1633
+ begin
1634
+ emit(:anchor, :eol, copy(data, ts, te))
1834
1635
  end
1835
1636
  end
1836
- when 57 then
1837
- # line 405 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1637
+ when 62 then
1838
1638
  begin
1839
1639
  te = p+1
1840
- begin
1841
- emit(:keep, :mark, *text(data, ts, te))
1640
+ begin
1641
+ emit(:keep, :mark, copy(data, ts, te))
1842
1642
  end
1843
1643
  end
1844
- when 56 then
1845
- # line 409 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1644
+ when 61 then
1846
1645
  begin
1847
1646
  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)
1647
+ begin
1648
+ case text = copy(data, ts, te)
1649
+ when '\A'; emit(:anchor, :bos, text)
1650
+ when '\z'; emit(:anchor, :eos, text)
1651
+ when '\Z'; emit(:anchor, :eos_ob_eol, text)
1652
+ when '\b'; emit(:anchor, :word_boundary, text)
1653
+ when '\B'; emit(:anchor, :nonword_boundary, text)
1654
+ when '\G'; emit(:anchor, :match_start, text)
1856
1655
  end
1857
1656
  end
1858
1657
  end
1859
- when 47 then
1860
- # line 431 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1658
+ when 41 then
1659
+ begin
1660
+ te = p+1
1661
+ begin
1662
+ append_literal(data, ts, te)
1663
+ end
1664
+ end
1665
+ when 51 then
1861
1666
  begin
1862
1667
  te = p+1
1863
- begin
1864
- text = text(data, ts, te).first
1668
+ begin
1669
+ text = copy(data, ts, te)
1865
1670
 
1866
1671
  conditional_stack << group_depth
1867
1672
 
1868
- emit(:conditional, :open, text[0..-2], ts, te-1)
1869
- emit(:conditional, :condition_open, '(', te-1, te)
1673
+ emit(:conditional, :open, text[0..-2])
1674
+ emit(:conditional, :condition_open, '(')
1870
1675
  begin
1871
1676
  stack[top] = cs
1872
1677
  top+= 1
1873
- cs = 148
1678
+ cs = 113
1874
1679
  _goto_level = _again
1875
1680
  next
1876
1681
  end
1877
1682
 
1878
1683
  end
1879
1684
  end
1880
- when 48 then
1881
- # line 462 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1685
+ when 52 then
1882
1686
  begin
1883
1687
  te = p+1
1884
- begin
1885
- text = text(data, ts, te).first
1688
+ begin
1689
+ text = copy(data, ts, te)
1886
1690
  if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/
1887
- raise InvalidGroupOption.new($1 || "-#{$2}", text)
1691
+ raise ValidationError.for(:group_option, $1 || "-#{$2}", text)
1888
1692
  end
1889
- emit_options(text, ts, te)
1693
+ emit_options(text)
1890
1694
  end
1891
1695
  end
1892
- when 9 then
1893
- # line 476 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1696
+ when 6 then
1894
1697
  begin
1895
1698
  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)
1699
+ begin
1700
+ case text = copy(data, ts, te)
1701
+ when '(?='; emit(:assertion, :lookahead, text)
1702
+ when '(?!'; emit(:assertion, :nlookahead, text)
1703
+ when '(?<='; emit(:assertion, :lookbehind, text)
1704
+ when '(?<!'; emit(:assertion, :nlookbehind, text)
1902
1705
  end
1903
1706
  end
1904
1707
  end
1905
- when 8 then
1906
- # line 493 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1708
+ when 5 then
1907
1709
  begin
1908
1710
  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)
1711
+ begin
1712
+ case text = copy(data, ts, te)
1713
+ when '(?:'; emit(:group, :passive, text)
1714
+ when '(?>'; emit(:group, :atomic, text)
1715
+ when '(?~'; emit(:group, :absence, text)
1914
1716
 
1915
1717
  when /^\(\?(?:<>|'')/
1916
- validation_error(:group, 'named group', 'name is empty')
1718
+ raise ValidationError.for(:group, 'named group', 'name is empty')
1917
1719
 
1918
- when /^\(\?<\w*>/
1919
- emit(:group, :named_ab, text, ts, te)
1720
+ when /^\(\?<[^>]+>/
1721
+ emit(:group, :named_ab, text)
1920
1722
 
1921
- when /^\(\?'\w*'/
1922
- emit(:group, :named_sq, text, ts, te)
1723
+ when /^\(\?'[^']+'/
1724
+ emit(:group, :named_sq, text)
1923
1725
 
1924
1726
  end
1925
1727
  end
1926
1728
  end
1927
- when 11 then
1928
- # line 534 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1729
+ when 10 then
1929
1730
  begin
1930
1731
  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
-
1732
+ begin
1733
+ case text = copy(data, ts, te)
1734
+ when /^\\k(.)[^0-9\-][^+\-]*['>]$/
1735
+ emit(:backref, $1 == '<' ? :name_ref_ab : :name_ref_sq, text)
1736
+ when /^\\k(.)[1-9]\d*['>]$/
1737
+ emit(:backref, $1 == '<' ? :number_ref_ab : :number_ref_sq, text)
1738
+ when /^\\k(.)-[1-9]\d*['>]$/
1739
+ emit(:backref, $1 == '<' ? :number_rel_ref_ab : :number_rel_ref_sq, text)
1740
+ when /^\\k(.)[^0-9\-].*[+\-]\d+['>]$/
1741
+ emit(:backref, $1 == '<' ? :name_recursion_ref_ab : :name_recursion_ref_sq, text)
1742
+ when /^\\k(.)-?[1-9]\d*[+\-]\d+['>]$/
1743
+ emit(:backref, $1 == '<' ? :number_recursion_ref_ab : :number_recursion_ref_sq, text)
1744
+ else
1745
+ raise ValidationError.for(:backref, 'backreference', 'invalid ref ID')
1990
1746
  end
1991
1747
  end
1992
1748
  end
1993
- when 54 then
1994
- # line 599 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1749
+ when 9 then
1995
1750
  begin
1996
1751
  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)
1752
+ begin
1753
+ case text = copy(data, ts, te)
1754
+ when /^\\g(.)[^0-9+\-].*['>]$/
1755
+ emit(:backref, $1 == '<' ? :name_call_ab : :name_call_sq, text)
1756
+ when /^\\g(.)\d+['>]$/
1757
+ emit(:backref, $1 == '<' ? :number_call_ab : :number_call_sq, text)
1758
+ when /^\\g(.)[+-]\d+/
1759
+ emit(:backref, $1 == '<' ? :number_rel_call_ab : :number_rel_call_sq, text)
1760
+ else
1761
+ raise ValidationError.for(:backref, 'subexpression call', 'invalid ref ID')
2002
1762
  end
2003
1763
  end
2004
1764
  end
2005
- when 50 then
2006
- # line 607 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1765
+ when 59 then
2007
1766
  begin
2008
1767
  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)
1768
+ begin
1769
+ case text = copy(data, ts, te)
1770
+ when '?' ; emit(:quantifier, :zero_or_one, text)
1771
+ when '??'; emit(:quantifier, :zero_or_one_reluctant, text)
1772
+ when '?+'; emit(:quantifier, :zero_or_one_possessive, text)
2014
1773
  end
2015
1774
  end
2016
1775
  end
2017
- when 52 then
2018
- # line 615 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1776
+ when 55 then
2019
1777
  begin
2020
1778
  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)
1779
+ begin
1780
+ case text = copy(data, ts, te)
1781
+ when '*' ; emit(:quantifier, :zero_or_more, text)
1782
+ when '*?'; emit(:quantifier, :zero_or_more_reluctant, text)
1783
+ when '*+'; emit(:quantifier, :zero_or_more_possessive, text)
2026
1784
  end
2027
1785
  end
2028
1786
  end
2029
- when 59 then
2030
- # line 623 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1787
+ when 57 then
2031
1788
  begin
2032
1789
  te = p+1
2033
- begin
2034
- emit(:quantifier, :interval, *text(data, ts, te))
1790
+ begin
1791
+ case text = copy(data, ts, te)
1792
+ when '+' ; emit(:quantifier, :one_or_more, text)
1793
+ when '+?'; emit(:quantifier, :one_or_more_reluctant, text)
1794
+ when '++'; emit(:quantifier, :one_or_more_possessive, text)
1795
+ end
2035
1796
  end
2036
1797
  end
2037
- when 4 then
2038
- # line 633 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1798
+ when 12 then
2039
1799
  begin
2040
1800
  te = p+1
2041
- begin
1801
+ begin
1802
+ emit(:quantifier, :interval, copy(data, ts, te))
1803
+ end
1804
+ end
1805
+ when 47 then
1806
+ begin
1807
+ te = p+1
1808
+ begin
2042
1809
  if free_spacing
2043
- emit(:free_space, :comment, *text(data, ts, te))
1810
+ emit(:free_space, :comment, copy(data, ts, te))
2044
1811
  else
2045
- append_literal(data, ts, te)
1812
+ # consume only the pound sign (#) and backtrack to do regular scanning
1813
+ append_literal(data, ts, ts + 1)
1814
+ begin p = (( ts + 1))-1; end
1815
+
2046
1816
  end
2047
1817
  end
2048
1818
  end
2049
- when 46 then
2050
- # line 462 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1819
+ when 50 then
2051
1820
  begin
2052
1821
  te = p
2053
- p = p - 1; begin
2054
- text = text(data, ts, te).first
1822
+ p = p - 1; begin
1823
+ text = copy(data, ts, te)
2055
1824
  if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/
2056
- raise InvalidGroupOption.new($1 || "-#{$2}", text)
1825
+ raise ValidationError.for(:group_option, $1 || "-#{$2}", text)
2057
1826
  end
2058
- emit_options(text, ts, te)
1827
+ emit_options(text)
2059
1828
  end
2060
1829
  end
2061
- when 44 then
2062
- # line 511 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1830
+ when 53 then
2063
1831
  begin
2064
1832
  te = p
2065
- p = p - 1; begin
2066
- text = text(data, ts, te).first
2067
- emit(:group, :capture, text, ts, te)
1833
+ p = p - 1; begin
1834
+ case text = copy(data, ts, te)
1835
+ when '(?='; emit(:assertion, :lookahead, text)
1836
+ when '(?!'; emit(:assertion, :nlookahead, text)
1837
+ when '(?<='; emit(:assertion, :lookbehind, text)
1838
+ when '(?<!'; emit(:assertion, :nlookbehind, text)
1839
+ end
2068
1840
  end
2069
1841
  end
2070
- when 53 then
2071
- # line 599 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1842
+ when 48 then
1843
+ begin
1844
+ te = p
1845
+ p = p - 1; begin
1846
+ text = copy(data, ts, te)
1847
+ emit(:group, :capture, text)
1848
+ end
1849
+ end
1850
+ when 58 then
2072
1851
  begin
2073
1852
  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)
1853
+ p = p - 1; begin
1854
+ case text = copy(data, ts, te)
1855
+ when '?' ; emit(:quantifier, :zero_or_one, text)
1856
+ when '??'; emit(:quantifier, :zero_or_one_reluctant, text)
1857
+ when '?+'; emit(:quantifier, :zero_or_one_possessive, text)
2079
1858
  end
2080
1859
  end
2081
1860
  end
2082
- when 49 then
2083
- # line 607 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1861
+ when 54 then
2084
1862
  begin
2085
1863
  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)
1864
+ p = p - 1; begin
1865
+ case text = copy(data, ts, te)
1866
+ when '*' ; emit(:quantifier, :zero_or_more, text)
1867
+ when '*?'; emit(:quantifier, :zero_or_more_reluctant, text)
1868
+ when '*+'; emit(:quantifier, :zero_or_more_possessive, text)
2091
1869
  end
2092
1870
  end
2093
1871
  end
2094
- when 51 then
2095
- # line 615 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1872
+ when 56 then
2096
1873
  begin
2097
1874
  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)
1875
+ p = p - 1; begin
1876
+ case text = copy(data, ts, te)
1877
+ when '+' ; emit(:quantifier, :one_or_more, text)
1878
+ when '+?'; emit(:quantifier, :one_or_more_reluctant, text)
1879
+ when '++'; emit(:quantifier, :one_or_more_possessive, text)
2103
1880
  end
2104
1881
  end
2105
1882
  end
2106
- when 58 then
2107
- # line 623 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1883
+ when 63 then
2108
1884
  begin
2109
1885
  te = p
2110
- p = p - 1; begin
2111
- emit(:quantifier, :interval, *text(data, ts, te))
1886
+ p = p - 1; begin
1887
+ append_literal(data, ts, te)
2112
1888
  end
2113
1889
  end
2114
- when 55 then
2115
- # line 629 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1890
+ when 60 then
2116
1891
  begin
2117
1892
  te = p
2118
- p = p - 1; begin
1893
+ p = p - 1; begin
2119
1894
  begin
2120
1895
  stack[top] = cs
2121
1896
  top+= 1
2122
- cs = 137
1897
+ cs = 99
2123
1898
  _goto_level = _again
2124
1899
  next
2125
1900
  end
2126
1901
 
2127
1902
  end
2128
1903
  end
2129
- when 43 then
2130
- # line 641 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1904
+ when 46 then
2131
1905
  begin
2132
1906
  te = p
2133
- p = p - 1; begin
1907
+ p = p - 1; begin
2134
1908
  if free_spacing
2135
- emit(:free_space, :whitespace, *text(data, ts, te))
1909
+ emit(:free_space, :comment, copy(data, ts, te))
1910
+ else
1911
+ # consume only the pound sign (#) and backtrack to do regular scanning
1912
+ append_literal(data, ts, ts + 1)
1913
+ begin p = (( ts + 1))-1; end
1914
+
1915
+ end
1916
+ end
1917
+ end
1918
+ when 45 then
1919
+ begin
1920
+ te = p
1921
+ p = p - 1; begin
1922
+ if free_spacing
1923
+ emit(:free_space, :whitespace, copy(data, ts, te))
2136
1924
  else
2137
1925
  append_literal(data, ts, te)
2138
1926
  end
2139
1927
  end
2140
1928
  end
2141
- when 42 then
2142
- # line 656 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1929
+ when 44 then
2143
1930
  begin
2144
1931
  te = p
2145
- p = p - 1; begin
1932
+ p = p - 1; begin
2146
1933
  append_literal(data, ts, te)
2147
1934
  end
2148
1935
  end
2149
- when 5 then
2150
- # line 462 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1936
+ when 3 then
2151
1937
  begin
2152
1938
  begin p = ((te))-1; end
2153
- begin
2154
- text = text(data, ts, te).first
1939
+ begin
1940
+ text = copy(data, ts, te)
2155
1941
  if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/
2156
- raise InvalidGroupOption.new($1 || "-#{$2}", text)
1942
+ raise ValidationError.for(:group_option, $1 || "-#{$2}", text)
2157
1943
  end
2158
- emit_options(text, ts, te)
1944
+ emit_options(text)
2159
1945
  end
2160
1946
  end
2161
- when 10 then
2162
- # line 629 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
1947
+ when 11 then
2163
1948
  begin
2164
1949
  begin p = ((te))-1; end
2165
- begin
1950
+ begin
1951
+ append_literal(data, ts, te)
1952
+ end
1953
+ end
1954
+ when 8 then
1955
+ begin
1956
+ begin p = ((te))-1; end
1957
+ begin
2166
1958
  begin
2167
1959
  stack[top] = cs
2168
1960
  top+= 1
2169
- cs = 137
1961
+ cs = 99
2170
1962
  _goto_level = _again
2171
1963
  next
2172
1964
  end
2173
1965
 
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
1966
  end
2183
1967
  end
2184
1968
  when 1 then
2185
- # line 1 "NONE"
2186
1969
  begin
2187
1970
  case act
2188
1971
  when 0 then
@@ -2192,29 +1975,46 @@ p = p - 1; begin
2192
1975
  next
2193
1976
  end
2194
1977
  end
2195
- when 54 then
1978
+ when 41 then
1979
+ begin begin p = ((te))-1; end
1980
+
1981
+ text = copy(data, ts, te)
1982
+ if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/
1983
+ raise ValidationError.for(:group_option, $1 || "-#{$2}", text)
1984
+ end
1985
+ emit_options(text)
1986
+ end
1987
+ when 42 then
1988
+ begin begin p = ((te))-1; end
1989
+
1990
+ case text = copy(data, ts, te)
1991
+ when '(?='; emit(:assertion, :lookahead, text)
1992
+ when '(?!'; emit(:assertion, :nlookahead, text)
1993
+ when '(?<='; emit(:assertion, :lookbehind, text)
1994
+ when '(?<!'; emit(:assertion, :nlookbehind, text)
1995
+ end
1996
+ end
1997
+ when 56 then
2196
1998
  begin begin p = ((te))-1; end
2197
1999
 
2198
2000
  append_literal(data, ts, te)
2199
2001
  end
2200
- end
2002
+ end
2201
2003
  end
2202
- when 71 then
2203
- # line 131 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2004
+ when 75 then
2204
2005
  begin
2205
2006
 
2206
- text = ts ? copy(data, ts-1..-1) : data.pack('c*')
2207
- raise PrematureEndError.new( text )
2007
+ text = copy(data, ts ? ts-1 : 0,-1)
2008
+ raise PrematureEndError.new(text)
2208
2009
  end
2209
- # line 205 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2210
2010
  begin
2211
2011
  te = p
2212
- p = p - 1; begin
2213
- emit(:set, :open, *text(data, ts, te))
2012
+ p = p - 1; begin
2013
+ emit(:set, :open, '[')
2214
2014
  begin
2215
2015
  stack[top] = cs
2216
2016
  top+= 1
2217
- cs = 129
2017
+ cs = 89
2218
2018
  _goto_level = _again
2219
2019
  next
2220
2020
  end
@@ -2222,59 +2022,34 @@ p = p - 1; begin
2222
2022
  end
2223
2023
  end
2224
2024
  when 19 then
2225
- # line 131 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2226
2025
  begin
2227
2026
 
2228
- text = ts ? copy(data, ts-1..-1) : data.pack('c*')
2229
- raise PrematureEndError.new( text )
2027
+ text = copy(data, ts ? ts-1 : 0,-1)
2028
+ raise PrematureEndError.new(text)
2230
2029
  end
2231
- # line 205 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2232
2030
  begin
2233
2031
  begin p = ((te))-1; end
2234
- begin
2235
- emit(:set, :open, *text(data, ts, te))
2032
+ begin
2033
+ emit(:set, :open, '[')
2236
2034
  begin
2237
2035
  stack[top] = cs
2238
2036
  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]
2037
+ cs = 89
2261
2038
  _goto_level = _again
2262
2039
  next
2263
2040
  end
2264
2041
 
2265
2042
  end
2266
2043
  end
2267
- when 86 then
2268
- # line 131 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2044
+ when 92 then
2269
2045
  begin
2270
2046
 
2271
- text = ts ? copy(data, ts-1..-1) : data.pack('c*')
2272
- raise PrematureEndError.new( text )
2047
+ text = copy(data, ts ? ts-1 : 0,-1)
2048
+ raise PrematureEndError.new(text)
2273
2049
  end
2274
- # line 332 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2275
2050
  begin
2276
2051
  te = p
2277
- p = p - 1; begin
2052
+ p = p - 1; begin
2278
2053
  emit_meta_control_sequence(data, ts, te, :control)
2279
2054
  begin
2280
2055
  top -= 1
@@ -2285,17 +2060,15 @@ p = p - 1; begin
2285
2060
 
2286
2061
  end
2287
2062
  end
2288
- when 88 then
2289
- # line 131 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2063
+ when 94 then
2290
2064
  begin
2291
2065
 
2292
- text = ts ? copy(data, ts-1..-1) : data.pack('c*')
2293
- raise PrematureEndError.new( text )
2066
+ text = copy(data, ts ? ts-1 : 0,-1)
2067
+ raise PrematureEndError.new(text)
2294
2068
  end
2295
- # line 337 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2296
2069
  begin
2297
2070
  te = p
2298
- p = p - 1; begin
2071
+ p = p - 1; begin
2299
2072
  emit_meta_control_sequence(data, ts, te, :meta_sequence)
2300
2073
  begin
2301
2074
  top -= 1
@@ -2306,17 +2079,15 @@ p = p - 1; begin
2306
2079
 
2307
2080
  end
2308
2081
  end
2309
- when 25 then
2310
- # line 131 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2082
+ when 26 then
2311
2083
  begin
2312
2084
 
2313
- text = ts ? copy(data, ts-1..-1) : data.pack('c*')
2314
- raise PrematureEndError.new( text )
2085
+ text = copy(data, ts ? ts-1 : 0,-1)
2086
+ raise PrematureEndError.new(text)
2315
2087
  end
2316
- # line 332 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2317
2088
  begin
2318
2089
  begin p = ((te))-1; end
2319
- begin
2090
+ begin
2320
2091
  emit_meta_control_sequence(data, ts, te, :control)
2321
2092
  begin
2322
2093
  top -= 1
@@ -2327,17 +2098,15 @@ p = p - 1; begin
2327
2098
 
2328
2099
  end
2329
2100
  end
2330
- when 27 then
2331
- # line 131 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2101
+ when 28 then
2332
2102
  begin
2333
2103
 
2334
- text = ts ? copy(data, ts-1..-1) : data.pack('c*')
2335
- raise PrematureEndError.new( text )
2104
+ text = copy(data, ts ? ts-1 : 0,-1)
2105
+ raise PrematureEndError.new(text)
2336
2106
  end
2337
- # line 337 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2338
2107
  begin
2339
2108
  begin p = ((te))-1; end
2340
- begin
2109
+ begin
2341
2110
  emit_meta_control_sequence(data, ts, te, :meta_sequence)
2342
2111
  begin
2343
2112
  top -= 1
@@ -2348,17 +2117,15 @@ p = p - 1; begin
2348
2117
 
2349
2118
  end
2350
2119
  end
2351
- when 29 then
2352
- # line 137 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2120
+ when 30 then
2353
2121
  begin
2354
2122
 
2355
- text = ts ? copy(data, ts-1..-1) : data.pack('c*')
2356
- validation_error(:sequence, 'sequence', text)
2123
+ text = copy(data, ts ? ts-1 : 0,-1)
2124
+ raise ValidationError.for(:sequence, 'sequence', text)
2357
2125
  end
2358
- # line 328 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2359
2126
  begin
2360
2127
  te = p+1
2361
- begin
2128
+ begin
2362
2129
  begin
2363
2130
  top -= 1
2364
2131
  cs = stack[top]
@@ -2368,67 +2135,61 @@ te = p+1
2368
2135
 
2369
2136
  end
2370
2137
  end
2371
- when 7 then
2372
- # line 144 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2138
+ when 4 then
2373
2139
  begin
2374
2140
  self.group_depth = group_depth - 1 end
2375
- # line 447 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2376
2141
  begin
2377
2142
  te = p+1
2378
- begin
2379
- emit(:group, :comment, *text(data, ts, te))
2143
+ begin
2144
+ emit(:group, :comment, copy(data, ts, te))
2380
2145
  end
2381
2146
  end
2382
2147
  when 37 then
2383
- # line 144 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2384
2148
  begin
2385
2149
  self.group_depth = group_depth - 1 end
2386
- # line 516 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2387
2150
  begin
2388
2151
  te = p+1
2389
- begin
2152
+ begin
2390
2153
  if conditional_stack.last == group_depth + 1
2391
2154
  conditional_stack.pop
2392
- emit(:conditional, :close, *text(data, ts, te))
2393
- else
2155
+ emit(:conditional, :close, ')')
2156
+ elsif group_depth >= 0
2394
2157
  if spacing_stack.length > 1 &&
2395
2158
  spacing_stack.last[:depth] == group_depth + 1
2396
2159
  spacing_stack.pop
2397
2160
  self.free_spacing = spacing_stack.last[:free_spacing]
2398
2161
  end
2399
2162
 
2400
- emit(:group, :close, *text(data, ts, te))
2163
+ emit(:group, :close, ')')
2164
+ else
2165
+ raise ValidationError.for(:group, 'group', 'unmatched close parenthesis')
2401
2166
  end
2402
2167
  end
2403
2168
  end
2404
2169
  when 39 then
2405
- # line 145 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2406
2170
  begin
2407
2171
  self.set_depth = set_depth + 1 end
2408
- # line 422 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2409
2172
  begin
2410
2173
  te = p+1
2411
- begin
2412
- emit(:set, :open, *text(data, ts, te))
2174
+ begin
2175
+ emit(:set, :open, copy(data, ts, te))
2413
2176
  begin
2414
2177
  stack[top] = cs
2415
2178
  top+= 1
2416
- cs = 129
2179
+ cs = 89
2417
2180
  _goto_level = _again
2418
2181
  next
2419
2182
  end
2420
2183
 
2421
2184
  end
2422
2185
  end
2423
- when 65 then
2424
- # line 146 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2186
+ when 69 then
2425
2187
  begin
2426
2188
  self.set_depth = set_depth - 1 end
2427
- # line 152 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2428
2189
  begin
2429
2190
  te = p+1
2430
- begin
2431
- emit(:set, :close, *text(data, ts, te))
2191
+ begin
2192
+ emit(:set, :close, copy(data, ts, te))
2432
2193
  if in_set?
2433
2194
  begin
2434
2195
  top -= 1
@@ -2439,7 +2200,7 @@ te = p+1
2439
2200
 
2440
2201
  else
2441
2202
  begin
2442
- cs = 110
2203
+ cs = 71
2443
2204
  _goto_level = _again
2444
2205
  next
2445
2206
  end
@@ -2447,16 +2208,14 @@ te = p+1
2447
2208
  end
2448
2209
  end
2449
2210
  end
2450
- when 70 then
2451
- # line 146 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2211
+ when 74 then
2452
2212
  begin
2453
2213
  self.set_depth = set_depth - 1 end
2454
- # line 161 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2455
2214
  begin
2456
2215
  te = p+1
2457
2216
  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)
2217
+ emit(:literal, :literal, '-')
2218
+ emit(:set, :close, ']')
2460
2219
  if in_set?
2461
2220
  begin
2462
2221
  top -= 1
@@ -2467,7 +2226,7 @@ te = p+1
2467
2226
 
2468
2227
  else
2469
2228
  begin
2470
- cs = 110
2229
+ cs = 71
2471
2230
  _goto_level = _again
2472
2231
  next
2473
2232
  end
@@ -2475,110 +2234,78 @@ te = p+1
2475
2234
  end
2476
2235
  end
2477
2236
  end
2478
- when 22 then
2479
- # line 146 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2237
+ when 21 then
2480
2238
  begin
2481
2239
  self.set_depth = set_depth - 1 end
2482
- # line 210 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2483
2240
  begin
2484
2241
  te = p+1
2485
- begin
2486
- text = text(data, ts, te).first
2242
+ begin
2243
+ text = copy(data, ts, te)
2487
2244
 
2488
2245
  type = :posixclass
2489
2246
  class_name = text[2..-3]
2490
- if class_name[0].chr == '^'
2247
+ if class_name[0] == '^'
2491
2248
  class_name = class_name[1..-1]
2492
2249
  type = :nonposixclass
2493
2250
  end
2494
2251
 
2495
- emit(type, class_name.to_sym, text, ts, te)
2252
+ unless self.class.posix_classes.include?(class_name)
2253
+ raise ValidationError.for(:posix_class, text)
2254
+ end
2255
+
2256
+ emit(type, class_name.to_sym, text)
2496
2257
  end
2497
2258
  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"
2259
+ when 67 then
2503
2260
  begin
2504
2261
  te = p+1
2505
- begin
2506
- emit(:set, :collation, *text(data, ts, te))
2507
- end
2508
2262
  end
2509
- when 23 then
2510
- # line 146 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2511
2263
  begin
2512
- self.set_depth = set_depth - 1 end
2513
- # line 227 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2514
- 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"
2264
+ self.set_depth = set_depth + 1 end
2265
+ when 83 then
2522
2266
  begin
2523
2267
  te = p+1
2524
2268
  end
2525
- # line 145 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2526
2269
  begin
2527
- self.set_depth = set_depth + 1 end
2528
- when 78 then
2529
- # line 1 "NONE"
2270
+ act = 17; end
2271
+ when 82 then
2530
2272
  begin
2531
2273
  te = p+1
2532
2274
  end
2533
- # line 265 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2534
2275
  begin
2535
2276
  act = 18; end
2536
- when 77 then
2537
- # line 1 "NONE"
2277
+ when 49 then
2538
2278
  begin
2539
2279
  te = p+1
2540
2280
  end
2541
- # line 271 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2542
2281
  begin
2543
- act = 19; end
2544
- when 2 then
2545
- # line 1 "NONE"
2282
+ act = 41; end
2283
+ when 7 then
2546
2284
  begin
2547
2285
  te = p+1
2548
2286
  end
2549
- # line 656 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2550
2287
  begin
2551
- act = 54; end
2552
- when 45 then
2553
- # line 1 "NONE"
2288
+ act = 42; end
2289
+ when 2 then
2554
2290
  begin
2555
2291
  te = p+1
2556
2292
  end
2557
- # line 144 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2558
2293
  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"
2294
+ act = 56; end
2564
2295
  end
2565
2296
  end
2566
2297
  end
2567
2298
  if _goto_level <= _again
2568
- case _re_scanner_to_state_actions[cs]
2569
- when 60 then
2570
- # line 1 "NONE"
2299
+ case _re_scanner_to_state_actions[cs]
2300
+ when 64 then
2571
2301
  begin
2572
2302
  ts = nil; end
2573
- when 32 then
2574
- # line 1 "NONE"
2303
+ when 33 then
2575
2304
  begin
2576
2305
  ts = nil; end
2577
- # line 1 "NONE"
2578
2306
  begin
2579
2307
  act = 0
2580
2308
  end
2581
- # line 2581 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner.rb"
2582
2309
  end
2583
2310
 
2584
2311
  if cs == 0
@@ -2600,19 +2327,16 @@ act = 0
2600
2327
  end
2601
2328
  case _re_scanner_eof_actions[cs]
2602
2329
  when 13 then
2603
- # line 8 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/property.rl"
2604
2330
  begin
2605
2331
 
2606
2332
  raise PrematureEndError.new('unicode property')
2607
2333
  end
2608
- when 12 then
2609
- # line 131 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2334
+ when 24 then
2610
2335
  begin
2611
2336
 
2612
- text = ts ? copy(data, ts-1..-1) : data.pack('c*')
2613
- raise PrematureEndError.new( text )
2337
+ text = copy(data, ts ? ts-1 : 0,-1)
2338
+ raise PrematureEndError.new(text)
2614
2339
  end
2615
- # line 2615 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner.rb"
2616
2340
  end
2617
2341
  end
2618
2342
 
@@ -2623,13 +2347,11 @@ act = 0
2623
2347
  end
2624
2348
  end
2625
2349
 
2626
- # line 755 "/Users/jannoschmuller/code/regexp_parser/lib/regexp_parser/scanner/scanner.rl"
2627
-
2628
2350
  # to avoid "warning: assigned but unused variable - testEof"
2629
2351
  testEof = testEof
2630
2352
 
2631
2353
  if cs == re_scanner_error
2632
- text = ts ? copy(data, ts-1..-1) : data.pack('c*')
2354
+ text = copy(data, ts ? ts-1 : 0,-1)
2633
2355
  raise ScannerError.new("Scan error at '#{text}'")
2634
2356
  end
2635
2357
 
@@ -2639,40 +2361,76 @@ end
2639
2361
  "[#{set_depth}]") if in_set?
2640
2362
 
2641
2363
  # when the entire expression is a literal run
2642
- emit_literal if literal
2364
+ emit_literal if literal_run
2643
2365
 
2644
2366
  tokens
2645
2367
  end
2646
2368
 
2647
2369
  # lazy-load property maps when first needed
2648
- require 'yaml'
2649
- PROP_MAPS_DIR = File.expand_path('../scanner/properties', __FILE__)
2650
-
2651
2370
  def self.short_prop_map
2652
- @short_prop_map ||= YAML.load_file("#{PROP_MAPS_DIR}/short.yml")
2371
+ @short_prop_map ||= parse_prop_map('short')
2653
2372
  end
2654
2373
 
2655
2374
  def self.long_prop_map
2656
- @long_prop_map ||= YAML.load_file("#{PROP_MAPS_DIR}/long.yml")
2375
+ @long_prop_map ||= parse_prop_map('long')
2376
+ end
2377
+
2378
+ def self.parse_prop_map(name)
2379
+ File.read("#{__dir__}/scanner/properties/#{name}.csv").scan(/(.+),(.+)/).to_h
2380
+ end
2381
+
2382
+ def self.posix_classes
2383
+ %w[alnum alpha ascii blank cntrl digit graph
2384
+ lower print punct space upper word xdigit]
2657
2385
  end
2658
2386
 
2659
2387
  # Emits an array with the details of the scanned pattern
2660
- def emit(type, token, text, ts, te)
2388
+ def emit(type, token, text)
2661
2389
  #puts "EMIT: type: #{type}, token: #{token}, text: #{text}, ts: #{ts}, te: #{te}"
2662
2390
 
2663
- emit_literal if literal
2391
+ emit_literal if literal_run
2392
+
2393
+ # Ragel runs with byte-based indices (ts, te). These are of little value to
2394
+ # end-users, so we keep track of char-based indices and emit those instead.
2395
+ ts_char_pos = char_pos
2396
+ te_char_pos = char_pos + text.length
2397
+
2398
+ tok = [type, token, text, ts_char_pos, te_char_pos]
2399
+
2400
+ self.prev_token = tok
2401
+
2402
+ self.char_pos = te_char_pos
2664
2403
 
2665
2404
  if block
2666
- block.call type, token, text, ts, te
2405
+ block.call type, token, text, ts_char_pos, te_char_pos
2406
+ # TODO: in v3.0.0,remove `collect_tokens:` kwarg and only collect if no block given
2407
+ tokens << tok if collect_tokens
2408
+ elsif collect_tokens
2409
+ tokens << tok
2667
2410
  end
2668
-
2669
- tokens << [type, token, text, ts, te]
2670
2411
  end
2671
2412
 
2413
+ attr_accessor :literal_run # only public for #||= to work on ruby <= 2.5
2414
+
2672
2415
  private
2673
2416
 
2674
- attr_accessor :tokens, :literal, :block, :free_spacing, :spacing_stack,
2675
- :group_depth, :set_depth, :conditional_stack
2417
+ attr_accessor :block,
2418
+ :collect_tokens, :tokens, :prev_token,
2419
+ :free_spacing, :spacing_stack,
2420
+ :group_depth, :set_depth, :conditional_stack,
2421
+ :char_pos
2422
+
2423
+ def free_spacing?(input_object, options)
2424
+ if options && !input_object.is_a?(String)
2425
+ raise ArgumentError, 'options cannot be supplied unless scanning a String'
2426
+ end
2427
+
2428
+ options = input_object.options if input_object.is_a?(::Regexp)
2429
+
2430
+ return false unless options
2431
+
2432
+ options & Regexp::EXTENDED != 0
2433
+ end
2676
2434
 
2677
2435
  def in_group?
2678
2436
  group_depth > 0
@@ -2683,41 +2441,29 @@ end
2683
2441
  end
2684
2442
 
2685
2443
  # 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]
2444
+ def copy(data, ts, te)
2445
+ data[ts...te].pack('c*').force_encoding('utf-8')
2694
2446
  end
2695
2447
 
2696
2448
  # 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.
2449
+ # by a call to emit_literal.
2698
2450
  def append_literal(data, ts, te)
2699
- self.literal = literal || []
2700
- literal << text(data, ts, te)
2451
+ (self.literal_run ||= []) << copy(data, ts, te)
2701
2452
  end
2702
2453
 
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.
2454
+ # Emits the literal run collected by calls to the append_literal method.
2705
2455
  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)
2456
+ text = literal_run.join
2457
+ self.literal_run = nil
2458
+ emit(:literal, :literal, text)
2713
2459
  end
2714
2460
 
2715
- def emit_options(text, ts, te)
2461
+ def emit_options(text)
2716
2462
  token = nil
2717
2463
 
2718
2464
  # Ruby allows things like '(?-xxxx)' or '(?xx-xx--xx-:abc)'.
2719
2465
  text =~ /\(\?([mixdau]*)(-(?:[mix]*))*(:)?/
2720
- positive, negative, group_local = $1, $2, $3
2466
+ positive, negative, group_local = $1,$2,$3
2721
2467
 
2722
2468
  if positive.include?('x')
2723
2469
  self.free_spacing = true
@@ -2738,28 +2484,13 @@ end
2738
2484
  token = :options_switch
2739
2485
  end
2740
2486
 
2741
- emit(:group, token, text, ts, te)
2487
+ emit(:group, token, text)
2742
2488
  end
2743
2489
 
2744
2490
  def emit_meta_control_sequence(data, ts, te, token)
2745
2491
  if data.last < 0x00 || data.last > 0x7F
2746
- validation_error(:sequence, 'escape', token.to_s)
2492
+ raise ValidationError.for(:sequence, 'escape', token.to_s)
2747
2493
  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
2494
+ emit(:escape, token, copy(data, ts-1,te))
2764
2495
  end
2765
2496
  end # module Regexp::Scanner