/*
* 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 javax.swing.ImageIcon;
import org.antlr.netbeans.editor.navigation.Description;
import org.antlr.v4.tool.Grammar;
import org.antlr.works.editor.grammar.navigation.GrammarNode;
import org.antlr.works.editor.grammar.navigation.GrammarNode.GrammarNodeDescription;
/**
*
* @author Sam Harwell
*/
public class GrammarRuleCompletionItem extends GrammarCompletionItem {
private static final ImageIcon PARSER_ICON;
private static final ImageIcon LEXER_ICON;
private static final ImageIcon FRAGMENT_ICON;
private static final ImageIcon TOKEN_ICON;
private static final ImageIcon MODE_ICON;
private static final ImageIcon CHANNEL_ICON;
private final Description rule;
private String leftText;
static {
PARSER_ICON = new ImageIcon(GrammarNode.PARSER_IMAGE);
LEXER_ICON = new ImageIcon(GrammarNode.LEXER_IMAGE);
FRAGMENT_ICON = new ImageIcon(GrammarNode.FRAGMENT_IMAGE);
TOKEN_ICON = new ImageIcon(GrammarNode.TOKEN_IMAGE);
MODE_ICON = new ImageIcon(GrammarNode.MODE_IMAGE);
CHANNEL_ICON = new ImageIcon(GrammarNode.CHANNEL_IMAGE);
}
public GrammarRuleCompletionItem(Description rule) {
this.rule = rule;
}
@Override
public int getSortPriority() {
return RULE_SORT_PRIORITY;
}
@Override
public String getSortTextImpl() {
return rule.getName();
}
@Override
public CharSequence getInsertPrefix() {
return rule.getName();
}
@Override
protected ImageIcon getIcon() {
if (rule instanceof GrammarNodeDescription) {
switch (((GrammarNodeDescription)rule).getDeclarationKind()) {
case PARSER_RULE:
return PARSER_ICON;
case LEXER_RULE:
return LEXER_ICON;
case FRAGMENT_RULE:
return FRAGMENT_ICON;
case TOKEN:
return TOKEN_ICON;
case MODE:
return MODE_ICON;
case CHANNEL:
return CHANNEL_ICON;
case UNKNOWN:
case UNDEFINED:
default:
break;
}
}
String name = rule.getName();
if (Grammar.isTokenName(name)) {
return LEXER_ICON;
} else {
return PARSER_ICON;
}
}
@Override
protected String getLeftHtmlText() {
if (leftText == null) {
StringBuilder builder = new StringBuilder();
builder.append(METHOD_COLOR);
if (!rule.isInherited()) {
builder.append(BOLD);
}
builder.append(rule.getName());
if (!rule.isInherited()) {
builder.append(BOLD_END);
}
builder.append(COLOR_END);
leftText = builder.toString();
}
return leftText;
}
}