package com.dmarcotte.handlebars.parsing; import com.intellij.lexer.Lexer; import com.intellij.lexer.MergeFunction; import com.intellij.lexer.MergingLexerAdapterBase; import com.intellij.psi.tree.IElementType; public class HbLexer extends MergingLexerAdapterBase { private static final MergeFunction MERGE_FUNCTION = new MergeFunction() { @Override public IElementType merge(final IElementType type, final Lexer originalLexer) { if (HbTokenTypes.COMMENT_OPEN != type) { return type; } if (originalLexer.getTokenType() == HbTokenTypes.COMMENT_CONTENT) { originalLexer.advance(); } if (originalLexer.getTokenType() == HbTokenTypes.COMMENT_CLOSE) { originalLexer.advance(); return HbTokenTypes.COMMENT; } if (originalLexer.getTokenType() == null) { return HbTokenTypes.UNCLOSED_COMMENT; } if (originalLexer.getTokenType() == HbTokenTypes.UNCLOSED_COMMENT) { originalLexer.advance(); return HbTokenTypes.UNCLOSED_COMMENT; } return type; } }; public HbLexer() { super(new HbRawLexer()); } @Override public MergeFunction getMergeFunction() { return MERGE_FUNCTION; } }