package com.igormaznitsa.ideamindmap.lang.highlighter;
import com.igormaznitsa.ideamindmap.lang.MMLexer;
import com.igormaznitsa.ideamindmap.lang.tokens.MMTokens;
import com.intellij.lang.annotation.HighlightSeverity;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.editor.DefaultLanguageHighlighterColors;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.tree.IElementType;
import gnu.trove.THashMap;
import javax.annotation.Nonnull;
import java.util.Map;
public class MMHighlighter extends SyntaxHighlighterBase {
private static final Map<IElementType, TextAttributesKey> keys1;
private static final Map<IElementType, TextAttributesKey> keys2;
@Nonnull
public Lexer getHighlightingLexer() {
return new MMLexer();
}
public static final TextAttributesKey MMD_HEADER_LINE = TextAttributesKey.createTextAttributesKey(
"MMD.HEADE_LINE",
DefaultLanguageHighlighterColors.LINE_COMMENT
);
public static final TextAttributesKey MMD_HEADER_DELIMITER = TextAttributesKey.createTextAttributesKey(
"MMD.HEADER_DELIMITER",
DefaultLanguageHighlighterColors.KEYWORD
);
public static final TextAttributesKey MMD_ATTRIBUTES = TextAttributesKey.createTextAttributesKey(
"MMD.ATTRIBUTES",
DefaultLanguageHighlighterColors.MARKUP_ATTRIBUTE
);
public static final TextAttributesKey MMD_TOPIC = TextAttributesKey.createTextAttributesKey(
"MMD.TOPIC",
DefaultLanguageHighlighterColors.METADATA
);
public static final TextAttributesKey MMD_TOPIC_LEVEL = TextAttributesKey.createTextAttributesKey(
"MMD.TOPIC.LEVEL",
DefaultLanguageHighlighterColors.KEYWORD
);
public static final TextAttributesKey MMD_TOPIC_TITLE = TextAttributesKey.createTextAttributesKey(
"MMD.TOPIC.TITLE",
DefaultLanguageHighlighterColors.STRING
);
public static final TextAttributesKey MMD_CODESNIPPET_START = TextAttributesKey.createTextAttributesKey(
"MMD.CODESNIPET.START",
DefaultLanguageHighlighterColors.METADATA
);
public static final TextAttributesKey MMD_CODESNIPPET_END = TextAttributesKey.createTextAttributesKey(
"MMD.CODESNIPET.END",
DefaultLanguageHighlighterColors.METADATA
);
public static final TextAttributesKey MMD_CODESNIPPET_BODY = TextAttributesKey.createTextAttributesKey(
"MMD.CODESNIPET.BODY",
DefaultLanguageHighlighterColors.STRING
);
public static final TextAttributesKey MMD_EXTRA_NAME = TextAttributesKey.createTextAttributesKey(
"MMD.EXTRANAME",
DefaultLanguageHighlighterColors.LABEL
);
public static final TextAttributesKey MMD_EXTRA_TEXT = TextAttributesKey.createTextAttributesKey(
"MMD.EXTRATEXT",
DefaultLanguageHighlighterColors.STRING
);
public static final TextAttributesKey MMD_UNKNOWN= TextAttributesKey.createTextAttributesKey(
"MMD.UNKNOWN",
DefaultLanguageHighlighterColors.METADATA
);
public static final TextAttributesKey MMD_FILE= TextAttributesKey.createTextAttributesKey(
"MMD.FILE",
DefaultLanguageHighlighterColors.GLOBAL_VARIABLE
);
static {
keys1 = new THashMap<IElementType, TextAttributesKey>();
keys2 = new THashMap<IElementType, TextAttributesKey>();
keys1.put(MMTokens.HEADER_LINE, MMD_HEADER_LINE);
keys1.put(MMTokens.HEADER_DELIMITER, MMD_HEADER_DELIMITER);
keys1.put(MMTokens.ATTRIBUTES, MMD_ATTRIBUTES);
keys1.put(MMTokens.EXTRA_BODY, MMD_EXTRA_TEXT);
keys1.put(MMTokens.EXTRA_TYPE, MMD_EXTRA_NAME);
keys1.put(MMTokens.UNKNOWN, MMD_UNKNOWN);
keys1.put(MMTokens.TOPIC, MMD_TOPIC);
keys1.put(MMTokens.TOPIC_LEVEL, MMD_TOPIC_LEVEL);
keys1.put(MMTokens.TOPIC_TITLE, MMD_TOPIC_TITLE);
keys1.put(MMTokens.FILE, MMD_FILE);
keys1.put(MMTokens.CODE_SNIPPET_START, MMD_CODESNIPPET_START);
keys1.put(MMTokens.CODE_SNIPPET_END, MMD_CODESNIPPET_END);
keys1.put(MMTokens.CODE_SNIPPET_BODY, MMD_CODESNIPPET_BODY);
}
@Nonnull
public TextAttributesKey[] getTokenHighlights(IElementType tokenType) {
return SyntaxHighlighterBase.pack(keys1.get(tokenType), keys2.get(tokenType));
}
public static final Map<TextAttributesKey, Pair<String, HighlightSeverity>> DISPLAY_NAMES = new THashMap<TextAttributesKey, Pair<String, HighlightSeverity>>(6);
static {
DISPLAY_NAMES.put(MMD_HEADER_LINE, Pair.create("Header line",HighlightSeverity.INFORMATION));
DISPLAY_NAMES.put(MMD_HEADER_DELIMITER, Pair.create("Header delimiter", HighlightSeverity.INFORMATION));
DISPLAY_NAMES.put(MMD_ATTRIBUTES, Pair.create("Attributes", HighlightSeverity.INFORMATION));
DISPLAY_NAMES.put(MMD_TOPIC, Pair.create("Topic", HighlightSeverity.INFORMATION));
DISPLAY_NAMES.put(MMD_TOPIC_LEVEL, Pair.create("Topic level", HighlightSeverity.INFORMATION));
DISPLAY_NAMES.put(MMD_TOPIC_TITLE, Pair.create("Topic title", HighlightSeverity.INFORMATION));
DISPLAY_NAMES.put(MMD_FILE, Pair.create("File", HighlightSeverity.INFORMATION));
DISPLAY_NAMES.put(MMD_EXTRA_NAME, Pair.create("Extra name", HighlightSeverity.INFORMATION));
DISPLAY_NAMES.put(MMD_EXTRA_TEXT, Pair.create("Extra name", HighlightSeverity.INFORMATION));
DISPLAY_NAMES.put(MMD_CODESNIPPET_START, Pair.create("Code snippet start", HighlightSeverity.INFORMATION));
DISPLAY_NAMES.put(MMD_CODESNIPPET_END, Pair.create("Code snippet start", HighlightSeverity.INFORMATION));
DISPLAY_NAMES.put(MMD_CODESNIPPET_BODY, Pair.create("Code snippet body", HighlightSeverity.INFORMATION));
DISPLAY_NAMES.put(MMD_UNKNOWN, Pair.create("Unknown", HighlightSeverity.WARNING));
}
}