/**
* Plugin for NanoVM.
*/
package org.eclipse.nanovm.internal.ui.config.editor;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.rules.EndOfLineRule;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.IWhitespaceDetector;
import org.eclipse.jface.text.rules.IWordDetector;
import org.eclipse.jface.text.rules.RuleBasedScanner;
import org.eclipse.jface.text.rules.Token;
import org.eclipse.jface.text.rules.WhitespaceRule;
import org.eclipse.jface.text.rules.WordRule;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Display;
/**
* A configuration keyword scanner for NanoVM configuration and native files.
*
* @author tugstugi@yahoo.com
*/
public class ConfigCodeScanner extends RuleBasedScanner {
public static final RGB KEYWORD= new RGB(0, 0, 128);
public static final RGB SINGLE_LINE_COMMENT= new RGB(63, 127, 95);
public static final RGB DEFAULT= new RGB(0, 0, 0);
private static String[] fgKeywords = {
"name", "maxsize", "target", "filename", "speed", "native", "class", "field", "method"
};
public ConfigCodeScanner(){
IToken keyword = new Token(new TextAttribute(new Color(Display.getCurrent(), KEYWORD), null, SWT.BOLD));
IToken comment = new Token(new TextAttribute(new Color(Display.getCurrent(), SINGLE_LINE_COMMENT)));
IToken other = new Token(new TextAttribute(new Color(Display.getCurrent(), DEFAULT)));
List<IRule> rules = new ArrayList<IRule>();
// Add rule for single line comments.
rules.add(new EndOfLineRule("#", comment)); //$NON-NLS-1$
// Add generic whitespace rule.
rules.add(new WhitespaceRule(new IWhitespaceDetector(){
public boolean isWhitespace(char character) {
return Character.isWhitespace(character);
}
}));
// Add word rule for keywords.
WordRule wordRule = new WordRule(new IWordDetector(){
public boolean isWordPart(char character) {
return Character.isJavaIdentifierPart(character);
}
public boolean isWordStart(char character) {
return Character.isJavaIdentifierStart(character);
}
}, other);
for (int i = 0; i < fgKeywords.length; i++)
wordRule.addWord(fgKeywords[i], keyword);
rules.add(wordRule);
IRule[] result = new IRule[rules.size()];
rules.toArray(result);
setRules(result);
}
}