Package cz.juzna.latte.parser

Source Code of cz.juzna.latte.parser.LatteParserDefinition

package cz.juzna.latte.parser;

import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.lang.ASTNode;
import com.intellij.lang.ParserDefinition;
import com.intellij.lang.PsiParser;
import com.intellij.lexer.Lexer;
import com.intellij.openapi.project.Project;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.IFileElementType;
import com.intellij.psi.tree.TokenSet;
import cz.juzna.latte.lexer.LatteLexer;
import cz.juzna.latte.lexer.LatteTokenTypes;
import cz.juzna.latte.psi.impl.LatteFileImpl;
import cz.juzna.latte.psi.impl.LattePsiElement;
import cz.juzna.latte.psi.impl.MacroAttrImpl;
import cz.juzna.latte.psi.impl.MacroNodeImpl;
import org.jetbrains.annotations.NotNull;

public class LatteParserDefinition implements ParserDefinition {
    @NotNull
    @Override
    public Lexer createLexer(Project project) {
        return new LatteLexer();
    }

    @Override
    public PsiParser createParser(Project project) {
        return new LatteParser();
    }

    @Override
    public IFileElementType getFileNodeType() {
        return LatteTokenTypes.FILE;
    }

    @NotNull
    @Override
    public TokenSet getWhitespaceTokens() {
        return LatteTokenTypes.WHITESPACES;
    }

    @NotNull
    @Override
    public TokenSet getCommentTokens() {
        return LatteTokenTypes.COMMENTS;
    }

    @NotNull
    @Override
    public TokenSet getStringLiteralElements() {
        return LatteTokenTypes.STRING_LITERALS;
    }

    @NotNull
    @Override
    public PsiElement createElement(ASTNode node) {
      IElementType type = node.getElementType();

      if(type == LatteTokenTypes.MACRO_NODE) return new MacroNodeImpl(node);
      else if(type == LatteTokenTypes.MACRO_ATTR) return new MacroAttrImpl(node);
      else return new LattePsiElement(node);
    }

    @Override
    public PsiFile createFile(FileViewProvider fileViewProvider) {
        return new LatteFileImpl(fileViewProvider);
    }

    @Override
    public SpaceRequirements spaceExistanceTypeBetweenTokens(ASTNode astNode, ASTNode astNode1) {
        return SpaceRequirements.MAY;
    }
}
TOP

Related Classes of cz.juzna.latte.parser.LatteParserDefinition

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.