Package org.intellij.lang.jflex.fileTypes

Source Code of org.intellij.lang.jflex.fileTypes.JFlexSyntaxHighlighter

package org.intellij.lang.jflex.fileTypes;

import com.intellij.lexer.Lexer;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.tree.IElementType;
import org.intellij.lang.jflex.JFlexElementType;
import org.intellij.lang.jflex.JFlexElementTypes;
import org.intellij.lang.jflex.editor.JFlexHighlighterColors;
import org.intellij.lang.jflex.lexer.JFlexHighlighterLexer;
import org.jetbrains.annotations.NotNull;

import java.util.HashMap;
import java.util.Map;

/**
* JFlex syntax highlighter
*
* @author Alexey Efimov
*/
public final class JFlexSyntaxHighlighter extends SyntaxHighlighterBase {

    private final JFlexHighlighterLexer lexer;
    private final Map<IElementType, TextAttributesKey> colors = new HashMap<IElementType, TextAttributesKey>();
    private final Map<IElementType, TextAttributesKey> backgrounds = new HashMap<IElementType, TextAttributesKey>();

    public JFlexSyntaxHighlighter() {

        lexer = new JFlexHighlighterLexer();

        fillMap(colors, JFlexElementTypes.BRACES, JFlexHighlighterColors.BRACES);
        fillMap(colors, JFlexElementTypes.BRACKETS, JFlexHighlighterColors.BRACKETS);
        fillMap(colors, JFlexElementTypes.PARENTHESES, JFlexHighlighterColors.PARENTHS);
        fillMap(colors, JFlexElementTypes.ANGLE_BRACKETS, JFlexHighlighterColors.ANGLE_BRACKETS);

        fillMap(colors, JFlexElementTypes.OPERATORS, JFlexHighlighterColors.OPERATION_SIGN);

        colors.put(JFlexElementTypes.BAD_CHARACTER, JFlexHighlighterColors.BAD_CHARACTER);
        colors.put(JFlexElementTypes.COMMENT, JFlexHighlighterColors.COMMENT);
        colors.put(JFlexElementTypes.STRING_LITERAL, JFlexHighlighterColors.STRING);
        colors.put(JFlexElementTypes.COMMA, JFlexHighlighterColors.COMMA);

        backgrounds.put(JFlexElementTypes.JAVA_CODE, JFlexHighlighterColors.JAVA_CODE);

        colors.put(JFlexElementTypes.MACROS, JFlexHighlighterColors.MACROS);
        colors.put(JFlexElementTypes.MACROS_REF, JFlexHighlighterColors.MACROS_REF);


        colors.put(JFlexElementTypes.STATE_REF, JFlexHighlighterColors.STATE_REF);

        fillMap(backgrounds, JFlexElementTypes.REGEXP_SCOPE, JFlexHighlighterColors.REGEXP_BACKGROUND);
        colors.put(JFlexElementTypes.REGEXP_SYMBOL, JFlexHighlighterColors.REGEXP_SYMBOL);
        colors.put(JFlexElementTypes.REGEXP_CLASS_SYMBOL, JFlexHighlighterColors.REGEXP_CLASS_SYMBOL);

        fillMap(backgrounds, JFlexElementTypes.OPTION_SCOPE, JFlexHighlighterColors.OPTION_BACKGROUND);
        fillMap(colors, JFlexElementTypes.OPTION_KEYWORDS, JFlexHighlighterColors.OPTION_KEYWORD);
        colors.put(JFlexElementTypes.OPTION_PARAMETER, JFlexHighlighterColors.OPTION_PARAMETER);
        colors.put(JFlexElementTypes.OPTION_SIGN, JFlexHighlighterColors.OPTION_SIGN);

        colors.put(JFlexElementTypes.SECTION_SIGN, JFlexHighlighterColors.SECTION_SIGN);
    }

    @NotNull
    public Lexer getHighlightingLexer() {
        return lexer;
    }

    @NotNull
    public TextAttributesKey[] getTokenHighlights(IElementType tokenType) {
        return pack(getAttributeKeys(tokenType, backgrounds), getAttributeKeys(tokenType, colors));
    }

    private TextAttributesKey getAttributeKeys(IElementType tokenType, Map<IElementType, TextAttributesKey> map) {
        TextAttributesKey attributes = map.get(tokenType);
        if (attributes == null && tokenType instanceof JFlexElementType) {
            return map.get(((JFlexElementType) tokenType).getParsedType());
        }
        return map.get(tokenType);
    }
}
TOP

Related Classes of org.intellij.lang.jflex.fileTypes.JFlexSyntaxHighlighter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.