-
Leon Ziegler authoredLeon Ziegler authored
ISRSyntaxScanner.java 3.15 KiB
package hterhors.editor.scanners;
import hterhors.editor.ColorManager;
import hterhors.editor.IISRColorConstants;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.text.TextAttribute;
import org.eclipse.jface.text.rules.IRule;
import org.eclipse.jface.text.rules.IToken;
import org.eclipse.jface.text.rules.MultiLineRule;
import org.eclipse.jface.text.rules.RuleBasedScanner;
import org.eclipse.jface.text.rules.Token;
public class ISRSyntaxScanner extends RuleBasedScanner {
public ISRSyntaxScanner(ColorManager manager) {
IToken decNonTerminals = new Token(new TextAttribute(
manager.getColor(IISRColorConstants.DEC_NON_TERMINAL)));
IToken start = new Token(new TextAttribute(
manager.getColor(IISRColorConstants.START)));
IToken number = new Token(new TextAttribute(
manager.getColor(IISRColorConstants.NUMBER)));
IToken nonTerminal = new Token(new TextAttribute(
manager.getColor(IISRColorConstants.NON_TERMINAL)));
IToken or = new Token(new TextAttribute(
manager.getColor(IISRColorConstants.OR)));
IToken ignore = new Token(new TextAttribute(
manager.getColor(IISRColorConstants.IGNORE)));
IToken joker = new Token(new TextAttribute(
manager.getColor(IISRColorConstants.JOKER)));
List<IRule> ruleList = new ArrayList<IRule>();
ruleList.add(new MultiLineRule("$$S", ":", start));
ruleList.add(new MultiLineRule("%IGNORE", ";", ignore));
ruleList.add(new MultiLineRule("$$S:", " ", start));
ruleList.add(new MultiLineRule("$", ":", decNonTerminals));
ruleList.add(new MultiLineRule("$$", ":", decNonTerminals));
ruleList.add(new MultiLineRule("!", "*", joker));
ruleList.add(new MultiLineRule("!", "*\n", joker));
ruleList.add(new MultiLineRule("!", "*\t", joker));
ruleList.add(new MultiLineRule("!", "*\r", joker));
ruleList.add(new MultiLineRule("!", "*\b", joker));
ruleList.add(new MultiLineRule("!", "*\f", joker));
ruleList.add(new MultiLineRule("!", "*;", joker));
ruleList.add(new MultiLineRule("$", " ", nonTerminal));
ruleList.add(new MultiLineRule("$", "\n", nonTerminal));
ruleList.add(new MultiLineRule("$", "\t", nonTerminal));
ruleList.add(new MultiLineRule("$", "\r", nonTerminal));
ruleList.add(new MultiLineRule("$", "\b", nonTerminal));
ruleList.add(new MultiLineRule("$", "\f", nonTerminal));
ruleList.add(new MultiLineRule("$", ";", nonTerminal));
ruleList.add(new MultiLineRule("$$", " ", nonTerminal));
ruleList.add(new MultiLineRule("$$", "\n", nonTerminal));
ruleList.add(new MultiLineRule("$$", "\t", nonTerminal));
ruleList.add(new MultiLineRule("$$", "\r", nonTerminal));
ruleList.add(new MultiLineRule("$$", "\b", nonTerminal));
ruleList.add(new MultiLineRule("$$", "\f", nonTerminal));
ruleList.add(new MultiLineRule("$$", ";", nonTerminal));
ruleList.add(new MultiLineRule("|", " ", or));
ruleList.add(new MultiLineRule("|", "\n", or));
ruleList.add(new MultiLineRule("|", "\t", or));
ruleList.add(new MultiLineRule("|", "\r", or));
ruleList.add(new MultiLineRule("|", "\b", or));
ruleList.add(new MultiLineRule("|", "\f", or));
ruleList.add(new MultiLineRule("[", "]", number));
setRules(ruleList.toArray(new IRule[ruleList.size()]));
}
}