KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jedit > syntax > PerlTokenMarker


1 package org.jedit.syntax;
2
3 /*
4  * PerlTokenMarker.java - Perl token marker
5  * Copyright (C) 1998, 1999 Slava Pestov
6  *
7  * You may use and modify this package for any purpose. Redistribution is
8  * permitted, in both source and binary form, provided that this notice
9  * remains intact in all source distributions of this package.
10  */

11
12 import javax.swing.text.Segment JavaDoc;
13
14 /**
15  * Perl token marker.
16  *
17  * @author Slava Pestov
18  * @version $Id: PerlTokenMarker.java,v 1.1 2003/12/14 16:29:49 daggerrz Exp $
19  */

20 public class PerlTokenMarker extends TokenMarker
21 {
22    // public members
23
public static final byte S_ONE = Token.INTERNAL_FIRST;
24    public static final byte S_TWO = (byte)(Token.INTERNAL_FIRST + 1);
25    public static final byte S_END = (byte)(Token.INTERNAL_FIRST + 2);
26
27    public PerlTokenMarker()
28    {
29       this(getKeywords());
30    }
31
32    public PerlTokenMarker(KeywordMap keywords)
33    {
34       this.keywords = keywords;
35    }
36
37    public byte markTokensImpl(byte _token, Segment JavaDoc line, int lineIndex)
38    {
39       char[] array = line.array;
40       int offset = line.offset;
41       token = _token;
42       lastOffset = offset;
43       lastKeyword = offset;
44       matchChar = '\0';
45       matchCharBracket = false;
46       matchSpacesAllowed = false;
47       int length = line.count + offset;
48
49       if(token == Token.LITERAL1 && lineIndex != 0
50          && lineInfo[lineIndex - 1].obj != null)
51       {
52          String JavaDoc str = (String JavaDoc)lineInfo[lineIndex - 1].obj;
53          if(str != null && str.length() == line.count
54             && SyntaxUtilities.regionMatches(false,line,
55             offset,str))
56          {
57             addToken(line.count,token);
58             return Token.NULL;
59          }
60          else
61          {
62             addToken(line.count,token);
63             lineInfo[lineIndex].obj = str;
64             return token;
65          }
66       }
67
68       boolean backslash = false;
69 loop: for(int i = offset; i < length; i++)
70       {
71          int i1 = (i+1);
72
73          char c = array[i];
74          if(c == '\\')
75          {
76             backslash = !backslash;
77             continue;
78          }
79
80          switch(token)
81          {
82          case Token.NULL:
83             switch(c)
84             {
85             case '#':
86                if(doKeyword(line,i,c))
87                   break;
88                if(backslash)
89                   backslash = false;
90                else
91                {
92                   addToken(i - lastOffset,token);
93                   addToken(length - i,Token.COMMENT1);
94                   lastOffset = lastKeyword = length;
95                   break loop;
96                }
97                break;
98             case '=':
99                backslash = false;
100                if(i == offset)
101                {
102                   token = Token.COMMENT2;
103                   addToken(length - i,token);
104                   lastOffset = lastKeyword = length;
105                   break loop;
106                }
107                else
108                   doKeyword(line,i,c);
109                break;
110             case '$': case '&': case '%': case '@':
111                backslash = false;
112                if(doKeyword(line,i,c))
113                   break;
114                if(length - i > 1)
115                {
116                   if(c == '&' && (array[i1] == '&'
117                      || Character.isWhitespace(
118                      array[i1])))
119                      i++;
120                   else
121                   {
122                      addToken(i - lastOffset,token);
123                      lastOffset = lastKeyword = i;
124                      token = Token.KEYWORD2;
125                   }
126                }
127                break;
128             case '"':
129                if(doKeyword(line,i,c))
130                   break;
131                if(backslash)
132                   backslash = false;
133                else
134                {
135                   addToken(i - lastOffset,token);
136                   token = Token.LITERAL1;
137                   lineInfo[lineIndex].obj = null;
138                   lastOffset = lastKeyword = i;
139                }
140                break;
141             case '\'':
142                if(backslash)
143                   backslash = false;
144                else
145                {
146                   int oldLastKeyword = lastKeyword;
147                   if(doKeyword(line,i,c))
148                      break;
149                   if(i != oldLastKeyword)
150                      break;
151                   addToken(i - lastOffset,token);
152                   token = Token.LITERAL2;
153                   lastOffset = lastKeyword = i;
154                }
155                break;
156             case '`':
157                if(doKeyword(line,i,c))
158                   break;
159                if(backslash)
160                   backslash = false;
161                else
162                {
163                   addToken(i - lastOffset,token);
164                   token = Token.OPERATOR;
165                   lastOffset = lastKeyword = i;
166                }
167                break;
168             case '<':
169                if(doKeyword(line,i,c))
170                   break;
171                if(backslash)
172                   backslash = false;
173                else
174                {
175                   if(length - i > 2 && array[i1] == '<'
176                      && !Character.isWhitespace(array[i+2]))
177                   {
178                      addToken(i - lastOffset,token);
179                      lastOffset = lastKeyword = i;
180                      token = Token.LITERAL1;
181                      int len = length - (i+2);
182                      if(array[length - 1] == ';')
183                         len--;
184                      lineInfo[lineIndex].obj =
185                         createReadinString(array,i + 2,len);
186                   }
187                }
188                break;
189             case ':':
190                backslash = false;
191                if(doKeyword(line,i,c))
192                   break;
193                // Doesn't pick up all labels,
194
// but at least doesn't mess up
195
// XXX::YYY
196
if(lastKeyword != 0)
197                   break;
198                addToken(i1 - lastOffset,Token.LABEL);
199                lastOffset = lastKeyword = i1;
200                break;
201             case '-':
202                backslash = false;
203                if(doKeyword(line,i,c))
204                   break;
205                if(i != lastKeyword || length - i <= 1)
206                   break;
207                switch(array[i1])
208                {
209                case 'r': case 'w': case 'x':
210                case 'o': case 'R': case 'W':
211                case 'X': case 'O': case 'e':
212                case 'z': case 's': case 'f':
213                case 'd': case 'l': case 'p':
214                case 'S': case 'b': case 'c':
215                case 't': case 'u': case 'g':
216                case 'k': case 'T': case 'B':
217                case 'M': case 'A': case 'C':
218                   addToken(i - lastOffset,token);
219                   addToken(2,Token.KEYWORD3);
220                   lastOffset = lastKeyword = i+2;
221                   i++;
222                }
223                break;
224             case '/': case '?':
225                if(doKeyword(line,i,c))
226                   break;
227                if(length - i > 1)
228                {
229                   backslash = false;
230                   char ch = array[i1];
231                   if(Character.isWhitespace(ch))
232                      break;
233                   matchChar = c;
234                   matchSpacesAllowed = false;
235                   addToken(i - lastOffset,token);
236                   token = S_ONE;
237                   lastOffset = lastKeyword = i;
238                }
239                break;
240             default:
241                backslash = false;
242                if(!Character.isLetterOrDigit(c)
243                   && c != '_')
244                   doKeyword(line,i,c);
245                break;
246             }
247             break;
248          case Token.KEYWORD2:
249             backslash = false;
250             // This test checks for an end-of-variable
251
// condition
252
if(!Character.isLetterOrDigit(c) && c != '_'
253                && c != '#' && c != '\'' && c != ':'
254                && c != '&')
255             {
256                // If this is the first character
257
// of the variable name ($'aaa)
258
// ignore it
259
if(i != offset && array[i-1] == '$')
260                {
261                   addToken(i1 - lastOffset,token);
262                   lastOffset = lastKeyword = i1;
263                }
264                // Otherwise, end of variable...
265
else
266                {
267                   addToken(i - lastOffset,token);
268                   lastOffset = lastKeyword = i;
269                   // Wind back so that stuff
270
// like $hello$fred is picked
271
// up
272
i--;
273                   token = Token.NULL;
274                }
275             }
276             break;
277          case S_ONE: case S_TWO:
278             if(backslash)
279                backslash = false;
280             else
281             {
282                if(matchChar == '\0')
283                {
284                   if(Character.isWhitespace(matchChar)
285                      && !matchSpacesAllowed)
286                      break;
287                   else
288                      matchChar = c;
289                }
290                else
291                {
292                   switch(matchChar)
293                   {
294                   case '(':
295                      matchChar = ')';
296                      matchCharBracket = true;
297                      break;
298                   case '[':
299                      matchChar = ']';
300                      matchCharBracket = true;
301                      break;
302                   case '{':
303                      matchChar = '}';
304                      matchCharBracket = true;
305                      break;
306                   case '<':
307                      matchChar = '>';
308                      matchCharBracket = true;
309                      break;
310                   default:
311                      matchCharBracket = false;
312                      break;
313                   }
314                   if(c != matchChar)
315                      break;
316                   if(token == S_TWO)
317                   {
318                      token = S_ONE;
319                      if(matchCharBracket)
320                         matchChar = '\0';
321                   }
322                   else
323                   {
324                      token = S_END;
325                      addToken(i1 - lastOffset,
326                         Token.LITERAL2);
327                      lastOffset = lastKeyword = i1;
328                   }
329                }
330             }
331             break;
332          case S_END:
333             backslash = false;
334             if(!Character.isLetterOrDigit(c)
335                && c != '_')
336                doKeyword(line,i,c);
337             break;
338          case Token.COMMENT2:
339             backslash = false;
340             if(i == offset)
341             {
342                addToken(line.count,token);
343                if(length - i > 3 && SyntaxUtilities
344                   .regionMatches(false,line,offset,"=cut"))
345                   token = Token.NULL;
346                lastOffset = lastKeyword = length;
347                break loop;
348             }
349             break;
350          case Token.LITERAL1:
351             if(backslash)
352                backslash = false;
353             /* else if(c == '$')
354                backslash = true; */

355             else if(c == '"')
356             {
357                addToken(i1 - lastOffset,token);
358                token = Token.NULL;
359                lastOffset = lastKeyword = i1;
360             }
361             break;
362          case Token.LITERAL2:
363             if(backslash)
364                backslash = false;
365             /* else if(c == '$')
366                backslash = true; */

367             else if(c == '\'')
368             {
369                addToken(i1 - lastOffset,Token.LITERAL1);
370                token = Token.NULL;
371                lastOffset = lastKeyword = i1;
372             }
373             break;
374          case Token.OPERATOR:
375             if(backslash)
376                backslash = false;
377             else if(c == '`')
378             {
379                addToken(i1 - lastOffset,token);
380                token = Token.NULL;
381                lastOffset = lastKeyword = i1;
382             }
383             break;
384          default:
385             throw new InternalError JavaDoc("Invalid state: "
386                + token);
387          }
388       }
389
390       if(token == Token.NULL)
391          doKeyword(line,length,'\0');
392
393       switch(token)
394       {
395       case Token.KEYWORD2:
396          addToken(length - lastOffset,token);
397          token = Token.NULL;
398          break;
399       case Token.LITERAL2:
400          addToken(length - lastOffset,Token.LITERAL1);
401          break;
402       case S_END:
403          addToken(length - lastOffset,Token.LITERAL2);
404          token = Token.NULL;
405          break;
406       case S_ONE: case S_TWO:
407          addToken(length - lastOffset,Token.INVALID); // XXX
408
token = Token.NULL;
409          break;
410       default:
411          addToken(length - lastOffset,token);
412          break;
413       }
414       return token;
415    }
416
417    // private members
418
private KeywordMap keywords;
419    private byte token;
420    private int lastOffset;
421    private int lastKeyword;
422    private char matchChar;
423    private boolean matchCharBracket;
424    private boolean matchSpacesAllowed;
425
426    private boolean doKeyword(Segment JavaDoc line, int i, char c)
427    {
428       int i1 = i+1;
429
430       if(token == S_END)
431       {
432          addToken(i - lastOffset,Token.LITERAL2);
433          token = Token.NULL;
434          lastOffset = i;
435          lastKeyword = i1;
436          return false;
437       }
438
439       int len = i - lastKeyword;
440       byte id = keywords.lookup(line,lastKeyword,len);
441       if(id == S_ONE || id == S_TWO)
442       {
443          if(lastKeyword != lastOffset)
444             addToken(lastKeyword - lastOffset,Token.NULL);
445          addToken(len,Token.LITERAL2);
446          lastOffset = i;
447          lastKeyword = i1;
448          if(Character.isWhitespace(c))
449             matchChar = '\0';
450          else
451             matchChar = c;
452          matchSpacesAllowed = true;
453          token = id;
454          return true;
455       }
456       else if(id != Token.NULL)
457       {
458          if(lastKeyword != lastOffset)
459             addToken(lastKeyword - lastOffset,Token.NULL);
460          addToken(len,id);
461          lastOffset = i;
462       }
463       lastKeyword = i1;
464       return false;
465    }
466
467    // Converts < EOF >, < 'EOF' >, etc to <EOF>
468
private String JavaDoc createReadinString(char[] array, int start, int len)
469    {
470       int idx1 = start;
471       int idx2 = start + len - 1;
472
473       while((idx1 <= idx2) && (!Character.isLetterOrDigit(array[idx1])))
474          idx1++;
475
476       while((idx1 <= idx2) && (!Character.isLetterOrDigit(array[idx2])))
477          idx2--;
478
479       return new String JavaDoc(array, idx1, idx2 - idx1 + 1);
480    }
481
482    private static KeywordMap perlKeywords;
483
484    private static KeywordMap getKeywords()
485    {
486       if(perlKeywords == null)
487       {
488          perlKeywords = new KeywordMap(false);
489          perlKeywords.add("my",Token.KEYWORD1);
490          perlKeywords.add("local",Token.KEYWORD1);
491          perlKeywords.add("new",Token.KEYWORD1);
492          perlKeywords.add("if",Token.KEYWORD1);
493          perlKeywords.add("until",Token.KEYWORD1);
494          perlKeywords.add("while",Token.KEYWORD1);
495          perlKeywords.add("elsif",Token.KEYWORD1);
496          perlKeywords.add("else",Token.KEYWORD1);
497          perlKeywords.add("eval",Token.KEYWORD1);
498          perlKeywords.add("unless",Token.KEYWORD1);
499          perlKeywords.add("foreach",Token.KEYWORD1);
500          perlKeywords.add("continue",Token.KEYWORD1);
501          perlKeywords.add("exit",Token.KEYWORD1);
502          perlKeywords.add("die",Token.KEYWORD1);
503          perlKeywords.add("last",Token.KEYWORD1);
504          perlKeywords.add("goto",Token.KEYWORD1);
505          perlKeywords.add("next",Token.KEYWORD1);
506          perlKeywords.add("redo",Token.KEYWORD1);
507          perlKeywords.add("goto",Token.KEYWORD1);
508          perlKeywords.add("return",Token.KEYWORD1);
509          perlKeywords.add("do",Token.KEYWORD1);
510          perlKeywords.add("sub",Token.KEYWORD1);
511          perlKeywords.add("use",Token.KEYWORD1);
512          perlKeywords.add("require",Token.KEYWORD1);
513          perlKeywords.add("package",Token.KEYWORD1);
514          perlKeywords.add("BEGIN",Token.KEYWORD1);
515          perlKeywords.add("END",Token.KEYWORD1);
516          perlKeywords.add("eq",Token.OPERATOR);
517          perlKeywords.add("ne",Token.OPERATOR);
518          perlKeywords.add("not",Token.OPERATOR);
519          perlKeywords.add("and",Token.OPERATOR);
520          perlKeywords.add("or",Token.OPERATOR);
521
522          perlKeywords.add("abs",Token.KEYWORD3);
523          perlKeywords.add("accept",Token.KEYWORD3);
524          perlKeywords.add("alarm",Token.KEYWORD3);
525          perlKeywords.add("atan2",Token.KEYWORD3);
526          perlKeywords.add("bind",Token.KEYWORD3);
527          perlKeywords.add("binmode",Token.KEYWORD3);
528          perlKeywords.add("bless",Token.KEYWORD3);
529          perlKeywords.add("caller",Token.KEYWORD3);
530          perlKeywords.add("chdir",Token.KEYWORD3);
531          perlKeywords.add("chmod",Token.KEYWORD3);
532          perlKeywords.add("chomp",Token.KEYWORD3);
533          perlKeywords.add("chr",Token.KEYWORD3);
534          perlKeywords.add("chroot",Token.KEYWORD3);
535          perlKeywords.add("chown",Token.KEYWORD3);
536          perlKeywords.add("closedir",Token.KEYWORD3);
537          perlKeywords.add("close",Token.KEYWORD3);
538          perlKeywords.add("connect",Token.KEYWORD3);
539          perlKeywords.add("cos",Token.KEYWORD3);
540          perlKeywords.add("crypt",Token.KEYWORD3);
541          perlKeywords.add("dbmclose",Token.KEYWORD3);
542          perlKeywords.add("dbmopen",Token.KEYWORD3);
543          perlKeywords.add("defined",Token.KEYWORD3);
544          perlKeywords.add("delete",Token.KEYWORD3);
545          perlKeywords.add("die",Token.KEYWORD3);
546          perlKeywords.add("dump",Token.KEYWORD3);
547          perlKeywords.add("each",Token.KEYWORD3);
548          perlKeywords.add("endgrent",Token.KEYWORD3);
549          perlKeywords.add("endhostent",Token.KEYWORD3);
550          perlKeywords.add("endnetent",Token.KEYWORD3);
551          perlKeywords.add("endprotoent",Token.KEYWORD3);
552          perlKeywords.add("endpwent",Token.KEYWORD3);
553          perlKeywords.add("endservent",Token.KEYWORD3);
554          perlKeywords.add("eof",Token.KEYWORD3);
555          perlKeywords.add("exec",Token.KEYWORD3);
556          perlKeywords.add("exists",Token.KEYWORD3);
557          perlKeywords.add("exp",Token.KEYWORD3);
558          perlKeywords.add("fctnl",Token.KEYWORD3);
559          perlKeywords.add("fileno",Token.KEYWORD3);
560          perlKeywords.add("flock",Token.KEYWORD3);
561          perlKeywords.add("fork",Token.KEYWORD3);
562          perlKeywords.add("format",Token.KEYWORD3);
563          perlKeywords.add("formline",Token.KEYWORD3);
564          perlKeywords.add("getc",Token.KEYWORD3);
565          perlKeywords.add("getgrent",Token.KEYWORD3);
566          perlKeywords.add("getgrgid",Token.KEYWORD3);
567          perlKeywords.add("getgrnam",Token.KEYWORD3);
568          perlKeywords.add("gethostbyaddr",Token.KEYWORD3);
569          perlKeywords.add("gethostbyname",Token.KEYWORD3);
570          perlKeywords.add("gethostent",Token.KEYWORD3);
571          perlKeywords.add("getlogin",Token.KEYWORD3);
572          perlKeywords.add("getnetbyaddr",Token.KEYWORD3);
573          perlKeywords.add("getnetbyname",Token.KEYWORD3);
574          perlKeywords.add("getnetent",Token.KEYWORD3);
575          perlKeywords.add("getpeername",Token.KEYWORD3);
576          perlKeywords.add("getpgrp",Token.KEYWORD3);
577          perlKeywords.add("getppid",Token.KEYWORD3);
578          perlKeywords.add("getpriority",Token.KEYWORD3);
579          perlKeywords.add("getprotobyname",Token.KEYWORD3);
580          perlKeywords.add("getprotobynumber",Token.KEYWORD3);
581          perlKeywords.add("getprotoent",Token.KEYWORD3);
582          perlKeywords.add("getpwent",Token.KEYWORD3);
583          perlKeywords.add("getpwnam",Token.KEYWORD3);
584          perlKeywords.add("getpwuid",Token.KEYWORD3);
585          perlKeywords.add("getservbyname",Token.KEYWORD3);
586          perlKeywords.add("getservbyport",Token.KEYWORD3);
587          perlKeywords.add("getservent",Token.KEYWORD3);
588          perlKeywords.add("getsockname",Token.KEYWORD3);
589          perlKeywords.add("getsockopt",Token.KEYWORD3);
590          perlKeywords.add("glob",Token.KEYWORD3);
591          perlKeywords.add("gmtime",Token.KEYWORD3);
592          perlKeywords.add("grep",Token.KEYWORD3);
593          perlKeywords.add("hex",Token.KEYWORD3);
594          perlKeywords.add("import",Token.KEYWORD3);
595          perlKeywords.add("index",Token.KEYWORD3);
596          perlKeywords.add("int",Token.KEYWORD3);
597          perlKeywords.add("ioctl",Token.KEYWORD3);
598          perlKeywords.add("join",Token.KEYWORD3);
599          perlKeywords.add("keys",Token.KEYWORD3);
600          perlKeywords.add("kill",Token.KEYWORD3);
601          perlKeywords.add("lcfirst",Token.KEYWORD3);
602          perlKeywords.add("lc",Token.KEYWORD3);
603          perlKeywords.add("length",Token.KEYWORD3);
604          perlKeywords.add("link",Token.KEYWORD3);
605          perlKeywords.add("listen",Token.KEYWORD3);
606          perlKeywords.add("log",Token.KEYWORD3);
607          perlKeywords.add("localtime",Token.KEYWORD3);
608          perlKeywords.add("lstat",Token.KEYWORD3);
609          perlKeywords.add("map",Token.KEYWORD3);
610          perlKeywords.add("mkdir",Token.KEYWORD3);
611          perlKeywords.add("msgctl",Token.KEYWORD3);
612          perlKeywords.add("msgget",Token.KEYWORD3);
613          perlKeywords.add("msgrcv",Token.KEYWORD3);
614          perlKeywords.add("no",Token.KEYWORD3);
615          perlKeywords.add("oct",Token.KEYWORD3);
616          perlKeywords.add("opendir",Token.KEYWORD3);
617          perlKeywords.add("open",Token.KEYWORD3);
618          perlKeywords.add("ord",Token.KEYWORD3);
619          perlKeywords.add("pack",Token.KEYWORD3);
620          perlKeywords.add("pipe",Token.KEYWORD3);
621          perlKeywords.add("pop",Token.KEYWORD3);
622          perlKeywords.add("pos",Token.KEYWORD3);
623          perlKeywords.add("printf",Token.KEYWORD3);
624          perlKeywords.add("print",Token.KEYWORD3);
625          perlKeywords.add("push",Token.KEYWORD3);
626          perlKeywords.add("quotemeta",Token.KEYWORD3);
627          perlKeywords.add("rand",Token.KEYWORD3);
628          perlKeywords.add("readdir",Token.KEYWORD3);
629          perlKeywords.add("read",Token.KEYWORD3);
630          perlKeywords.add("readlink",Token.KEYWORD3);
631          perlKeywords.add("recv",Token.KEYWORD3);
632          perlKeywords.add("ref",Token.KEYWORD3);
633          perlKeywords.add("rename",Token.KEYWORD3);
634          perlKeywords.add("reset",Token.KEYWORD3);
635          perlKeywords.add("reverse",Token.KEYWORD3);
636          perlKeywords.add("rewinddir",Token.KEYWORD3);
637          perlKeywords.add("rindex",Token.KEYWORD3);
638          perlKeywords.add("rmdir",Token.KEYWORD3);
639          perlKeywords.add("scalar",Token.KEYWORD3);
640          perlKeywords.add("seekdir",Token.KEYWORD3);
641          perlKeywords.add("seek",Token.KEYWORD3);
642          perlKeywords.add("select",Token.KEYWORD3);
643          perlKeywords.add("semctl",Token.KEYWORD3);
644          perlKeywords.add("semget",Token.KEYWORD3);
645          perlKeywords.add("semop",Token.KEYWORD3);
646          perlKeywords.add("send",Token.KEYWORD3);
647          perlKeywords.add("setgrent",Token.KEYWORD3);
648          perlKeywords.add("sethostent",Token.KEYWORD3);
649          perlKeywords.add("setnetent",Token.KEYWORD3);
650          perlKeywords.add("setpgrp",Token.KEYWORD3);
651          perlKeywords.add("setpriority",Token.KEYWORD3);
652          perlKeywords.add("setprotoent",Token.KEYWORD3);
653          perlKeywords.add("setpwent",Token.KEYWORD3);
654          perlKeywords.add("setsockopt",Token.KEYWORD3);
655          perlKeywords.add("shift",Token.KEYWORD3);
656          perlKeywords.add("shmctl",Token.KEYWORD3);
657          perlKeywords.add("shmget",Token.KEYWORD3);
658          perlKeywords.add("shmread",Token.KEYWORD3);
659          perlKeywords.add("shmwrite",Token.KEYWORD3);
660          perlKeywords.add("shutdown",Token.KEYWORD3);
661          perlKeywords.add("sin",Token.KEYWORD3);
662          perlKeywords.add("sleep",Token.KEYWORD3);
663          perlKeywords.add("socket",Token.KEYWORD3);
664          perlKeywords.add("socketpair",Token.KEYWORD3);
665          perlKeywords.add("sort",Token.KEYWORD3);
666          perlKeywords.add("splice",Token.KEYWORD3);
667          perlKeywords.add("split",Token.KEYWORD3);
668          perlKeywords.add("sprintf",Token.KEYWORD3);
669          perlKeywords.add("sqrt",Token.KEYWORD3);
670          perlKeywords.add("srand",Token.KEYWORD3);
671          perlKeywords.add("stat",Token.KEYWORD3);
672          perlKeywords.add("study",Token.KEYWORD3);
673          perlKeywords.add("substr",Token.KEYWORD3);
674          perlKeywords.add("symlink",Token.KEYWORD3);
675          perlKeywords.add("syscall",Token.KEYWORD3);
676          perlKeywords.add("sysopen",Token.KEYWORD3);
677          perlKeywords.add("sysread",Token.KEYWORD3);
678          perlKeywords.add("syswrite",Token.KEYWORD3);
679          perlKeywords.add("telldir",Token.KEYWORD3);
680          perlKeywords.add("tell",Token.KEYWORD3);
681          perlKeywords.add("tie",Token.KEYWORD3);
682          perlKeywords.add("tied",Token.KEYWORD3);
683          perlKeywords.add("time",Token.KEYWORD3);
684          perlKeywords.add("times",Token.KEYWORD3);
685          perlKeywords.add("truncate",Token.KEYWORD3);
686          perlKeywords.add("uc",Token.KEYWORD3);
687          perlKeywords.add("ucfirst",Token.KEYWORD3);
688          perlKeywords.add("umask",Token.KEYWORD3);
689          perlKeywords.add("undef",Token.KEYWORD3);
690          perlKeywords.add("unlink",Token.KEYWORD3);
691          perlKeywords.add("unpack",Token.KEYWORD3);
692          perlKeywords.add("unshift",Token.KEYWORD3);
693          perlKeywords.add("untie",Token.KEYWORD3);
694          perlKeywords.add("utime",Token.KEYWORD3);
695          perlKeywords.add("values",Token.KEYWORD3);
696          perlKeywords.add("vec",Token.KEYWORD3);
697          perlKeywords.add("wait",Token.KEYWORD3);
698          perlKeywords.add("waitpid",Token.KEYWORD3);
699          perlKeywords.add("wantarray",Token.KEYWORD3);
700          perlKeywords.add("warn",Token.KEYWORD3);
701          perlKeywords.add("write",Token.KEYWORD3);
702
703          perlKeywords.add("m",S_ONE);
704          perlKeywords.add("q",S_ONE);
705          perlKeywords.add("qq",S_ONE);
706          perlKeywords.add("qw",S_ONE);
707          perlKeywords.add("qx",S_ONE);
708          perlKeywords.add("s",S_TWO);
709          perlKeywords.add("tr",S_TWO);
710          perlKeywords.add("y",S_TWO);
711       }
712       return perlKeywords;
713    }
714 }
715
Popular Tags