/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.nbstudio.syntax.cls; import org.nbstudio.syntax.utils.ANTLRCharStream; import org.nbstudio.syntax.utils.ANTLRTokenId; import org.netbeans.api.lexer.Token; import org.netbeans.spi.lexer.Lexer; import org.netbeans.spi.lexer.LexerRestartInfo; /** * * @author daimor */ class clsEditorLexer implements Lexer<ANTLRTokenId> { private final LexerRestartInfo<ANTLRTokenId> info; private final clsLexer lexer; public clsEditorLexer(LexerRestartInfo<ANTLRTokenId> info) { this.info = info; ANTLRCharStream charStream = new ANTLRCharStream(info.input(), "editor"); lexer = new clsLexer(charStream); clsLexer.lexerState state = (clsLexer.lexerState) info.state(); lexer.setLexerState((clsLexer.lexerState) info.state()); } @Override public Token<ANTLRTokenId> nextToken() { org.antlr.v4.runtime.Token token = lexer.nextToken(); Token<ANTLRTokenId> createdToken = null; if (token.getType() != -1) { ANTLRTokenId tokenId = CLSLanguageHierarchy.getToken(token.getType()); createdToken = info.tokenFactory().createToken(tokenId); } else if (info.input().readLength() > 0) { ANTLRTokenId tokenId = CLSLanguageHierarchy.getToken(clsLexer.WS); createdToken = info.tokenFactory().createToken(tokenId); } return createdToken; } @Override public Object state() { clsLexer.lexerState state = lexer.getLexerState(); return state; } @Override public void release() { } }