package org.jetbrains.plugins.clojure.lexer; import com.intellij.psi.TokenType; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; import org.jetbrains.plugins.clojure.parser.ClojureElementType; /** * User: peter * Date: Nov 20, 2008 * Time: 1:50:48 PM * Copyright 2007, 2008, 2009 Red Shark Technology * <p/> * http://www.apache.org/licenses/LICENSE-2.0 * <p/> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ public interface ClojureTokenTypes { // Special characters IElementType LEFT_PAREN = new ClojureElementType("("); IElementType RIGHT_PAREN = new ClojureElementType(")"); IElementType LEFT_CURLY = new ClojureElementType("{"); IElementType RIGHT_CURLY = new ClojureElementType("}"); IElementType LEFT_SQUARE = new ClojureElementType("["); IElementType RIGHT_SQUARE = new ClojureElementType("]"); IElementType SHARP = new ClojureElementType("#"); IElementType UP = new ClojureElementType("^"); IElementType SHARPUP = new ClojureElementType("#^"); IElementType TILDA = new ClojureElementType("~"); IElementType AT = new ClojureElementType("@"); IElementType TILDAAT = new ClojureElementType("~@"); IElementType QUOTE = new ClojureElementType("'"); IElementType BACKQUOTE = new ClojureElementType("`"); // Comments IElementType LINE_COMMENT = new ClojureElementType("line comment"); TokenSet COMMENTS = TokenSet.create(LINE_COMMENT); // Literals IElementType STRING_LITERAL = new ClojureElementType("string literal"); IElementType WRONG_STRING_LITERAL = new ClojureElementType("wrong string literal"); IElementType LONG_LITERAL = new ClojureElementType("long literal"); IElementType BIG_INT_LITERAL = new ClojureElementType("big integer literal"); IElementType DOUBLE_LITERAL = new ClojureElementType("double literal"); IElementType BIG_DECIMAL_LITERAL = new ClojureElementType("big deciamel literal"); IElementType RATIO = new ClojureElementType("ratio literal"); IElementType CHAR_LITERAL = new ClojureElementType("character literal"); IElementType NIL = new ClojureElementType("nil"); IElementType TRUE = new ClojureElementType("true"); IElementType FALSE = new ClojureElementType("false"); TokenSet BOOLEAN_LITERAL = TokenSet.create(TRUE, FALSE, NIL); TokenSet LITERALS = TokenSet.create(STRING_LITERAL, WRONG_STRING_LITERAL, LONG_LITERAL, BIG_INT_LITERAL, DOUBLE_LITERAL, BIG_DECIMAL_LITERAL, RATIO, CHAR_LITERAL, TRUE, FALSE, NIL); TokenSet READABLE_TEXT = TokenSet.create(STRING_LITERAL, LINE_COMMENT, WRONG_STRING_LITERAL); IElementType COLON_SYMBOL = new ClojureElementType("key"); // :foo // Symbol parts IElementType symATOM = new ClojureElementType("atom"); // foo IElementType symDOT = new ClojureElementType("dot"); // foo IElementType symNS_SEP = new ClojureElementType("ns-sep"); // foo IElementType symIMPLICIT_ARG = new ClojureElementType("implicit function argument"); // Control characters IElementType EOL = new ClojureElementType("end of line"); IElementType EOF = new ClojureElementType("end of file"); IElementType WHITESPACE = TokenType.WHITE_SPACE; IElementType COMMA = new ClojureElementType(","); IElementType BAD_CHARACTER = TokenType.BAD_CHARACTER; // Useful token sets TokenSet WHITESPACE_SET = TokenSet.create(EOL, EOF, WHITESPACE, COMMA); TokenSet symS = TokenSet.create(symATOM, symDOT, symNS_SEP, symIMPLICIT_ARG); TokenSet ATOMS = TokenSet.create(symATOM, symDOT, symNS_SEP); TokenSet SEPARATORS = TokenSet.create(symDOT, symNS_SEP); TokenSet IDENTIFIERS = TokenSet.create(symATOM); TokenSet KEYWORDS = TokenSet.create(NIL, TRUE, FALSE); TokenSet STRINGS = TokenSet.create(STRING_LITERAL, WRONG_STRING_LITERAL); }