blob: a0d88ec30bc8268e13871f0d2024af60a0f2cffe [file] [log] [blame]
/*
* 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)));
}
}