入力補完を考える#3
どうするかどうするかと、考えるだけ考えて発動してなかったが、
ようやく着手し、まあまあ矛盾の少ない状態で動き始めた。
もうこれって出来ても出来なくても、試しに作ってみるしか納得出来なくなっちゃったし。
ダメなら隠し機能と言うことで封印しちゃえば良いんだし。
ウィンドウの実装は、萌ディタの開発日記を参考にして作った。
パクりではなく参考と表現したのは、
パクりたいけど意味わからなくて、完全にはパクれなかったから、
理解できるところまでの実装をしたからと言うことで。
検索とかのダイアログと同様にOwned Windowで作り、
制御を全部補完ウィンドウに移すってところまではわかったのだが、
>WM_NCACTIVATE でつじつまを合わせるだけでいい
これの意味がわからなかったので、補完ウィンドウがアクティブになって多少不自然かも。
補完候補については、[A-Za-z_][A-Za-z0-9_]*のみをテキストから拾ってみたが、
わりと大きいファイルでも一瞬で大量の語句を拾えるようで、この方法なら問題ない。
そういえば真魚は検索に適したバッファ構造なので、補完語句拾うのも得意なはずだもんな。
もう一つ、用意された補完辞書を使うっていうアイデアは、その辞書用意するのが面倒で。
たぶん、ディスクアクセスする分、辞書読み込みの方が遅くなるだろう。
それに比べたら語句拾いは全然速いので、あえてオフにするオプションは要らないかも。
内部では補完候補をとりあえず全部リストに入れて順番に並べ替えもし、
さらに、入力されている語句で該当するもののみに絞った上で、補完ウィンドウに出している。
該当しないものも候補の上下に出すという方法もあるのだが、
やっぱり入力のたびに絞られてスクロールバーがおおざっぱになっていく方が楽しいので。
やってて気になったのは、DelphiやC♯を書くのはこの補完で良いけども、
CSSやHTMLを書くなら-(半角のマイナス)も補完しなきゃいけないんだなと。
でも-を使っても良いという補完をすると、-が引き算である言語で矛盾が起こる。
で、各言語ごとに別の補完が必要になったら計画は破綻。
設定で変えるという複雑仕様にはしたくないし、自動で世話できるものでもない。
正規表現のオーバーフロー修正や文字コード対応に比べたら、
身を削るほどの難しさじゃないし、忙しい3月に片手間でやれる程度のタスクだが。
あと、今日ファイナルファンタジーを買いに行くべきかどうか。