package org.fandev.lang.fan.highlighting;
import com.intellij.codeInsight.daemon.impl.HighlightInfoType;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.editor.SyntaxHighlighterColors;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import org.fandev.lang.fan.FanHighlightingLexer;
import org.fandev.lang.fan.FanTokenTypes;
import static org.fandev.lang.fan.FanTokenTypes.FAN_KEYWORDS;
import static org.fandev.lang.fan.FanTokenTypes.FAN_SYS_TYPE;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
/**
* @author Dror Bereznitsky
* @date Dec 22, 2008 10:58:32 PM
*/
public class FanHighlighter extends SyntaxHighlighterBase {
private static final Map<IElementType, TextAttributesKey> keys;
public static final String FAN_KEYWORD_ID = "FAN.KEYWORD";
static final TextAttributesKey FAN_KEYWORD = TextAttributesKey.createTextAttributesKey(
FAN_KEYWORD_ID, SyntaxHighlighterColors.KEYWORD.getDefaultAttributes()
);
public static final String FAN_TYPES_ID = "FAN.TYPES";
static final TextAttributesKey FAN_TYPES = TextAttributesKey.createTextAttributesKey(
FAN_TYPES_ID, HighlightInfoType.CLASS_NAME.getAttributesKey().getDefaultAttributes()
);
public static final String FAN_STRING_ID = "FAN.STRING";
static final TextAttributesKey FAN_STRING = TextAttributesKey.createTextAttributesKey(
FAN_STRING_ID, SyntaxHighlighterColors.STRING.getDefaultAttributes()
);
public static final String FAN_NUMBER_ID = "FAN.NUMBER";
static final TextAttributesKey FAN_NUMBER = TextAttributesKey.createTextAttributesKey(
FAN_NUMBER_ID, SyntaxHighlighterColors.NUMBER.getDefaultAttributes()
);
public static final String FAN_PARENTHS_ID = "FAN.PARENTHS";
static final TextAttributesKey FAN_PARENTHS = TextAttributesKey.createTextAttributesKey(
FAN_PARENTHS_ID, SyntaxHighlighterColors.PARENTHS.getDefaultAttributes()
);
static final TextAttributesKey FAN_BRACKETS = TextAttributesKey.createTextAttributesKey(
"FAN.BRACKETS", SyntaxHighlighterColors.BRACKETS.getDefaultAttributes()
);
static final TextAttributesKey FAN_BRACES = TextAttributesKey.createTextAttributesKey(
"FAN.BRACES", SyntaxHighlighterColors.BRACES.getDefaultAttributes()
);
static final TextAttributesKey FAN_DOC_COMMENT = TextAttributesKey.createTextAttributesKey(
"FAN.DOC_COMMENT", SyntaxHighlighterColors.DOC_COMMENT.getDefaultAttributes()
);
static final TextAttributesKey FAN_LINE_COMMENT = TextAttributesKey.createTextAttributesKey(
"FAN.LINE_COMMENT", SyntaxHighlighterColors.LINE_COMMENT.getDefaultAttributes()
);
static {
keys = new HashMap<IElementType, TextAttributesKey>();
fillMap(keys, FAN_KEYWORDS, FAN_KEYWORD);
fillMap(keys, FanTokenTypes.STRING_LITERALS, FAN_STRING);
fillMap(keys, TokenSet.create(FAN_SYS_TYPE), FAN_TYPES);
fillMap(keys, FanTokenTypes.NUMERIC_LITERALS, FAN_NUMBER);
keys.put(FanTokenTypes.FANDOC_LINE_COMMENT, FAN_DOC_COMMENT);
keys.put(FanTokenTypes.END_OF_LINE_COMMENT, FAN_LINE_COMMENT);
keys.put(FanTokenTypes.C_STYLE_COMMENT, FAN_LINE_COMMENT);
}
@NotNull
public Lexer getHighlightingLexer() {
return new FanHighlightingLexer();
}
@NotNull
public TextAttributesKey[] getTokenHighlights(final IElementType tokenType) {
return pack(keys.get(tokenType));
}
}