cd7b91b7d172ca020ef6798898ccee49391ba1d7
[scilab.git] / scilab / modules / scinotes / src / java / org / scilab / modules / scinotes / IndentScanner.java
1 /* The following code was generated by JFlex 1.6.1 */
2
3 //CHECKSTYLE:OFF 
4
5 package org.scilab.modules.scinotes;
6
7 import java.io.IOException;
8 import javax.swing.text.Element;
9 import javax.swing.text.BadLocationException;
10
11 @javax.annotation.Generated("JFlex")
12 @SuppressWarnings("fallthrough")
13
14 /**
15  * This class is a scanner generated by 
16  * <a href="http://www.jflex.de/">JFlex</a> 1.6.1
17  * from the specification file <tt>../../../../jflex/indentation.jflex</tt>
18  */
19 public final class IndentScanner {
20
21   /** This character denotes the end of file */
22   public static final int YYEOF = -1;
23
24   /** initial size of the lookahead buffer */
25   private static final int ZZ_BUFFERSIZE = 16384;
26
27   /** lexical states */
28   public static final int YYINITIAL = 0;
29   public static final int INDENT = 2;
30   public static final int WHITE = 4;
31   public static final int TAB = 6;
32   public static final int BEG = 8;
33
34   /**
35    * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
36    * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
37    *                  at the beginning of a line
38    * l is of the form l = 2*k, k a non negative integer
39    */
40   private static final int ZZ_LEXSTATE[] = { 
41      0,  0,  1,  1,  2,  2,  3,  3,  4, 5
42   };
43
44   /** 
45    * Translates characters to character classes
46    */
47   private static final String ZZ_CMAP_PACKED = 
48     "\11\0\1\32\1\1\1\4\1\4\1\3\22\0\1\31\1\5\1\7"+
49     "\3\5\1\0\1\6\1\0\1\10\5\0\1\2\12\5\5\0\1\5"+
50     "\1\0\32\5\2\0\1\10\1\0\1\5\1\0\1\30\1\5\1\14"+
51     "\1\27\1\24\1\11\1\5\1\22\1\16\2\5\1\23\1\5\1\13"+
52     "\1\17\2\5\1\20\1\26\1\15\1\12\1\5\1\21\1\5\1\25"+
53     "\1\5\2\0\1\10\7\0\1\4\u1fa2\0\1\4\1\4\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\udfe6\0";
54
55   /** 
56    * Translates characters to character classes
57    */
58   private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
59
60   /** 
61    * Translates DFA states to action switch labels.
62    */
63   private static final int [] ZZ_ACTION = zzUnpackAction();
64
65   private static final String ZZ_ACTION_PACKED_0 =
66     "\2\0\2\1\2\0\1\2\1\3\14\2\2\1\1\4"+
67     "\12\0\1\2\4\0\1\4\23\0\1\2\2\0\1\5"+
68     "\10\0\1\2\5\0\1\6\2\0\1\2\1\6\6\0"+
69     "\1\2\3\0\2\2\7\0\1\2\4\0\1\2\2\0"+
70     "\3\2\1\5";
71
72   private static int [] zzUnpackAction() {
73     int [] result = new int[112];
74     int offset = 0;
75     offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
76     return result;
77   }
78
79   private static int zzUnpackAction(String packed, int offset, int [] result) {
80     int i = 0;       /* index in packed string  */
81     int j = offset;  /* index in unpacked array */
82     int l = packed.length();
83     while (i < l) {
84       int count = packed.charAt(i++);
85       int value = packed.charAt(i++);
86       do result[j++] = value; while (--count > 0);
87     }
88     return j;
89   }
90
91
92   /** 
93    * Translates a state to a row index in the transition table
94    */
95   private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
96
97   private static final String ZZ_ROWMAP_PACKED_0 =
98     "\0\0\0\33\0\66\0\121\0\154\0\207\0\0\0\0"+
99     "\0\242\0\275\0\330\0\363\0\u010e\0\u0129\0\u0144\0\u015f"+
100     "\0\u017a\0\u0195\0\u01b0\0\u01cb\0\u01e6\0\u0201\0\u021c\0\u0237"+
101     "\0\u0252\0\u026d\0\u0288\0\u02a3\0\u02be\0\u02d9\0\u02f4\0\u030f"+
102     "\0\330\0\u032a\0\u0345\0\u0360\0\u037b\0\u0396\0\u03b1\0\u03cc"+
103     "\0\u03e7\0\u0402\0\u041d\0\u0438\0\u0453\0\u046e\0\u0489\0\u04a4"+
104     "\0\u04bf\0\u04da\0\u04f5\0\u0510\0\u052b\0\u0546\0\u0561\0\u057c"+
105     "\0\u0597\0\u05b2\0\u03b1\0\u05cd\0\u05e8\0\u0603\0\u061e\0\u0639"+
106     "\0\u0654\0\u066f\0\u068a\0\u06a5\0\u06c0\0\u06db\0\u06f6\0\u0711"+
107     "\0\u072c\0\u0747\0\u0762\0\u077d\0\u03b1\0\u0798\0\u07b3\0\u07ce"+
108     "\0\u07e9\0\u0804\0\u081f\0\u083a\0\u0855\0\u0870\0\u088b\0\u08a6"+
109     "\0\u08c1\0\u08dc\0\u08f7\0\u0912\0\u092d\0\u0948\0\u0963\0\u097e"+
110     "\0\u0999\0\u09b4\0\u09cf\0\u09ea\0\u0a05\0\u0a20\0\u0a3b\0\u0a56"+
111     "\0\u0a71\0\u0a8c\0\u0aa7\0\u0ac2\0\u0add\0\u0af8\0\u0b13\0\u03b1";
112
113   private static int [] zzUnpackRowMap() {
114     int [] result = new int[112];
115     int offset = 0;
116     offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
117     return result;
118   }
119
120   private static int zzUnpackRowMap(String packed, int offset, int [] result) {
121     int i = 0;  /* index in packed string  */
122     int j = offset;  /* index in unpacked array */
123     int l = packed.length();
124     while (i < l) {
125       int high = packed.charAt(i++) << 16;
126       result[j++] = high | packed.charAt(i++);
127     }
128     return j;
129   }
130
131   /** 
132    * The transition table of the DFA
133    */
134   private static final int [] ZZ_TRANS = zzUnpackTrans();
135
136   private static final String ZZ_TRANS_PACKED_0 =
137     "\33\0\1\7\1\10\1\11\2\0\1\12\2\13\1\14"+
138     "\1\15\2\12\1\16\1\17\1\20\1\21\1\12\1\22"+
139     "\2\12\1\23\1\12\1\24\2\12\2\7\3\10\2\0"+
140     "\24\10\1\25\4\10\2\0\25\10\1\26\3\7\2\0"+
141     "\31\7\2\0\24\7\2\27\2\0\1\30\36\0\1\7"+
142     "\2\0\1\31\2\0\1\32\1\33\1\34\1\35\1\0"+
143     "\1\36\2\0\1\37\1\0\1\40\4\0\1\41\1\0"+
144     "\1\41\1\0\2\41\2\42\23\41\6\0\1\7\32\0"+
145     "\1\7\2\0\1\31\1\43\1\0\1\32\1\33\1\34"+
146     "\1\44\1\0\1\36\2\0\1\37\1\0\1\40\12\0"+
147     "\1\7\2\0\1\31\2\0\1\32\1\33\1\34\1\35"+
148     "\1\0\1\36\2\0\1\37\1\0\1\40\1\0\1\45"+
149     "\10\0\1\7\2\0\1\31\2\0\1\32\1\33\1\34"+
150     "\1\35\1\46\1\36\2\0\1\37\1\0\1\40\12\0"+
151     "\1\7\2\0\1\47\2\0\1\32\1\33\1\34\1\35"+
152     "\1\0\1\36\2\0\1\37\1\0\1\40\12\0\1\7"+
153     "\2\0\1\31\2\0\1\32\1\50\1\34\1\35\1\0"+
154     "\1\36\2\0\1\37\1\0\1\40\12\0\1\7\2\0"+
155     "\1\31\2\0\1\32\1\33\1\34\1\35\1\0\1\36"+
156     "\1\51\1\0\1\37\1\0\1\40\12\0\1\7\2\0"+
157     "\1\31\1\0\1\52\1\32\1\33\1\34\1\35\1\0"+
158     "\1\36\1\0\1\53\1\37\1\0\1\40\12\0\1\7"+
159     "\2\0\1\31\2\0\1\32\1\33\1\34\1\35\1\0"+
160     "\1\54\2\0\1\55\1\0\1\40\35\0\1\25\33\0"+
161     "\1\26\31\0\2\27\1\30\1\7\1\30\2\0\26\30"+
162     "\12\0\1\56\4\0\1\57\43\0\1\60\22\0\1\61"+
163     "\23\0\1\7\36\0\1\62\37\0\1\63\23\0\1\64"+
164     "\7\0\1\65\30\0\1\66\2\0\1\67\14\0\2\41"+
165     "\36\0\1\70\34\0\1\62\2\0\1\47\27\0\1\71"+
166     "\10\0\1\72\31\0\1\47\12\0\1\73\3\0\20\73"+
167     "\22\0\1\61\1\0\1\74\26\0\1\75\43\0\1\76"+
168     "\31\0\1\77\22\0\1\100\3\0\1\63\23\0\1\64"+
169     "\7\0\1\101\22\0\1\102\37\0\1\7\27\0\1\103"+
170     "\10\0\1\104\31\0\1\7\27\0\1\105\26\0\1\106"+
171     "\43\0\1\107\31\0\1\110\22\0\1\111\37\0\1\112"+
172     "\23\0\1\113\32\0\1\114\42\0\1\115\32\0\1\116"+
173     "\31\0\1\117\14\0\1\73\3\0\1\120\17\73\26\0"+
174     "\1\121\23\0\1\122\41\0\1\123\1\0\1\110\20\0"+
175     "\1\124\32\0\1\125\42\0\1\7\32\0\1\126\31\0"+
176     "\1\104\20\0\1\127\45\0\1\130\23\0\1\103\41\0"+
177     "\1\131\23\0\1\132\37\0\1\115\30\0\1\133\36\0"+
178     "\1\47\13\0\1\73\3\0\1\73\1\134\16\73\7\0"+
179     "\1\73\3\0\5\73\1\135\12\73\16\0\1\136\32\0"+
180     "\1\137\33\0\1\140\37\0\1\7\30\0\1\141\24\0"+
181     "\1\56\36\0\1\34\30\0\1\142\34\0\1\143\35\0"+
182     "\1\144\16\0\1\73\3\0\2\73\1\145\15\73\7\0"+
183     "\1\73\3\0\1\115\17\73\24\0\1\47\25\0\1\47"+
184     "\33\0\1\146\35\0\1\147\26\0\1\7\34\0\1\150"+
185     "\31\0\1\151\21\0\1\73\3\0\3\73\1\152\14\73"+
186     "\21\0\1\153\31\0\1\154\27\0\1\47\45\0\1\72"+
187     "\11\0\1\73\3\0\4\73\1\155\13\73\15\0\1\7"+
188     "\45\0\1\104\11\0\1\73\3\0\5\73\1\156\12\73"+
189     "\7\0\1\73\3\0\6\73\1\157\11\73\7\0\1\73"+
190     "\3\0\2\73\1\160\15\73\2\0";
191
192   private static int [] zzUnpackTrans() {
193     int [] result = new int[2862];
194     int offset = 0;
195     offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
196     return result;
197   }
198
199   private static int zzUnpackTrans(String packed, int offset, int [] result) {
200     int i = 0;       /* index in packed string  */
201     int j = offset;  /* index in unpacked array */
202     int l = packed.length();
203     while (i < l) {
204       int count = packed.charAt(i++);
205       int value = packed.charAt(i++);
206       value--;
207       do result[j++] = value; while (--count > 0);
208     }
209     return j;
210   }
211
212
213   /* error codes */
214   private static final int ZZ_UNKNOWN_ERROR = 0;
215   private static final int ZZ_NO_MATCH = 1;
216   private static final int ZZ_PUSHBACK_2BIG = 2;
217
218   /* error messages for the codes above */
219   private static final String ZZ_ERROR_MSG[] = {
220     "Unknown internal scanner error",
221     "Error: could not match input",
222     "Error: pushback value was too large"
223   };
224
225   /**
226    * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
227    */
228   private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
229
230   private static final String ZZ_ATTRIBUTE_PACKED_0 =
231     "\1\10\1\0\2\1\2\0\2\11\17\1\12\0\1\1"+
232     "\4\0\1\1\23\0\1\1\2\0\1\1\10\0\1\1"+
233     "\5\0\1\1\2\0\2\1\6\0\1\1\3\0\2\1"+
234     "\7\0\1\1\4\0\1\1\2\0\4\1";
235
236   private static int [] zzUnpackAttribute() {
237     int [] result = new int[112];
238     int offset = 0;
239     offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
240     return result;
241   }
242
243   private static int zzUnpackAttribute(String packed, int offset, int [] result) {
244     int i = 0;       /* index in packed string  */
245     int j = offset;  /* index in unpacked array */
246     int l = packed.length();
247     while (i < l) {
248       int count = packed.charAt(i++);
249       int value = packed.charAt(i++);
250       do result[j++] = value; while (--count > 0);
251     }
252     return j;
253   }
254
255   /** the input device */
256   private java.io.Reader zzReader;
257
258   /** the current state of the DFA */
259   private int zzState;
260
261   /** the current lexical state */
262   private int zzLexicalState = YYINITIAL;
263
264   /** this buffer contains the current text to be matched and is
265       the source of the yytext() string */
266   private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
267
268   /** the textposition at the last accepting state */
269   private int zzMarkedPos;
270
271   /** the current text position in the buffer */
272   private int zzCurrentPos;
273
274   /** startRead marks the beginning of the yytext() string in the buffer */
275   private int zzStartRead;
276
277   /** endRead marks the last character in the buffer, that has been read
278       from input */
279   private int zzEndRead;
280
281   /** number of newlines encountered up to the start of the matched text */
282   private int yyline;
283
284   /** the number of characters up to the start of the matched text */
285   private int yychar;
286
287   /**
288    * the number of characters from the last newline up to the start of the 
289    * matched text
290    */
291   private int yycolumn;
292
293   /** 
294    * zzAtBOL == true <=> the scanner is currently at the beginning of a line
295    */
296   private boolean zzAtBOL = true;
297
298   /** zzAtEOF == true <=> the scanner is at the EOF */
299   private boolean zzAtEOF;
300
301   /** denotes if the user-EOF-code has already been executed */
302   private boolean zzEOFDone;
303   
304   /** 
305    * The number of occupied positions in zzBuffer beyond zzEndRead.
306    * When a lead/high surrogate has been read from the input stream
307    * into the final zzBuffer position, this will have a value of 1;
308    * otherwise, it will have a value of 0.
309    */
310   private int zzFinalHighSurrogate = 0;
311
312   /* user code: */
313     private ScilabDocument doc;
314     private Element elem;
315
316     public IndentScanner(ScilabDocument doc) {
317         this.doc = doc;
318         this.elem = doc.getDefaultRootElement();
319     }
320    
321     public int getIndentNumber(int lineNumber, char type) {
322         if (lineNumber < 0) {
323             return 0;
324         }
325         try {
326              Element line = elem.getElement(lineNumber);
327              int startL = line.getStartOffset();
328              int endL = line.getEndOffset();    
329              yyreset(new ScilabDocumentReader(doc, startL, endL));
330              switch (type) {
331                  case ' ':
332                  yybegin(WHITE);
333                  break;
334                  case '\t':
335                  yybegin(TAB);
336                  break;
337              default:
338                  yybegin(WHITE);
339              }
340              return yylex();
341         } catch (IOException e) {
342              return 0;
343         }
344     }   
345
346     public int getTabsAtBeginning(int pos) {
347         Element line = elem.getElement(pos);
348         int startL = line.getStartOffset();
349         int endL = line.getEndOffset();
350         try {
351             yyreset(new ScilabDocumentReader(doc, startL, endL));
352             yybegin(BEG);
353             if (yylex() == 1) {
354                 return yylength();
355             }
356         } catch (IOException e) {  
357             return 0;   
358         }
359         return 0;
360     }       
361
362     public void getIndentLevel(int pos, int[] level) {
363         Element line = elem.getElement(elem.getElementIndex(pos));
364         int startL = line.getStartOffset();
365         int endL = line.getEndOffset();
366         level[0] = 0;
367         level[1] = 0;
368         try {
369             yyreset(new ScilabDocumentReader(doc, startL, endL));
370             yybegin(INDENT);
371             do {
372                 switch (yylex()) {
373                 case 0:
374                       break;
375                 case 1:
376                      level[1]++;
377                      break;
378                 case 2:
379                      if (level[1] > 0) {
380                          level[1]--;
381                      } else {
382                          level[0]++;
383                      }
384                      break;
385                 case 3:
386                      if (level[1] == 0) {
387                          level[0]++;
388                          level[1]++;
389                      }
390                 }                
391             } while (zzMarkedPos != 0);
392         } catch (IOException e) { }       
393     }
394
395
396   /**
397    * Creates a new scanner
398    *
399    * @param   in  the java.io.Reader to read input from.
400    */
401   public IndentScanner(java.io.Reader in) {
402     this.zzReader = in;
403   }
404
405
406   /** 
407    * Unpacks the compressed character translation table.
408    *
409    * @param packed   the packed character translation table
410    * @return         the unpacked character translation table
411    */
412   private static char [] zzUnpackCMap(String packed) {
413     char [] map = new char[0x110000];
414     int i = 0;  /* index in packed string  */
415     int j = 0;  /* index in unpacked array */
416     while (i < 150) {
417       int  count = packed.charAt(i++);
418       char value = packed.charAt(i++);
419       do map[j++] = value; while (--count > 0);
420     }
421     return map;
422   }
423
424
425   /**
426    * Refills the input buffer.
427    *
428    * @return      <code>false</code>, iff there was new input.
429    * 
430    * @exception   java.io.IOException  if any I/O-Error occurs
431    */
432   private boolean zzRefill() throws java.io.IOException {
433
434     /* first: make room (if you can) */
435     if (zzStartRead > 0) {
436       zzEndRead += zzFinalHighSurrogate;
437       zzFinalHighSurrogate = 0;
438       System.arraycopy(zzBuffer, zzStartRead,
439                        zzBuffer, 0,
440                        zzEndRead-zzStartRead);
441
442       /* translate stored positions */
443       zzEndRead-= zzStartRead;
444       zzCurrentPos-= zzStartRead;
445       zzMarkedPos-= zzStartRead;
446       zzStartRead = 0;
447     }
448
449     /* is the buffer big enough? */
450     if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) {
451       /* if not: blow it up */
452       char newBuffer[] = new char[zzBuffer.length*2];
453       System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
454       zzBuffer = newBuffer;
455       zzEndRead += zzFinalHighSurrogate;
456       zzFinalHighSurrogate = 0;
457     }
458
459     /* fill the buffer with new input */
460     int requested = zzBuffer.length - zzEndRead;
461     int numRead = zzReader.read(zzBuffer, zzEndRead, requested);
462
463     /* not supposed to occur according to specification of java.io.Reader */
464     if (numRead == 0) {
465       throw new java.io.IOException("Reader returned 0 characters. See JFlex examples for workaround.");
466     }
467     if (numRead > 0) {
468       zzEndRead += numRead;
469       /* If numRead == requested, we might have requested to few chars to
470          encode a full Unicode character. We assume that a Reader would
471          otherwise never return half characters. */
472       if (numRead == requested) {
473         if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) {
474           --zzEndRead;
475           zzFinalHighSurrogate = 1;
476         }
477       }
478       /* potentially more input available */
479       return false;
480     }
481
482     /* numRead < 0 ==> end of stream */
483     return true;
484   }
485
486     
487   /**
488    * Closes the input stream.
489    */
490   public final void yyclose() throws java.io.IOException {
491     zzAtEOF = true;            /* indicate end of file */
492     zzEndRead = zzStartRead;  /* invalidate buffer    */
493
494     if (zzReader != null)
495       zzReader.close();
496   }
497
498
499   /**
500    * Resets the scanner to read from a new input stream.
501    * Does not close the old reader.
502    *
503    * All internal variables are reset, the old input stream 
504    * <b>cannot</b> be reused (internal buffer is discarded and lost).
505    * Lexical state is set to <tt>ZZ_INITIAL</tt>.
506    *
507    * Internal scan buffer is resized down to its initial length, if it has grown.
508    *
509    * @param reader   the new input stream 
510    */
511   public final void yyreset(java.io.Reader reader) {
512     zzReader = reader;
513     zzAtBOL  = true;
514     zzAtEOF  = false;
515     zzEOFDone = false;
516     zzEndRead = zzStartRead = 0;
517     zzCurrentPos = zzMarkedPos = 0;
518     zzFinalHighSurrogate = 0;
519     yyline = yychar = yycolumn = 0;
520     zzLexicalState = YYINITIAL;
521     if (zzBuffer.length > ZZ_BUFFERSIZE)
522       zzBuffer = new char[ZZ_BUFFERSIZE];
523   }
524
525
526   /**
527    * Returns the current lexical state.
528    */
529   public final int yystate() {
530     return zzLexicalState;
531   }
532
533
534   /**
535    * Enters a new lexical state
536    *
537    * @param newState the new lexical state
538    */
539   public final void yybegin(int newState) {
540     zzLexicalState = newState;
541   }
542
543
544   /**
545    * Returns the text matched by the current regular expression.
546    */
547   public final String yytext() {
548     return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
549   }
550
551
552   /**
553    * Returns the character at position <tt>pos</tt> from the 
554    * matched text. 
555    * 
556    * It is equivalent to yytext().charAt(pos), but faster
557    *
558    * @param pos the position of the character to fetch. 
559    *            A value from 0 to yylength()-1.
560    *
561    * @return the character at position pos
562    */
563   public final char yycharat(int pos) {
564     return zzBuffer[zzStartRead+pos];
565   }
566
567
568   /**
569    * Returns the length of the matched text region.
570    */
571   public final int yylength() {
572     return zzMarkedPos-zzStartRead;
573   }
574
575
576   /**
577    * Reports an error that occured while scanning.
578    *
579    * In a wellformed scanner (no or only correct usage of 
580    * yypushback(int) and a match-all fallback rule) this method 
581    * will only be called with things that "Can't Possibly Happen".
582    * If this method is called, something is seriously wrong
583    * (e.g. a JFlex bug producing a faulty scanner etc.).
584    *
585    * Usual syntax/scanner level error handling should be done
586    * in error fallback rules.
587    *
588    * @param   errorCode  the code of the errormessage to display
589    */
590   private void zzScanError(int errorCode) {
591     String message;
592     try {
593       message = ZZ_ERROR_MSG[errorCode];
594     }
595     catch (ArrayIndexOutOfBoundsException e) {
596       message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
597     }
598
599     throw new Error(message);
600   } 
601
602
603   /**
604    * Pushes the specified amount of characters back into the input stream.
605    *
606    * They will be read again by then next call of the scanning method
607    *
608    * @param number  the number of characters to be read again.
609    *                This number must not be greater than yylength()!
610    */
611   public void yypushback(int number)  {
612     if ( number > yylength() )
613       zzScanError(ZZ_PUSHBACK_2BIG);
614
615     zzMarkedPos -= number;
616   }
617
618
619   /**
620    * Resumes scanning until the next regular expression is matched,
621    * the end of input is encountered or an I/O-Error occurs.
622    *
623    * @return      the next token
624    * @exception   java.io.IOException  if any I/O-Error occurs
625    */
626   public int yylex() throws java.io.IOException {
627     int zzInput;
628     int zzAction;
629
630     // cached fields:
631     int zzCurrentPosL;
632     int zzMarkedPosL;
633     int zzEndReadL = zzEndRead;
634     char [] zzBufferL = zzBuffer;
635     char [] zzCMapL = ZZ_CMAP;
636
637     int [] zzTransL = ZZ_TRANS;
638     int [] zzRowMapL = ZZ_ROWMAP;
639     int [] zzAttrL = ZZ_ATTRIBUTE;
640
641     while (true) {
642       zzMarkedPosL = zzMarkedPos;
643
644       yychar+= zzMarkedPosL-zzStartRead;
645
646       if (zzMarkedPosL > zzStartRead) {
647         switch (zzBufferL[zzMarkedPosL-1]) {
648         case '\n':
649         case '\u000B':
650         case '\u000C':
651         case '\u0085':
652         case '\u2028':
653         case '\u2029':
654           zzAtBOL = true;
655           break;
656         case '\r': 
657           if (zzMarkedPosL < zzEndReadL)
658             zzAtBOL = zzBufferL[zzMarkedPosL] != '\n';
659           else if (zzAtEOF)
660             zzAtBOL = false;
661           else {
662             boolean eof = zzRefill();
663             zzMarkedPosL = zzMarkedPos;
664             zzEndReadL = zzEndRead;
665             zzBufferL = zzBuffer;
666             if (eof) 
667               zzAtBOL = false;
668             else 
669               zzAtBOL = zzBufferL[zzMarkedPosL] != '\n';
670           }
671           break;
672         default:
673           zzAtBOL = false;
674         }
675       }
676       zzAction = -1;
677
678       zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
679   
680       if (zzAtBOL)
681         zzState = ZZ_LEXSTATE[zzLexicalState+1];
682       else
683         zzState = ZZ_LEXSTATE[zzLexicalState];
684
685       // set up zzAction for empty match case:
686       int zzAttributes = zzAttrL[zzState];
687       if ( (zzAttributes & 1) == 1 ) {
688         zzAction = zzState;
689       }
690
691
692       zzForAction: {
693         while (true) {
694     
695           if (zzCurrentPosL < zzEndReadL) {
696             zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL);
697             zzCurrentPosL += Character.charCount(zzInput);
698           }
699           else if (zzAtEOF) {
700             zzInput = YYEOF;
701             break zzForAction;
702           }
703           else {
704             // store back cached positions
705             zzCurrentPos  = zzCurrentPosL;
706             zzMarkedPos   = zzMarkedPosL;
707             boolean eof = zzRefill();
708             // get translated positions and possibly new buffer
709             zzCurrentPosL  = zzCurrentPos;
710             zzMarkedPosL   = zzMarkedPos;
711             zzBufferL      = zzBuffer;
712             zzEndReadL     = zzEndRead;
713             if (eof) {
714               zzInput = YYEOF;
715               break zzForAction;
716             }
717             else {
718               zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL);
719               zzCurrentPosL += Character.charCount(zzInput);
720             }
721           }
722           int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
723           if (zzNext == -1) break zzForAction;
724           zzState = zzNext;
725
726           zzAttributes = zzAttrL[zzState];
727           if ( (zzAttributes & 1) == 1 ) {
728             zzAction = zzState;
729             zzMarkedPosL = zzCurrentPosL;
730             if ( (zzAttributes & 8) == 8 ) break zzForAction;
731           }
732
733         }
734       }
735
736       // store back cached position
737       zzMarkedPos = zzMarkedPosL;
738
739       if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
740         zzAtEOF = true;
741           {   return 0;
742  }
743       }
744       else {
745         switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
746           case 1: 
747             { return yylength();
748             }
749           case 7: break;
750           case 2: 
751             { 
752             }
753           case 8: break;
754           case 3: 
755             { return 0;
756             }
757           case 9: break;
758           case 4: 
759             { return 1;
760             }
761           case 10: break;
762           case 5: 
763             { return 2;
764             }
765           case 11: break;
766           case 6: 
767             { return 3;
768             }
769           case 12: break;
770           default:
771             zzScanError(ZZ_NO_MATCH);
772         }
773       }
774     }
775   }
776
777
778 }