/* * Copyright 2010-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jetbrains.kotlin.idea.highlighter; import com.intellij.lexer.Lexer; import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.fileTypes.SyntaxHighlighterBase; import com.intellij.psi.TokenType; import com.intellij.psi.tree.IElementType; import com.intellij.psi.tree.TokenSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.kdoc.lexer.KDocTokens; import org.jetbrains.kotlin.lexer.KtTokens; import java.util.HashMap; import java.util.Map; public class KotlinHighlighter extends SyntaxHighlighterBase { private static final Map<IElementType, TextAttributesKey> keys1; private static final Map<IElementType, TextAttributesKey> keys2; @Override @NotNull public Lexer getHighlightingLexer() { return new KotlinHighlightingLexer(); } @Override @NotNull public TextAttributesKey[] getTokenHighlights(IElementType tokenType) { return pack(keys1.get(tokenType), keys2.get(tokenType)); } static { keys1 = new HashMap<IElementType, TextAttributesKey>(); keys2 = new HashMap<IElementType, TextAttributesKey>(); fillMap(keys1, KtTokens.KEYWORDS, KotlinHighlightingColors.KEYWORD); keys1.put(KtTokens.AS_SAFE, KotlinHighlightingColors.KEYWORD); keys1.put(KtTokens.INTEGER_LITERAL, KotlinHighlightingColors.NUMBER); keys1.put(KtTokens.FLOAT_LITERAL, KotlinHighlightingColors.NUMBER); fillMap(keys1, TokenSet.andNot(KtTokens.OPERATIONS, TokenSet.orSet( TokenSet.create(KtTokens.IDENTIFIER, KtTokens.AT), KtTokens.KEYWORDS)), KotlinHighlightingColors.OPERATOR_SIGN); keys1.put(KtTokens.LPAR, KotlinHighlightingColors.PARENTHESIS); keys1.put(KtTokens.RPAR, KotlinHighlightingColors.PARENTHESIS); keys1.put(KtTokens.LBRACE, KotlinHighlightingColors.BRACES); keys1.put(KtTokens.RBRACE, KotlinHighlightingColors.BRACES); keys1.put(KtTokens.LBRACKET, KotlinHighlightingColors.BRACKETS); keys1.put(KtTokens.RBRACKET, KotlinHighlightingColors.BRACKETS); keys1.put(KtTokens.COMMA, KotlinHighlightingColors.COMMA); keys1.put(KtTokens.SEMICOLON, KotlinHighlightingColors.SEMICOLON); keys1.put(KtTokens.DOT, KotlinHighlightingColors.DOT); keys1.put(KtTokens.ARROW, KotlinHighlightingColors.ARROW); keys1.put(KtTokens.OPEN_QUOTE, KotlinHighlightingColors.STRING); keys1.put(KtTokens.CLOSING_QUOTE, KotlinHighlightingColors.STRING); keys1.put(KtTokens.REGULAR_STRING_PART, KotlinHighlightingColors.STRING); keys1.put(KtTokens.LONG_TEMPLATE_ENTRY_END, KotlinHighlightingColors.STRING_ESCAPE); keys1.put(KtTokens.LONG_TEMPLATE_ENTRY_START, KotlinHighlightingColors.STRING_ESCAPE); keys1.put(KtTokens.SHORT_TEMPLATE_ENTRY_START, KotlinHighlightingColors.STRING_ESCAPE); keys1.put(KtTokens.ESCAPE_SEQUENCE, KotlinHighlightingColors.STRING_ESCAPE); keys1.put(KtTokens.CHARACTER_LITERAL, KotlinHighlightingColors.STRING); keys1.put(KtTokens.EOL_COMMENT, KotlinHighlightingColors.LINE_COMMENT); keys1.put(KtTokens.SHEBANG_COMMENT, KotlinHighlightingColors.LINE_COMMENT); keys1.put(KtTokens.BLOCK_COMMENT, KotlinHighlightingColors.BLOCK_COMMENT); keys1.put(KtTokens.DOC_COMMENT, KotlinHighlightingColors.DOC_COMMENT); fillMap(keys1, KDocTokens.KDOC_HIGHLIGHT_TOKENS, KotlinHighlightingColors.DOC_COMMENT); keys1.put(KDocTokens.TAG_NAME, KotlinHighlightingColors.DOC_COMMENT); keys2.put(KDocTokens.TAG_NAME, KotlinHighlightingColors.KDOC_TAG); keys1.put(TokenType.BAD_CHARACTER, KotlinHighlightingColors.BAD_CHARACTER); } }