/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.nbstudio.syntax.cls; import org.nbstudio.syntax.utils.ANTLRTokenReader; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.nbstudio.syntax.utils.ANTLRTokenId; import org.netbeans.api.lexer.Language; import org.netbeans.spi.lexer.LanguageHierarchy; import org.netbeans.spi.lexer.Lexer; import org.netbeans.spi.lexer.LexerRestartInfo; /** * * @author daimor */ public class CLSLanguageHierarchy extends LanguageHierarchy<ANTLRTokenId> { private static List<ANTLRTokenId> tokens; private static Map<Integer, ANTLRTokenId> idToToken; private static final Language<ANTLRTokenId> language = new CLSLanguageHierarchy().language(); public static Language<ANTLRTokenId> getLanguage() { return language; } private static void init() { ANTLRTokenReader reader = new ANTLRTokenReader(); HashMap<String, String> tokenTypes = new HashMap<>(); tokenTypes.put("Class", "keyword"); tokenTypes.put("Include", "keyword"); tokenTypes.put("Property", "keyword"); tokenTypes.put("Relationship", "keyword"); tokenTypes.put("Method", "keyword"); tokenTypes.put("ClassMethod", "keyword"); tokenTypes.put("Parameter", "keyword"); tokenTypes.put("Extends", "keyword"); tokenTypes.put("As", "keyword"); tokenTypes.put("Index", "keyword"); tokenTypes.put("ForeignKey", "keyword"); tokenTypes.put("On", "keyword"); tokenTypes.put("Method", "keyword"); tokenTypes.put("ClassMethod", "keyword"); tokenTypes.put("Query", "keyword"); tokenTypes.put("XData", "keyword"); tokenTypes.put("Comment", "comment"); tokenTypes.put("Description", "description"); tokenTypes.put("STRING", "string"); tokens = reader.readTokenFile("org/nbstudio/syntax/cls/clsLexer.tokens", tokenTypes); idToToken = new HashMap<>(); for (ANTLRTokenId token : tokens) { idToToken.put(token.ordinal(), token); } } public static synchronized ANTLRTokenId getToken(int id) { if (idToToken == null) { init(); } return idToToken.get(id); } @Override protected Collection<ANTLRTokenId> createTokenIds() { if (tokens == null) { init(); } return tokens; } @Override protected synchronized Lexer<ANTLRTokenId> createLexer(LexerRestartInfo<ANTLRTokenId> info) { return new clsEditorLexer(info); } @Override protected String mimeType() { return "text/isc-cls"; } }