/*
* Copyright 2013-2017 Grzegorz Ligas <ligasgr@gmail.com> and other contributors
* (see the CONTRIBUTORS file).
*
* 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.xquery.highlighting;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.editor.DefaultLanguageHighlighterColors;
import com.intellij.openapi.editor.HighlighterColors;
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 org.intellij.xquery.lexer.XQueryLexer;
import org.intellij.xquery.psi.XQueryBasicTypes;
import org.intellij.xquery.psi.XQueryTypes;
import org.jetbrains.annotations.NotNull;
import static com.intellij.openapi.editor.colors.TextAttributesKey.createTextAttributesKey;
public class XQuerySyntaxHighlighter extends SyntaxHighlighterBase {
public static final TextAttributesKey BAD_CHARACTER = createTextAttributesKey("XQUERY_BAD_CHARACTER",
DefaultLanguageHighlighterColors.INVALID_STRING_ESCAPE);
public static final TextAttributesKey KEYWORD = createTextAttributesKey("XQUERY_KEYWORD",
DefaultLanguageHighlighterColors.KEYWORD);
public static final TextAttributesKey SEMICOLON = createTextAttributesKey("XQUERY_SEMICOLON",
DefaultLanguageHighlighterColors.SEMICOLON);
public static final TextAttributesKey STRING = createTextAttributesKey("XQUERY_STRING",
DefaultLanguageHighlighterColors.STRING);
public static final TextAttributesKey NUMBER = createTextAttributesKey("XQUERY_NUMBER",
DefaultLanguageHighlighterColors.NUMBER);
public static final TextAttributesKey OPERATION_SIGN = createTextAttributesKey("XQUERY_OPERATION",
DefaultLanguageHighlighterColors.OPERATION_SIGN);
public static final TextAttributesKey PARENTHESIS = createTextAttributesKey("XQUERY_PARENTHESIS",
DefaultLanguageHighlighterColors.PARENTHESES);
public static final TextAttributesKey BRACKET = createTextAttributesKey("XQUERY_BRACKET",
DefaultLanguageHighlighterColors.BRACKETS);
public static final TextAttributesKey BRACE = createTextAttributesKey("XQUERY_BRACE",
DefaultLanguageHighlighterColors.BRACES);
public static final TextAttributesKey COMMENT = createTextAttributesKey("XQUERY_COMMENT",
DefaultLanguageHighlighterColors.BLOCK_COMMENT);
public static final TextAttributesKey DOC_COMMENT = createTextAttributesKey("XQUERY_DOC_COMMENT",
DefaultLanguageHighlighterColors.DOC_COMMENT);
public static final TextAttributesKey DOC_COMMENT_TAG = createTextAttributesKey("XQUERY_DOC_COMMENT_TAG",
DefaultLanguageHighlighterColors.DOC_COMMENT_TAG);
public static final TextAttributesKey XML_COMMENT = createTextAttributesKey("XQUERY_XML_COMMENT",
DefaultLanguageHighlighterColors.LINE_COMMENT);
public static final TextAttributesKey XML_TAG = createTextAttributesKey("XQUERY_XML_TAG",
DefaultLanguageHighlighterColors.MARKUP_TAG);
public static final TextAttributesKey XML_TAG_NAME = createTextAttributesKey("XQUERY_XML_TAG_NAME");
public static final TextAttributesKey XML_ATTRIBUTE_NAME = createTextAttributesKey("XQUERY_XML_ATTRIBUTE_NAME",
DefaultLanguageHighlighterColors.MARKUP_ATTRIBUTE);
public static final TextAttributesKey XML_TAG_DATA = createTextAttributesKey("XQUERY_XML_TAG_DATA",
HighlighterColors.TEXT);
public static final TextAttributesKey FUNCTION_CALL = createTextAttributesKey("XQUERY_FUNCTION_CALL",
DefaultLanguageHighlighterColors.FUNCTION_CALL);
public static final TextAttributesKey FUNCTION_DECLARATION = createTextAttributesKey("XQUERY_FUNCTION_DECLARATION",
DefaultLanguageHighlighterColors.FUNCTION_DECLARATION);
public static final TextAttributesKey PARAMETER = createTextAttributesKey("XQUERY_PARAMETER",
DefaultLanguageHighlighterColors.PARAMETER);
public static final TextAttributesKey LOCAL_VARIABLE = createTextAttributesKey("XQUERY_LOCAL_VARIABLE",
DefaultLanguageHighlighterColors.LOCAL_VARIABLE);
public static final TextAttributesKey GLOBAL_VARIABLE = createTextAttributesKey("XQUERY_GLOBAL_VARIABLE",
DefaultLanguageHighlighterColors.GLOBAL_VARIABLE);
public static final TextAttributesKey PREFIXED_VARIABLE = createTextAttributesKey("XQUERY_PREFIXED_VARIABLE");
public static final TextAttributesKey ITEM_TYPE = createTextAttributesKey("XQUERY_ITEM_TYPE",
DefaultLanguageHighlighterColors.CLASS_NAME);
public static final TextAttributesKey ANNOTATION = createTextAttributesKey("XQUERY_ANNOTATION",
DefaultLanguageHighlighterColors.METADATA);
public static final TextAttributesKey XML_ENTITY_REFERENCE = createTextAttributesKey("XQUERY_XML_ENTITY_REFERENCE",
DefaultLanguageHighlighterColors.MARKUP_ENTITY);
private static final TextAttributesKey[] BAD_CHAR_KEYS = pack(BAD_CHARACTER);
private static final TextAttributesKey[] KEYWORDS = pack(KEYWORD);
private static final TextAttributesKey[] SEMICOLONS = pack(SEMICOLON);
private static final TextAttributesKey[] STRINGS = pack(STRING);
private static final TextAttributesKey[] NUMBERS = pack(NUMBER);
private static final TextAttributesKey[] OPERATION_SIGNS = pack(OPERATION_SIGN);
private static final TextAttributesKey[] PARENTHESES = pack(PARENTHESIS);
private static final TextAttributesKey[] BRACKETS = pack(BRACKET);
private static final TextAttributesKey[] BRACES = pack(BRACE);
private static final TextAttributesKey[] COMMENTS = pack(COMMENT);
private static final TextAttributesKey[] DOC_COMMENTS = pack(DOC_COMMENT);
private static final TextAttributesKey[] XML_COMMENTS = pack(XML_COMMENT);
private static final TextAttributesKey[] XML_TAGS = pack(XML_TAG);
private static final TextAttributesKey[] XML_TAG_NAMES = pack(XML_TAG, XML_TAG_NAME);
private static final TextAttributesKey[] XML_ATTRIBUTE_NAMES = pack(XML_TAG, XML_ATTRIBUTE_NAME);
private static final TextAttributesKey[] XML_TAG_DATA_KEY = pack(XML_TAG_DATA);
private static final TextAttributesKey[] XML_ENTITY_REFERENCES = pack(XML_ENTITY_REFERENCE);
@NotNull
@Override
public Lexer getHighlightingLexer() {
return new XQueryLexer();
}
@NotNull
@Override
public TextAttributesKey[] getTokenHighlights(IElementType tokenType) {
if (tokenType == XQueryBasicTypes.EXPR_COMMENT_CONTENT
|| tokenType == XQueryBasicTypes.EXPR_COMMENT_END
|| tokenType == XQueryBasicTypes.EXPR_COMMENT_START
|| tokenType == XQueryTypes.EXPRCOMMENTCONTENT
|| tokenType == XQueryTypes.EXPR_COMMENT_END
|| tokenType == XQueryTypes.EXPR_COMMENT_START) {
return COMMENTS;
}
if (tokenType == XQueryBasicTypes.DOC_COMMENT_CONTENT
|| tokenType == XQueryBasicTypes.DOC_COMMENT_END
|| tokenType == XQueryBasicTypes.DOC_COMMENT_START) {
return DOC_COMMENTS;
}
if (tokenType == XQueryTypes.XMLEMPTYELEMENTEND
|| tokenType == XQueryTypes.XMLENDTAGSTART
|| tokenType == XQueryTypes.XMLSTARTTAGSTART
|| tokenType == XQueryTypes.XMLTAGEND) {
return XML_TAGS;
}
if (tokenType == XQueryTypes.XMLTAGNCNAME
|| tokenType == XQueryTypes.XMLCOLON) {
return XML_TAG_NAMES;
}
if (tokenType == XQueryTypes.ATTRNCNAME
|| tokenType == XQueryTypes.ATTRCOLON
|| tokenType == XQueryTypes.ATTREQUAL) {
return XML_ATTRIBUTE_NAMES;
}
if (tokenType == XQueryTypes.CHARREF
|| tokenType == XQueryTypes.PREDEFINEDENTITYREF) {
return XML_ENTITY_REFERENCES;
}
if (tokenType == XQueryTypes.ELEMENTCONTENTCHAR) {
return XML_TAG_DATA_KEY;
}
if (tokenType == XQueryTypes.DIRCOMMENTCHAR
|| tokenType == XQueryTypes.DIR_COMMENT_BEGIN
|| tokenType == XQueryTypes.DIR_COMMENT_END) {
return XML_COMMENTS;
}
if (tokenType == XQueryTypes.DECIMALLITERAL
|| tokenType == XQueryTypes.DOUBLELITERAL
|| tokenType == XQueryTypes.INTEGERLITERAL) {
return NUMBERS;
}
if (tokenType == XQueryTypes.STRINGCHAR
|| tokenType == XQueryTypes.CHAR
|| tokenType == XQueryTypes.OPENINGAPOS
|| tokenType == XQueryTypes.CLOSINGAPOS
|| tokenType == XQueryTypes.AMPERSAND
|| tokenType == XQueryTypes.OPENINGQUOT
|| tokenType == XQueryTypes.CLOSINGQUOT) {
return STRINGS;
}
if (tokenType == XQueryTypes.SEMICOLON) {
return SEMICOLONS;
}
if (tokenType == XQueryTypes.L_PAR || tokenType == XQueryTypes.R_PAR) {
return PARENTHESES;
}
if (tokenType == XQueryTypes.L_BRACKET || tokenType == XQueryTypes.R_BRACKET) {
return BRACKETS;
}
if (tokenType == XQueryTypes.L_C_BRACE || tokenType == XQueryTypes.R_C_BRACE) {
return BRACES;
}
if (tokenType == TokenType.BAD_CHARACTER) {
return BAD_CHAR_KEYS;
}
if (tokenType == XQueryTypes.EQ
|| tokenType == XQueryTypes.GE
|| tokenType == XQueryTypes.GT
|| tokenType == XQueryTypes.LE
|| tokenType == XQueryTypes.LT
|| tokenType == XQueryTypes.NE
|| tokenType == XQueryTypes.EQUAL
|| tokenType == XQueryTypes.NOT_EQUAL
|| tokenType == XQueryTypes.OP_ASSIGN
|| tokenType == XQueryTypes.GE_CHARS
|| tokenType == XQueryTypes.GT_CHAR
|| tokenType == XQueryTypes.LE_CHARS
|| tokenType == XQueryTypes.LT_CHAR
|| tokenType == XQueryTypes.STAR_SIGN
|| tokenType == XQueryTypes.OP_PLUS
|| tokenType == XQueryTypes.OP_MINUS
|| tokenType == XQueryTypes.NODECOMP_GT
|| tokenType == XQueryTypes.NODECOMP_LT
|| tokenType == XQueryTypes.OP_ARROW
) {
return OPERATION_SIGNS;
}
if (tokenType == XQueryTypes.K_IMPORT
|| tokenType == XQueryTypes.K_DEFAULT
|| tokenType == XQueryTypes.K_DECLARE
|| tokenType == XQueryTypes.K_NAMESPACE
|| tokenType == XQueryTypes.K_SCHEMA
|| tokenType == XQueryTypes.K_AT
|| tokenType == XQueryTypes.K_COLLATION
|| tokenType == XQueryTypes.K_ELEMENT
|| tokenType == XQueryTypes.K_FUNCTION
|| tokenType == XQueryTypes.K_TEXT
|| tokenType == XQueryTypes.K_COMMENT
|| tokenType == XQueryTypes.K_NODE
|| tokenType == XQueryTypes.K_PI
|| tokenType == XQueryTypes.K_BINARY
|| tokenType == XQueryTypes.K_IF
|| tokenType == XQueryTypes.K_THEN
|| tokenType == XQueryTypes.K_ELSE
|| tokenType == XQueryTypes.K_TYPESWITCH
|| tokenType == XQueryTypes.K_SWITCH
|| tokenType == XQueryTypes.K_VALIDATE
|| tokenType == XQueryTypes.K_CONTEXT
|| tokenType == XQueryTypes.K_MODULE
|| tokenType == XQueryTypes.K_INHERIT
|| tokenType == XQueryTypes.K_NO_INHERIT
|| tokenType == XQueryTypes.K_PRESERVE
|| tokenType == XQueryTypes.K_NO_PRESERVE
|| tokenType == XQueryTypes.K_BASE_URI
|| tokenType == XQueryTypes.K_XQUERY
|| tokenType == XQueryTypes.K_VERSION
|| tokenType == XQueryTypes.K_ENCODING
|| tokenType == XQueryTypes.K_OPTION
|| tokenType == XQueryTypes.K_STRIP
|| tokenType == XQueryTypes.K_SOME
|| tokenType == XQueryTypes.K_IN
|| tokenType == XQueryTypes.K_AS
|| tokenType == XQueryTypes.K_LET
|| tokenType == XQueryTypes.K_RETURN
|| tokenType == XQueryTypes.K_AND
|| tokenType == XQueryTypes.K_OR
|| tokenType == XQueryTypes.K_CASE
|| tokenType == XQueryTypes.K_FOR
|| tokenType == XQueryTypes.K_VARIABLE
|| tokenType == XQueryTypes.K_COPY_NAMESPACES
|| tokenType == XQueryTypes.K_CONSTRUCTION
|| tokenType == XQueryTypes.K_ORDER
|| tokenType == XQueryTypes.K_EVERY
|| tokenType == XQueryTypes.K_BOUNDARY_SPACE
|| tokenType == XQueryTypes.K_ORDERING
|| tokenType == XQueryTypes.K_ORDERED
|| tokenType == XQueryTypes.K_UNORDERED
|| tokenType == XQueryTypes.K_EMPTY
|| tokenType == XQueryTypes.K_GREATEST
|| tokenType == XQueryTypes.K_LEAST
|| tokenType == XQueryTypes.K_DECIMAL_FORMAT
|| tokenType == XQueryTypes.K_DECIMAL_SEPARATOR
|| tokenType == XQueryTypes.K_GROUPING_SEPARATOR
|| tokenType == XQueryTypes.K_INFINITY
|| tokenType == XQueryTypes.K_MINUS_SIGN
|| tokenType == XQueryTypes.K_NAN
|| tokenType == XQueryTypes.K_PERCENT
|| tokenType == XQueryTypes.K_PER_MILLE
|| tokenType == XQueryTypes.K_ZERO_DIGIT
|| tokenType == XQueryTypes.K_DIGIT
|| tokenType == XQueryTypes.K_PATTERN_SEPARATOR
|| tokenType == XQueryTypes.K_ITEM
|| tokenType == XQueryTypes.K_TO
|| tokenType == XQueryTypes.K_WHERE
|| tokenType == XQueryTypes.K_GROUP
|| tokenType == XQueryTypes.K_BY
|| tokenType == XQueryTypes.K_ALLOWING
|| tokenType == XQueryTypes.K_ASCENDING
|| tokenType == XQueryTypes.K_DESCENDING
|| tokenType == XQueryTypes.K_MAP
|| tokenType == XQueryTypes.K_INSTANCE
|| tokenType == XQueryTypes.K_OF
|| tokenType == XQueryTypes.K_SATISFIES
|| tokenType == XQueryTypes.K_CHILD
|| tokenType == XQueryTypes.K_DESCENDANT
|| tokenType == XQueryTypes.K_SELF
|| tokenType == XQueryTypes.K_DESCENDANT_OR_SELF
|| tokenType == XQueryTypes.K_FOLLOWING_SIBLING
|| tokenType == XQueryTypes.K_FOLLOWING
|| tokenType == XQueryTypes.K_PARENT
|| tokenType == XQueryTypes.K_ANCESTOR
|| tokenType == XQueryTypes.K_PRECEDING_SIBLING
|| tokenType == XQueryTypes.K_PRECEDING
|| tokenType == XQueryTypes.K_ANCESTOR_OR_SELF
|| tokenType == XQueryTypes.K_TUMBLING
|| tokenType == XQueryTypes.K_SLIDING
|| tokenType == XQueryTypes.K_WINDOW
|| tokenType == XQueryTypes.K_START
|| tokenType == XQueryTypes.K_WHEN
|| tokenType == XQueryTypes.K_ONLY
|| tokenType == XQueryTypes.K_END
|| tokenType == XQueryTypes.K_WHEN
|| tokenType == XQueryTypes.K_PREVIOUS
|| tokenType == XQueryTypes.K_NEXT
|| tokenType == XQueryTypes.K_COUNT
|| tokenType == XQueryTypes.K_TRY
|| tokenType == XQueryTypes.K_CATCH
|| tokenType == XQueryTypes.K_DIV
|| tokenType == XQueryTypes.K_IDIV
|| tokenType == XQueryTypes.K_MOD
|| tokenType == XQueryTypes.K_UNION
|| tokenType == XQueryTypes.K_INTERSECT
|| tokenType == XQueryTypes.K_EXCEPT
|| tokenType == XQueryTypes.K_TREAT
|| tokenType == XQueryTypes.K_CASTABLE
|| tokenType == XQueryTypes.K_CAST
|| tokenType == XQueryTypes.K_IS
|| tokenType == XQueryTypes.K_TYPE
|| tokenType == XQueryTypes.K_LAX
|| tokenType == XQueryTypes.K_STRICT
|| tokenType == XQueryTypes.K_DOCUMENT
|| tokenType == XQueryTypes.K_EMPTY
|| tokenType == XQueryTypes.K_EVERY
|| tokenType == XQueryTypes.K_EXTERNAL
|| tokenType == XQueryTypes.K_STABLE
|| tokenType == XQueryTypes.K_EMPTY_SEQUENCE
|| tokenType == XQueryTypes.K_DOCUMENT_NODE
|| tokenType == XQueryTypes.K_NAMESPACE_NODE
|| tokenType == XQueryTypes.K_ATTRIBUTE
|| tokenType == XQueryTypes.K_SCHEMA_ATTRIBUTE
|| tokenType == XQueryTypes.K_SCHEMA_ELEMENT
|| tokenType == XQueryTypes.K_REVALIDATION
|| tokenType == XQueryTypes.K_SKIP
|| tokenType == XQueryTypes.K_INSERT
|| tokenType == XQueryTypes.K_NODES
|| tokenType == XQueryTypes.K_FIRST
|| tokenType == XQueryTypes.K_LAST
|| tokenType == XQueryTypes.K_INTO
|| tokenType == XQueryTypes.K_AFTER
|| tokenType == XQueryTypes.K_BEFORE
|| tokenType == XQueryTypes.K_DELETE
|| tokenType == XQueryTypes.K_VALUE
|| tokenType == XQueryTypes.K_WITH
|| tokenType == XQueryTypes.K_COPY
|| tokenType == XQueryTypes.K_MODIFY
|| tokenType == XQueryTypes.K_RENAME
|| tokenType == XQueryTypes.K_REPLACE
|| tokenType == XQueryTypes.K_OBJECT_NODE
|| tokenType == XQueryTypes.K_NUMBER_NODE
|| tokenType == XQueryTypes.K_BOOLEAN_NODE
|| tokenType == XQueryTypes.K_NULL_NODE
|| tokenType == XQueryTypes.K_ARRAY_NODE
|| tokenType == XQueryTypes.K_ARRAY
|| tokenType == XQueryTypes.K_EXPONENT_SEPARATOR
) {
return KEYWORDS;
}
return EMPTY;
}
}