📄 perltokenmaker.java
字号:
/*
* 03/29/2004
*
* PerlTokenMaker.java - Tokenizer for Perl shell scripts.
* Copyright (C) 2004 Robert Futrell
* email@address.com
* www.website.com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package org.fife.ui.rsyntaxtextarea.modes;
import javax.swing.text.Segment;
import org.fife.ui.rsyntaxtextarea.*;
/**
* A token maker that turns text into a linked list of
* <code>Token</code>s for syntax highlighting Perl shell
* scripts.
*
* @author Robert Futrell
* @version 0.1
*/
public class PerlTokenMaker extends AbstractTokenMaker {
protected final String operators = "+-*/%!=<>~&|?:";
protected final String separators = "()[]";
protected final String separators2 = ".,;"; // Characters you don't want syntax highlighted but separate identifiers.
protected final String shellVariables = "&`'+*./|,\\\";#%=-~^:?!@$<>)([]"; // Characters that are part of "$<char>" shell variables; e.g., "$_".
protected final String hexCharacters = "0123456789ABCDEFabcdef";
protected final String numberEndChars = "FfLl"; // Characters used to specify literal number types.
private int currentTokenStart;
private int currentTokenType;
/*****************************************************************************/
/**
* Constructor.
*/
public PerlTokenMaker() {
super(); // Initializes tokensToHighlight.
}
/*****************************************************************************/
/**
* Checks the token to give it the exact ID it deserves before
* being passed up to the super method.
*
* @param segment <code>Segment</code> to get text from.
* @param start Start offset in <code>segment</code> of token.
* @param end End offset in <code>segment</code> of token.
* @param tokenType The token's type.
* @param startOffset The offset in the document at which the token occurs.
*/
public void addToken(Segment segment, int start, int end, int tokenType, int startOffset) {
switch (tokenType) {
// Since reserved words, functions, and data types are all passed into here
// as "identifiers," we have to see what the token really is...
case Token.IDENTIFIER:
int value = wordsToHighlight.get(segment, start,end);
if (value!=-1)
tokenType = value;
break;
case Token.WHITESPACE:
case Token.SEPARATOR:
case Token.OPERATOR:
case Token.LITERAL_NUMBER_DECIMAL_INT:
case Token.LITERAL_NUMBER_FLOAT:
case Token.LITERAL_NUMBER_HEXADECIMAL:
case Token.LITERAL_STRING_DOUBLE_QUOTE:
case Token.LITERAL_CHAR:
case Token.LITERAL_BACKQUOTE:
case Token.COMMENT_EOL:
case Token.PREPROCESSOR:
case Token.ERROR_NUMBER_FORMAT:
case Token.VARIABLE:
break;
default:
System.err.println("Unknown tokenType in PerlTokenMaker.addToken: '" + tokenType + "'");
System.exit(0);
}
super.addToken(segment, start, end, tokenType, startOffset);
}
/*****************************************************************************/
/**
* Returns the words to highlight for UNIX shell scripts.
*
* @return A <code>TokenMap</code> containing the words to highlight for
* Perl scripts.
* @see org.fife.ui.rsyntaxtextarea.AbstractTokenMaker#getWordsToHighlight
*/
public TokenMap getWordsToHighlight() {
TokenMap tokenMap = new TokenMap();
int reservedWord = Token.RESERVED_WORD;
tokenMap.put("continue", reservedWord);
tokenMap.put("do", reservedWord);
tokenMap.put("else", reservedWord);
tokenMap.put("elsif", reservedWord);
tokenMap.put("esac", reservedWord);
tokenMap.put("for", reservedWord);
tokenMap.put("foreach", reservedWord);
tokenMap.put("if", reservedWord);
tokenMap.put("last", reservedWord);
tokenMap.put("next", reservedWord);
tokenMap.put("redo", reservedWord);
tokenMap.put("sub", reservedWord);
tokenMap.put("unless", reservedWord);
tokenMap.put("until", reservedWord);
tokenMap.put("while", reservedWord);
int function = Token.FUNCTION;
tokenMap.put("abs", function);
tokenMap.put("accept", function);
tokenMap.put("alarm", function);
tokenMap.put("atan2", function);
tokenMap.put("bind", function);
tokenMap.put("binmode", function);
tokenMap.put("bless", function);
tokenMap.put("caller", function);
tokenMap.put("chdir", function);
tokenMap.put("chmod", function);
tokenMap.put("chomp", function);
tokenMap.put("chop", function);
tokenMap.put("chown", function);
tokenMap.put("chr", function);
tokenMap.put("chroot", function);
tokenMap.put("close", function);
tokenMap.put("closedir", function);
tokenMap.put("connect", function);
tokenMap.put("cos", function);
tokenMap.put("crypt", function);
tokenMap.put("dbmclose", function);
tokenMap.put("dbmopen", function);
tokenMap.put("defined", function);
tokenMap.put("delete", function);
tokenMap.put("die", function);
tokenMap.put("dump", function);
tokenMap.put("each", function);
tokenMap.put("endgrent", function);
tokenMap.put("endhostent", function);
tokenMap.put("endnetent", function);
tokenMap.put("endprotoent", function);
tokenMap.put("endpwent", function);
tokenMap.put("endservent", function);
tokenMap.put("eof", function);
tokenMap.put("eval", function);
tokenMap.put("exec", function);
tokenMap.put("exists", function);
tokenMap.put("exit", function);
tokenMap.put("exp", function);
tokenMap.put("fcntl", function);
tokenMap.put("fileno", function);
tokenMap.put("flock", function);
tokenMap.put("fork", function);
tokenMap.put("formline", function);
tokenMap.put("getc", function);
tokenMap.put("getgrent", function);
tokenMap.put("getgrgid", function);
tokenMap.put("getgrnam", function);
tokenMap.put("gethostbyaddr", function);
tokenMap.put("gethostbyname", function);
tokenMap.put("gethostent", function);
tokenMap.put("getlogin", function);
tokenMap.put("getnetbyaddr", function);
tokenMap.put("getnetbyname", function);
tokenMap.put("getnetent", function);
tokenMap.put("getpeername", function);
tokenMap.put("getpgrp", function);
tokenMap.put("getppid", function);
tokenMap.put("getpriority", function);
tokenMap.put("getprotobyname", function);
tokenMap.put("getprotobynumber", function);
tokenMap.put("getprotoent", function);
tokenMap.put("getpwent", function);
tokenMap.put("getpwnam", function);
tokenMap.put("getpwuid", function);
tokenMap.put("getservbyname", function);
tokenMap.put("getservbyport", function);
tokenMap.put("getservent", function);
tokenMap.put("getsockname", function);
tokenMap.put("getsockopt", function);
tokenMap.put("glob", function);
tokenMap.put("gmtime", function);
tokenMap.put("goto", function);
tokenMap.put("grep", function);
tokenMap.put("hex", function);
tokenMap.put("index", function);
tokenMap.put("int", function);
tokenMap.put("ioctl", function);
tokenMap.put("join", function);
tokenMap.put("keys", function);
tokenMap.put("kill", function);
tokenMap.put("last", function);
tokenMap.put("lc", function);
tokenMap.put("lcfirst", function);
tokenMap.put("length", function);
tokenMap.put("link", function);
tokenMap.put("listen", function);
tokenMap.put("local", function);
tokenMap.put("localtime", function);
tokenMap.put("log", function);
tokenMap.put("lstat", function);
tokenMap.put("map", function);
tokenMap.put("mkdir", function);
tokenMap.put("msgctl", function);
tokenMap.put("msgget", function);
tokenMap.put("msgrcv", function);
tokenMap.put("msgsnd", function);
tokenMap.put("my", function);
tokenMap.put("next", function);
tokenMap.put("no", function);
tokenMap.put("oct", function);
tokenMap.put("open", function);
tokenMap.put("opendir", function);
tokenMap.put("ord", function);
tokenMap.put("pack", function);
tokenMap.put("package", function);
tokenMap.put("pipe", function);
tokenMap.put("pop", function);
tokenMap.put("pos", function);
tokenMap.put("print", function);
tokenMap.put("printf", function);
tokenMap.put("prototype", function);
tokenMap.put("push", function);
tokenMap.put("quotemeta", function);
tokenMap.put("rand", function);
tokenMap.put("read", function);
tokenMap.put("readdir", function);
tokenMap.put("readline", function);
tokenMap.put("readlink", function);
tokenMap.put("readpipe", function);
tokenMap.put("recv", function);
tokenMap.put("redo", function);
tokenMap.put("ref", function);
tokenMap.put("rename", function);
tokenMap.put("require", function);
tokenMap.put("reset", function);
tokenMap.put("return", function);
tokenMap.put("reverse", function);
tokenMap.put("rewinddir", function);
tokenMap.put("rindex", function);
tokenMap.put("rmdir", function);
tokenMap.put("scalar", function);
tokenMap.put("seek", function);
tokenMap.put("seekdir", function);
tokenMap.put("select", function);
tokenMap.put("semctl", function);
tokenMap.put("semget", function);
tokenMap.put("semop", function);
tokenMap.put("send", function);
tokenMap.put("sethostent", function);
tokenMap.put("setgrent", function);
tokenMap.put("setnetent", function);
tokenMap.put("setpgrp", function);
tokenMap.put("setpriority", function);
tokenMap.put("setprotoent", function);
tokenMap.put("setpwent", function);
tokenMap.put("setservent", function);
tokenMap.put("setsockopt", function);
tokenMap.put("shift", function);
tokenMap.put("shmctl", function);
tokenMap.put("shmget", function);
tokenMap.put("shmread", function);
tokenMap.put("shmwrite", function);
tokenMap.put("shutdown", function);
tokenMap.put("sin", function);
tokenMap.put("sleep", function);
tokenMap.put("socket", function);
tokenMap.put("socketpair", function);
tokenMap.put("sort", function);
tokenMap.put("splice", function);
tokenMap.put("split", function);
tokenMap.put("sprintf", function);
tokenMap.put("sqrt", function);
tokenMap.put("srand", function);
tokenMap.put("stat", function);
tokenMap.put("study", function);
tokenMap.put("sub", function);
tokenMap.put("substr", function);
tokenMap.put("symlink", function);
tokenMap.put("syscall", function);
tokenMap.put("sysopen", function);
tokenMap.put("sysread", function);
tokenMap.put("sysseek", function);
tokenMap.put("system", function);
tokenMap.put("syswrite", function);
tokenMap.put("tell", function);
tokenMap.put("telldir", function);
tokenMap.put("tie", function);
tokenMap.put("tied", function);
tokenMap.put("time", function);
tokenMap.put("times", function);
tokenMap.put("truncate", function);
tokenMap.put("uc", function);
tokenMap.put("ucfirst", function);
tokenMap.put("umask", function);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -