📄 unixshelltokenmaker.java
字号:
/*
* 03/16/2004
*
* UnixShellTokenMaker.java - Scanner for UNIX 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 UNIX shell scripts.
*
* @author Robert Futrell
* @version 0.1
*/
public class UnixShellTokenMaker 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., "$_".
private int currentTokenStart;
private int currentTokenType;
/*****************************************************************************/
/**
* Constructor.
*/
public UnixShellTokenMaker() {
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_STRING_DOUBLE_QUOTE:
case Token.LITERAL_CHAR:
case Token.LITERAL_BACKQUOTE:
case Token.COMMENT_EOL:
case Token.PREPROCESSOR:
case Token.VARIABLE:
break;
default:
System.err.println("Unknown tokenType in UnixShellTokenMaker.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
* UNIX shell scripts.
* @see org.fife.ui.rsyntaxtextarea.AbstractTokenMaker#getWordsToHighlight
*/
public TokenMap getWordsToHighlight() {
TokenMap tokenMap = new TokenMap();
int reservedWord = Token.RESERVED_WORD;
tokenMap.put("case", reservedWord);
tokenMap.put("do", reservedWord);
tokenMap.put("done", reservedWord);
tokenMap.put("elif", reservedWord);
tokenMap.put("else", reservedWord);
tokenMap.put("esac", reservedWord);
tokenMap.put("fi", reservedWord);
tokenMap.put("if", reservedWord);
tokenMap.put("in", reservedWord);
tokenMap.put("select", reservedWord);
tokenMap.put("then", reservedWord);
tokenMap.put("until", reservedWord);
tokenMap.put("while", reservedWord);
int function = Token.FUNCTION;
tokenMap.put("addbib", function);
tokenMap.put("admin", function);
tokenMap.put("alias", function);
tokenMap.put("apropos", function);
tokenMap.put("ar", function);
tokenMap.put("at", function);
tokenMap.put("awk", function);
tokenMap.put("banner", function);
tokenMap.put("basename", function);
tokenMap.put("batch", function);
tokenMap.put("biff", function);
tokenMap.put("bin-mail", function);
tokenMap.put("binmail", function);
tokenMap.put("cal", function);
tokenMap.put("calendar", function);
tokenMap.put("cancel", function);
tokenMap.put("cat", function);
tokenMap.put("cb", function);
tokenMap.put("cc", function);
tokenMap.put("cd", function);
tokenMap.put("cdc", function);
tokenMap.put("chdir", function);
tokenMap.put("checkeq", function);
tokenMap.put("checknr", function);
tokenMap.put("chfn", function);
tokenMap.put("chgrp", function);
tokenMap.put("chmod", function);
tokenMap.put("chown", function);
tokenMap.put("chsh", function);
tokenMap.put("clear", function);
tokenMap.put("cmp", function);
tokenMap.put("colcrt", function);
tokenMap.put("comb", function);
tokenMap.put("comm", function);
tokenMap.put("compress", function);
tokenMap.put("continue", function);
tokenMap.put("cp", function);
tokenMap.put("cpio", function);
tokenMap.put("cpp", function);
tokenMap.put("csh", function);
tokenMap.put("ctags", function);
tokenMap.put("date", function);
tokenMap.put("dbx", function);
tokenMap.put("delta", function);
tokenMap.put("deroff", function);
tokenMap.put("df", function);
tokenMap.put("diff", function);
tokenMap.put("dtree", function);
tokenMap.put("du", function);
tokenMap.put("e", function);
tokenMap.put("echo", function);
tokenMap.put("ed", function);
tokenMap.put("edit", function);
tokenMap.put("enscript", function);
tokenMap.put("eqn", function);
tokenMap.put("error", function);
tokenMap.put("ex", function);
tokenMap.put("exit", function);
tokenMap.put("expand", function);
tokenMap.put("expr", function);
tokenMap.put("false", function);
tokenMap.put("file", function);
tokenMap.put("find", function);
tokenMap.put("finger", function);
tokenMap.put("fmt", function);
tokenMap.put("fmt_mail", function);
tokenMap.put("fold", function);
tokenMap.put("ftp", function);
tokenMap.put("function", function);
tokenMap.put("gcore", function);
tokenMap.put("get", function);
tokenMap.put("gprof", function);
tokenMap.put("grep", function);
tokenMap.put("groups", function);
tokenMap.put("gunzip", function);
tokenMap.put("gzip", function);
tokenMap.put("hashcheck", function);
tokenMap.put("hashmake", function);
tokenMap.put("head", function);
tokenMap.put("help", function);
tokenMap.put("history", function);
tokenMap.put("imake", function);
tokenMap.put("indent", function);
tokenMap.put("install", function);
tokenMap.put("join", function);
tokenMap.put("kill", function);
tokenMap.put("last", function);
tokenMap.put("ld", function);
tokenMap.put("leave", function);
tokenMap.put("less", function);
tokenMap.put("lex", function);
tokenMap.put("lint", function);
tokenMap.put("ln", function);
tokenMap.put("login", function);
tokenMap.put("look", function);
tokenMap.put("lookbib", function);
tokenMap.put("lorder", function);
tokenMap.put("lp", function);
tokenMap.put("lpq", function);
tokenMap.put("lpr", function);
tokenMap.put("lprm", function);
tokenMap.put("ls", function);
tokenMap.put("mail", function);
tokenMap.put("Mail", function);
tokenMap.put("make", function);
tokenMap.put("man", function);
tokenMap.put("md", function);
tokenMap.put("mesg", function);
tokenMap.put("mkdir", function);
tokenMap.put("mkstr", function);
tokenMap.put("more", function);
tokenMap.put("mv", function);
tokenMap.put("nawk", function);
tokenMap.put("neqn", function);
tokenMap.put("nice", function);
tokenMap.put("nm", function);
tokenMap.put("nroff", function);
tokenMap.put("od", function);
tokenMap.put("page", function);
tokenMap.put("passwd", function);
tokenMap.put("paste", function);
tokenMap.put("pr", function);
tokenMap.put("print", function);
tokenMap.put("printenv", function);
tokenMap.put("prof", function);
tokenMap.put("prs", function);
tokenMap.put("prt", function);
tokenMap.put("ps", function);
tokenMap.put("ptx", function);
tokenMap.put("pwd", function);
tokenMap.put("quota", function);
tokenMap.put("ranlib", function);
tokenMap.put("rcp", function);
tokenMap.put("rcs", function);
tokenMap.put("rcsdiff", function);
tokenMap.put("read", function);
tokenMap.put("red", function);
tokenMap.put("return", function);
tokenMap.put("rev", function);
tokenMap.put("rlogin", function);
tokenMap.put("rm", function);
tokenMap.put("rmdel", function);
tokenMap.put("rmdir", function);
tokenMap.put("roffbib", function);
tokenMap.put("rsh", function);
tokenMap.put("rup", function);
tokenMap.put("ruptime", function);
tokenMap.put("rusers", function);
tokenMap.put("rwall", function);
tokenMap.put("rwho", function);
tokenMap.put("sact", function);
tokenMap.put("sccs", function);
tokenMap.put("sccsdiff", function);
tokenMap.put("script", function);
tokenMap.put("sed", function);
tokenMap.put("set", function);
tokenMap.put("sh", function);
tokenMap.put("shift", function);
tokenMap.put("size", function);
tokenMap.put("sleep", function);
tokenMap.put("sort", function);
tokenMap.put("sortbib", function);
tokenMap.put("spell", function);
tokenMap.put("split", function);
tokenMap.put("strings", function);
tokenMap.put("strip", function);
tokenMap.put("stty", function);
tokenMap.put("su", function);
tokenMap.put("symorder", function);
tokenMap.put("tabs", function);
tokenMap.put("tail", function);
tokenMap.put("talk", function);
tokenMap.put("tar", function);
tokenMap.put("tbl", function);
tokenMap.put("tee", function);
tokenMap.put("telnet", function);
tokenMap.put("test", function);
tokenMap.put("tftp", function);
tokenMap.put("time", function);
tokenMap.put("touch", function);
tokenMap.put("troff", function);
tokenMap.put("true", function);
tokenMap.put("tsort", function);
tokenMap.put("tty", function);
tokenMap.put("type", function);
tokenMap.put("typeset", function);
tokenMap.put("ue", function);
tokenMap.put("ul", function);
tokenMap.put("uncompress", function);
tokenMap.put("unexpand", function);
tokenMap.put("unget", function);
tokenMap.put("unifdef", function);
tokenMap.put("uniq", function);
tokenMap.put("units", function);
tokenMap.put("unset", function);
tokenMap.put("uptime", function);
tokenMap.put("users", function);
tokenMap.put("uucp", function);
tokenMap.put("uudecode", function);
tokenMap.put("uuencode", function);
tokenMap.put("uulog", function);
tokenMap.put("uuname", function);
tokenMap.put("uusend", function);
tokenMap.put("uux", function);
tokenMap.put("vacation", function);
tokenMap.put("val", function);
tokenMap.put("vedit", function);
tokenMap.put("vgrind", function);
tokenMap.put("vi", function);
tokenMap.put("view", function);
tokenMap.put("vtroff", function);
tokenMap.put("w", function);
tokenMap.put("wait", function);
tokenMap.put("wall", function);
tokenMap.put("wc", function);
tokenMap.put("what", function);
tokenMap.put("whatis", function);
tokenMap.put("whereis", function);
tokenMap.put("which", function);
tokenMap.put("who", function);
tokenMap.put("whoami", function);
tokenMap.put("write", function);
tokenMap.put("xargs", function);
tokenMap.put("xstr", function);
tokenMap.put("yacc", function);
tokenMap.put("yes", function);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -