package org.intellij.plugins.markdown.lang.psi;
import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.tree.IElementType;
import org.intellij.plugins.markdown.lang.MarkdownElementTypes;
import org.intellij.plugins.markdown.lang.MarkdownTokenTypeSets;
import org.intellij.plugins.markdown.lang.psi.impl.*;
import org.jetbrains.annotations.NotNull;
public enum MarkdownPsiFactory {
INSTANCE;
public PsiElement createElement(@NotNull ASTNode node) {
final IElementType elementType = node.getElementType();
if (elementType == MarkdownElementTypes.PARAGRAPH) {
return new MarkdownParagraphImpl(node);
}
if (MarkdownTokenTypeSets.HEADERS.contains(elementType)) {
return new MarkdownHeaderImpl(node);
}
if (elementType == MarkdownElementTypes.CODE_FENCE) {
return ((MarkdownCodeFenceImpl)node);
}
if (MarkdownTokenTypeSets.LISTS.contains(elementType)) {
return new MarkdownListImpl(node);
}
if (elementType == MarkdownElementTypes.LIST_ITEM) {
return new MarkdownListItemImpl(node);
}
if (elementType == MarkdownElementTypes.BLOCK_QUOTE) {
return new MarkdownBlockQuoteImpl(node);
}
if (elementType == MarkdownElementTypes.LINK_DEFINITION) {
return new MarkdownLinkDefinitionImpl(node);
}
if (elementType == MarkdownElementTypes.LINK_DESTINATION) {
return new MarkdownLinkDestinationImpl(node);
}
if (elementType == MarkdownElementTypes.CODE_BLOCK) {
return new MarkdownCodeBlockImpl(node);
}
if (elementType == MarkdownElementTypes.HTML_BLOCK) {
return new MarkdownHtmlBlockImpl(node);
}
if (elementType == MarkdownElementTypes.TABLE) {
return new MarkdownTableImpl(node);
}
if (elementType == MarkdownElementTypes.TABLE_ROW || elementType == MarkdownElementTypes.TABLE_HEADER) {
return new MarkdownTableRowImpl(node);
}
if (elementType == MarkdownElementTypes.TABLE_CELL) {
return new MarkdownTableCellImpl(node);
}
return new ASTWrapperPsiElement(node);
}
}