KickJava   Java API By Example, From Geeks To Geeks.

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


1 /*
2  * Copyright (C) 2005 - 2006 JasperSoft Corporation. All rights reserved.
3  * http://www.jaspersoft.com.
4  *
5  * Unless you have purchased a commercial license agreement from JasperSoft,
6  * the following license terms apply:
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License version 2 as published by
10  * the Free Software Foundation.
11  *
12  * This program is distributed WITHOUT ANY WARRANTY; and without the
13  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14  * See the GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see http://www.gnu.org/licenses/gpl.txt
18  * or write to:
19  *
20  * Free Software Foundation, Inc.,
21  * 59 Temple Place - Suite 330,
22  * Boston, MA USA 02111-1307
23  *
24  *
25  *
26  *
27  * PerlTokenMarker.java
28  *
29  */

30
31 package org.syntax.jedit.tokenmarker;
32
33 import org.syntax.jedit.*;
34 import javax.swing.text.Segment JavaDoc;
35
36 /**
37  * Perl token marker.
38  *
39  * @author Slava Pestov
40  * @version $Id: PerlTokenMarker.java 932 2006-10-20 09:32:45Z gtoffoli $
41  */

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

377                 else if(c == '"')
378                 {
379                     addToken(i1 - lastOffset,token);
380                     token = Token.NULL;
381                     lastOffset = lastKeyword = i1;
382                 }
383                 break;
384             case Token.LITERAL2:
385                 if(backslash)
386                     backslash = false;
387                 /* else if(c == '$')
388                     backslash = true; */

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