/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.antlr.works.editor.grammar.completion; import java.util.HashMap; import java.util.Map; import org.antlr.v4.runtime.misc.IntervalSet; import org.antlr.works.editor.grammar.experimental.GrammarLexer; import org.netbeans.api.annotations.common.NonNull; import org.openide.util.Parameters; /** * * @author Sam Harwell */ public class KeywordCompletionItem extends GrammarCompletionItem { public static final IntervalSet KEYWORD_TYPES = new IntervalSet(GrammarLexer.LEXER, GrammarLexer.PARSER, GrammarLexer.CATCH, GrammarLexer.FINALLY, GrammarLexer.GRAMMAR, GrammarLexer.LOCALS, GrammarLexer.MODE, GrammarLexer.PRIVATE, GrammarLexer.PROTECTED, GrammarLexer.PUBLIC, GrammarLexer.RETURNS, GrammarLexer.THROWS, GrammarLexer.IMPORT, GrammarLexer.FRAGMENT, GrammarLexer.TOKENS, GrammarLexer.CHANNELS, GrammarLexer.OPTIONS); private static final Map<Integer, String> KEYWORDS = new HashMap<>(); static { for (int i : KEYWORD_TYPES.toArray()) { KEYWORDS.put(i, GrammarLexer.VOCABULARY.getSymbolicName(i).toLowerCase()); } } public static final Map<Integer, KeywordCompletionItem> KEYWORD_ITEMS = new HashMap<>(); static { for (Map.Entry<Integer, String> keyword : KEYWORDS.entrySet()) { KEYWORD_ITEMS.put(keyword.getKey(), new KeywordCompletionItem(keyword.getValue())); } } private final String keyword; private String leftText; public KeywordCompletionItem(@NonNull String keyword) { Parameters.notNull("keyword", keyword); this.keyword = keyword; } @Override public int getSortPriority() { return KEYWORD_SORT_PRIORITY; } @Override public String getSortTextImpl() { return keyword; } @Override public CharSequence getInsertPrefix() { return keyword; } @Override protected String getLeftHtmlText() { if (leftText == null) { StringBuilder builder = new StringBuilder(); builder.append(KEYWORD_COLOR); builder.append(BOLD); builder.append(keyword); builder.append(BOLD_END); builder.append(COLOR_END); leftText = builder.toString(); } return leftText; } }