« IAdaptableとは?(後編) | トップページ | Shellオブジェクトの取得 »

2004.01.11

行の先頭ルールとunreadについて

今日は引き続きIRuleの自作方法について試行錯誤。やってみたことは2つ。
  (1) 行の先頭でないと適用としないルールの作成
  (2) ルールに適用されないと判断した場合に,スキャンした文字をunreadしたときの動きの確認

(1)については,scanner#getColumn()メソッドを使って,スキャンした文字が行の何文字目かにあるかどうかでルールに適用するかどうかを判断するように,コードを書き換えてみた。単純に,
  scanner.getColumn() == 1
っていう評価式をevaluateメソッド内の条件判断に追加してあげただけだけど,結果はNG。単に行の先頭からキーワードを入力してあげればちゃんと動作するんだけど,先頭に空白を入れてあげても色付けがされたまま。そのほかにも怪しい動きをしてしまう。動作を見てると,文字入力をした位置よりも後の既に入力されている文字列がルール評価の対象になっていない模様。う~ん,どういうことだろうか。。。

(2)については,これまた単純にunreadしただけでは期待通りの動きにならない。っていうか,そりゃそうだなって動きになる。どういうことかというと,例えば「hoge」っていう文字列を色付けしたいときに,
  hogehoge
って入力したとすると,下線を引いた部分が色づけされてしまう。ちゃんとunreadしているおかげで,
  hogehoge(Unmatch) → ogehoge(Unmatch) → gehoge(Unmatch) → ehoge(Unmatch) → hoge(Match)
っていう評価がされて後半のhogeだけが色付けされてしまう。

これをやってて思ったんだけど,各Ruleオブジェクトによる評価の結果,Undefinedと判断された文字については,色づけなどのスタイルの更新が行われない?のかもしれない。それだとしたら,SQLWordRuleクラスでは,ルールにマッチしなかった文字についてはそのルール独自のトークンを返して,unreadしなかったというのも納得ができる。

・・・難しいなぁ。

|

« IAdaptableとは?(後編) | トップページ | Shellオブジェクトの取得 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/12631/90367

この記事へのトラックバック一覧です: 行の先頭ルールとunreadについて:

« IAdaptableとは?(後編) | トップページ | Shellオブジェクトの取得 »