source: other-projects/rsyntax-textarea/src/java/org/fife/ui/rsyntaxtextarea/modes/RubyTokenMaker.java@ 25584

Last change on this file since 25584 was 25584, checked in by davidb, 12 years ago

Initial cut an a text edit area for GLI that supports color syntax highlighting

File size: 63.1 KB
Line 
1/* The following code was generated by JFlex 1.4.1 on 1/20/09 10:04 AM */
2
3/*
4 * 09/11/2008
5 *
6 * RubyTokenMaker.java - Scanner for Ruby
7 *
8 * This library is distributed under a modified BSD license. See the included
9 * RSyntaxTextArea.License.txt file for details.
10 */
11package org.fife.ui.rsyntaxtextarea.modes;
12
13import java.io.*;
14import javax.swing.text.Segment;
15
16import org.fife.ui.rsyntaxtextarea.*;
17
18
19/**
20 * Scanner for Ruby.<p>
21 *
22 * This implementation was created using
23 * <a href="http://www.jflex.de/">JFlex</a> 1.4.1; however, the generated file
24 * was modified for performance. Memory allocation needs to be almost
25 * completely removed to be competitive with the handwritten lexers (subclasses
26 * of <code>AbstractTokenMaker</code>, so this class has been modified so that
27 * Strings are never allocated (via yytext()), and the scanner never has to
28 * worry about refilling its buffer (needlessly copying chars around).
29 * We can achieve this because RText always scans exactly 1 line of tokens at a
30 * time, and hands the scanner this line as an array of characters (a Segment
31 * really). Since tokens contain pointers to char arrays instead of Strings
32 * holding their contents, there is no need for allocating new memory for
33 * Strings.<p>
34 *
35 * The actual algorithm generated for scanning has, of course, not been
36 * modified.<p>
37 *
38 * If you wish to regenerate this file yourself, keep in mind the following:
39 * <ul>
40 * <li>The generated RubyTokenMaker.java</code> file will contain two
41 * definitions of both <code>zzRefill</code> and <code>yyreset</code>.
42 * You should hand-delete the second of each definition (the ones
43 * generated by the lexer), as these generated methods modify the input
44 * buffer, which we'll never have to do.</li>
45 * <li>You should also change the declaration/definition of zzBuffer to NOT
46 * be initialized. This is a needless memory allocation for us since we
47 * will be pointing the array somewhere else anyway.</li>
48 * <li>You should NOT call <code>yylex()</code> on the generated scanner
49 * directly; rather, you should use <code>getTokenList</code> as you would
50 * with any other <code>TokenMaker</code> instance.</li>
51 * </ul>
52 *
53 * @author Robert Futrell
54 * @version 0.5
55 *
56 */
57
58public class RubyTokenMaker extends AbstractJFlexTokenMaker {
59
60 /** This character denotes the end of file */
61 public static final int YYEOF = -1;
62
63 /** lexical states */
64 public static final int HEREDOC_EOF_SINGLE_QUOTED = 11;
65 public static final int DOCCOMMENT = 14;
66 public static final int HEREDOC_EOT_SINGLE_QUOTED = 13;
67 public static final int HEREDOC_EOT_UNQUOTED = 12;
68 public static final int STRING_Q_SLASH = 5;
69 public static final int STRING_Q_BANG = 2;
70 public static final int STRING_Q_LT = 7;
71 public static final int STRING = 1;
72 public static final int BACKTICKS = 9;
73 public static final int YYINITIAL = 0;
74 public static final int HEREDOC_EOF_UNQUOTED = 10;
75 public static final int STRING_Q_CURLY_BRACE = 3;
76 public static final int STRING_Q_PAREN = 4;
77 public static final int HEREDOC_EOF_DOUBLE_QUOTED = 11;
78 public static final int CHAR_LITERAL = 8;
79 public static final int HEREDOC_EOT_DOUBLE_QUOTED = 13;
80 public static final int STRING_Q_SQUARE_BRACKET = 6;
81
82 /**
83 * Translates characters to character classes
84 */
85 private static final String ZZ_CMAP_PACKED =
86 "\11\0\1\24\1\23\1\0\1\24\1\7\22\0\1\24\1\44\1\105"+
87 "\1\10\1\55\1\47\1\52\1\106\1\110\1\35\1\43\1\43\1\57"+
88 "\1\42\1\37\1\46\1\3\1\4\6\6\2\2\1\36\1\57\1\50"+
89 "\1\25\1\51\1\103\1\56\1\66\1\61\1\5\1\60\1\34\1\63"+
90 "\1\62\1\1\1\64\2\1\1\1\1\1\1\65\1\67\1\1\1\107"+
91 "\1\1\1\72\1\70\1\1\1\1\1\107\3\1\1\40\1\11\1\41"+
92 "\1\54\1\12\1\112\1\20\1\26\1\75\1\32\1\16\1\17\1\27"+
93 "\1\101\1\30\1\1\1\74\1\21\1\76\1\31\1\71\1\100\1\104"+
94 "\1\14\1\22\1\13\1\15\1\73\1\102\1\33\1\77\1\1\1\111"+
95 "\1\53\1\113\1\45\uff81\0";
96
97 /**
98 * Translates characters to character classes
99 */
100 private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
101
102 /**
103 * Translates DFA states to action switch labels.
104 */
105 private static final int [] ZZ_ACTION = zzUnpackAction();
106
107 private static final String ZZ_ACTION_PACKED_0 =
108 "\17\0\1\1\1\2\2\3\1\2\1\4\10\2\1\5"+
109 "\1\6\1\7\6\2\1\10\1\2\11\7\2\1\11\2"+
110 "\1\11\1\2\1\12\1\13\1\14\1\15\1\16\1\17"+
111 "\1\20\1\15\1\21\1\15\1\22\1\15\1\23\1\15"+
112 "\1\24\1\15\1\25\1\15\1\26\1\15\1\27\1\30"+
113 "\1\31\1\15\1\32\1\33\1\15\1\34\1\15\1\35"+
114 "\1\36\1\15\1\37\1\15\1\40\1\15\1\1\1\41"+
115 "\1\3\4\1\30\2\1\0\7\2\1\42\5\2\1\43"+
116 "\1\7\1\0\1\44\1\45\1\46\1\47\1\50\1\51"+
117 "\2\7\3\52\1\0\1\1\4\2\1\7\12\2\1\16"+
118 "\1\27\2\15\1\0\1\41\2\3\1\53\24\2\1\42"+
119 "\7\2\1\11\6\2\1\0\10\2\1\42\5\0\20\2"+
120 "\1\54\1\0\4\1\1\55\1\2\1\11\16\2\1\11"+
121 "\5\2\1\0\3\2\4\0\11\2\1\56\12\2\1\0"+
122 "\2\2\1\57\1\60\3\0\2\2\1\11\5\2\1\61"+
123 "\1\2\6\0\4\2\1\62\1\63\1\11\7\2";
124
125 private static int [] zzUnpackAction() {
126 int [] result = new int[344];
127 int offset = 0;
128 offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
129 return result;
130 }
131
132 private static int zzUnpackAction(String packed, int offset, int [] result) {
133 int i = 0; /* index in packed string */
134 int j = offset; /* index in unpacked array */
135 int l = packed.length();
136 while (i < l) {
137 int count = packed.charAt(i++);
138 int value = packed.charAt(i++);
139 do result[j++] = value; while (--count > 0);
140 }
141 return j;
142 }
143
144
145 /**
146 * Translates a state to a row index in the transition table
147 */
148 private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
149
150 private static final String ZZ_ROWMAP_PACKED_0 =
151 "\0\0\0\114\0\230\0\344\0\u0130\0\u017c\0\u01c8\0\u0214"+
152 "\0\u0260\0\u02ac\0\u02f8\0\u0344\0\u0390\0\u03dc\0\u0428\0\u0474"+
153 "\0\u04c0\0\u050c\0\u0558\0\u05a4\0\u05f0\0\u063c\0\u0688\0\u06d4"+
154 "\0\u0720\0\u076c\0\u07b8\0\u0804\0\u0850\0\u05a4\0\u089c\0\u08e8"+
155 "\0\u0934\0\u0980\0\u09cc\0\u0a18\0\u0a64\0\u0ab0\0\u05a4\0\u0afc"+
156 "\0\u0b48\0\u05a4\0\u0b94\0\u0be0\0\u0c2c\0\u0c78\0\u0cc4\0\u0d10"+
157 "\0\u0d5c\0\u0da8\0\u0df4\0\u0e40\0\u0e8c\0\u0ed8\0\u0f24\0\u0f70"+
158 "\0\u0fbc\0\u1008\0\u1054\0\u10a0\0\u10ec\0\u1138\0\u05a4\0\u05a4"+
159 "\0\u05a4\0\u1184\0\u11d0\0\u05a4\0\u05a4\0\u121c\0\u05a4\0\u1268"+
160 "\0\u05a4\0\u12b4\0\u05a4\0\u1300\0\u05a4\0\u134c\0\u05a4\0\u1398"+
161 "\0\u05a4\0\u13e4\0\u1430\0\u05a4\0\u05a4\0\u147c\0\u05a4\0\u05a4"+
162 "\0\u14c8\0\u05a4\0\u1514\0\u05a4\0\u05a4\0\u1560\0\u05a4\0\u15ac"+
163 "\0\u05a4\0\u15f8\0\u1644\0\u1690\0\u16dc\0\u16dc\0\u1728\0\u1774"+
164 "\0\u17c0\0\u180c\0\u1858\0\u18a4\0\u18f0\0\u193c\0\u1988\0\u19d4"+
165 "\0\u1a20\0\u1a6c\0\u1ab8\0\u1b04\0\u1b50\0\u1b9c\0\u1be8\0\u1c34"+
166 "\0\u1c80\0\u1ccc\0\u1d18\0\u1d64\0\u1db0\0\u1dfc\0\u1e48\0\u1e94"+
167 "\0\u1ee0\0\u1f2c\0\u1f78\0\u1fc4\0\u2010\0\u205c\0\u20a8\0\u20f4"+
168 "\0\u2140\0\u04c0\0\u218c\0\u21d8\0\u2224\0\u2270\0\u22bc\0\u2308"+
169 "\0\u2354\0\u23a0\0\u05a4\0\u05a4\0\u05a4\0\u05a4\0\u05a4\0\u05a4"+
170 "\0\u23ec\0\u2438\0\u2484\0\u0474\0\u05a4\0\u24d0\0\u251c\0\u2568"+
171 "\0\u25b4\0\u2600\0\u264c\0\u04c0\0\u2698\0\u26e4\0\u2730\0\u277c"+
172 "\0\u27c8\0\u2814\0\u2860\0\u28ac\0\u28f8\0\u2944\0\u05a4\0\u05a4"+
173 "\0\u2990\0\u29dc\0\u2a28\0\u2a74\0\u2ac0\0\u2b0c\0\u2b58\0\u2ba4"+
174 "\0\u2bf0\0\u2c3c\0\u2c88\0\u2cd4\0\u2d20\0\u2d6c\0\u2db8\0\u2e04"+
175 "\0\u2e50\0\u2e9c\0\u2ee8\0\u2f34\0\u2f80\0\u2fcc\0\u3018\0\u3064"+
176 "\0\u30b0\0\u30fc\0\u3148\0\u3194\0\u31e0\0\u322c\0\u3278\0\u32c4"+
177 "\0\u3310\0\u335c\0\u33a8\0\u33f4\0\u3440\0\u348c\0\u34d8\0\u3524"+
178 "\0\u3570\0\u35bc\0\u3608\0\u3654\0\u36a0\0\u36ec\0\u3738\0\u3784"+
179 "\0\u37d0\0\u381c\0\u3868\0\u38b4\0\u3900\0\u394c\0\u3998\0\u39e4"+
180 "\0\u3a30\0\u3a7c\0\u3ac8\0\u3b14\0\u3b60\0\u3bac\0\u3bf8\0\u3c44"+
181 "\0\u3c90\0\u3cdc\0\u3d28\0\u3d74\0\u3dc0\0\u3e0c\0\u3e58\0\u3ea4"+
182 "\0\u3ef0\0\u14c8\0\u3f3c\0\u2a74\0\u2ac0\0\u2b0c\0\u2b58\0\u04c0"+
183 "\0\u3f88\0\u04c0\0\u3fd4\0\u4020\0\u406c\0\u40b8\0\u4104\0\u4150"+
184 "\0\u419c\0\u41e8\0\u4234\0\u4280\0\u42cc\0\u4318\0\u4364\0\u43b0"+
185 "\0\u05a4\0\u43fc\0\u4448\0\u4494\0\u44e0\0\u452c\0\u4578\0\u45c4"+
186 "\0\u4610\0\u465c\0\u46a8\0\u46f4\0\u4740\0\u478c\0\u47d8\0\u4824"+
187 "\0\u4870\0\u48bc\0\u4908\0\u4954\0\u49a0\0\u49ec\0\u4a38\0\u05a4"+
188 "\0\u4a84\0\u4ad0\0\u4b1c\0\u4b68\0\u4bb4\0\u4c00\0\u4c4c\0\u4c98"+
189 "\0\u4ce4\0\u4d30\0\u4d7c\0\u4dc8\0\u4e14\0\u05a4\0\u05a4\0\u4e60"+
190 "\0\u4eac\0\u4ef8\0\u4f44\0\u4f90\0\u4fdc\0\u5028\0\u5074\0\u50c0"+
191 "\0\u510c\0\u4fdc\0\u05a4\0\u5158\0\u51a4\0\u51f0\0\u523c\0\u5288"+
192 "\0\u52d4\0\u5320\0\u536c\0\u53b8\0\u5404\0\u5450\0\u05a4\0\u05a4"+
193 "\0\u3738\0\u549c\0\u54e8\0\u5534\0\u5580\0\u55cc\0\u5618\0\u5664";
194
195 private static int [] zzUnpackRowMap() {
196 int [] result = new int[344];
197 int offset = 0;
198 offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
199 return result;
200 }
201
202 private static int zzUnpackRowMap(String packed, int offset, int [] result) {
203 int i = 0; /* index in packed string */
204 int j = offset; /* index in unpacked array */
205 int l = packed.length();
206 while (i < l) {
207 int high = packed.charAt(i++) << 16;
208 result[j++] = high | packed.charAt(i++);
209 }
210 return j;
211 }
212
213 /**
214 * The transition table of the DFA
215 */
216 private static final int [] ZZ_TRANS = zzUnpackTrans();
217
218 private static final String ZZ_TRANS_PACKED_0 =
219 "\1\20\1\21\1\22\1\23\1\22\1\21\1\22\1\24"+
220 "\1\25\1\20\1\21\1\26\1\27\1\30\1\31\1\32"+
221 "\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\42"+
222 "\1\43\1\44\1\45\1\21\1\46\1\47\1\50\1\51"+
223 "\2\52\2\53\1\54\1\52\1\53\1\55\1\56\1\57"+
224 "\1\60\1\61\1\52\1\62\1\63\1\24\1\21\1\64"+
225 "\1\21\1\65\1\66\1\21\1\67\2\21\1\70\1\71"+
226 "\2\21\1\72\1\73\1\74\1\75\1\21\1\76\1\24"+
227 "\1\21\1\77\1\100\1\21\2\47\1\101\1\47\11\102"+
228 "\1\103\11\102\1\104\61\102\1\105\6\102\11\106\1\103"+
229 "\11\106\1\107\20\106\1\105\47\106\11\110\1\103\11\110"+
230 "\1\111\67\110\1\105\11\112\1\103\11\112\1\113\11\112"+
231 "\1\105\56\112\11\114\1\103\11\114\1\115\22\114\1\105"+
232 "\45\114\11\116\1\103\11\116\1\117\15\116\1\105\52\116"+
233 "\11\120\1\103\11\120\1\121\25\120\1\105\42\120\11\122"+
234 "\1\123\11\122\1\124\62\122\1\125\5\122\11\126\1\103"+
235 "\11\126\1\127\66\126\1\130\1\126\11\131\1\103\11\131"+
236 "\1\132\10\131\1\133\70\131\1\103\11\131\1\134\10\131"+
237 "\1\133\70\131\1\103\11\131\1\135\10\131\1\136\70\131"+
238 "\1\103\11\131\1\137\10\131\1\136\57\131\23\140\1\141"+
239 "\1\140\1\142\66\140\7\20\1\0\13\20\3\0\7\20"+
240 "\20\0\2\20\1\0\23\20\1\0\1\20\2\0\1\20"+
241 "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+
242 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
243 "\4\0\2\20\3\22\1\20\1\22\1\0\2\20\1\143"+
244 "\3\20\1\144\4\20\3\0\6\20\1\144\20\0\2\20"+
245 "\1\0\23\20\1\0\1\20\2\0\1\20\4\0\3\20"+
246 "\2\145\1\20\1\145\1\0\2\20\1\146\10\20\3\0"+
247 "\1\147\3\20\1\150\1\151\1\20\20\0\2\20\1\0"+
248 "\23\20\1\0\1\20\2\0\1\20\120\0\23\25\1\0"+
249 "\70\25\1\20\6\21\1\0\2\20\2\21\1\152\1\21"+
250 "\1\153\4\21\3\0\7\21\20\0\2\20\1\0\21\21"+
251 "\1\154\1\21\1\0\1\21\2\0\1\21\4\0\1\20"+
252 "\6\21\1\0\2\20\4\21\1\155\1\21\1\156\2\21"+
253 "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21"+
254 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+
255 "\3\0\3\21\1\157\3\21\20\0\2\20\1\0\23\21"+
256 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
257 "\2\20\7\21\1\160\1\21\3\0\3\21\1\161\1\21"+
258 "\1\162\1\21\20\0\2\20\1\0\13\21\1\163\7\21"+
259 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
260 "\2\20\6\21\1\164\2\21\3\0\7\21\20\0\2\20"+
261 "\1\0\11\21\1\165\11\21\1\0\1\21\2\0\1\21"+
262 "\4\0\1\20\6\21\1\0\2\20\1\21\1\166\1\21"+
263 "\1\167\3\21\1\170\1\21\3\0\3\21\1\171\3\21"+
264 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
265 "\4\0\1\20\6\21\1\0\2\20\6\21\1\172\2\21"+
266 "\3\0\7\21\20\0\2\20\1\0\11\21\1\173\11\21"+
267 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
268 "\2\20\2\21\1\174\1\175\1\176\2\21\1\177\1\21"+
269 "\3\0\7\21\20\0\2\20\1\0\17\21\1\200\1\201"+
270 "\2\21\1\0\1\21\2\0\1\21\30\0\1\37\114\0"+
271 "\1\53\1\202\16\0\1\52\46\0\1\20\6\21\1\0"+
272 "\2\20\2\21\1\203\1\21\1\204\4\21\3\0\2\21"+
273 "\1\205\4\21\20\0\2\20\1\0\23\21\1\0\1\21"+
274 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21"+
275 "\1\206\2\21\1\207\1\210\3\0\7\21\20\0\2\20"+
276 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
277 "\6\21\1\0\2\20\1\21\1\211\3\21\1\212\3\21"+
278 "\3\0\3\21\1\212\3\21\20\0\2\20\1\0\23\21"+
279 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
280 "\2\20\4\21\1\213\4\21\3\0\2\21\1\214\4\21"+
281 "\20\0\2\20\1\0\11\21\1\215\11\21\1\0\1\21"+
282 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21"+
283 "\1\216\4\21\3\0\7\21\20\0\2\20\1\0\11\21"+
284 "\1\212\11\21\1\0\1\21\2\0\1\21\4\0\1\20"+
285 "\6\21\1\0\2\20\11\21\3\0\7\21\20\0\2\20"+
286 "\1\0\5\21\1\217\15\21\1\0\1\21\2\0\1\21"+
287 "\5\0\1\220\3\0\1\220\4\0\11\220\3\0\7\220"+
288 "\1\0\1\52\21\0\23\220\1\0\1\220\2\0\1\220"+
289 "\43\0\1\221\101\0\1\52\113\0\1\52\17\0\1\52"+
290 "\73\0\1\52\5\0\1\222\4\0\1\223\3\0\1\224"+
291 "\1\0\1\225\1\0\1\226\31\0\1\222\1\0\1\222"+
292 "\2\0\1\222\1\227\1\230\27\0\1\231\22\0\1\232"+
293 "\70\0\1\52\23\0\1\52\114\0\1\52\114\0\1\52"+
294 "\40\0\1\20\1\233\3\234\1\233\1\234\1\0\2\20"+
295 "\11\233\2\0\1\235\7\233\1\0\2\235\2\0\1\236"+
296 "\4\235\1\0\3\235\2\0\2\234\1\235\23\233\1\235"+
297 "\1\233\2\235\1\233\2\0\1\235\1\0\1\20\1\233"+
298 "\3\20\1\233\1\20\1\0\2\20\11\233\3\0\7\233"+
299 "\20\0\1\20\1\237\1\0\23\233\1\0\1\233\2\0"+
300 "\1\233\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
301 "\6\21\1\240\20\0\2\20\1\0\23\21\1\0\1\21"+
302 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\7\21"+
303 "\1\241\1\21\3\0\7\21\20\0\2\20\1\0\23\21"+
304 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
305 "\2\20\11\21\3\0\3\21\1\242\3\21\20\0\2\20"+
306 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
307 "\6\21\1\0\2\20\2\21\1\243\6\21\3\0\7\21"+
308 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
309 "\4\0\1\20\6\21\1\0\2\20\2\21\1\244\6\21"+
310 "\3\0\7\21\20\0\2\20\1\0\20\21\1\245\2\21"+
311 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
312 "\2\20\1\21\1\246\7\21\3\0\7\21\20\0\2\20"+
313 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
314 "\6\21\1\0\2\20\6\21\1\247\1\250\1\21\3\0"+
315 "\7\21\20\0\2\20\1\0\21\21\1\251\1\21\1\0"+
316 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
317 "\11\21\3\0\7\21\20\0\2\20\1\0\11\21\1\252"+
318 "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
319 "\1\0\2\20\11\21\3\0\2\21\1\253\4\21\20\0"+
320 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
321 "\1\20\6\21\1\0\2\20\2\21\1\254\1\255\5\21"+
322 "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21"+
323 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+
324 "\3\0\7\21\20\0\2\20\1\0\21\21\1\256\1\21"+
325 "\1\0\1\21\2\0\1\21\4\0\11\102\1\0\11\102"+
326 "\1\0\61\102\1\0\6\102\23\257\1\0\70\257\11\106"+
327 "\1\0\11\106\1\0\20\106\1\0\47\106\11\110\1\0"+
328 "\11\110\1\0\67\110\1\0\11\112\1\0\11\112\1\0"+
329 "\11\112\1\0\56\112\11\114\1\0\11\114\1\0\22\114"+
330 "\1\0\45\114\11\116\1\0\11\116\1\0\15\116\1\0"+
331 "\52\116\11\120\1\0\11\120\1\0\25\120\1\0\42\120"+
332 "\11\122\1\0\11\122\1\0\62\122\1\0\5\122\23\260"+
333 "\1\0\70\260\11\126\1\0\11\126\1\0\66\126\1\0"+
334 "\1\126\11\131\1\0\11\131\1\0\101\131\1\0\11\131"+
335 "\1\0\43\131\1\261\35\131\1\0\11\131\1\0\43\131"+
336 "\1\262\24\131\23\140\1\0\1\140\1\0\66\140\16\0"+
337 "\1\263\75\0\2\20\3\22\1\20\1\22\1\0\2\20"+
338 "\1\143\10\20\3\0\7\20\20\0\2\20\1\0\23\20"+
339 "\1\0\1\20\2\0\1\20\4\0\2\20\3\264\1\20"+
340 "\1\264\1\0\13\20\3\0\7\20\20\0\2\20\1\0"+
341 "\23\20\1\0\1\20\2\0\1\20\4\0\3\20\2\145"+
342 "\1\20\1\145\1\0\2\20\1\146\10\20\3\0\7\20"+
343 "\20\0\2\20\1\0\23\20\1\0\1\20\2\0\1\20"+
344 "\4\0\3\20\2\265\2\20\1\0\13\20\3\0\7\20"+
345 "\20\0\2\20\1\0\23\20\1\0\1\20\2\0\1\20"+
346 "\4\0\2\20\3\266\1\20\1\266\1\0\13\20\3\0"+
347 "\7\20\20\0\2\20\1\0\23\20\1\0\1\20\2\0"+
348 "\1\20\4\0\2\20\5\267\1\0\6\20\3\267\2\20"+
349 "\3\0\1\267\3\20\1\267\1\20\1\267\20\0\2\20"+
350 "\1\0\2\267\1\20\1\267\2\20\1\267\6\20\1\267"+
351 "\5\20\1\0\1\20\2\0\1\20\4\0\1\20\6\21"+
352 "\1\0\2\20\3\21\1\270\2\21\1\271\2\21\3\0"+
353 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
354 "\1\21\4\0\1\20\6\21\1\0\2\20\10\21\1\272"+
355 "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21"+
356 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21"+
357 "\1\273\4\21\3\0\7\21\20\0\2\20\1\0\23\21"+
358 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
359 "\2\20\1\21\1\274\4\21\1\275\1\21\1\276\3\0"+
360 "\4\21\1\277\2\21\20\0\2\20\1\0\23\21\1\0"+
361 "\1\300\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
362 "\11\21\3\0\2\21\1\301\1\302\3\21\20\0\2\20"+
363 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
364 "\6\21\1\0\2\20\1\21\1\303\5\21\1\304\1\21"+
365 "\3\0\4\21\1\305\2\21\20\0\2\20\1\0\23\21"+
366 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
367 "\2\20\10\21\1\306\3\0\7\21\20\0\2\20\1\0"+
368 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
369 "\1\0\2\20\10\21\1\307\3\0\4\21\1\212\2\21"+
370 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
371 "\4\0\1\20\6\21\1\0\2\20\4\21\1\310\4\21"+
372 "\3\0\2\21\1\311\4\21\20\0\2\20\1\0\23\21"+
373 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
374 "\2\20\6\21\1\312\2\21\3\0\7\21\20\0\2\20"+
375 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
376 "\6\21\1\0\2\20\7\21\1\313\1\21\3\0\2\21"+
377 "\1\312\4\21\20\0\2\20\1\0\23\21\1\0\1\21"+
378 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21"+
379 "\1\314\6\21\3\0\7\21\20\0\2\20\1\0\23\21"+
380 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
381 "\2\20\1\315\10\21\3\0\7\21\20\0\2\20\1\0"+
382 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
383 "\1\0\2\20\1\21\1\316\7\21\3\0\7\21\20\0"+
384 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
385 "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\317"+
386 "\4\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
387 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
388 "\4\21\1\244\2\21\20\0\2\20\1\0\23\21\1\0"+
389 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
390 "\11\21\3\0\7\21\20\0\2\20\1\0\16\21\1\320"+
391 "\4\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
392 "\1\0\2\20\6\21\1\302\2\21\3\0\7\21\20\0"+
393 "\2\20\1\0\11\21\1\321\3\21\1\322\5\21\1\0"+
394 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
395 "\6\21\1\323\2\21\3\0\7\21\20\0\2\20\1\0"+
396 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
397 "\1\0\2\20\11\21\3\0\1\324\6\21\20\0\2\20"+
398 "\1\0\20\21\1\325\2\21\1\0\1\21\2\0\1\21"+
399 "\4\0\1\20\6\21\1\0\2\20\7\21\1\326\1\21"+
400 "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21"+
401 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21"+
402 "\1\327\4\21\3\0\7\21\20\0\2\20\1\0\23\21"+
403 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
404 "\2\20\10\21\1\330\3\0\7\21\20\0\2\20\1\0"+
405 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
406 "\1\0\2\20\2\21\1\331\4\21\1\332\1\21\3\0"+
407 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
408 "\1\21\22\0\1\333\75\0\1\20\6\21\1\0\2\20"+
409 "\4\21\1\334\4\21\3\0\7\21\20\0\2\20\1\0"+
410 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
411 "\1\0\2\20\11\21\3\0\1\21\1\335\5\21\20\0"+
412 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
413 "\1\20\6\21\1\0\2\20\11\21\3\0\3\21\1\336"+
414 "\3\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
415 "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\337"+
416 "\7\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0"+
417 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
418 "\11\21\3\0\7\21\20\0\2\20\1\0\11\21\1\340"+
419 "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
420 "\1\0\2\20\3\21\1\341\5\21\3\0\7\21\20\0"+
421 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
422 "\1\20\6\21\1\0\2\20\4\21\1\342\4\21\3\0"+
423 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
424 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
425 "\5\21\1\343\1\21\20\0\2\20\1\0\23\21\1\0"+
426 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
427 "\7\21\1\212\1\21\3\0\7\21\20\0\2\20\1\0"+
428 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
429 "\1\0\2\20\1\21\1\244\7\21\3\0\7\21\20\0"+
430 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
431 "\1\20\6\21\1\0\2\20\5\21\1\344\3\21\3\0"+
432 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
433 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
434 "\7\21\20\0\2\20\1\0\1\212\22\21\1\0\1\21"+
435 "\2\0\1\21\5\0\6\220\3\0\11\220\3\0\7\220"+
436 "\23\0\23\220\1\0\1\220\2\0\1\220\43\0\1\52"+
437 "\114\0\1\223\3\0\1\224\1\0\1\225\1\0\1\226"+
438 "\37\0\1\227\1\230\53\0\1\52\66\0\1\345\7\0"+
439 "\1\346\50\0\1\347\1\350\3\0\1\351\1\0\1\20"+
440 "\6\233\1\0\2\20\11\233\3\0\7\233\20\0\2\20"+
441 "\1\0\23\233\1\0\1\233\2\0\1\233\7\0\1\235"+
442 "\14\0\2\235\6\0\1\235\1\0\1\235\30\0\2\235"+
443 "\6\0\1\235\4\0\1\235\1\0\1\235\11\0\1\20"+
444 "\1\233\3\20\1\233\1\20\1\0\2\20\11\233\3\0"+
445 "\7\233\20\0\2\20\1\0\23\233\1\0\1\233\2\0"+
446 "\1\233\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
447 "\7\21\20\0\2\20\1\0\2\21\1\352\20\21\1\0"+
448 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
449 "\11\21\3\0\7\21\20\0\2\20\1\0\11\21\1\353"+
450 "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
451 "\1\0\2\20\1\21\1\354\7\21\3\0\7\21\20\0"+
452 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
453 "\1\20\6\21\1\0\2\20\2\21\1\355\6\21\3\0"+
454 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
455 "\1\21\4\0\1\20\6\21\1\0\2\20\4\21\1\356"+
456 "\4\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0"+
457 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
458 "\2\21\1\357\6\21\3\0\7\21\20\0\2\20\1\0"+
459 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
460 "\1\0\2\20\1\21\1\360\5\21\1\361\1\362\3\0"+
461 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
462 "\1\21\4\0\1\20\6\21\1\0\2\20\6\21\1\363"+
463 "\2\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0"+
464 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
465 "\11\21\3\0\7\21\20\0\2\20\1\0\11\21\1\364"+
466 "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
467 "\1\0\2\20\11\21\3\0\4\21\1\365\2\21\20\0"+
468 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
469 "\1\20\6\21\1\0\2\20\4\21\1\366\4\21\3\0"+
470 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
471 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
472 "\2\21\1\367\4\21\20\0\2\20\1\0\11\21\1\310"+
473 "\11\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
474 "\1\0\2\20\1\21\1\370\7\21\3\0\7\21\20\0"+
475 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
476 "\1\20\6\21\1\0\2\20\4\21\1\273\4\21\3\0"+
477 "\2\21\1\371\4\21\20\0\2\20\1\0\23\21\1\0"+
478 "\1\21\2\0\1\21\4\0\11\131\1\0\11\131\1\0"+
479 "\37\131\1\372\41\131\1\0\11\131\1\0\44\131\1\372"+
480 "\23\131\31\0\1\373\62\0\2\20\3\264\1\20\1\264"+
481 "\1\0\2\20\1\374\10\20\3\0\7\20\20\0\2\20"+
482 "\1\0\23\20\1\0\1\20\2\0\1\20\4\0\3\20"+
483 "\2\265\2\20\1\0\2\20\1\375\10\20\3\0\7\20"+
484 "\20\0\2\20\1\0\23\20\1\0\1\20\2\0\1\20"+
485 "\4\0\2\20\3\266\1\20\1\266\1\0\2\20\1\376"+
486 "\10\20\3\0\7\20\20\0\2\20\1\0\23\20\1\0"+
487 "\1\20\2\0\1\20\4\0\1\20\1\377\5\267\1\0"+
488 "\2\20\4\377\3\267\2\377\3\0\1\267\3\377\1\267"+
489 "\1\377\1\267\20\0\2\20\1\0\2\267\1\377\1\267"+
490 "\2\377\1\267\6\377\1\267\5\377\1\0\1\377\2\0"+
491 "\1\377\4\0\1\20\6\21\1\0\2\20\4\21\1\u0100"+
492 "\4\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0"+
493 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
494 "\11\21\3\0\7\21\20\0\2\20\1\0\15\21\1\u0101"+
495 "\2\21\1\u0102\2\21\1\0\1\21\2\0\1\21\4\0"+
496 "\1\20\6\21\1\0\2\20\1\21\1\u0102\7\21\3\0"+
497 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
498 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
499 "\3\21\1\212\3\21\20\0\2\20\1\0\23\21\1\0"+
500 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
501 "\2\21\1\u0103\1\u0104\5\21\3\0\7\21\20\0\2\20"+
502 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
503 "\6\21\1\0\2\20\11\21\3\0\4\21\1\u0105\2\21"+
504 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
505 "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+
506 "\20\0\2\20\1\0\15\21\1\u0106\5\21\1\0\1\21"+
507 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+
508 "\3\0\7\21\20\0\2\20\1\0\11\21\1\212\11\21"+
509 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
510 "\2\20\3\21\1\u0107\5\21\3\0\7\21\20\0\2\20"+
511 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
512 "\6\21\1\0\2\20\10\21\1\u0108\3\0\7\21\20\0"+
513 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
514 "\1\20\6\21\1\0\2\20\11\21\3\0\4\21\1\u0102"+
515 "\2\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
516 "\1\21\4\0\1\20\6\21\1\0\2\20\2\21\1\u0109"+
517 "\6\21\3\0\2\21\1\214\4\21\20\0\2\20\1\0"+
518 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
519 "\1\0\2\20\4\21\1\363\4\21\3\0\7\21\20\0"+
520 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
521 "\1\20\6\21\1\0\2\20\4\21\1\u010a\4\21\3\0"+
522 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
523 "\1\21\4\0\1\20\6\21\1\0\2\20\4\21\1\212"+
524 "\4\21\3\0\2\21\1\u010a\4\21\20\0\2\20\1\0"+
525 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
526 "\1\0\2\20\3\21\1\u010b\5\21\3\0\7\21\20\0"+
527 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
528 "\1\20\6\21\1\0\2\20\11\21\3\0\7\21\20\0"+
529 "\2\20\1\0\15\21\1\u0102\5\21\1\0\1\21\2\0"+
530 "\1\21\4\0\1\20\6\21\1\0\2\20\1\21\1\324"+
531 "\7\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0"+
532 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
533 "\7\21\1\u0102\1\21\3\0\7\21\20\0\2\20\1\0"+
534 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
535 "\1\0\2\20\10\21\1\270\3\0\7\21\20\0\2\20"+
536 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
537 "\6\21\1\0\2\20\11\21\3\0\7\21\20\0\2\20"+
538 "\1\0\14\21\1\u0102\1\21\1\353\4\21\1\0\1\21"+
539 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\4\21"+
540 "\1\u010c\4\21\3\0\7\21\20\0\2\20\1\0\23\21"+
541 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
542 "\2\20\11\21\3\0\7\21\20\0\2\20\1\0\11\21"+
543 "\1\u010d\11\21\1\0\1\21\2\0\1\21\4\0\1\20"+
544 "\6\21\1\0\2\20\6\21\1\u010e\2\21\3\0\7\21"+
545 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
546 "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\1\u010f"+
547 "\6\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
548 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
549 "\7\21\20\0\2\20\1\0\20\21\1\u0102\2\21\1\0"+
550 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
551 "\6\21\1\u0110\2\21\3\0\7\21\20\0\2\20\1\0"+
552 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
553 "\1\0\2\20\11\21\3\0\3\21\1\302\3\21\20\0"+
554 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
555 "\1\20\6\21\1\0\2\20\11\21\3\0\7\21\7\0"+
556 "\1\u0111\10\0\2\20\1\0\23\21\1\0\1\21\2\0"+
557 "\1\21\4\0\1\20\6\21\1\0\2\20\4\21\1\u0112"+
558 "\4\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0"+
559 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
560 "\4\21\1\u0113\1\212\3\21\3\0\7\21\20\0\2\20"+
561 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
562 "\6\21\1\0\2\20\4\21\1\321\4\21\3\0\7\21"+
563 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
564 "\4\0\1\20\6\21\1\0\2\20\1\21\1\u0114\7\21"+
565 "\3\0\7\21\20\0\2\20\1\0\15\21\1\u0115\5\21"+
566 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
567 "\2\20\11\21\3\0\2\21\1\u0116\4\21\20\0\2\20"+
568 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
569 "\6\21\1\0\2\20\11\21\3\0\2\21\1\272\4\21"+
570 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
571 "\33\0\1\u0117\64\0\1\20\6\21\1\0\2\20\6\21"+
572 "\1\u0118\2\21\3\0\7\21\20\0\2\20\1\0\23\21"+
573 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
574 "\2\20\11\21\3\0\2\21\1\273\4\21\20\0\2\20"+
575 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
576 "\6\21\1\0\2\20\11\21\3\0\4\21\1\357\2\21"+
577 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
578 "\4\0\1\20\6\21\1\0\2\20\10\21\1\u0102\3\0"+
579 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
580 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
581 "\1\322\6\21\20\0\2\20\1\0\23\21\1\0\1\21"+
582 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+
583 "\3\0\1\324\6\21\20\0\2\20\1\0\23\21\1\0"+
584 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
585 "\2\21\1\u0119\6\21\3\0\7\21\20\0\2\20\1\0"+
586 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
587 "\1\0\2\20\1\21\1\212\7\21\3\0\7\21\20\0"+
588 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
589 "\1\20\6\21\1\0\2\20\11\21\3\0\2\21\1\u011a"+
590 "\4\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
591 "\1\21\30\0\1\345\60\0\1\347\1\350\3\0\1\351"+
592 "\70\0\1\u011b\60\0\1\u011c\113\0\1\u011d\113\0\1\u011e"+
593 "\57\0\1\20\6\21\1\0\2\20\11\21\3\0\7\21"+
594 "\20\0\2\20\1\0\4\21\1\u011f\16\21\1\0\1\21"+
595 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21"+
596 "\1\272\2\21\3\0\7\21\20\0\2\20\1\0\23\21"+
597 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
598 "\2\20\4\21\1\u0120\4\21\3\0\7\21\20\0\2\20"+
599 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
600 "\6\21\1\0\2\20\6\21\1\u0121\2\21\3\0\7\21"+
601 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
602 "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\3\21"+
603 "\1\u0102\3\21\20\0\2\20\1\0\23\21\1\0\1\21"+
604 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\11\21"+
605 "\3\0\2\21\1\u0122\4\21\20\0\2\20\1\0\23\21"+
606 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
607 "\2\20\11\21\3\0\7\21\20\0\2\20\1\0\15\21"+
608 "\1\u0123\5\21\1\0\1\21\2\0\1\21\4\0\1\20"+
609 "\6\21\1\0\2\20\7\21\1\u0124\1\21\3\0\7\21"+
610 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
611 "\4\0\1\20\6\21\1\0\2\20\4\21\1\212\4\21"+
612 "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21"+
613 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\10\21"+
614 "\1\u010e\3\0\7\21\20\0\2\20\1\0\23\21\1\0"+
615 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
616 "\11\21\3\0\7\21\20\0\2\20\1\0\16\21\1\u0125"+
617 "\1\21\1\324\2\21\1\0\1\21\2\0\1\21\4\0"+
618 "\1\20\6\21\1\0\2\20\3\21\1\371\5\21\3\0"+
619 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
620 "\1\21\4\0\1\20\6\21\1\0\2\20\7\21\1\u0126"+
621 "\1\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0"+
622 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
623 "\11\21\3\0\3\21\1\u0127\3\21\20\0\2\20\1\0"+
624 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
625 "\1\0\2\20\10\21\1\u0102\3\0\7\21\20\0\2\20"+
626 "\1\0\15\21\1\u0102\5\21\1\0\1\21\2\0\1\21"+
627 "\4\0\1\20\6\21\1\0\2\20\7\21\1\362\1\21"+
628 "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21"+
629 "\2\0\1\21\36\0\1\u0128\61\0\1\20\6\21\1\0"+
630 "\2\20\4\21\1\u0129\4\21\3\0\7\21\20\0\2\20"+
631 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
632 "\6\21\1\0\2\20\11\21\3\0\7\21\20\0\2\20"+
633 "\1\0\17\21\1\212\3\21\1\0\1\21\2\0\1\21"+
634 "\4\0\1\20\6\21\1\0\2\20\2\21\1\273\6\21"+
635 "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21"+
636 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\7\21"+
637 "\1\u012a\1\21\3\0\7\21\20\0\2\20\1\0\23\21"+
638 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
639 "\2\20\3\21\1\362\5\21\3\0\7\21\20\0\2\20"+
640 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
641 "\6\21\1\0\2\20\11\21\3\0\2\21\1\u012b\4\21"+
642 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
643 "\4\0\1\20\6\21\1\0\2\20\4\21\1\u0102\4\21"+
644 "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21"+
645 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\6\21"+
646 "\1\u012c\2\21\3\0\7\21\20\0\2\20\1\0\23\21"+
647 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
648 "\2\20\5\21\1\212\3\21\3\0\7\21\20\0\2\20"+
649 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
650 "\6\21\1\0\2\20\2\21\1\362\6\21\3\0\7\21"+
651 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
652 "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\5\21"+
653 "\1\332\1\21\20\0\2\20\1\0\23\21\1\0\1\21"+
654 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\7\21"+
655 "\1\u012d\1\21\3\0\7\21\20\0\2\20\1\0\23\21"+
656 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
657 "\2\20\10\21\1\212\3\0\7\21\20\0\2\20\1\0"+
658 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
659 "\1\0\2\20\11\21\3\0\4\21\1\u012e\2\21\20\0"+
660 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
661 "\1\20\6\21\1\0\2\20\7\21\1\u012f\1\21\3\0"+
662 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
663 "\1\21\4\0\1\20\6\21\1\0\2\20\2\21\1\212"+
664 "\6\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0"+
665 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
666 "\11\21\3\0\7\21\20\0\2\20\1\0\15\21\1\272"+
667 "\5\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
668 "\1\0\2\20\4\21\1\u0130\4\21\3\0\7\21\20\0"+
669 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
670 "\1\20\6\21\1\0\2\20\6\21\1\u0131\2\21\3\0"+
671 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
672 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
673 "\3\21\1\u0132\3\21\20\0\2\20\1\0\23\21\1\0"+
674 "\1\21\2\0\1\21\34\0\1\u0133\63\0\1\20\6\21"+
675 "\1\0\2\20\11\21\3\0\7\21\20\0\2\20\1\0"+
676 "\14\21\1\212\6\21\1\0\1\21\2\0\1\21\4\0"+
677 "\1\20\6\21\1\0\2\20\6\21\1\u0134\2\21\3\0"+
678 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
679 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
680 "\3\21\1\u0135\3\21\20\0\2\20\1\0\23\21\1\0"+
681 "\1\21\2\0\1\21\67\0\1\u0136\4\0\1\u0137\112\0"+
682 "\1\u0138\113\0\1\u0139\113\0\1\u013a\24\0\1\20\6\21"+
683 "\1\0\2\20\11\21\3\0\7\21\20\0\2\20\1\0"+
684 "\5\21\1\212\15\21\1\0\1\21\2\0\1\21\4\0"+
685 "\1\20\6\21\1\0\2\20\11\21\3\0\1\21\1\u0124"+
686 "\5\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
687 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
688 "\7\21\20\0\2\20\1\0\17\21\1\u0102\3\21\1\0"+
689 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
690 "\11\21\3\0\3\21\1\u013b\3\21\20\0\2\20\1\0"+
691 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
692 "\1\0\2\20\11\21\3\0\7\21\20\0\2\20\1\0"+
693 "\21\21\1\u0102\1\21\1\0\1\21\2\0\1\21\4\0"+
694 "\1\20\6\21\1\0\2\20\4\21\1\u013c\4\21\3\0"+
695 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
696 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
697 "\7\21\20\0\2\20\1\0\20\21\1\324\2\21\1\0"+
698 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
699 "\11\21\3\0\4\21\1\212\2\21\20\0\2\20\1\0"+
700 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
701 "\1\0\2\20\1\21\1\u013d\7\21\3\0\7\21\20\0"+
702 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
703 "\1\20\6\21\1\0\2\20\1\u013e\10\21\3\0\7\21"+
704 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
705 "\4\0\1\20\6\21\1\0\2\20\11\21\3\0\2\21"+
706 "\1\u013f\4\21\20\0\2\20\1\0\23\21\1\0\1\21"+
707 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\2\21"+
708 "\1\u0108\6\21\3\0\7\21\20\0\2\20\1\0\23\21"+
709 "\1\0\1\21\2\0\1\21\4\0\1\20\6\21\1\0"+
710 "\2\20\11\21\3\0\7\21\20\0\2\20\1\0\15\21"+
711 "\1\u0101\5\21\1\0\1\21\2\0\1\21\4\0\1\20"+
712 "\6\21\1\0\2\20\11\21\3\0\7\21\20\0\2\20"+
713 "\1\0\11\21\1\u0140\11\21\1\0\1\21\2\0\1\21"+
714 "\4\0\1\20\6\21\1\0\2\20\6\21\1\u0102\2\21"+
715 "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21"+
716 "\2\0\1\21\4\0\1\20\6\21\1\0\2\20\1\u0141"+
717 "\10\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0"+
718 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
719 "\11\21\3\0\7\21\20\0\2\20\1\0\16\21\1\u0102"+
720 "\4\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
721 "\1\0\2\20\7\21\1\312\1\21\3\0\7\21\20\0"+
722 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
723 "\1\20\6\21\1\0\2\20\1\21\1\u0142\7\21\3\0"+
724 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
725 "\1\21\35\0\1\u0143\62\0\1\20\6\21\1\0\2\20"+
726 "\1\21\1\u0144\7\21\3\0\7\21\20\0\2\20\1\0"+
727 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
728 "\1\0\2\20\4\21\1\u0126\4\21\3\0\7\21\20\0"+
729 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\67\0"+
730 "\1\u0145\4\0\1\u0146\106\0\1\u0147\4\0\1\u0148\106\0"+
731 "\1\u0149\4\0\1\u014a\23\0\1\20\6\21\1\0\2\20"+
732 "\11\21\3\0\1\21\1\u0102\5\21\20\0\2\20\1\0"+
733 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
734 "\1\0\2\20\2\21\1\u0102\6\21\3\0\7\21\20\0"+
735 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
736 "\1\20\6\21\1\0\2\20\5\21\1\u0102\3\21\3\0"+
737 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
738 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
739 "\7\21\20\0\2\20\1\0\13\21\1\u014b\7\21\1\0"+
740 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
741 "\11\21\3\0\3\21\1\u014c\3\21\20\0\2\20\1\0"+
742 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
743 "\1\0\2\20\6\21\1\302\2\21\3\0\7\21\20\0"+
744 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
745 "\1\20\6\21\1\0\2\20\11\21\3\0\7\21\20\0"+
746 "\2\20\1\0\13\21\1\u014d\7\21\1\0\1\21\2\0"+
747 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
748 "\7\21\20\0\2\20\1\0\11\21\1\u014e\11\21\1\0"+
749 "\1\21\2\0\1\21\111\0\1\u0136\113\0\1\u0137\114\0"+
750 "\1\u014f\113\0\1\u0150\117\0\1\u0136\113\0\1\u0137\1\0"+
751 "\1\20\6\21\1\0\2\20\6\21\1\u013c\2\21\3\0"+
752 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
753 "\1\21\4\0\1\20\6\21\1\0\2\20\4\21\1\u0151"+
754 "\4\21\3\0\7\21\20\0\2\20\1\0\23\21\1\0"+
755 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
756 "\6\21\1\u0152\2\21\3\0\7\21\20\0\2\20\1\0"+
757 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
758 "\1\0\2\20\2\21\1\u0153\6\21\3\0\7\21\20\0"+
759 "\2\20\1\0\23\21\1\0\1\21\2\0\1\21\4\0"+
760 "\1\20\6\21\1\0\2\20\2\21\1\u0154\6\21\3\0"+
761 "\7\21\20\0\2\20\1\0\23\21\1\0\1\21\2\0"+
762 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
763 "\7\21\20\0\2\20\1\0\23\21\1\u0111\1\21\2\0"+
764 "\1\21\4\0\1\20\6\21\1\0\2\20\11\21\3\0"+
765 "\2\21\1\u0155\4\21\20\0\2\20\1\0\23\21\1\0"+
766 "\1\21\2\0\1\21\4\0\1\20\6\21\1\0\2\20"+
767 "\6\21\1\u0156\2\21\3\0\7\21\20\0\2\20\1\0"+
768 "\23\21\1\0\1\21\2\0\1\21\4\0\1\20\6\21"+
769 "\1\0\2\20\11\21\3\0\1\u0157\6\21\20\0\2\20"+
770 "\1\0\23\21\1\0\1\21\2\0\1\21\4\0\1\20"+
771 "\6\21\1\0\2\20\7\21\1\u0158\1\21\3\0\7\21"+
772 "\20\0\2\20\1\0\23\21\1\0\1\21\2\0\1\21"+
773 "\4\0\1\20\6\21\1\0\2\20\4\21\1\337\4\21"+
774 "\3\0\7\21\20\0\2\20\1\0\23\21\1\0\1\21"+
775 "\2\0\1\21\4\0";
776
777 private static int [] zzUnpackTrans() {
778 int [] result = new int[22192];
779 int offset = 0;
780 offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
781 return result;
782 }
783
784 private static int zzUnpackTrans(String packed, int offset, int [] result) {
785 int i = 0; /* index in packed string */
786 int j = offset; /* index in unpacked array */
787 int l = packed.length();
788 while (i < l) {
789 int count = packed.charAt(i++);
790 int value = packed.charAt(i++);
791 value--;
792 do result[j++] = value; while (--count > 0);
793 }
794 return j;
795 }
796
797
798 /* error codes */
799 private static final int ZZ_UNKNOWN_ERROR = 0;
800 private static final int ZZ_NO_MATCH = 1;
801 private static final int ZZ_PUSHBACK_2BIG = 2;
802
803 /* error messages for the codes above */
804 private static final String ZZ_ERROR_MSG[] = {
805 "Unkown internal scanner error",
806 "Error: could not match input",
807 "Error: pushback value was too large"
808 };
809
810 /**
811 * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
812 */
813 private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
814
815 private static final String ZZ_ATTRIBUTE_PACKED_0 =
816 "\17\0\4\1\1\11\11\1\1\11\10\1\1\11\2\1"+
817 "\1\11\24\1\3\11\2\1\2\11\1\1\1\11\1\1"+
818 "\1\11\1\1\1\11\1\1\1\11\1\1\1\11\1\1"+
819 "\1\11\2\1\2\11\1\1\2\11\1\1\1\11\1\1"+
820 "\2\11\1\1\1\11\1\1\1\11\40\1\1\0\17\1"+
821 "\1\0\6\11\4\1\1\11\1\0\20\1\2\11\2\1"+
822 "\1\0\47\1\1\0\11\1\5\0\21\1\1\0\25\1"+
823 "\1\11\5\1\1\0\3\1\4\0\11\1\1\11\12\1"+
824 "\1\0\2\1\2\11\3\0\10\1\1\11\1\1\6\0"+
825 "\4\1\2\11\10\1";
826
827 private static int [] zzUnpackAttribute() {
828 int [] result = new int[344];
829 int offset = 0;
830 offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
831 return result;
832 }
833
834 private static int zzUnpackAttribute(String packed, int offset, int [] result) {
835 int i = 0; /* index in packed string */
836 int j = offset; /* index in unpacked array */
837 int l = packed.length();
838 while (i < l) {
839 int count = packed.charAt(i++);
840 int value = packed.charAt(i++);
841 do result[j++] = value; while (--count > 0);
842 }
843 return j;
844 }
845
846 /** the input device */
847 private java.io.Reader zzReader;
848
849 /** the current state of the DFA */
850 private int zzState;
851
852 /** the current lexical state */
853 private int zzLexicalState = YYINITIAL;
854
855 /** this buffer contains the current text to be matched and is
856 the source of the yytext() string */
857 private char zzBuffer[];
858
859 /** the textposition at the last accepting state */
860 private int zzMarkedPos;
861
862 /** the current text position in the buffer */
863 private int zzCurrentPos;
864
865 /** startRead marks the beginning of the yytext() string in the buffer */
866 private int zzStartRead;
867
868 /** endRead marks the last character in the buffer, that has been read
869 from input */
870 private int zzEndRead;
871
872 /** zzAtEOF == true <=> the scanner is at the EOF */
873 private boolean zzAtEOF;
874
875 /* user code: */
876
877 /**
878 * Token type specific to RubyTokenMaker; this signals that we are inside
879 * an unquoted/double quoted/backtick EOF heredoc.
880 */
881 public static final int INTERNAL_HEREDOC_EOF_UNQUOTED = -1;
882
883 /**
884 * Token type specific to RubyTokenMaker; this signals that we are inside
885 * an single quoted EOF heredoc.
886 */
887 public static final int INTERNAL_HEREDOC_EOF_SINGLE_QUOTED = -2;
888
889 /**
890 * Token type specific to RubyTokenMaker; this signals that we are inside
891 * an double quoted EOF heredoc.
892 */
893 public static final int INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED = -3;
894
895 /**
896 * Token type specific to RubyTokenMaker; this signals that we are inside
897 * an unquoted/double quoted/backtick EOT heredoc.
898 */
899 public static final int INTERNAL_HEREDOC_EOT_UNQUOTED = -4;
900
901 /**
902 * Token type specific to RubyTokenMaker; this signals that we are inside
903 * an single quoted EOT heredoc.
904 */
905 public static final int INTERNAL_HEREDOC_EOT_SINGLE_QUOTED = -5;
906
907 /**
908 * Token type specific to RubyTokenMaker; this signals that we are inside
909 * an double quoted EOT heredoc.
910 */
911 public static final int INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED = -6;
912
913 /**
914 * Token type specific to RubyTokenMaker; this signals that we are inside
915 * a %Q!...! style double quoted string.
916 */
917 public static final int INTERNAL_STRING_Q_BANG = -7;
918
919 /**
920 * Token type specific to RubyTokenMaker; this signals that we are inside
921 * a %Q{...} style double quoted string.
922 */
923 public static final int INTERNAL_STRING_Q_CURLY_BRACE = -8;
924
925 /**
926 * Token type specific to RubyTokenMaker; this signals that we are inside
927 * a %Q&lt;...&gt; style double quoted string.
928 */
929 public static final int INTERNAL_STRING_Q_LT = -9;
930
931
932 /**
933 * Token type specific to RubyTokenMaker; this signals that we are inside
934 * a %Q(...) style double quoted string.
935 */
936 public static final int INTERNAL_STRING_Q_PAREN = -10;
937
938
939 /**
940 * Token type specific to RubyTokenMaker; this signals that we are inside
941 * a %Q/.../ style double quoted string.
942 */
943 public static final int INTERNAL_STRING_Q_SLASH = -11;
944
945 /**
946 * Token type specific to RubyTokenMaker; this signals that we are inside
947 * a %Q[...] style double quoted string.
948 */
949 public static final int INTERNAL_STRING_Q_SQUARE_BRACKET = -12;
950
951
952 /**
953 * Constructor. This must be here because JFlex does not generate a
954 * no-parameter constructor.
955 */
956 public RubyTokenMaker() {
957 }
958
959
960 /**
961 * Adds the token specified to the current linked list of tokens as an
962 * "end token;" that is, at <code>zzMarkedPos</code>.
963 *
964 * @param tokenType The token's type.
965 */
966 private void addEndToken(int tokenType) {
967 addToken(zzMarkedPos,zzMarkedPos, tokenType);
968 }
969
970
971 /**
972 * Adds the token specified to the current linked list of tokens.
973 *
974 * @param tokenType The token's type.
975 */
976 private void addToken(int tokenType) {
977 addToken(zzStartRead, zzMarkedPos-1, tokenType);
978 }
979
980
981 /**
982 * Adds the token specified to the current linked list of tokens.
983 *
984 * @param tokenType The token's type.
985 */
986 private void addToken(int start, int end, int tokenType) {
987 int so = start + offsetShift;
988 addToken(zzBuffer, start,end, tokenType, so);
989 }
990
991
992 /**
993 * Adds the token specified to the current linked list of tokens.
994 *
995 * @param array The character array.
996 * @param start The starting offset in the array.
997 * @param end The ending offset in the array.
998 * @param tokenType The token's type.
999 * @param startOffset The offset in the document at which this token
1000 * occurs.
1001 */
1002 public void addToken(char[] array, int start, int end, int tokenType, int startOffset) {
1003 super.addToken(array, start,end, tokenType, startOffset);
1004 zzStartRead = zzMarkedPos;
1005 }
1006
1007
1008 /**
1009 * Returns the text to place at the beginning and end of a
1010 * line to "comment" it in a this programming language.
1011 *
1012 * @return The start and end strings to add to a line to "comment"
1013 * it out.
1014 */
1015 public String[] getLineCommentStartAndEnd() {
1016 return new String[] { "#", null };
1017 }
1018
1019
1020 /**
1021 * Returns whether tokens of the specified type should have "mark
1022 * occurrences" enabled for the current programming language.
1023 *
1024 * @param type The token type.
1025 * @return Whether tokens of this type should have "mark occurrences"
1026 * enabled.
1027 */
1028 public boolean getMarkOccurrencesOfTokenType(int type) {
1029 return type==Token.IDENTIFIER || type==Token.VARIABLE;
1030 }
1031
1032
1033 /**
1034 * Returns the first token in the linked list of tokens generated
1035 * from <code>text</code>. This method must be implemented by
1036 * subclasses so they can correctly implement syntax highlighting.
1037 *
1038 * @param text The text from which to get tokens.
1039 * @param initialTokenType The token type we should start with.
1040 * @param startOffset The offset into the document at which
1041 * <code>text</code> starts.
1042 * @return The first <code>Token</code> in a linked list representing
1043 * the syntax highlighted text.
1044 */
1045 public Token getTokenList(Segment text, int initialTokenType, int startOffset) {
1046
1047 resetTokenList();
1048 this.offsetShift = -text.offset + startOffset;
1049
1050 // Start off in the proper state.
1051 int state = Token.NULL;
1052 switch (initialTokenType) {
1053 case Token.COMMENT_DOCUMENTATION:
1054 state = DOCCOMMENT;
1055 start = text.offset;
1056 break;
1057 case Token.LITERAL_STRING_DOUBLE_QUOTE:
1058 state = STRING;
1059 start = text.offset;
1060 break;
1061 case Token.LITERAL_CHAR:
1062 state = CHAR_LITERAL;
1063 start = text.offset;
1064 break;
1065 case Token.LITERAL_BACKQUOTE:
1066 state = BACKTICKS;
1067 start = text.offset;
1068 break;
1069 case INTERNAL_HEREDOC_EOF_UNQUOTED:
1070 state = HEREDOC_EOF_UNQUOTED;
1071 start = text.offset;
1072 break;
1073 case INTERNAL_HEREDOC_EOF_SINGLE_QUOTED:
1074 state = HEREDOC_EOF_SINGLE_QUOTED;
1075 start = text.offset;
1076 break;
1077 case INTERNAL_HEREDOC_EOF_DOUBLE_QUOTED:
1078 state = HEREDOC_EOF_DOUBLE_QUOTED;
1079 start = text.offset;
1080 break;
1081 case INTERNAL_HEREDOC_EOT_UNQUOTED:
1082 state = HEREDOC_EOT_UNQUOTED;
1083 start = text.offset;
1084 break;
1085 case INTERNAL_HEREDOC_EOT_SINGLE_QUOTED:
1086 state = HEREDOC_EOT_SINGLE_QUOTED;
1087 start = text.offset;
1088 break;
1089 case INTERNAL_HEREDOC_EOT_DOUBLE_QUOTED:
1090 state = HEREDOC_EOT_DOUBLE_QUOTED;
1091 start = text.offset;
1092 break;
1093 case INTERNAL_STRING_Q_BANG:
1094 state = STRING_Q_BANG;
1095 start = text.offset;
1096 break;
1097 case INTERNAL_STRING_Q_CURLY_BRACE:
1098 state = STRING_Q_CURLY_BRACE;
1099 start = text.offset;
1100 break;
1101 case INTERNAL_STRING_Q_LT:
1102 state = STRING_Q_LT;
1103 start = text.offset;
1104 break;
1105 case INTERNAL_STRING_Q_PAREN:
1106 state = STRING_Q_PAREN;
1107 start = text.offset;
1108 break;
1109 case INTERNAL_STRING_Q_SLASH:
1110 state = STRING_Q_SLASH;
1111 start = text.offset;
1112 break;
1113 case INTERNAL_STRING_Q_SQUARE_BRACKET:
1114 state = STRING_Q_SQUARE_BRACKET;
1115 start = text.offset;
1116 break;
1117 default:
1118 state = Token.NULL;
1119 }
1120
1121 s = text;
1122 try {
1123 yyreset(zzReader);
1124 yybegin(state);
1125 return yylex();
1126 } catch (IOException ioe) {
1127 ioe.printStackTrace();
1128 return new DefaultToken();
1129 }
1130
1131 }
1132
1133
1134 /**
1135 * Refills the input buffer.
1136 *
1137 * @return <code>true</code> if EOF was reached, otherwise
1138 * <code>false</code>.
1139 * @exception IOException if any I/O-Error occurs.
1140 */
1141 private boolean zzRefill() throws java.io.IOException {
1142 return zzCurrentPos>=s.offset+s.count;
1143 }
1144
1145
1146 /**
1147 * Resets the scanner to read from a new input stream.
1148 * Does not close the old reader.
1149 *
1150 * All internal variables are reset, the old input stream
1151 * <b>cannot</b> be reused (internal buffer is discarded and lost).
1152 * Lexical state is set to <tt>YY_INITIAL</tt>.
1153 *
1154 * @param reader the new input stream
1155 */
1156 public final void yyreset(java.io.Reader reader) throws java.io.IOException {
1157 // 's' has been updated.
1158 zzBuffer = s.array;
1159 /*
1160 * We replaced the line below with the two below it because zzRefill
1161 * no longer "refills" the buffer (since the way we do it, it's always
1162 * "full" the first time through, since it points to the segment's
1163 * array). So, we assign zzEndRead here.
1164 */
1165 //zzStartRead = zzEndRead = s.offset;
1166 zzStartRead = s.offset;
1167 zzEndRead = zzStartRead + s.count - 1;
1168 zzCurrentPos = zzMarkedPos = s.offset;
1169 zzLexicalState = YYINITIAL;
1170 zzReader = reader;
1171 zzAtEOF = false;
1172 }
1173
1174
1175
1176
1177 /**
1178 * Creates a new scanner
1179 * There is also a java.io.InputStream version of this constructor.
1180 *
1181 * @param in the java.io.Reader to read input from.
1182 */
1183 public RubyTokenMaker(java.io.Reader in) {
1184 this.zzReader = in;
1185 }
1186
1187 /**
1188 * Creates a new scanner.
1189 * There is also java.io.Reader version of this constructor.
1190 *
1191 * @param in the java.io.Inputstream to read input from.
1192 */
1193 public RubyTokenMaker(java.io.InputStream in) {
1194 this(new java.io.InputStreamReader(in));
1195 }
1196
1197 /**
1198 * Unpacks the compressed character translation table.
1199 *
1200 * @param packed the packed character translation table
1201 * @return the unpacked character translation table
1202 */
1203 private static char [] zzUnpackCMap(String packed) {
1204 char [] map = new char[0x10000];
1205 int i = 0; /* index in packed string */
1206 int j = 0; /* index in unpacked array */
1207 while (i < 188) {
1208 int count = packed.charAt(i++);
1209 char value = packed.charAt(i++);
1210 do map[j++] = value; while (--count > 0);
1211 }
1212 return map;
1213 }
1214
1215
1216 /**
1217 * Returns the current lexical state.
1218 */
1219 public final int yystate() {
1220 return zzLexicalState;
1221 }
1222
1223
1224 /**
1225 * Enters a new lexical state
1226 *
1227 * @param newState the new lexical state
1228 */
1229 public final void yybegin(int newState) {
1230 zzLexicalState = newState;
1231 }
1232
1233
1234 /**
1235 * Returns the text matched by the current regular expression.
1236 */
1237 public final String yytext() {
1238 return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
1239 }
1240
1241
1242 /**
1243 * Returns the character at position <tt>pos</tt> from the
1244 * matched text.
1245 *
1246 * It is equivalent to yytext().charAt(pos), but faster
1247 *
1248 * @param pos the position of the character to fetch.
1249 * A value from 0 to yylength()-1.
1250 *
1251 * @return the character at position pos
1252 */
1253 public final char yycharat(int pos) {
1254 return zzBuffer[zzStartRead+pos];
1255 }
1256
1257
1258 /**
1259 * Returns the length of the matched text region.
1260 */
1261 public final int yylength() {
1262 return zzMarkedPos-zzStartRead;
1263 }
1264
1265
1266 /**
1267 * Reports an error that occured while scanning.
1268 *
1269 * In a wellformed scanner (no or only correct usage of
1270 * yypushback(int) and a match-all fallback rule) this method
1271 * will only be called with things that "Can't Possibly Happen".
1272 * If this method is called, something is seriously wrong
1273 * (e.g. a JFlex bug producing a faulty scanner etc.).
1274 *
1275 * Usual syntax/scanner level error handling should be done
1276 * in error fallback rules.
1277 *
1278 * @param errorCode the code of the errormessage to display
1279 */
1280 private void zzScanError(int errorCode) {
1281 String message;
1282 try {
1283 message = ZZ_ERROR_MSG[errorCode];
1284 }
1285 catch (ArrayIndexOutOfBoundsException e) {
1286 message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
1287 }
1288
1289 throw new Error(message);
1290 }
1291
1292
1293 /**
1294 * Pushes the specified amount of characters back into the input stream.
1295 *
1296 * They will be read again by then next call of the scanning method
1297 *
1298 * @param number the number of characters to be read again.
1299 * This number must not be greater than yylength()!
1300 */
1301 public void yypushback(int number) {
1302 if ( number > yylength() )
1303 zzScanError(ZZ_PUSHBACK_2BIG);
1304
1305 zzMarkedPos -= number;
1306 }
1307
1308
1309 /**
1310 * Resumes scanning until the next regular expression is matched,
1311 * the end of input is encountered or an I/O-Error occurs.
1312 *
1313 * @return the next token
1314 * @exception java.io.IOException if any I/O-Error occurs
1315 */
1316 public org.fife.ui.rsyntaxtextarea.Token yylex() throws java.io.IOException {
1317 int zzInput;
1318 int zzAction;
1319
1320 // cached fields:
1321 int zzCurrentPosL;
1322 int zzMarkedPosL;
1323 int zzEndReadL = zzEndRead;
1324 char [] zzBufferL = zzBuffer;
1325 char [] zzCMapL = ZZ_CMAP;
1326
1327 int [] zzTransL = ZZ_TRANS;
1328 int [] zzRowMapL = ZZ_ROWMAP;
1329 int [] zzAttrL = ZZ_ATTRIBUTE;
1330
1331 while (true) {
1332 zzMarkedPosL = zzMarkedPos;
1333
1334 zzAction = -1;
1335
1336 zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
1337
1338 zzState = zzLexicalState;
1339
1340
1341 zzForAction: {
1342 while (true) {
1343
1344 if (zzCurrentPosL < zzEndReadL)
1345 zzInput = zzBufferL[zzCurrentPosL++];
1346 else if (zzAtEOF) {
1347 zzInput = YYEOF;
1348 break zzForAction;
1349 }
1350 else {
1351 // store back cached positions
1352 zzCurrentPos = zzCurrentPosL;
1353 zzMarkedPos = zzMarkedPosL;
1354 boolean eof = zzRefill();
1355 // get translated positions and possibly new buffer
1356 zzCurrentPosL = zzCurrentPos;
1357 zzMarkedPosL = zzMarkedPos;
1358 zzBufferL = zzBuffer;
1359 zzEndReadL = zzEndRead;
1360 if (eof) {
1361 zzInput = YYEOF;
1362 break zzForAction;
1363 }
1364 else {
1365 zzInput = zzBufferL[zzCurrentPosL++];
1366 }
1367 }
1368 int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
1369 if (zzNext == -1) break zzForAction;
1370 zzState = zzNext;
1371
1372 int zzAttributes = zzAttrL[zzState];
1373 if ( (zzAttributes & 1) == 1 ) {
1374 zzAction = zzState;
1375 zzMarkedPosL = zzCurrentPosL;
1376 if ( (zzAttributes & 8) == 8 ) break zzForAction;
1377 }
1378
1379 }
1380 }
1381
1382 // store back cached position
1383 zzMarkedPos = zzMarkedPosL;
1384
1385 switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
1386 case 39:
1387 { start = zzMarkedPos-yylength(); yybegin(STRING_Q_LT);
1388 }
1389 case 52: break;
1390 case 2:
1391 { addToken(Token.IDENTIFIER);
1392 }
1393 case 53: break;
1394 case 45:
1395 { addToken(Token.LITERAL_BOOLEAN);
1396 }
1397 case 54: break;
1398 case 32:
1399 { addToken(start,zzStartRead-1, Token.COMMENT_DOCUMENTATION); return firstToken;
1400 }
1401 case 55: break;
1402 case 19:
1403 { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_PAREN); return firstToken;
1404 }
1405 case 56: break;
1406 case 18:
1407 { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); return firstToken;
1408 }
1409 case 57: break;
1410 case 20:
1411 { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SLASH); return firstToken;
1412 }
1413 case 58: break;
1414 case 46:
1415 { yybegin(YYINITIAL); addToken(start,zzStartRead+3, Token.COMMENT_DOCUMENTATION);
1416 }
1417 case 59: break;
1418 case 10:
1419 { start = zzMarkedPos-1; yybegin(STRING);
1420 }
1421 case 60: break;
1422 case 44:
1423 { if (start==zzStartRead) { addToken(Token.PREPROCESSOR); addNullToken(); return firstToken; }
1424 }
1425 case 61: break;
1426 case 9:
1427 { addToken(Token.FUNCTION);
1428 }
1429 case 62: break;
1430 case 22:
1431 { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_LT); return firstToken;
1432 }
1433 case 63: break;
1434 case 42:
1435 { addToken(Token.VARIABLE);
1436 }
1437 case 64: break;
1438 case 1:
1439 { addToken(Token.ERROR_IDENTIFIER);
1440 }
1441 case 65: break;
1442 case 31:
1443 { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken;
1444 }
1445 case 66: break;
1446 case 4:
1447 { addToken(Token.COMMENT_EOL); addNullToken(); return firstToken;
1448 }
1449 case 67: break;
1450 case 41:
1451 { start = zzMarkedPos-yylength(); yybegin(STRING_Q_CURLY_BRACE);
1452 }
1453 case 68: break;
1454 case 50:
1455 { start = zzStartRead; yybegin(HEREDOC_EOF_SINGLE_QUOTED);
1456 }
1457 case 69: break;
1458 case 51:
1459 { start = zzStartRead; yybegin(HEREDOC_EOT_SINGLE_QUOTED);
1460 }
1461 case 70: break;
1462 case 47:
1463 { start = zzStartRead; yybegin(HEREDOC_EOF_UNQUOTED);
1464 }
1465 case 71: break;
1466 case 14:
1467 { /* Skip escaped chars. */
1468 }
1469 case 72: break;
1470 case 25:
1471 { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_CHAR);
1472 }
1473 case 73: break;
1474 case 43:
1475 { addToken(Token.LITERAL_NUMBER_HEXADECIMAL);
1476 }
1477 case 74: break;
1478 case 28:
1479 { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken;
1480 }
1481 case 75: break;
1482 case 6:
1483 { addToken(Token.WHITESPACE);
1484 }
1485 case 76: break;
1486 case 17:
1487 { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_BANG); return firstToken;
1488 }
1489 case 77: break;
1490 case 35:
1491 { addToken(Token.PREPROCESSOR);
1492 }
1493 case 78: break;
1494 case 11:
1495 { start = zzMarkedPos-1; yybegin(CHAR_LITERAL);
1496 }
1497 case 79: break;
1498 case 3:
1499 { addToken(Token.LITERAL_NUMBER_DECIMAL_INT);
1500 }
1501 case 80: break;
1502 case 38:
1503 { start = zzMarkedPos-yylength(); yybegin(STRING_Q_SLASH);
1504 }
1505 case 81: break;
1506 case 27:
1507 { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_BACKQUOTE);
1508 }
1509 case 82: break;
1510 case 16:
1511 { yybegin(YYINITIAL); addToken(start,zzStartRead, Token.LITERAL_STRING_DOUBLE_QUOTE);
1512 }
1513 case 83: break;
1514 case 37:
1515 { start = zzMarkedPos-yylength(); yybegin(STRING_Q_BANG);
1516 }
1517 case 84: break;
1518 case 23:
1519 { /* Skip escaped single quotes only, but this should still work. */
1520 }
1521 case 85: break;
1522 case 30:
1523 { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken;
1524 }
1525 case 86: break;
1526 case 49:
1527 { start = zzMarkedPos-6; yybegin(DOCCOMMENT);
1528 }
1529 case 87: break;
1530 case 34:
1531 { addToken(Token.RESERVED_WORD);
1532 }
1533 case 88: break;
1534 case 26:
1535 { addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken;
1536 }
1537 case 89: break;
1538 case 36:
1539 { start = zzMarkedPos-yylength(); yybegin(STRING_Q_SQUARE_BRACKET);
1540 }
1541 case 90: break;
1542 case 8:
1543 { addToken(Token.SEPARATOR);
1544 }
1545 case 91: break;
1546 case 5:
1547 { addNullToken(); return firstToken;
1548 }
1549 case 92: break;
1550 case 21:
1551 { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); return firstToken;
1552 }
1553 case 93: break;
1554 case 40:
1555 { start = zzMarkedPos-yylength(); yybegin(STRING_Q_PAREN);
1556 }
1557 case 94: break;
1558 case 7:
1559 { addToken(Token.OPERATOR);
1560 }
1561 case 95: break;
1562 case 24:
1563 { addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken;
1564 }
1565 case 96: break;
1566 case 33:
1567 { addToken(Token.LITERAL_NUMBER_FLOAT);
1568 }
1569 case 97: break;
1570 case 48:
1571 { start = zzStartRead; yybegin(HEREDOC_EOT_UNQUOTED);
1572 }
1573 case 98: break;
1574 case 12:
1575 { start = zzMarkedPos-1; yybegin(BACKTICKS);
1576 }
1577 case 99: break;
1578 case 13:
1579 {
1580 }
1581 case 100: break;
1582 case 15:
1583 { addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken;
1584 }
1585 case 101: break;
1586 case 29:
1587 { addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken;
1588 }
1589 case 102: break;
1590 default:
1591 if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
1592 zzAtEOF = true;
1593 switch (zzLexicalState) {
1594 case HEREDOC_EOF_SINGLE_QUOTED: {
1595 addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_SINGLE_QUOTED); return firstToken;
1596 }
1597 case 345: break;
1598 case DOCCOMMENT: {
1599 yybegin(YYINITIAL); addToken(start,zzEndRead, Token.COMMENT_DOCUMENTATION); return firstToken;
1600 }
1601 case 346: break;
1602 case HEREDOC_EOT_SINGLE_QUOTED: {
1603 addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_SINGLE_QUOTED); return firstToken;
1604 }
1605 case 347: break;
1606 case HEREDOC_EOT_UNQUOTED: {
1607 addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOT_UNQUOTED); return firstToken;
1608 }
1609 case 348: break;
1610 case STRING_Q_SLASH: {
1611 addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SLASH); return firstToken;
1612 }
1613 case 349: break;
1614 case STRING_Q_BANG: {
1615 addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_BANG); return firstToken;
1616 }
1617 case 350: break;
1618 case STRING_Q_LT: {
1619 addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_LT); return firstToken;
1620 }
1621 case 351: break;
1622 case STRING: {
1623 addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); return firstToken;
1624 }
1625 case 352: break;
1626 case BACKTICKS: {
1627 addToken(start,zzStartRead-1, Token.LITERAL_BACKQUOTE); return firstToken;
1628 }
1629 case 353: break;
1630 case YYINITIAL: {
1631 addNullToken(); return firstToken;
1632 }
1633 case 354: break;
1634 case HEREDOC_EOF_UNQUOTED: {
1635 addToken(start,zzStartRead-1, Token.PREPROCESSOR); addEndToken(INTERNAL_HEREDOC_EOF_UNQUOTED); return firstToken;
1636 }
1637 case 355: break;
1638 case STRING_Q_CURLY_BRACE: {
1639 addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_CURLY_BRACE); return firstToken;
1640 }
1641 case 356: break;
1642 case STRING_Q_PAREN: {
1643 addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_PAREN); return firstToken;
1644 }
1645 case 357: break;
1646 case CHAR_LITERAL: {
1647 addToken(start,zzStartRead-1, Token.LITERAL_CHAR); return firstToken;
1648 }
1649 case 358: break;
1650 case STRING_Q_SQUARE_BRACKET: {
1651 addToken(start,zzStartRead-1, Token.LITERAL_STRING_DOUBLE_QUOTE); addEndToken(INTERNAL_STRING_Q_SQUARE_BRACKET); return firstToken;
1652 }
1653 case 359: break;
1654 default:
1655 return null;
1656 }
1657 }
1658 else {
1659 zzScanError(ZZ_NO_MATCH);
1660 }
1661 }
1662 }
1663 }
1664
1665
1666}
Note: See TracBrowser for help on using the repository browser.