phptokenmarker.java

来自「java写的多功能文件编辑器」· Java 代码 · 共 562 行 · 第 1/2 页

JAVA
562
字号
                {                  addToken(lastWhitespace - lastOffset + 1, token, true);                  addToken(i - lastWhitespace - 1, Token.METHOD, true);                }                addToken(1, Token.OPERATOR, true);                token = SCRIPT;                lastOffset = lastKeyword = i1;                lastWhitespace = i;              }              break;            case '"':              doKeyword(line, i, c);              if (backslash)                backslash = false;              else              {                addToken(i - lastOffset, token, true);                lastOffset = lastKeyword = i;                token = Token.LITERAL1;              }              break;            case '\'':              doKeyword(line, i, c);              if (backslash)                backslash = false;              else              {                addToken(i - lastOffset, token, true);                lastOffset = lastKeyword = i;                token = Token.LITERAL2;              }              break;            case '#':              if (doKeyword(line, i, c))                break;              addToken(i - lastOffset, token, true);              addToken(length - i, Token.COMMENT2, true);              lastOffset = lastKeyword = length;              break loop;            case '/':              backslash = false;              doKeyword(line, i, c);              if (length - i > 1)/*This is the same as if(length > i + 1) */              {                if (array[i1] == '/')                {                  addToken(i - lastOffset, token, true);                  addToken(length - i, Token.COMMENT1, true);                  lastOffset = lastKeyword = length;                  break loop;                } else if (array[i1] == '*') {                  addToken(i - lastOffset, token, true);                  lastOffset = lastKeyword = i;                  token = Token.COMMENT2;                } else {                  // / operator                  addToken(i - lastOffset, token, true);                  addToken(1, Token.OPERATOR, true);                  lastOffset = lastKeyword = i1;                }              } else {                // / operator                doKeyword(line, i, c);                addToken(1, Token.OPERATOR, true);                lastOffset = lastKeyword = i1;              }              break;            case '$':              doKeyword(line, i, c);              if (backslash)                backslash = false;              else              {                addToken(i - lastOffset, token, true);                token = PHP_VARIABLE;                lastOffset = lastKeyword = i;              }              break;            default:              backslash = false;              if (!Character.isLetterOrDigit(c) && c != '_')// && c != '$')              {                doKeyword(line, i, c);                if (CTokenMarker.METHOD_DELIMITERS.indexOf(c) != -1)                  lastWhitespace = i;                if (c != ' ')                {                  addToken(i - lastOffset, token, true);                  addToken(1, Token.OPERATOR, true);                  lastOffset = lastKeyword = i1;                }              }              break;          }          break;        case PHP_VARIABLE:          if (!Character.isLetterOrDigit(c) && c != '_')          {            addToken(i - lastOffset, Token.LITERAL2, true);            addToken(1, Token.OPERATOR, true);            lastOffset = lastKeyword = i1;            lastWhitespace = i;            token = SCRIPT;          }          break;        case Token.LITERAL1: // Script "..."          if (backslash)            backslash = false;          else if (c == '"')          {            addToken(i1 - lastOffset, Token.LITERAL1, true);            lastOffset = lastKeyword = i1;            lastWhitespace = i;            token = SCRIPT;          }          break;        case Token.LITERAL2: // Script '...'          if (backslash)            backslash = false;          else if (c == '\'')          {            addToken(i1 - lastOffset, Token.LITERAL2, true);            lastOffset = lastKeyword = i1;            lastWhitespace = i;            token = SCRIPT;          }          break;        case Token.COMMENT2: // Inside a Script comment          backslash = false;          if (c == '*' && length - i > 1 && array[i1] == '/')          {            addToken(i + 2 - lastOffset, Token.COMMENT2, true);            i += 1;            lastOffset = lastKeyword = i + 1;            lastWhitespace = i;            token = SCRIPT;          }          break;        default:          throw new InternalError("Invalid state: " + token);      }    }    switch (token)    {      case Token.LITERAL1:        addToken(length - lastOffset, Token.LITERAL1);        break;      case Token.LITERAL2:        addToken(length - lastOffset, Token.LITERAL2);        break;      case Token.KEYWORD2:        addToken(length - lastOffset, Token.INVALID);        token = Token.NULL;        break;      case SCRIPT:        doKeyword(line, length, '\0');        addToken(length - lastOffset, Token.NULL, true);        break;      case Token.COMMENT2:        addToken(length - lastOffset, Token.COMMENT1);        break;      case INSIDE_TAG:        break;      case HTML_LITERAL_QUOTE: case HTML_LITERAL_NO_QUOTE:        addToken(length - lastOffset, Token.LITERAL1);        break;      case PHP_VARIABLE:        addToken(length - lastOffset, Token.KEYWORD3, true);        token = SCRIPT;        break;      case Token.METHOD: case Token.OPERATOR:        addToken(length - lastOffset, token, true);        token = SCRIPT;        break;      default:        addToken(length - lastOffset, token);        break;    }    return token;  }  // private members  private static KeywordMap keywords;  private int lastOffset;  private int lastKeyword;  private int lastWhitespace;  private boolean script = false;  static  {    keywords = new KeywordMap(false);    keywords.add("function", Token.KEYWORD2);    keywords.add("class", Token.KEYWORD2);    keywords.add("var", Token.KEYWORD2);    keywords.add("global", Token.KEYWORD2);    keywords.add("require", Token.KEYWORD2);    keywords.add("require_once", Token.KEYWORD2);    keywords.add("include", Token.KEYWORD2);    keywords.add("include_once", Token.KEYWORD2);    keywords.add("and", Token.KEYWORD1);    keywords.add("or", Token.KEYWORD1);    keywords.add("else", Token.KEYWORD1);    keywords.add("elseif", Token.KEYWORD1);    keywords.add("do", Token.KEYWORD1);    keywords.add("as", Token.KEYWORD1);    keywords.add("for", Token.KEYWORD1);    keywords.add("foreach", Token.KEYWORD1);    keywords.add("if", Token.KEYWORD1);    keywords.add("endif", Token.KEYWORD1);    keywords.add("in", Token.KEYWORD1);    keywords.add("new", Token.KEYWORD1);    keywords.add("return", Token.KEYWORD1);    keywords.add("while", Token.KEYWORD1);    keywords.add("endwhile", Token.KEYWORD1);    keywords.add("with", Token.KEYWORD1);    keywords.add("break", Token.KEYWORD1);    keywords.add("switch", Token.KEYWORD1);    keywords.add("case", Token.KEYWORD1);    keywords.add("continue", Token.KEYWORD1);    keywords.add("default", Token.KEYWORD1);    keywords.add("echo", Token.KEYWORD1);    keywords.add("false", Token.KEYWORD1);    keywords.add("this", Token.KEYWORD1);    keywords.add("true", Token.KEYWORD1);    keywords.add("array", Token.KEYWORD1);    keywords.add("extends", Token.KEYWORD1);  }  protected void addToken(int i, byte id)  {    addToken(i, id, false);  }  protected void addToken(int i, byte id, boolean highlighBackground)  {    if (id == SCRIPT)      id = Token.NULL;    super.addToken(i, id, highlighBackground);  }    private boolean doKeyword(Segment line, int i, char c)  {    int i1 = i + 1;    int len = i - lastKeyword;    byte id = keywords.lookup(line, lastKeyword, len);    if (id != Token.NULL)    {      if (lastKeyword != lastOffset)        addToken(lastKeyword - lastOffset, Token.NULL, true);      addToken(len, id, true);      lastOffset = i;      lastKeyword = i1;      lastWhitespace = i;      return true;    }    lastKeyword = i1;    return false;  }}/*  * ChangeLog:  * $Log: PHPTokenMarker.java,v $  * Revision 1.11  2003/06/30 17:31:10  blaisorblade  * Fix for line-ends.  *  * Revision 1.10  2003/06/29 13:37:27  gfx  * Support of JDK 1.4.2  *  * Revision 1.9  2003/02/26 21:20:41  gfx  * New PHP highlighting feature  *  * Revision 1.8  2002/05/13 17:37:21  gfx  * *** empty log message ***  *  */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?