yusuk****@cheru*****
yusuk****@cheru*****
2004年 8月 10日 (火) 23:46:02 JST
田畑です。 入力システムの各種ソフトが混乱してよくわからないという話を 良く聞くので自分なりにレイヤ分けを書いてみました。 議論の際の叩き台にしていただければ嬉しいです。 (1)変換エンジン: 文字列を受け取って文字列を返すだけのコードですが、大量の データアクセスと絡み合うデータ構造、積み重なるヒューリスティクスで かなり大変です。 (2)プリエディット制御: 日本語の入力システムはローマ字かな変換や文節の伸縮といった操作を 持ちます。さらにキーバインドや細かな振舞いのカスタマイズに対する 要求があり、このレイヤは極めて厄介です。(変換エンジンが複雑だという ことはちょっとプログラミングをかじれば理解できるのですが、このレイヤが 難しいということに気付く人は結構少ないのではないかと思います) (3)IM管理: 複数のバックエンド(変換エンジン)をサポートできる場合、それらを適切に 選択できる機構が必要です。この言語ならこの入力システムというような設定を 保持し、適切にバックエンドを選択できるようにすることが必要です。 また、バックエンドと接続のためのAPIも重要です。 (4)デスクトップ連携: 入力システムの状態の中ではデスクトップ上で共有されることになるものが いくつかあり、それらの設定を反映させたり記録したりする機構が必要です。 ツールバーやアプレット、手書き入力や辞書との連携もこのレイヤに入ると思います。 (5)ツールキット連携: 各ツールキットの持つ入力システムサポートの機能と入力システムを接続 するための機能です。各ツールキットごとに色々なもののsemanticsが 異なっててその違いを吸収するのが面白いです。ここで言うツールキットは Xlib, gtk+, Qtだけでなく端末やMacOSX, mlterm, emacsなども指します。 (5-1)状態・候補の表示選択: 候補ウィンドウや状態のメニューを扱うためのAPI等を提供する必要があります。 (5-2)設定情報の管理 設定項目には設定の名前とデータ型などをGUIのツールに公開するように 作るのではないかと思います。 (5')ツールキット側コード: (5)に対応するコードです。ツールキットではなく、アプリケーション 単位のコードもありえます。 *上記のほかに辞書と辞書ツールも極めて重要ですが、変換エンジンの 横ぐらいのレイヤな気がするので、ここには書かないことにします。 *各アプリの担当範囲は下記のような感じになるかと思います。 anthyは1 (anthyの中のlibanthyinputが2) primeは1, 2 uimが2, 3, 4, 5, 5'(gtk, XIM, tty) scimが3, 4, 5, 5'(gtk, XIM) MacUIMやmltermのuim対応が5' *現時点のuimは2をscimは3,4に力がはいってるので、scim-uim等を使うと 快適で国際化された入力環境を実現できるのは確かです。 *変換エンジンの機能はUnix系では伝統的にサーバによって提供され、 Anthyではライブラリ、PRIMEではスクリプト言語のスクリプトですが、 若いプログラマと話をすると今後のトレンドはスクリプト言語なのかなと 感じています。 -- CHAOS AND CHANCE! Yusuke TABATA (yusuk****@cheru*****)