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