内部入力メソッドとは LANGUAGE が Mnil
以外のものであり、その本体はm17n データベースに <Minput_method, LANGUAGE, NAME> というタグを付けて定義されている。 この種の入力メソッドに対して、m17n ライブラリでは CUI 用と GUI 用それぞれの入力メソッドドライバをあらかじめ定義している。 これらのドライバは m17n ライブラリ自体の入力処理エンジンを利用する。 m17n データベースには、特定の言語専用でない入力メソッドを定義することもでき、 そのような入力メソッドの LANGUAGE は Mt
である。
内部入力メソッドは、ユーザの入力イベントに対応したシンボルである入力キーを受け取る。 m17n
ライブラリ
は入力イベントがアプリケーションプログラムでどう表現されているかを知ることができないので、 入力イベントから入力キーへの変換はアプリケーションプログラマの責任で行わなくてはならない。 詳細については関数 minput_event_to_key() の説明を参照。
外部入力メソッドとは LANGUAGE が Mnil
のものであり、その本体は外部のリソースとして定義される。 (たとえばX Window System のXIM など。) この種の入力メソッドでは、シンボル NAME はMinput_driver
をキーとするプロパティを持ち、その値は入力メソッドドライバへのポインタである。 このことにより、適切なドライバを準備することによって、いかなる種類の入力メソッドも m17n
ライブラリ
の枠組の中で扱う事ができる。
利便性の観点から、m17n X ライブラリは XIM の OverTheSpot の入力スタイルを実現する入力メソッドドライバを提供し、またシンボル Mxim
の Minput_driver
プロパティの値としてそのドライバへのポインタを保持している。 詳細については m17n GUI API のドキュメントを参照のこと。
処理の流れ
入力メソッド処理の典型的な処理は以下のようになる。
|
|
|
|
|
入力メソッドから呼ばれるコールバック関数の型である。IC は入力コンテクストへのポインタ、COMMAND は関数が呼ばれるコールバックの名前である。 |
|
|
|
|
|
関数 minput_open_im() は言語 language と名前 name に合致する入力メソッドをオープンし、新たに割り当てられた入力メソッドオブジェクトへのポインタを返す。 この関数は、まず入力メソッド用のドライバを以下のようにして決定する。 language が Mnil でなければ、変数 minput_driver で指されているドライバを用いる。
language が Mnil であり、name が Minput_driver プロパティを持つ場合には、そのプロパティの値で指されている入力ドライバを用いて入力メソッドをオープンする。 name にそのようなプロパティが無かった場合は 次いで、ドライバのメンバ MInputDriver::open_im() が呼ばれる。
arg は構造体 MInputMethod のメンバ
|
|
関数 minput_close_im() は、入力メソッド im をクローズする。 この入力メソッド im は minput_open_im() によって作られたものでなければならない。 |
|
関数 minput_create_ic() は入力メソッド im に対応する入力コンテクストオブジェクトを生成し、 Minput_preedit_start, Minput_status_start, Minput_status_draw に対応するコールバック関数をこの順に呼ぶ。
|
|
関数 minput_destroy_ic() は、入力コンテクスト ic を破壊する。 この入力コンテクストは minput_create_ic() によって作られたものでなければならない。この関数は Minput_preedit_done, Minput_status_done, Minput_candidates_done に対応するコールバック関数をこの順に呼ぶ。 |
|
関数 minput_filter() は入力キー key を入力コンテクスト ic に応じてフィルタし、preedit テキスト、ステータス、現時点での候補が変化した時点で、それぞれ Minput_preedit_draw, Minput_status_draw, Minput_candidates_draw に対応するコールバック関数を呼ぶ。
|
|
関数 minput_lookup() は入力コンテクスト ic 中のテキストを探す。 key は関数 minput_filter() への直前の呼び出しに用いられたものと同じでなくてはならない。 テキストが入力メソッドによって生成されていれば、テキストは M-text mt に連結される。 この関数は、MInputDriver::lookup を呼ぶ。
|
|
関数 minput_set_spot() は、入力コンテクスト ic のスポットを、座標 (x, y ) の位置に 、高さ ascent、 descent で設定する。 これらの値の意味は入力メソッドドライバに依存する。 たとえば CUI 環境で動作するドライバは x と y をそれぞれ列と行の番号として用い、ascent と descent を無視するかもしれない。 またウィンドウシステム用のドライバは x と y をクライアントウィンドウの原点からのオフセットをピクセル単位で表したものとして扱い、 ascent と descent を (x . y ) の列のアセントとディセントをピクセル単位で表したものとして扱うかもしれない。 fontsize には preedit テキストのフォントサイズを 1/10 ポイント単位で指定する。
mt と pos はそのスポットの M-text と文字位置である。mt は |
|
関数 minput_toggle() は入力コンテクスト ic に対応付けられた入力メソッドをトグルする。 |
|
関数 minput_reset_ic() は Minput_reset に対応するコールバック関数を呼ぶことによって入力コンテクスト ic をリセットする。リセットとは、実際には入力メソッドを初期状態に移すことであり、したがって、もし現在入力中のテキストがあれば、それはコミットされる。 必要ならば、アプリケーションプログラムは minput_lookup() を読んでそのコミットされたテキストを取り出すことができ、その際、 minput_lookup() の引数 |
|
関数 minput_get_description() は、language と name によって指定 された入力メソッドを説明する M-text を返す。
|
|
|
|
関数 minput_get_commands() は、 language と name によって指定さ れた入力メソッドの入力メソッドコマンドに関する情報を返す。入力メソッ ドコマンドとは、疑似キーイベントであり、それぞれに1つ以上の実際の 入力キーシークエンスが割り当てられているものを指す。 コマンドにはグローバルとローカルの2種類がある。グローバルコマンド は複数の入力メソッドにおいて、同じ目的で、グローバルなキー割り当て で用いられる。ローカルコマンドは特定の入力メソッドでのみ、ローカル なキー割当で使用される。 個々の入力メソッドはグローバルコマンドのキー割当を変更することもで きる。グローバルコマンド用のグローバルキー割り当ては、使用する入力 メソッドにおいてそのコマンド用のローカルなキー割当が存在しない場合 にのみ有効である。 name が Mnil であれば、グローバルコマンドに関する情報を返す。この 場合、language は無視される。 name が Mnil でなければ、language と name によって指定される入 力メソッドに置けるローカルなキー割り当てを持つコマンドに関する情報 を返す。
COMMAND-INFO の第一要素のキーは Mtext または Msymbol である。キー が Mtext なら、値はそのコマンドを説明する M-text である。キーが Msymbol なら値は Mnil であり、このコマンドは説明テキストを持たな いことになる。 それ以外の要素が無ければ、このコマンドに対してキーシークエンスが割 り当てられていないことを意味する。そうでなければ、残りの各要素はキ ーとしてMplist を、値としてプロパティリストを持つ。このプロパティ リストのキーは Msymbol であり、値は現在そのコマンドに割り当てられ ている入力キーを表すシンボルである。 返されるプロパティリストはライブラリによって管理されており、呼び出 し側で変更したり解放したりしてはならない。 |
|
関数 minput_assign_command_keys() は、 language と name によって 指定された入力メソッド用の入力メソッドコマンド command に対して、 入力キーシークエンス keyseq を割り当てる。 name が Mnil ならば、 language に関係なく、入力キーシークエンスはグローバルに割り当てら れる。そうでなれば、割り当てはローカルである。 keyseq の各要素はキーとして msymbol を、値として入力キーを表すシ ンボルを持たなくてはならない。
keyseq は この割り当ては、割り当て以降新しくオープンされた入力メソッドから有 効になる。
|
|
関数 minput_get_variables() は、language と name によって指定さ れた入力メソッドの振る舞いを制御する変数のプロパティリスト (MPlist) を返す。このリストは well-formed であり(m17nPlist) 以 下の形式である。
(VARNAME (DOC-MTEXT DEFAULT-VALUE [ VALUE ... ] ) VARNAME (DOC-MTEXT DEFAULT-VALUE [ VALUE ... ] ) ...)
例として、ある入力メソッドが次のような変数を持つ場合を考えよう。
(intvar ("value is an integer" 0 (0 3) 10 20) symvar ("value is a symbol" nil a b c nil) txtvar ("value is an M-text" ""))
|
|
関数 minput_set_variable() は、language と name によって指定された入力メソッドの入力メソッド変数 variable の初期値を、 value に設定する。 デフォルトの初期値は 0 である。 この設定は、新しくオープンされた入力メソッドから有効となる。
|
|
変数 minput_default_driver は内部入力メソッド用のデフォルトのドライバを表す。 メンバ MInputDriver::open_im() は m17n データベース中からタグ < Minput_method, language, name> に合致する入力メソッドを探し、それをロードする。
メンバ MInputDriver::callback_list() は マクロ M17N_INIT() は変数 minput_driver をこのドライバへのポインタに設定し、全ての内部入力メソッドがこのドライバを使うようにする。
したがって、 |
|
|
|
変数 minput_driver は内部入力メソッドによって使用されている入力メ ソッドドライバへのポインタである。マクロ M17N_INIT() はこのポイン タをminput_default_driver (<m17n.h> が include されている 時) に初期化する。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|