package flow.netbeans.markdown.highlighter;
import flow.netbeans.markdown.csl.MarkdownLanguageConfig;
import java.util.Collection;
import java.util.EnumSet;
import org.netbeans.api.lexer.InputAttributes;
import org.netbeans.api.lexer.Language;
import org.netbeans.api.lexer.LanguagePath;
import org.netbeans.api.lexer.Token;
import org.netbeans.api.lexer.TokenId;
import org.netbeans.spi.lexer.LanguageEmbedding;
import org.netbeans.spi.lexer.LanguageHierarchy;
import org.netbeans.spi.lexer.Lexer;
import org.netbeans.spi.lexer.LexerRestartInfo;
public enum MarkdownTokenId implements TokenId {
ABBREVIATION,
ANCHORLINK,
AUTOLINK,
BLOCKQUOTE,
BULLETLIST,
CODE,
EMPH,
EXPIMAGE,
EXPLINK,
HEADER1,
HEADER2,
HEADER3,
HEADER4,
HEADER5,
HEADER6,
HORIZONTALRULE,
HTMLBLOCK,
INLINEHTML,
LISTITEM,
MAILLINK,
ORDEREDLIST,
PLAIN,
STRONG,
TABLE,
VERBATIM,
WIKILINK,
DEFINITION,
DEFINITION_LIST,
DEFINITION_TERM,
REFERENCE,
QUOTED,
REF_IMAGE,
REF_LINK,
WHITESPACE,
STRIKETHROUGH;
private static final Language<MarkdownTokenId> LANGUAGE = new LanguageHierarchy<MarkdownTokenId>() {
@Override
protected Collection<MarkdownTokenId> createTokenIds() {
return EnumSet.allOf(MarkdownTokenId.class);
}
@Override
protected Lexer<MarkdownTokenId> createLexer(LexerRestartInfo<MarkdownTokenId> info) {
return MarkdownLexer.create(info);
}
@Override
protected String mimeType() {
return MarkdownLanguageConfig.MIME_TYPE;
}
@Override
protected LanguageEmbedding<?> embedding(Token<MarkdownTokenId> token, LanguagePath languagePath, InputAttributes inputAttributes) {
if ((token.id() == MarkdownTokenId.HTMLBLOCK) || (token.id() == MarkdownTokenId.INLINEHTML)) {
Language<?> htmlLanguage = Language.find("text/html");
if (htmlLanguage != null) {
return LanguageEmbedding.create(htmlLanguage, 0, 0);
}
}
return null;
}
}.language();
@Override
public String primaryCategory() {
return this.name().toLowerCase();
}
public static Language<MarkdownTokenId> language() {
return LANGUAGE;
}
}