内部入力メソッドは 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 に対応するコールバック関 数をこの順に呼ぶ。
NULL を返す。 |
|
関数 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 で設定する。 これらの値の 意味は入力メソッドドライバに依存する。fontsize はpreedit テキスト のフォントサイズを 1/10 ポイント単位で指定する。 たとえば CUI 環境で動作するドライバは x と y をそれぞれ列と行の 番号として用い、ascent と descent を無視するかもしれない。 また ウィンドウシステム用のドライバは x と y をクライアントウィンドウ の原点からのオフセットをピクセル単位で表したものとして扱い、 ascent と descent を (x . y ) の列のアセントとディセントをピク セル単位で表したものとして扱うかもしれない。
mt と pos はそのスポットの M-text と文字位置である。mt は |
|
関数 minput_toggle() は入力コンテクスト ic に対応付けられた入力 メソッドをトグルする。 |
|
関数 minput_reset_ic() は Minput_reset に対応するコールバック関数 を呼ぶことによって入力コンテクスト ic をリセットする。これは実際は 入力メソッドを初期状態にシフトさせる。したがって、もし現在入力中の テキストがあれば、それはコミットされる。必要ならアプリケーションプ ログラムは minput_lookup() を読んでそのテキストを取り出せる。その 際、minput_lookup() の引数 |
|
入力ドライバ 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> が含まれる時) または minput_gui_driver ( <m17n-gui.h> が含まれる時) に初期化す る。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
入力ドライバ 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> が含まれる時) または minput_gui_driver ( <m17n-gui.h> が含まれる時) に初期化す る。 |
|
|