package org.intellij.plugins.markdown.spellchecking;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.impl.source.tree.TreeUtil;
import com.intellij.psi.tree.TokenSet;
import com.intellij.spellchecker.tokenizer.SpellcheckingStrategy;
import com.intellij.spellchecker.tokenizer.Tokenizer;
import org.intellij.plugins.markdown.lang.MarkdownElementTypes;
import org.intellij.plugins.markdown.lang.MarkdownTokenTypes;
import org.jetbrains.annotations.NotNull;
public class MarkdownSpellcheckingStrategy extends SpellcheckingStrategy {
public static final TokenSet NO_SPELLCHECKING_TYPES = TokenSet.create(MarkdownElementTypes.CODE_BLOCK,
MarkdownElementTypes.CODE_FENCE,
MarkdownElementTypes.CODE_SPAN,
MarkdownElementTypes.LINK_DESTINATION);
@NotNull
@Override
public Tokenizer getTokenizer(PsiElement element) {
final ASTNode node = element.getNode();
if (node == null || node.getElementType() != MarkdownTokenTypes.TEXT) {
return EMPTY_TOKENIZER;
}
if (TreeUtil.findParent(node, NO_SPELLCHECKING_TYPES) != null) {
return EMPTY_TOKENIZER;
}
return TEXT_TOKENIZER;
}
}