Keep it simple, stupid!!

IT系で調べたこととか考えたこととか書くつもりです。

org.eclipse.jface.text.rules.IRule

EclipseプラグインのEditor作るとき色つけたくて
ScannerでIRuleをポイポイぶっこんだので、
使って覚えたことを書きます。*1

標準クラス

NumberRule 数字文字列のルール
WordRule 指定文字列のルール
使い方はこっち見るといい
Eclipseプラグイン DMDLEditor キーワード(Hishidama's Eclipse Plugin DMDLEditor Memo)
MultiLineRule 開始文字と終了文字を指定したルール。行を跨いでscanする
SingleLineRule 開始文字と終了文字を指定したルール。こっちは行を跨がない
WhitespaceRule 空白のルール。スキップとかに使うのかな?

自力で作った場合

evaluateで対象文字数分scanner.read()して、
対象だったらそのままITokenを返す。
そうするとevaluateに入ってきた文字列indexから
index+(scanner.read()回数分)までの文字をITokenで装飾してくれる。

対象でなければ、scanner.unread();で開始文字まで戻して、
Token.UNDEFINEDでも返しておく。(たぶん何でもいい)
scanner.unread()で正しく戻さないと、次のルールの開始位置がずれたりしちゃうので注意。


一文字(?マーク)だけ判断するクラスを張ってみる。

public class QuestionRule implements IRule {

	protected IToken fToken;

	public QuestionRule(IToken token) {
		Assert.isNotNull(token);
		fToken = token;
	}

	/*
	 * @see IRule#evaluate(ICharacterScanner)
	 */
	@Override
	public IToken evaluate(ICharacterScanner scanner) {
		int c = scanner.read();
		if (c == '?') {
			return fToken;
		}
		scanner.unread();
		return Token.UNDEFINED;
	}
}

*1:大体はhishidamaとか見たほうが早い