Takuro Ashie
ashie****@homa*****
2005年 5月 12日 (木) 09:56:31 JST
足永です。 On Mon, 9 May 2005 12:57:15 +0900 Takuro Ashie <ashie****@homa*****> wrote: > > 3. キャレット移動、削除などが文字単位で行えるようにする > > 一般的なIM(ことえり、Atok、MS IM)と同じように各操作が文字単位で行えるよ > > うにしました。 > > これにより"じゃ(jya)"を一文字削除すると"じ(j)"に、"qi"などと間違って打ち > > 込んだ場合 > > "q"の後にキャレットを移動してバックスペース後"k"を入力して"き"にするなど > > 柔軟な操作が可能になります。 > > (ソースが若干読み難くいという難点がありますが...) > > こちらはまだ確認していませんが,確認後,0.4.0で取り込もうと思います. > ありがとうございます. 少し試してみたのですが、このパッチを当ててしまうとかな入力が壊れてしまう ようです。またコードがかなり複雑になってしまうようで、申し訳ないのですが このままでは取り込みづらいと考えています。 (かな入力はもう少し根本のレベルから直そうとは思っていますが、そちらが完 成したとしても現状のコードが必要になる場面もあるので、捨てるわけにはいき ません) 同様の機能をもう少し単純に実装するためには、むしろ基本的なデータ構造のレ ベルからリファインする方が良いと思います。 現状では、m_key2kanaのペンディング中の文字列は "PreeditChar" (ネーミング がアレですが...) という一つのセグメントで管理しています。 このため、例えば"じゃ" と入力しようとして "jy" までを入力すると "jy" が 一つの文字であるかのように扱われてしまいますが、これは始めから "j" と "y" の二つのセグメントに分けておいて、代わりに、それぞれのセグメントに変 換されていない事を示すフラグを与えておくのが良いと思います。確定した時点 で、一つのセグメントに結合します。 m_key2kanaはカーソルが移動された場合や文字が削除された場合等に、カーソル 位置から逆方向に連続してこのフラグが付いている文字を全てピックアップし て、その都度リセットしてやります。 こうしておけば、ごく普通のオペレーションで未変換のアルファベットを一文字 づつ処理することができます。 かなの一文字単位での処理 (じゃ -> じ) については、むしろMicrosoft IMEの ように、単純にかなからアルファベットへ逆変換してやることで解決しようか な、と思っています(jya -> j ではなくて、jya -> ji)。 PreeditChar の "to_valid" という未実装の関数が、それをやろうとしている残 骸です。 -- Takuro Ashie Mail: ashie****@homa***** Web: http://www.homa.ne.jp/~ashie/ PGP Public Key: http://www.homa.ne.jp/~ashie/ashie.asc