1 package org.jedit.syntax; 2 3 11 12 import javax.swing.text.Segment ; 13 14 20 public class PerlTokenMarker extends TokenMarker 21 { 22 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 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 str = (String )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 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 if(!Character.isLetterOrDigit(c) && c != '_' 253 && c != '#' && c != '\'' && c != ':' 254 && c != '&') 255 { 256 if(i != offset && array[i-1] == '$') 260 { 261 addToken(i1 - lastOffset,token); 262 lastOffset = lastKeyword = i1; 263 } 264 else 266 { 267 addToken(i - lastOffset,token); 268 lastOffset = lastKeyword = i; 269 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 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 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 ("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); token = Token.NULL; 409 break; 410 default: 411 addToken(length - lastOffset,token); 412 break; 413 } 414 return token; 415 } 416 417 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 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 private String 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 (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 |