Skip to content
Snippets Groups Projects
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()]));
	}
}