From t-suwa @ users.sourceforge.jp Wed May 3 12:06:38 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Wed, 03 May 2006 12:06:38 +0900 Subject: [aquaskk-dev 54] =?iso-2022-jp?b?GyRCPSRANUp9P0skSyREJCQkRhsoQig=?= =?iso-2022-jp?b?GyRCJWElQyU7ITwlOERMPy4hIhsoQlNra0NvbmZpZyAbJEIkSiRJGyhC?= =?iso-2022-jp?b?KQ==?= Message-ID: 諏訪です。 今回の修正は特に Branch を設けず、Main Trunk に対して直接 commit してい く予定です。 まずは最初に着手する部分について、お知らせしておきます。 ■ メッセージ通信について (1) 現在の仕様 クライアント・サーバー間のメッセージ通信のデータ区切り文字は、スペース になっています。 このため、変換候補にスペースが含まれる場合には、" " → "[20]" のように、 エンコードするようになっています。例えば、 suwa /諏訪 友崇/ というエントリがあった場合、通信時には "諏訪[20]友崇" に変換されるとい うことです。こうしないと、メッセージの区切りと見分けがつかないからです ね。 (2) 問題点 メッセージの区切り文字が使われる場所では、常に " " ⇔ "[20]" 変換が行な われてしまう(コスト増大)。単純に、コードの可読性が低下する。 (3) 改善方法 メッセージの区切り文字を「見出し語にも変換候補にも出現しない文字」にす ることで、余計な変換を回避できます。 今のところ垂直タブ(0x0b)にしようと思っていますが、反対意見などがあれば お願いします。 ■ SkkConfig について (1) 現状の仕様 キーマップを unsigned char で管理していて、これは、MacCharCodes そのも のです。 (2) 問題点 Ctrl キーシーケンスの管理が不完全になってしまう。例えば、「スペース」の MacCharCodes は 20 ですが、「Ctrl + スペース」も 20 のままです。 この結果、SkkConfig では「Ctrl + スペース」を管理していないにも関わらず、 isMappedKey() が true を返すことになります。KeyBindings がうまく動かな いのは、この仕様が原因です。 (3) 改善方法 単純に、MacCharCodes に加えて、KeyModifier も管理するようにします。合わ せて、初期値の設定を外出しにします。 - * - 以上です。よろしくお願いします。 -- Tomotaka SUWA From t-suwa @ users.sourceforge.jp Fri May 12 21:07:32 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Fri, 12 May 2006 21:07:32 +0900 Subject: [aquaskk-dev 55] =?iso-2022-jp?b?UmU6IBskQj0kQDVKfT9LJEskRCQkGyhC?= =?iso-2022-jp?b?GyRCJEYbKEIoGyRCJWElQyU7ITwlOERMPy4hIhsoQlNra0NvbmZpZyA=?= =?iso-2022-jp?b?GyRCJEokSRsoQik=?= In-Reply-To: References: Message-ID: 諏訪です。 最近の進捗です。 At Wed, 03 May 2006 12:06:38 +0900, Tomotaka SUWA wrote: > ■ メッセージ通信について この内容は commit しました。 > ■ SkkConfig について (snip) > (3) 改善方法 > > 単純に、MacCharCodes に加えて、KeyModifier も管理するようにします。合わ > せて、初期値の設定を外出しにします。 AquaSKK で扱っている Carbon イベントは、クラスが kEventClassKeyboard で、 種類が kEventRawKeyDown と kEventRawKeyRepeat のどちらかです。 これらのイベントに付随するパラメータは、MacCharCode、Modifier、KeyCode の三つになります。 ・MacCharCode: U.S. や Dvorak などに合わせて変換されたコード ・Modifier: 装飾キーの状態(Shift, Control, Option, Command など) ・KeyCode: 仮想キーコード(物理的なキーコード) 現状では、各入力モードが処理する引数には上記のうち MacCharCode だけしか 渡されていません。 今回の改善ではこの引数を unsigned char から int に変更し、MacCharCode に加えて 8bit 左シフトさせた Modifier の情報も持たせます。 ただ、型が int のままでは「MacCharCode に Modifier が含まれてますよ〜」 という意味が希薄になってしまうかなぁと思ったので、SKKChar として以下の ように再定義することにしました。 ===================== ここから ==================== // 各入力モードが処理する基本単位 typedef int SKKChar; // 装飾キーの状態を格納する(Shift を除く) #define SKKCHAR(code, mods) (code | ((mods & ~shiftKey) << 8)) ===================== ここまで ==================== ということで、SKKChar の中身は以下のようになります 24 ------------ 16 ------------ 8 ------------ 0 bit | Shift 以外の装飾キーの状態 | MacCharCode | +-------------------------------+--------------+ KeyModifier は UInt32 ですが、現状では 16bit までしか使っていないよう なので、当分は int で足りると思います。 これに合わせて、SkkConfig でも "\C-j" などのキーコードを SKKChar に変換 して保持するように修正します。 - * - SKKChar という名前は「イマイチ」だと思うのですが、いい名前が浮かびませ んでした。もしもいい案があったら教えて下さい。 その他、気付いたことがあれば指摘してもらえると助かります。 よろしくお願いします。 -- Tomotaka SUWA From t-suwa @ users.sourceforge.jp Sun May 21 01:26:05 2006 From: t-suwa @ users.sourceforge.jp (Tomotaka SUWA) Date: Sun, 21 May 2006 01:26:05 +0900 Subject: [aquaskk-dev 56] =?iso-2022-jp?b?UmU6IBskQj0kQDVKfT9LJEskRCQkGyhC?= =?iso-2022-jp?b?GyRCJEYbKEIoGyRCJWElQyU7ITwlOERMPy4hIhsoQlNra0NvbmZpZyA=?= =?iso-2022-jp?b?GyRCJEokSRsoQik=?= In-Reply-To: References: Message-ID: 諏訪です。 SKKConfig(旧 SkkConfig)まわりの変更を commit しました。 ChangeLog を見てもらえばわかる通り SKKChar を導入したインパクトは大きく、 多数のファイルを修正することになりました。 なお、SKKChar を作るマクロは以下のようになりました。 // 装飾キーの状態を格納する(Shift を除く 16bit) #define SKKCHAR(code, mods) (code | ((mods & ~shiftKey & 0xffff) << 8)) 前回のメールでは「Modifier は 16bit」と書いたのですが、テストしたところ、 矢印キーが押下されると 17bit がオンになっていました。 Event.h にある kLeftArrowCharCode などをそのまま使いたかったので、下位 16bit に限定するようにしています。 これで KeyBindings をサポートすることができました。 - * - 次は数値変換のサポートですが、その前にちょっとご報告があります。 実は今月から来月にかけて、引越しをすることになりました。部屋の片付けや 雑多な手続きなどで、開発のほうはしばらく滞ることになると思います。 あらかじめ、ご了承下さい。 -- Tomotaka SUWA