/*
 * 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.lang.Language;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;

public final class XPathElementTypes {
    public static final IElementType EMBEDDED_CONTENT = new IElementType("EMBEDDED_CONTENT", Language.findInstance(XPathLanguage.class));

    public static final IElementType BINARY_EXPRESSION = new XPathElementType("BINARY_EXPRESSION");
    public static final IElementType PREFIX_EXPRESSION = new XPathElementType("PREFIX_EXPRESSION");
    public static final IElementType PATH_EXPRESSION = new XPathElementType("PATH_EXPRESSION");
    public static final IElementType FILTER_EXPRESSION = new XPathElementType("FILTER_EXPRESSION");
    public static final IElementType PREDICATE = new XPathElementType("PREDICATE");
    public static final IElementType NUMBER = new XPathElementType("NUMBER");
    public static final IElementType STRING = new XPathElementType("STRING");
    public static final IElementType VARIABLE_REFERENCE = new XPathElementType("VARIABLE_REFERENCE");
    public static final IElementType PARENTHESIZED_EXPR = new XPathElementType("PARENTHESIZED_EXPR");
    public static final IElementType FUNCTION_CALL = new XPathElementType("FUNCTION_CALL");
    public static final IElementType AXIS_SPECIFIER = new XPathElementType("AXIS_SPECIFIER");

    public static final IElementType LOCATION_PATH = new XPathElementType("LOCATION_PATH");

    public static final IElementType NODE_TEST = new XPathElementType("NODE_TEST");
    public static final IElementType NODE_TYPE = new XPathElementType("NODE_TYPE");
    public static final IElementType STEP = new XPathElementType("STEP");

    public static final TokenSet EXPRESSIONS = TokenSet.create(
            NUMBER, STRING, 
            FUNCTION_CALL, VARIABLE_REFERENCE,
            BINARY_EXPRESSION, PREFIX_EXPRESSION, PARENTHESIZED_EXPR,
            PATH_EXPRESSION, FILTER_EXPRESSION, LOCATION_PATH
    );

    public static final TokenSet PREDICATES = TokenSet.create(PREDICATE);
    public static final TokenSet STEPS = TokenSet.orSet(EXPRESSIONS, TokenSet.create(STEP));

    private XPathElementTypes() {
    }
}
