/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.highlighter;
import com.google.common.collect.Maps;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.editor.HighlighterColors;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.JavaTokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.xml.XmlTokenType;
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
public class GosuCodeFileHighlighter extends SyntaxHighlighterBase {
private static final Map<IElementType, TextAttributesKey> ourMap1 = Maps.newHashMap();
private static final Map<IElementType, TextAttributesKey> ourMap2 = Maps.newHashMap();
static {
fillMap(ourMap1, JavaTokenType.KEYWORD_BIT_SET, GosuHighlighterColors.KEYWORD);
fillMap(ourMap1, JavaTokenType.OPERATION_BIT_SET, GosuHighlighterColors.OPERATOR);
// for(IElementType type : JavaDocTokenType.ALL_JAVADOC_TOKENS.getTypes()) {
// ourMap1.put( type, SyntaxHighlighterColors.DOC_COMMENT );
// }
ourMap1.put(XmlTokenType.TAG_WHITE_SPACE, GosuHighlighterColors.DOC_COMMENT_CONTENT);
ourMap1.put(JavaTokenType.IDENTIFIER, GosuHighlighterColors.WORD);
ourMap1.put(JavaTokenType.WHITE_SPACE, GosuHighlighterColors.WORD);
ourMap1.put(JavaTokenType.INTEGER_LITERAL, GosuHighlighterColors.NUMBER);
ourMap1.put(JavaTokenType.LONG_LITERAL, GosuHighlighterColors.NUMBER);
ourMap1.put(JavaTokenType.FLOAT_LITERAL, GosuHighlighterColors.NUMBER);
ourMap1.put(JavaTokenType.DOUBLE_LITERAL, GosuHighlighterColors.NUMBER);
ourMap1.put(JavaTokenType.STRING_LITERAL, GosuHighlighterColors.STRING);
ourMap1.put(JavaTokenType.CHARACTER_LITERAL, GosuHighlighterColors.STRING);
ourMap1.put(JavaTokenType.LPARENTH, GosuHighlighterColors.BRACES);
ourMap1.put(JavaTokenType.RPARENTH, GosuHighlighterColors.BRACES);
ourMap1.put(JavaTokenType.LBRACE, GosuHighlighterColors.BRACES);
ourMap1.put(JavaTokenType.RBRACE, GosuHighlighterColors.BRACES);
ourMap1.put(JavaTokenType.LBRACKET, GosuHighlighterColors.BRACES);
ourMap1.put(JavaTokenType.RBRACKET, GosuHighlighterColors.BRACES);
ourMap1.put(JavaTokenType.COMMA, GosuHighlighterColors.OPERATOR);
ourMap1.put(JavaTokenType.DOT, GosuHighlighterColors.OPERATOR);
ourMap1.put(JavaTokenType.SEMICOLON, GosuHighlighterColors.OPERATOR);
//ourMap1[JavaTokenType.BOOLEAN_LITERAL] = HighlighterColors.JAVA_KEYWORD;
//ourMap1[JavaTokenType.NULL_LITERAL] = HighlighterColors.JAVA_KEYWORD;
ourMap1.put(JavaTokenType.C_STYLE_COMMENT, GosuHighlighterColors.BLOCK_COMMENT);
// ourMap1.put( JavaTokenType.DOC_COMMENT, GosuHighlighterColors.DOC_COMMENT_CONTENT );
ourMap1.put(JavaTokenType.END_OF_LINE_COMMENT, GosuHighlighterColors.LINE_COMMENT);
ourMap1.put(JavaTokenType.BAD_CHARACTER, HighlighterColors.BAD_CHARACTER);
// ourMap1.put( JavaDocTokenType.DOC_TAG_NAME, GosuHighlighterColors.DOC_COMMENT_CONTENT );
// ourMap2.put( JavaDocTokenType.DOC_TAG_NAME, GosuHighlighterColors.DOC_COMMENT_TAG );
// IElementType[] javaDocMarkup = new IElementType[]{XmlTokenType.XML_START_TAG_START,
// XmlTokenType.XML_END_TAG_START,
// XmlTokenType.XML_TAG_END,
// XmlTokenType.XML_EMPTY_ELEMENT_END,
// XmlTokenType.TAG_WHITE_SPACE,
// XmlTokenType.XML_TAG_NAME,
// XmlTokenType.XML_NAME,
// XmlTokenType.XML_ATTRIBUTE_VALUE_TOKEN,
// XmlTokenType.XML_ATTRIBUTE_VALUE_START_DELIMITER,
// XmlTokenType.XML_ATTRIBUTE_VALUE_END_DELIMITER,
// XmlTokenType.XML_CHAR_ENTITY_REF,
// XmlTokenType.XML_EQ};
// for( IElementType idx : javaDocMarkup )
// {
// ourMap1.put( idx, GosuHighlighterColors.DOC_COMMENT_CONTENT );
// ourMap2.put( idx, GosuHighlighterColors.DOC_COMMENT_TAG );
// }
}
private final LanguageLevel _languageLevel;
public GosuCodeFileHighlighter() {
this(LanguageLevel.HIGHEST);
}
public GosuCodeFileHighlighter(LanguageLevel languageLevel) {
_languageLevel = languageLevel;
}
@NotNull
public Lexer getHighlightingLexer() {
return new GosuHighlightingLexer(_languageLevel);
}
@NotNull
public TextAttributesKey[] getTokenHighlights(IElementType tokenType) {
return pack(ourMap1.get(tokenType), ourMap2.get(tokenType));
}
public LanguageLevel getLanguageLevel() {
return _languageLevel;
}
}