regexp_parser 1.7.0 → 2.8.1

Sign up to get free protection for your applications and to get access to all the features.
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