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();
}
}