/** * Copyright 2010-2014 Three Crickets LLC. * <p> * The contents of this file are subject to the terms of a BSD license. See * attached license.txt. * <p> * Alternatively, you can obtain a royalty free commercial license with less * limitations, transferable or non-transferable, directly from Three Crickets * at http://threecrickets.com/ */ package org.sikuli.syntaxhighlight.grammar; import java.util.Collection; import java.util.HashMap; import java.util.Map; /** * @author Tal Liron */ public class TokenType { // // Constants // public static final TokenType Token = create( "Token", "" ); // Main public static final TokenType Whitespace = create( "Whitespace", "w", Token ); public static final TokenType Text = create( "Text", "", Token ); public static final TokenType Error = create( "Error", "err", Token ); public static final TokenType Other = create( "Other", "x", Token ); // Keywords public static final TokenType Keyword = create( "Keyword", "k", Text ); public static final TokenType Keyword_Constant = create( "Keyword.Constant", "kc", Keyword ); public static final TokenType Keyword_Declaration = create( "Keyword.Declaration", "kd", Keyword ); public static final TokenType Keyword_Namespace = create( "Keyword.Namespace", "kn", Keyword ); public static final TokenType Keyword_Pseudo = create( "Keyword.Pseudo", "kp", Keyword ); public static final TokenType Keyword_Reserved = create( "Keyword.Reserved", "kr", Keyword ); public static final TokenType Keyword_Type = create( "Keyword.Type", "kt", Keyword ); // Names public static final TokenType Name = create( "Name", "n", Text ); public static final TokenType Name_Attribute = create( "Name.Attribute", "na", Name ); public static final TokenType Name_Builtin = create( "Name.Builtin", "nb", Name ); public static final TokenType Name_Builtin_Pseudo = create( "Name.Builtin.Pseudo", "bp", Name_Builtin ); public static final TokenType Name_Class = create( "Name.Class", "nc", Name ); public static final TokenType Name_Constant = create( "Name.Constant", "no", Name ); public static final TokenType Name_Decorator = create( "Name.Decorator", "nd", Name ); public static final TokenType Name_Entity = create( "Name.Entity", "ni", Name ); public static final TokenType Name_Exception = create( "Name.Exception", "ne", Name ); public static final TokenType Name_Function = create( "Name.Function", "nf", Name ); public static final TokenType Name_Property = create( "Name.Property", "py", Name ); public static final TokenType Name_Label = create( "Name.Label", "nl", Name ); public static final TokenType Name_Namespace = create( "Name.Namespace", "nn", Name ); public static final TokenType Name_Other = create( "Name.Other", "nx", Name ); public static final TokenType Name_Tag = create( "Name.Tag", "nt", Name ); public static final TokenType Name_Variable = create( "Name.Variable", "nv", Name ); public static final TokenType Name_Variable_Class = create( "Name.Variable.Class", "vc", Name_Variable ); public static final TokenType Name_Variable_Global = create( "Name.Variable.Global", "vg", Name_Variable ); public static final TokenType Name_Variable_Instance = create( "Name.Variable.Instance", "vi", Name_Variable ); // Literals public static final TokenType Literal = create( "Literal", "l", Text ); public static final TokenType Literal_Date = create( "Literal.Date", "ld", Literal ); // Strings public static final TokenType String = create( "String", "s", Text ); public static final TokenType String_Backtick = create( "String.Backtick", "sb", String ); public static final TokenType String_Char = create( "String.Char", "sc", String ); public static final TokenType String_Doc = create( "String.Doc", "sd", String ); public static final TokenType String_Double = create( "String.Double", "s2", String ); public static final TokenType String_Escape = create( "String.Escape", "se", String ); public static final TokenType String_Heredoc = create( "String.Heredoc", "sh", String ); public static final TokenType String_Interpol = create( "String.Interpol", "si", String ); public static final TokenType String_Other = create( "String.Other", "sx", String ); public static final TokenType String_Regex = create( "String.Regex", "sr", String ); public static final TokenType String_Single = create( "String.Single", "s1", String ); public static final TokenType String_Symbol = create( "String.Symbol", "ss", String ); // Numbers public static final TokenType Number = create( "Number", "m", Text ); public static final TokenType Number_Float = create( "Number.Float", "mf", Number ); public static final TokenType Number_Hex = create( "Number.Hex", "mh", Number ); public static final TokenType Number_Integer = create( "Number.Integer", "mi", Number ); public static final TokenType Number_Integer_Long = create( "Number.Integer.Long", "il", Number_Integer ); public static final TokenType Number_Oct = create( "Number.Oct", "mo", Number ); // Operators public static final TokenType Operator = create( "Operator", "o", Text ); public static final TokenType Operator_Word = create( "Operator.Word", "ow", Operator ); // Punctuation public static final TokenType Punctuation = create( "Punctuation", "p", Text ); // Comments public static final TokenType Comment = create( "Comment", "c", Text ); public static final TokenType Comment_Multiline = create( "Comment.Multiline", "cm", Comment ); public static final TokenType Comment_Preproc = create( "Comment.Preproc", "cp", Comment ); public static final TokenType Comment_Single = create( "Comment.Single", "c1", Comment ); public static final TokenType Comment_Special = create( "Comment.Special", "cs", Comment ); // Generics public static final TokenType Generic = create( "Generic", "g", Text ); public static final TokenType Generic_Deleted = create( "Generic.Deleted", "gd", Generic ); public static final TokenType Generic_Emph = create( "Generic.Emph", "ge", Generic ); public static final TokenType Generic_Error = create( "Generic.Error", "gr", Generic ); public static final TokenType Generic_Heading = create( "Generic.Heading", "gh", Generic ); public static final TokenType Generic_Inserted = create( "Generic.Inserted", "gi", Generic ); public static final TokenType Generic_Output = create( "Generic.Output", "go", Generic ); public static final TokenType Generic_Prompt = create( "Generic.Prompt", "gp", Generic ); public static final TokenType Generic_Strong = create( "Generic.Strong", "gs", Generic ); public static final TokenType Generic_Subheading = create( "Generic.Subheading", "gu", Generic ); public static final TokenType Generic_Traceback = create( "Generic.Traceback", "gt", Generic ); // // Static attributes // public static TokenType getTokenTypeByName( String name ) { return tokenTypesByName.get( name ); } public static TokenType getTokenTypeByShortName( String shortName ) { return tokenTypesByShortName.get( shortName ); } public static Collection<TokenType> getTokenTypes() { return tokenTypesByName.values(); } // // Attributes // public String getName() { return name; } public String getShortName() { return shortName; } public TokenType getParent() { return parent; } // // Object // @Override public String toString() { return name; } // ////////////////////////////////////////////////////////////////////////// // Private private static Map<String, TokenType> tokenTypesByName; private static Map<String, TokenType> tokenTypesByShortName; private static final TokenType create( String name, String shortName ) { return create( name, shortName, null ); } private static final TokenType create( String name, String shortName, TokenType parent ) { TokenType tokenType = new TokenType( name, shortName, parent ); if( tokenTypesByName == null ) tokenTypesByName = new HashMap<String, TokenType>(); if( tokenTypesByShortName == null ) tokenTypesByShortName = new HashMap<String, TokenType>(); tokenTypesByName.put( name, tokenType ); tokenTypesByShortName.put( shortName, tokenType ); return tokenType; } private final String name; private final String shortName; private final TokenType parent; private TokenType( String name, String shortName, TokenType parent ) { this.name = name; this.shortName = shortName; this.parent = parent; } }