/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.nbstudio.syntax.mac; 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 macEditorLexer implements Lexer<ANTLRTokenId> { private final LexerRestartInfo<ANTLRTokenId> info; private final macLexer lexer; public macEditorLexer(LexerRestartInfo<ANTLRTokenId> info) { this.info = info; ANTLRCharStream charStream = new ANTLRCharStream(info.input(), "editor"); lexer = new macLexer(charStream); macLexer.lexerState state = (macLexer.lexerState) info.state(); lexer.setLexerState((macLexer.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 = macLanguageHierarchy.getToken(token.getType()); createdToken = info.tokenFactory().createToken(tokenId); } else if (info.input().readLength() > 0) { ANTLRTokenId tokenId = macLanguageHierarchy.getToken(macLexer.WS); createdToken = info.tokenFactory().createToken(tokenId); } return createdToken; } @Override public Object state() { macLexer.lexerState state = lexer.getLexerState(); return state; } @Override public void release() { } }