package org.intellij.plugins.markdown.lang.psi.impl; import com.intellij.extapi.psi.ASTWrapperPsiElement; import com.intellij.lang.ASTNode; import com.intellij.navigation.ItemPresentation; import com.intellij.psi.PsiElement; import org.intellij.plugins.markdown.lang.MarkdownTokenTypes; import org.intellij.plugins.markdown.lang.psi.MarkdownPsiElement; import org.intellij.plugins.markdown.structureView.MarkdownBasePresentation; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.List; public class MarkdownCodeBlockImpl extends ASTWrapperPsiElement implements MarkdownPsiElement { public MarkdownCodeBlockImpl(@NotNull ASTNode node) { super(node); } @Override public ItemPresentation getPresentation() { return new MarkdownBasePresentation() { @Nullable @Override public String getPresentableText() { return "Code block"; } @Nullable @Override public String getLocationString() { if (!isValid()) { return null; } final StringBuilder sb = new StringBuilder(); for (PsiElement child = getFirstChild(); child != null; child = child.getNextSibling()) { if (child.getNode().getElementType() != MarkdownTokenTypes.CODE_LINE) { continue; } if (sb.length() > 0) { sb.append("\\n"); } sb.append(child.getText()); if (sb.length() >= MarkdownCompositePsiElementBase.PRESENTABLE_TEXT_LENGTH) { break; } } return sb.toString(); } }; } @NotNull @Override public List<MarkdownPsiElement> getCompositeChildren() { return Collections.emptyList(); } }