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 + -
显示快捷键?