| /* |
| * Copyright 2005 Sascha Weinreuter |
| * |
| * 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.intellij.lang.xpath; |
| |
| import com.intellij.lexer.Lexer; |
| import com.intellij.openapi.editor.DefaultLanguageHighlighterColors; |
| import com.intellij.openapi.editor.HighlighterColors; |
| import com.intellij.openapi.editor.colors.CodeInsightColors; |
| import com.intellij.openapi.editor.colors.TextAttributesKey; |
| import com.intellij.openapi.fileTypes.SyntaxHighlighterBase; |
| import com.intellij.psi.tree.IElementType; |
| import org.jetbrains.annotations.NotNull; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| @SuppressWarnings({"RawUseOfParameterizedType", "unchecked"}) |
| public class XPathHighlighter extends SyntaxHighlighterBase { |
| private static final Map keys1; |
| private static final Map keys1_2; |
| private static final Map keys2; |
| |
| private final boolean myXPath2Syntax; |
| |
| public XPathHighlighter(boolean xpath2Syntax) { |
| myXPath2Syntax = xpath2Syntax; |
| } |
| |
| @NotNull |
| public Lexer getHighlightingLexer() { |
| return XPathLexer.create(myXPath2Syntax); |
| } |
| |
| static final TextAttributesKey XPATH_KEYWORD = TextAttributesKey.createTextAttributesKey( |
| "XPATH.KEYWORD", |
| DefaultLanguageHighlighterColors.KEYWORD |
| ); |
| |
| static final TextAttributesKey XPATH_STRING = TextAttributesKey.createTextAttributesKey( |
| "XPATH.STRING", |
| DefaultLanguageHighlighterColors.STRING |
| ); |
| |
| static final TextAttributesKey XPATH_NUMBER = TextAttributesKey.createTextAttributesKey( |
| "XPATH.NUMBER", |
| DefaultLanguageHighlighterColors.NUMBER |
| ); |
| |
| static final TextAttributesKey XPATH_OPERATION_SIGN = TextAttributesKey.createTextAttributesKey( |
| "XPATH.OPERATION_SIGN", |
| DefaultLanguageHighlighterColors.OPERATION_SIGN |
| ); |
| |
| static final TextAttributesKey XPATH_PARENTH = TextAttributesKey.createTextAttributesKey( |
| "XPATH.PARENTH", |
| DefaultLanguageHighlighterColors.PARENTHESES |
| ); |
| |
| static final TextAttributesKey XPATH_BRACKET = TextAttributesKey.createTextAttributesKey( |
| "XPATH.BRACKET", |
| DefaultLanguageHighlighterColors.BRACKETS |
| ); |
| |
| static final TextAttributesKey XPATH_FUNCTION = TextAttributesKey.createTextAttributesKey( |
| "XPATH.FUNCTION", |
| DefaultLanguageHighlighterColors.FUNCTION_CALL |
| ); |
| |
| static final TextAttributesKey XPATH_VARIABLE = TextAttributesKey.createTextAttributesKey( |
| "XPATH.XPATH_VARIABLE", |
| DefaultLanguageHighlighterColors.LOCAL_VARIABLE |
| ); |
| |
| static final TextAttributesKey XPATH_PREFIX = TextAttributesKey.createTextAttributesKey( |
| "XPATH.XPATH_PREFIX", |
| HighlighterColors.TEXT |
| ); |
| |
| static final TextAttributesKey XPATH_NAME = TextAttributesKey.createTextAttributesKey( |
| "XPATH.XPATH_NAME", |
| HighlighterColors.TEXT |
| ); |
| |
| static final TextAttributesKey XPATH_TEXT = TextAttributesKey.createTextAttributesKey( |
| "XPATH.XPATH_TEXT", |
| HighlighterColors.TEXT |
| ); |
| |
| static { |
| keys1 = new HashMap(); |
| keys2 = new HashMap(); |
| |
| fillMap(keys1, XPathTokenTypes.BINARY_OPERATIONS, XPATH_OPERATION_SIGN); |
| fillMap(keys1, XPathTokenTypes.KEYWORDS, XPATH_KEYWORD); |
| |
| fillMap(keys1, XPathTokenTypes.REST, XPATH_TEXT); |
| |
| keys1.put(XPathTokenTypes.NCNAME, XPATH_NAME); |
| |
| keys1.put(XPathTokenTypes.NUMBER, XPATH_NUMBER); |
| keys1.put(XPathTokenTypes.STRING_LITERAL, XPATH_STRING); |
| keys1.put(XPathTokenTypes.FUNCTION_NAME, XPATH_FUNCTION); |
| keys1.put(XPathTokenTypes.EXT_PREFIX, XPATH_PREFIX); |
| |
| keys1.put(XPathTokenTypes.DOLLAR, XPATH_VARIABLE); |
| keys1.put(XPathTokenTypes.VARIABLE_NAME, XPATH_VARIABLE); |
| keys1.put(XPathTokenTypes.VARIABLE_PREFIX, XPATH_PREFIX); |
| |
| keys1.put(XPathTokenTypes.LPAREN, XPATH_PARENTH); |
| keys1.put(XPathTokenTypes.LBRACKET, XPATH_BRACKET); |
| keys1.put(XPathTokenTypes.RPAREN, XPATH_PARENTH); |
| keys1.put(XPathTokenTypes.RBRACKET, XPATH_BRACKET); |
| |
| keys1.put(XPathTokenTypes.BAD_CHARACTER, HighlighterColors.BAD_CHARACTER); |
| keys1.put(XPathTokenTypes.BAD_AXIS_NAME, CodeInsightColors.WRONG_REFERENCES_ATTRIBUTES); |
| |
| keys1_2 = new HashMap(keys1); |
| fillMap(keys1_2, XPath2TokenTypes.KEYWORDS, XPATH_KEYWORD); |
| } |
| |
| @NotNull |
| public TextAttributesKey[] getTokenHighlights(IElementType tokenType) { |
| return pack(((TextAttributesKey)(myXPath2Syntax ? keys1_2 : keys1).get(tokenType)), ((TextAttributesKey)keys2.get(tokenType))); |
| } |
| } |