001: /*
002: * Token.java - Generic token
003: * Copyright (C) 1998, 1999 Slava Pestov
004: *
005: * You may use and modify this package for any purpose. Redistribution is
006: * permitted, in both source and binary form, provided that this notice
007: * remains intact in all source distributions of this package.
008: */
009:
010: package org.syntax.jedit.tokenmarker;
011:
012: /**
013: * A linked list of tokens. Each token has three fields - a token
014: * identifier, which is a byte value that can be looked up in the
015: * array returned by <code>SyntaxDocument.getColors()</code>
016: * to get a color value, a length value which is the length of the
017: * token in the text, and a pointer to the next token in the list.
018: *
019: * @author Slava Pestov
020: * @version $Id$
021: */
022:
023: public class Token {
024: /**
025: * Normal text token id. This should be used to mark
026: * normal text.
027: */
028: public static final byte NULL = 0;
029:
030: /**
031: * Comment 1 token id. This can be used to mark a comment.
032: */
033: public static final byte COMMENT1 = 1;
034:
035: /**
036: * Comment 2 token id. This can be used to mark a comment.
037: */
038: public static final byte COMMENT2 = 2;
039:
040: /**
041: * Literal 1 token id. This can be used to mark a string
042: * literal (eg, C mode uses this to mark "..." literals)
043: */
044: public static final byte LITERAL1 = 3;
045:
046: /**
047: * Literal 2 token id. This can be used to mark an object
048: * literal (eg, Java mode uses this to mark true, false, etc)
049: */
050: public static final byte LITERAL2 = 4;
051:
052: /**
053: * Label token id. This can be used to mark labels
054: * (eg, C mode uses this to mark ...: sequences)
055: */
056: public static final byte LABEL = 5;
057:
058: /**
059: * Keyword 1 token id. This can be used to mark a
060: * keyword. This should be used for general language
061: * constructs.
062: */
063: public static final byte KEYWORD1 = 6;
064:
065: /**
066: * Keyword 2 token id. This can be used to mark a
067: * keyword. This should be used for preprocessor
068: * commands, or variables.
069: */
070: public static final byte KEYWORD2 = 7;
071:
072: /**
073: * Keyword 3 token id. This can be used to mark a
074: * keyword. This should be used for data types.
075: */
076: public static final byte KEYWORD3 = 8;
077:
078: /**
079: * Operator token id. This can be used to mark an
080: * operator. (eg, SQL mode marks +, -, etc with this
081: * token type)
082: */
083: public static final byte OPERATOR = 9;
084:
085: /**
086: * Invalid token id. This can be used to mark invalid
087: * or incomplete tokens, so the user can easily spot
088: * syntax errors.
089: */
090: public static final byte INVALID = 10;
091:
092: /**
093: * The total number of defined token ids.
094: */
095: public static final byte ID_COUNT = 11;
096:
097: /**
098: * The first id that can be used for internal state
099: * in a token marker.
100: */
101: public static final byte INTERNAL_FIRST = 100;
102:
103: /**
104: * The last id that can be used for internal state
105: * in a token marker.
106: */
107: public static final byte INTERNAL_LAST = 126;
108:
109: /**
110: * The token type, that along with a length of 0
111: * marks the end of the token list.
112: */
113: public static final byte END = 127;
114:
115: /**
116: * The length of this token.
117: */
118: public int length;
119:
120: /**
121: * The id of this token.
122: */
123: public byte id;
124:
125: /**
126: * The next token in the linked list.
127: */
128: public Token next;
129:
130: /**
131: * Creates a new token.
132: * @param length The length of the token
133: * @param id The id of the token
134: */
135: public Token(int length, byte id) {
136: this .length = length;
137: this .id = id;
138: }
139:
140: /**
141: * Returns a string representation of this token.
142: */
143: public String toString() {
144: return "[id=" + id + ",length=" + length + "]";
145: }
146: }
|