blob: c9f9b9bb8a097a160bd53a26ea9115dbfe220360 [file] [log] [blame]
/*
* Copyright 2006 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.regexp;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import com.intellij.psi.StringEscapesTokenTypes;
public interface RegExpTT {
IElementType NUMBER = new RegExpElementType("NUMBER");
IElementType NAME = new RegExpElementType("NAME");
IElementType COMMA = new RegExpElementType("COMMA");
// "\\Q"
IElementType QUOTE_BEGIN = new RegExpElementType("QUOTE_BEGIN");
// <QUOTE> "\\E"
IElementType QUOTE_END = new RegExpElementType("QUOTE_END");
// "\\" 0-9
IElementType BACKREF = new RegExpElementType("BACKREF");
IElementType LBRACE = new RegExpElementType("LBRACE");
IElementType RBRACE = new RegExpElementType("RBRACE");
IElementType CLASS_BEGIN = new RegExpElementType("CLASS_BEGIN");
IElementType CLASS_END = new RegExpElementType("CLASS_END");
IElementType ANDAND = new RegExpElementType("ANDAND");
IElementType GROUP_BEGIN = new RegExpElementType("GROUP_BEGIN");
IElementType GROUP_END = new RegExpElementType("GROUP_END");
IElementType NON_CAPT_GROUP = new RegExpElementType("NON_CAPT_GROUP");
IElementType POS_LOOKBEHIND = new RegExpElementType("POS_LOOKBEHIND");
IElementType NEG_LOOKBEHIND = new RegExpElementType("NEG_LOOKBEHIND");
IElementType POS_LOOKAHEAD = new RegExpElementType("POS_LOOKAHEAD");
IElementType NEG_LOOKAHEAD = new RegExpElementType("NEG_LOOKAHEAD");
IElementType SET_OPTIONS = new RegExpElementType("SET_OPTIONS");
IElementType QUEST = new RegExpElementType("QUEST");
IElementType STAR = new RegExpElementType("STAR");
IElementType PLUS = new RegExpElementType("PLUS");
IElementType COLON = new RegExpElementType("COLON");
// "\\" ("b" | "B" | "A" | "z" | "Z" | "G")
IElementType BOUNDARY = new RegExpElementType("BOUNDARY");
// "^"
IElementType CARET = new RegExpElementType("CARET");
// "$"
IElementType DOLLAR = new RegExpElementType("DOLLAR");
IElementType DOT = new RegExpElementType("DOT");
IElementType UNION = new RegExpElementType("UNION");
// > in Python/Ruby named group
IElementType GT = new RegExpElementType("GT");
// ' in Ruby quoted named group
IElementType QUOTE = new RegExpElementType("QUOTE");
// "\b" | "\t" | "\f" | "\r" | "\n"
IElementType CTRL_CHARACTER = new RegExpElementType("CTRL_CHARACTER");
// "\\" ("t" | "n" | "r" | "f" | "a" | "e")
IElementType ESC_CTRL_CHARACTER = new RegExpElementType("ESC_CTRL_CHARACTER");
// "\\" ("." | "|" | "$" | "^" | "?" | "*" | "+" | "[" | "{" | "(" | ")")
IElementType ESC_CHARACTER = new RegExpElementType("ESC_CHARACTER");
// "\\" ("w" | "W" | "s" | "S" | "d" | "D")
IElementType CHAR_CLASS = new RegExpElementType("CHAR_CLASS");
// "\\u" XXXX
IElementType UNICODE_CHAR = new RegExpElementType("UNICODE_CHAR");
// "\\x" XX
IElementType HEX_CHAR = new RegExpElementType("HEX_CHAR");
// "\\0" OOO
IElementType OCT_CHAR = new RegExpElementType("OCT_CHAR");
// "\\c" x
IElementType CTRL = new RegExpElementType("CTRL");
// "\\p" | "\\P"
IElementType PROPERTY = new RegExpElementType("PROPERTY");
// e.g. "\\#" but also "\\q" which is not a valid escape actually
IElementType REDUNDANT_ESCAPE = new RegExpElementType("REDUNDANT_ESCAPE");
IElementType MINUS = new RegExpElementType("MINUS");
IElementType CHARACTER = new RegExpElementType("CHARACTER");
IElementType BAD_CHARACTER = new RegExpElementType("BAD_CHARACTER");
IElementType BAD_OCT_VALUE = new RegExpElementType("BAD_OCT_VALUE");
IElementType BAD_HEX_VALUE = new RegExpElementType("BAD_HEX_VALUE");
IElementType COMMENT = new RegExpElementType("COMMENT");
IElementType OPTIONS_ON = new RegExpElementType("OPTIONS_ON");
IElementType OPTIONS_OFF = new RegExpElementType("OPTIONS_OFF");
// (?P<name>...
IElementType PYTHON_NAMED_GROUP = new RegExpElementType("PYTHON_NAMED_GROUP");
// (?P=name)
IElementType PYTHON_NAMED_GROUP_REF = new RegExpElementType("PYTHON_NAMED_GROUP_REF");
// (?(id/name)yes-pattern|no-pattern)
IElementType PYTHON_COND_REF = new RegExpElementType("PYTHON_COND_REF");
// (?<name>...
IElementType RUBY_NAMED_GROUP = new RegExpElementType("RUBY_NAMED_GROUP");
// (?'name'...
IElementType RUBY_QUOTED_NAMED_GROUP = new RegExpElementType("RUBY_QUOTED_NAMED_GROUP");
TokenSet KEYWORDS = TokenSet.create(DOT, STAR, QUEST, PLUS);
TokenSet CHARACTERS = TokenSet.create(CHARACTER,
ESC_CTRL_CHARACTER,
ESC_CHARACTER,
CTRL_CHARACTER,
CTRL,
UNICODE_CHAR,
HEX_CHAR, BAD_HEX_VALUE,
OCT_CHAR, BAD_OCT_VALUE,
REDUNDANT_ESCAPE,
MINUS,
StringEscapesTokenTypes.INVALID_UNICODE_ESCAPE_TOKEN,
StringEscapesTokenTypes.INVALID_CHARACTER_ESCAPE_TOKEN);
TokenSet SIMPLE_CLASSES = TokenSet.create(DOT, CHAR_CLASS);
// caret is just a character in classes after the first position: [a^] matches "a" or "^"
TokenSet CHARACTERS2 = TokenSet.orSet(CHARACTERS, SIMPLE_CLASSES, TokenSet.create(CARET, LBRACE));
TokenSet QUANTIFIERS = TokenSet.create(QUEST, PLUS, STAR, LBRACE);
TokenSet GROUPS = TokenSet.create(GROUP_BEGIN,
NON_CAPT_GROUP,
POS_LOOKAHEAD,
NEG_LOOKAHEAD,
POS_LOOKBEHIND,
NEG_LOOKBEHIND);
TokenSet BOUNDARIES = TokenSet.create(BOUNDARY, CARET, DOLLAR);
}