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