tsqltokenmarker.java
来自「java写的多功能文件编辑器」· Java 代码 · 共 1,115 行 · 第 1/4 页
JAVA
1,115 行
/* * TSQLTokenMarker.java - SQL token marker * Copyright (C) 2001 Romain Guy * * 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.gjt.sp.jedit.syntax;import javax.swing.text.Segment;/** * SQL token marker. */public class TSQLTokenMarker extends TokenMarker{ boolean bracket = false; public TSQLTokenMarker() { this(getKeywords()); } public TSQLTokenMarker(KeywordMap keywords) { this.keywords = keywords; } public byte markTokensImpl(byte token, Segment line, int lineIndex) { char[] array = line.array; int offset = line.offset; lastOffset = offset; lastKeyword = offset; int length = line.count + offset;loop: for(int i = offset; i < length; i++) { int i1 = (i+1); char c = array[i]; switch(token) { case Token.NULL: switch(c) { case '[': bracket = true; case '"': doKeyword(line,i,c); addToken(i - lastOffset,token); token = Token.LITERAL1; lastOffset = lastKeyword = i; break; case '\'': doKeyword(line,i,c); addToken(i - lastOffset,token); token = Token.LITERAL2; lastOffset = lastKeyword = i; break; case ':': if(lastKeyword == offset) { if(doKeyword(line,i,c)) break; addToken(i1 - lastOffset,Token.LABEL); lastOffset = lastKeyword = i1; } else if(doKeyword(line,i,c)) break; break; case '/': doKeyword(line,i,c); if(length - i > 1) { if (array[i1] == '*') { addToken(i - lastOffset,token); lastOffset = lastKeyword = i; token = Token.COMMENT2; } } break; case '-': doKeyword(line, i, c); if(length - i > 1) { switch(array[i1]) { case '-': addToken(i - lastOffset, token); addToken(length - i, Token.COMMENT1); lastOffset = lastKeyword = length; break loop; } } break; default: if(!Character.isLetterOrDigit(c) && c != '_') doKeyword(line,i,c); break; } break; case Token.COMMENT2: if(c == '*' && length - i > 1) { if(array[i1] == '/') { i++; addToken((i+1) - lastOffset,token); token = Token.NULL; lastOffset = lastKeyword = i+1; } } break; case Token.LITERAL1: if(c == '"' || c == ']') { addToken(i1 - lastOffset,token); token = Token.NULL; lastOffset = lastKeyword = i1; bracket = false; } break; case Token.LITERAL2: if(c == '\'') { addToken(i1 - lastOffset,token); token = Token.NULL; lastOffset = lastKeyword = i1; } break; default: throw new InternalError("Invalid state: " + token); } } if(token == Token.NULL) doKeyword(line,length,'\0'); switch(token) { case Token.LITERAL1: case Token.LITERAL2: addToken(length - lastOffset, (bracket ? Token.LITERAL1 : Token.INVALID)); token = (bracket ? Token.LITERAL1 : Token.NULL); break; case Token.KEYWORD2: addToken(length - lastOffset,token); token = Token.NULL; break; default: addToken(length - lastOffset,token); break; } return token; } public static KeywordMap getKeywords() { if(sqlKeywords == null) { sqlKeywords = new KeywordMap(true); sqlKeywords.add("ADD", Token.KEYWORD1); sqlKeywords.add("ALTER", Token.KEYWORD1); sqlKeywords.add("ANSI_NULLS", Token.KEYWORD1); sqlKeywords.add("AS", Token.KEYWORD1); sqlKeywords.add("ASC", Token.KEYWORD1); sqlKeywords.add("AUTHORIZATION", Token.KEYWORD1); sqlKeywords.add("BACKUP", Token.KEYWORD1); sqlKeywords.add("BEGIN", Token.KEYWORD1); sqlKeywords.add("BREAK", Token.KEYWORD1); sqlKeywords.add("BROWSE", Token.KEYWORD1); sqlKeywords.add("BULK", Token.KEYWORD1); sqlKeywords.add("BY", Token.KEYWORD1); sqlKeywords.add("CASCADE", Token.KEYWORD1); sqlKeywords.add("CHECK", Token.KEYWORD1); sqlKeywords.add("CHECKPOINT", Token.KEYWORD1); sqlKeywords.add("CLOSE", Token.KEYWORD1); sqlKeywords.add("CLUSTERED", Token.KEYWORD1); sqlKeywords.add("COLUMN", Token.KEYWORD1); sqlKeywords.add("COMMIT", Token.KEYWORD1); sqlKeywords.add("COMMITTED", Token.KEYWORD1); sqlKeywords.add("COMPUTE", Token.KEYWORD1); sqlKeywords.add("CONFIRM", Token.KEYWORD1); sqlKeywords.add("CONSTRAINT", Token.KEYWORD1); sqlKeywords.add("CONTAINS", Token.KEYWORD1); sqlKeywords.add("CONTAINSTABLE", Token.KEYWORD1); sqlKeywords.add("CONTINUE", Token.KEYWORD1); sqlKeywords.add("CONTROLROW", Token.KEYWORD1); sqlKeywords.add("CREATE", Token.KEYWORD1); sqlKeywords.add("CURRENT", Token.KEYWORD1); sqlKeywords.add("CURRENT_DATE", Token.KEYWORD1); sqlKeywords.add("CURRENT_TIME", Token.KEYWORD1); sqlKeywords.add("CURSOR", Token.KEYWORD1); sqlKeywords.add("DATABASE", Token.KEYWORD1); sqlKeywords.add("DBCC", Token.KEYWORD1); sqlKeywords.add("DEALLOCATE", Token.KEYWORD1); sqlKeywords.add("DECLARE", Token.KEYWORD1); sqlKeywords.add("DEFAULT", Token.KEYWORD1); sqlKeywords.add("DELETE", Token.KEYWORD1); sqlKeywords.add("DENY", Token.KEYWORD1); sqlKeywords.add("DESC", Token.KEYWORD1); sqlKeywords.add("DISK", Token.KEYWORD1); sqlKeywords.add("DISTINCT", Token.KEYWORD1); sqlKeywords.add("DISTRIBUTED", Token.KEYWORD1); sqlKeywords.add("DOUBLE", Token.KEYWORD1); sqlKeywords.add("DROP", Token.KEYWORD1); sqlKeywords.add("DUMMY", Token.KEYWORD1); sqlKeywords.add("DUMP", Token.KEYWORD1); sqlKeywords.add("ELSE", Token.KEYWORD1); sqlKeywords.add("END", Token.KEYWORD1); sqlKeywords.add("ERRLVL", Token.KEYWORD1); sqlKeywords.add("ERROREXIT", Token.KEYWORD1); sqlKeywords.add("ESCAPE", Token.KEYWORD1); sqlKeywords.add("EXCEPT", Token.KEYWORD1); sqlKeywords.add("EXEC", Token.KEYWORD1); sqlKeywords.add("EXECUTE", Token.KEYWORD1); sqlKeywords.add("EXIT", Token.KEYWORD1); sqlKeywords.add("FETCH", Token.KEYWORD1); sqlKeywords.add("FILE", Token.KEYWORD1); sqlKeywords.add("FILLFACTOR", Token.KEYWORD1); sqlKeywords.add("FLOPPY", Token.KEYWORD1); sqlKeywords.add("FOR", Token.KEYWORD1); sqlKeywords.add("FOREIGN", Token.KEYWORD1); sqlKeywords.add("FREETEXT", Token.KEYWORD1); sqlKeywords.add("FREETEXTTABLE", Token.KEYWORD1); sqlKeywords.add("FROM", Token.KEYWORD1); sqlKeywords.add("FULL", Token.KEYWORD1); sqlKeywords.add("GOTO", Token.KEYWORD1); sqlKeywords.add("GRANT", Token.KEYWORD1); sqlKeywords.add("GROUP", Token.KEYWORD1); sqlKeywords.add("HAVING", Token.KEYWORD1); sqlKeywords.add("HOLDLOCK", Token.KEYWORD1); sqlKeywords.add("IDENTITY_INSERT", Token.KEYWORD1); sqlKeywords.add("IDENTITYCOL", Token.KEYWORD1); sqlKeywords.add("ID", Token.KEYWORD1); sqlKeywords.add("IF", Token.KEYWORD1); sqlKeywords.add("INDEX", Token.KEYWORD1); sqlKeywords.add("INNER", Token.KEYWORD1); sqlKeywords.add("INSERT", Token.KEYWORD1); sqlKeywords.add("INTO", Token.KEYWORD1); sqlKeywords.add("IS", Token.KEYWORD1); sqlKeywords.add("ISOLATION", Token.KEYWORD1); sqlKeywords.add("KEY", Token.KEYWORD1); sqlKeywords.add("KILL", Token.KEYWORD1); sqlKeywords.add("LEVEL", Token.KEYWORD1); sqlKeywords.add("LINENO", Token.KEYWORD1); sqlKeywords.add("LOAD", Token.KEYWORD1); sqlKeywords.add("MAX", Token.KEYWORD1); sqlKeywords.add("MIN", Token.KEYWORD1); sqlKeywords.add("MIRROREXIT", Token.KEYWORD1); sqlKeywords.add("NATIONAL", Token.KEYWORD1); sqlKeywords.add("NOCHECK", Token.KEYWORD1); sqlKeywords.add("NONCLUSTERED", Token.KEYWORD1); sqlKeywords.add("OF", Token.KEYWORD1); sqlKeywords.add("OFF", Token.KEYWORD1); sqlKeywords.add("OFFSETS", Token.KEYWORD1); sqlKeywords.add("ON", Token.KEYWORD1); sqlKeywords.add("ONCE", Token.KEYWORD1); sqlKeywords.add("ONLY", Token.KEYWORD1); sqlKeywords.add("OPEN", Token.KEYWORD1); sqlKeywords.add("OPENDATASOURCE", Token.KEYWORD1); sqlKeywords.add("OPENQUERY", Token.KEYWORD1); sqlKeywords.add("OPENROWSET", Token.KEYWORD1);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?