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; } }