Main Page   Modules   Data Structures   Globals   Appendix  

入力メソッド (基本部分)
[シェル API]

入力メソッド用API. [詳細]

データ構造

struct  MInputDriver
 入力ドライバ用構造体. [詳細]
struct  MInputMethod
 入力メソッドの構造体. [詳細]
struct  MInputContext
 入力コンテクスト用構造体. [詳細]

変数: コールバックコマンド用定義済みシンボル.

入力メソッドドライバのコールバック関数において COMMAND 引数として用いられる定義済みシンボル (MInputDriver::callback_list 参照)。

MSymbol Minput_preedit_start
MSymbol Minput_preedit_done
MSymbol Minput_preedit_draw
MSymbol Minput_status_start
MSymbol Minput_status_done
MSymbol Minput_status_draw
MSymbol Minput_candidates_start
MSymbol Minput_candidates_done
MSymbol Minput_candidates_draw
MSymbol Minput_set_spot
MSymbol Minput_toggle
MSymbol Minput_reset
MSymbol Minput_get_surrounding_text
MSymbol Minput_delete_surrounding_text
MSymbol Minput_focus_out
MSymbol Minput_focus_in
MSymbol Minput_focus_move

型定義

typedef MInputMethod MInputMethod
typedef MInputContext MInputContext
typedef void(* MInputCallbackFunc )(MInputContext *ic, MSymbol command)
 入力メソッドコールバック関数の型宣言.

列挙型

enum  MInputCandidatesChanged {
  MINPUT_CANDIDATES_LIST_CHANGED = 1,
  MINPUT_CANDIDATES_INDEX_CHANGED = 2,
  MINPUT_CANDIDATES_SHOW_CHANGED = 4,
  MINPUT_CANDIDATES_CHANGED_MAX
}
 入力メソッドの入力候補がどう変更されたかを示すビットマスク. [詳細]

関数

MInputMethodminput_open_im (MSymbol language, MSymbol name, void *arg)
 入力メソッドをオープンする.
void minput_close_im (MInputMethod *im)
 入力メソッドをクローズする.
MInputContextminput_create_ic (MInputMethod *im, void *arg)
 入力コンテクストを生成する.
void minput_destroy_ic (MInputContext *ic)
 入力コンテクストを破壊する.
int minput_filter (MInputContext *ic, MSymbol key, void *arg)
 入力キーをフィルタする.
int minput_lookup (MInputContext *ic, MSymbol key, void *arg, MText *mt)
 入力コンテクスト中のテキストを探す.
void minput_set_spot (MInputContext *ic, int x, int y, int ascent, int descent, int fontsize, MText *mt, int pos)
 入力コンテクストのスポットを設定する.
void minput_toggle (MInputContext *ic)
 入力メソッドを切替える.
void minput_reset_ic (MInputContext *ic)
 入力コンテクストをリセットする.
MTextminput_get_description (MSymbol language, MSymbol name)
 入力メソッドの説明テキストを得る.
MPlistminput_get_title_icon (MSymbol language, MSymbol name)
MPlistminput_get_command (MSymbol language, MSymbol name, MSymbol command)
int minput_config_command (MSymbol language, MSymbol name, MSymbol command, MPlist *keyseq)
MPlistminput_get_variable (MSymbol language, MSymbol name, MSymbol variable)
int minput_config_variable (MSymbol language, MSymbol name, MSymbol variable, MPlist *value)
int minput_save_config (void)
MPlistminput_get_commands (MSymbol language, MSymbol name)
 入力メソッドのコマンドに関する情報を得る.
int minput_assign_command_keys (MSymbol language, MSymbol name, MSymbol command, MPlist *keyseq)
 入力メソッドコマンドにキーシークエンスを割り当てる.
MPlistminput_get_variables (MSymbol language, MSymbol name)
int minput_set_variable (MSymbol language, MSymbol name, MSymbol variable, void *value)

変数

MInputDriver minput_default_driver
 内部入力メソッド用デフォルトドライバ.
MSymbol Minput_driver
MInputDriverminput_driver
 内部入力メソッド用ドライバ.
MSymbol Minput_preedit_start
MSymbol Minput_preedit_draw
MSymbol Minput_preedit_done
MSymbol Minput_status_start
MSymbol Minput_status_draw
MSymbol Minput_status_done
MSymbol Minput_candidates_start
MSymbol Minput_candidates_draw
MSymbol Minput_candidates_done
MSymbol Minput_set_spot
MSymbol Minput_toggle
MSymbol Minput_reset
MSymbol Minput_get_surrounding_text
MSymbol Minput_delete_surrounding_text
MSymbol Minput_focus_move
MSymbol Minput_focus_in
MSymbol Minput_focus_out
MInputDriver minput_default_driver
 内部入力メソッド用デフォルトドライバ.
MInputDriverminput_driver
 内部入力メソッド用ドライバ.
MSymbol Minput_driver

説明

入力メソッドは多様な文字を入力するためのオブジェクトである。 入力メソッドはシンボル LANGUAGE と NAME の組によって識別され、 この組合せによって入力メソッドドライバが決定する。 入力メソッドドライバとは、ある入力メソッドを扱うための関数の集まりである。 入力メソッドには内部メソッドと外部メソッドの二種類がある。

処理の流れ

入力メソッド処理の典型的な処理は以下のようになる。


型定義

typedef struct MInputMethod MInputMethod

typedef struct MInputContext MInputContext

typedef void(* MInputCallbackFunc)(MInputContext *ic, MSymbol command)

入力メソッドから呼ばれるコールバック関数の型である。IC は入力コンテクストへのポインタ、COMMAND は関数が呼ばれるコールバックの名前である。


列挙型

enum MInputCandidatesChanged

列挙型の値:
MINPUT_CANDIDATES_LIST_CHANGED 
MINPUT_CANDIDATES_INDEX_CHANGED 
MINPUT_CANDIDATES_SHOW_CHANGED 
MINPUT_CANDIDATES_CHANGED_MAX 


関数

MInputMethod * minput_open_im ( MSymbol  language,
MSymbol  name,
void *  arg 
)

関数 minput_open_im() は言語 language と名前 name に合致する入力メソッドをオープンし、新たに割り当てられた入力メソッドオブジェクトへのポインタを返す。

この関数は、まず入力メソッド用のドライバを以下のようにして決定する。

languageMnil でなければ、変数 minput_driver で指されているドライバを用いる。

languageMnil であり、nameMinput_driver プロパティを持つ場合には、そのプロパティの値で指されている入力ドライバを用いて入力メソッドをオープンする。 name にそのようなプロパティが無かった場合は NULL を返す。

次いで、ドライバのメンバ MInputDriver::open_im() が呼ばれる。

arg は構造体 MInputMethod のメンバ arg に設定され、ドライバから参照できる。

void minput_close_im ( MInputMethod im  ) 

関数 minput_close_im() は、入力メソッド im をクローズする。 この入力メソッド imminput_open_im() によって作られたものでなければならない。

MInputContext * minput_create_ic ( MInputMethod im,
void *  arg 
)

関数 minput_create_ic() は入力メソッド im に対応する入力コンテクストオブジェクトを生成し、 Minput_preedit_start, Minput_status_start, Minput_status_draw に対応するコールバック関数をこの順に呼ぶ。

戻り値:
入力コンテクストが生成された場合、minput_create_ic() はその入力コンテクストへのポインタを返す。失敗した場合は NULL を返す。

void minput_destroy_ic ( MInputContext ic  ) 

関数 minput_destroy_ic() は、入力コンテクスト ic を破壊する。 この入力コンテクストは minput_create_ic() によって作られたものでなければならない。この関数は Minput_preedit_done, Minput_status_done, Minput_candidates_done に対応するコールバック関数をこの順に呼ぶ。

int minput_filter ( MInputContext ic,
MSymbol  key,
void *  arg 
)

関数 minput_filter() は入力キー key を入力コンテクスト ic に応じてフィルタし、preedit テキスト、ステータス、現時点での候補が変化した時点で、それぞれ Minput_preedit_draw, Minput_status_draw, Minput_candidates_draw に対応するコールバック関数を呼ぶ。

戻り値:
key がフィルタされれば、この関数は 1 を返す。 この場合呼び出し側はこのキーを捨てるべきである。 そうでなければ 0 を返し、呼び出し側は、たとえば同じキーで関数 minput_lookup() を呼ぶなどして、このキーを処理する。

int minput_lookup ( MInputContext ic,
MSymbol  key,
void *  arg,
MText mt 
)

関数 minput_lookup() は入力コンテクスト ic 中のテキストを探す。 key は関数 minput_filter() への直前の呼び出しに用いられたものと同じでなくてはならない。

テキストが入力メソッドによって生成されていれば、テキストは M-text mt に連結される。

この関数は、MInputDriver::lookup を呼ぶ。

戻り値:
key が入力メソッドによって適切に処理できれば、この関数は 0 を返す。 そうでなければ -1 を返す。 この場合でも mt に何らかのテキストが生成されていることがある。

void minput_set_spot ( MInputContext ic,
int  x,
int  y,
int  ascent,
int  descent,
int  fontsize,
MText mt,
int  pos 
)

関数 minput_set_spot() は、入力コンテクスト ic のスポットを、座標 (x, y ) の位置に 、高さ ascent、 descent で設定する。 これらの値の意味は入力メソッドドライバに依存する。

たとえば CUI 環境で動作するドライバは xy をそれぞれ列と行の番号として用い、ascentdescent を無視するかもしれない。 またウィンドウシステム用のドライバは xy をクライアントウィンドウの原点からのオフセットをピクセル単位で表したものとして扱い、 ascentdescent を (x . y ) の列のアセントとディセントをピクセル単位で表したものとして扱うかもしれない。

fontsize には preedit テキストのフォントサイズを 1/10 ポイント単位で指定する。

mtpos はそのスポットの M-text と文字位置である。mtNULL でもよく、その場合には入力メソッドはスポット周辺のテキストに関する情報を得ることができない。

void minput_toggle ( MInputContext ic  ) 

関数 minput_toggle() は入力コンテクスト ic に対応付けられた入力メソッドをトグルする。

void minput_reset_ic ( MInputContext ic  ) 

関数 minput_reset_ic()Minput_reset に対応するコールバック関数 を呼ぶことによって入力コンテクスト ic をリセットする。リセットとは、 実際には入力メソッドを初期状態に移すことである。現在入力中のテキス トはコミットされることなく削除されるので、アプリケーションプログラ ムは、必要ならば予め minput_filter() を引数 key Mnil で呼んで 強制的にプリエディットテキストをコミットさせること。

MText * minput_get_description ( MSymbol  language,
MSymbol  name 
)

関数 minput_get_description() は、languagename によって指定 された入力メソッドを説明する M-text を返す。

戻り値: 指定された入力メソッドが説明するテキストを持っていれば、
MText へのポインタを返す。呼び出し側は、それを m17n_object_unref () を用いて解放しなくてはならない。入力メソッドに説明テキストが無け ればNULL を返す。

MPlist * minput_get_title_icon ( MSymbol  language,
MSymbol  name 
)

MPlist * minput_get_command ( MSymbol  language,
MSymbol  name,
MSymbol  command 
)

int minput_config_command ( MSymbol  language,
MSymbol  name,
MSymbol  command,
MPlist keyseq 
)

MPlist* minput_get_variable ( MSymbol  language,
MSymbol  name,
MSymbol  variable 
)

int minput_config_variable ( MSymbol  language,
MSymbol  name,
MSymbol  variable,
MPlist value 
)

int minput_save_config ( void   ) 

MPlist * minput_get_commands ( MSymbol  language,
MSymbol  name 
)

関数 minput_get_commands() は、 languagename によって指定さ れた入力メソッドの入力メソッドコマンドに関する情報を返す。入力メソッ ドコマンドとは、疑似キーイベントであり、それぞれに1つ以上の実際の 入力キーシークエンスが割り当てられているものを指す。

コマンドにはグローバルとローカルの2種類がある。グローバルコマンド は複数の入力メソッドにおいて、同じ目的で、グローバルなキー割り当て で用いられる。ローカルコマンドは特定の入力メソッドでのみ、ローカル なキー割当で使用される。

個々の入力メソッドはグローバルコマンドのキー割当を変更することもで きる。グローバルコマンド用のグローバルキー割り当ては、使用する入力 メソッドにおいてそのコマンド用のローカルなキー割当が存在しない場合 にのみ有効である。

nameMnil であれば、グローバルコマンドに関する情報を返す。この 場合、language は無視される。

nameMnil でなければ、languagename によって指定される入 力メソッドに置けるローカルなキー割り当てを持つコマンドに関する情報 を返す。

戻り値:
入力メソッドコマンドが見つからなければ、この関数は NULL を返す。
そうでなければプロパティリストへのポインタを返す。リストの各要素の キーは個々のコマンドを示すシンボルであり、値は下記の COMMAND-INFO の形式のプロパティリストである。

COMMAND-INFO の第一要素のキーは Mtext または Msymbol である。キー が Mtext なら、値はそのコマンドを説明する M-text である。キーが Msymbol なら値は Mnil であり、このコマンドは説明テキストを持たな いことになる。

それ以外の要素が無ければ、このコマンドに対してキーシークエンスが割 り当てられていないことを意味する。そうでなければ、残りの各要素はキ ーとしてMplist を、値としてプロパティリストを持つ。このプロパティ リストのキーは Msymbol であり、値は現在そのコマンドに割り当てられ ている入力キーを表すシンボルである。

返されるプロパティリストはライブラリによって管理されており、呼び出 し側で変更したり解放したりしてはならない。

int minput_assign_command_keys ( MSymbol  language,
MSymbol  name,
MSymbol  command,
MPlist keyseq 
)

関数 minput_assign_command_keys() は、 languagename によって 指定された入力メソッド用の入力メソッドコマンド command に対して、 入力キーシークエンス keyseq を割り当てる。 nameMnil ならば、 language に関係なく、入力キーシークエンスはグローバルに割り当てら れる。そうでなれば、割り当てはローカルである。

keyseq の各要素はキーとして msymbol を、値として入力キーを表すシ ンボルを持たなくてはならない。

keyseqNULL でもよい。この場合、グローバルもしくはローカルな すべての割り当てが消去される。

この割り当ては、割り当て以降新しくオープンされた入力メソッドから有 効になる。

戻り値: 処理が成功すれば 0 を返す。そうでなければ -1 を返し、
merror_codeMERROR_IM に設定する。

MPlist* minput_get_variables ( MSymbol  language,
MSymbol  name 
)

int minput_set_variable ( MSymbol  language,
MSymbol  name,
MSymbol  variable,
void *  value 
)


変数

MInputDriver minput_default_driver

変数 minput_default_driver は内部入力メソッド用のデフォルトのドライバを表す。

メンバ MInputDriver::open_im() は m17n データベース中からタグ < Minput_method, language, name> に合致する入力メソッドを探し、それをロードする。

メンバ MInputDriver::callback_list()NULL であり、 したがって、プログラマ側で責任を持って 適切なコールバック関数の plist に設定しなくてはならない。さもないと、preedit テキストなどのフィードバック情報がユーザに表示されない。

マクロ M17N_INIT() は変数 minput_driver をこのドライバへのポインタに設定し、全ての内部入力メソッドがこのドライバを使うようにする。

したがって、minput_driver がデフォルト値のままであれば、minput_ で始まる関数のドライバに依存する引数 arg はすべて無視される。

MSymbol Minput_driver

MInputDriver* minput_driver

変数 minput_driver は内部入力メソッドによって使用されている入力メ ソッドドライバへのポインタである。マクロ M17N_INIT() はこのポイン タをminput_default_driver (<m17n.h> が include されている 時) に初期化する。

MSymbol Minput_preedit_start

MSymbol Minput_preedit_draw

MSymbol Minput_preedit_done

MSymbol Minput_status_start

MSymbol Minput_status_draw

MSymbol Minput_status_done

MSymbol Minput_candidates_start

MSymbol Minput_candidates_draw

MSymbol Minput_candidates_done

MSymbol Minput_set_spot

MSymbol Minput_toggle

MSymbol Minput_reset

MSymbol Minput_get_surrounding_text

MSymbol Minput_delete_surrounding_text

MSymbol Minput_focus_move

MSymbol Minput_focus_in

MSymbol Minput_focus_out

MSymbol Minput_preedit_start

MSymbol Minput_preedit_done

MSymbol Minput_preedit_draw

MSymbol Minput_status_start

MSymbol Minput_status_done

MSymbol Minput_status_draw

MSymbol Minput_candidates_start

MSymbol Minput_candidates_done

MSymbol Minput_candidates_draw

MSymbol Minput_set_spot

MSymbol Minput_toggle

MSymbol Minput_reset

MSymbol Minput_get_surrounding_text

MSymbol Minput_delete_surrounding_text

MSymbol Minput_focus_out

MSymbol Minput_focus_in

MSymbol Minput_focus_move

MInputDriver minput_default_driver

変数 minput_default_driver は内部入力メソッド用のデフォルトのドライバを表す。

メンバ MInputDriver::open_im() は m17n データベース中からタグ < Minput_method, language, name> に合致する入力メソッドを探し、それをロードする。

メンバ MInputDriver::callback_list()NULL であり、 したがって、プログラマ側で責任を持って 適切なコールバック関数の plist に設定しなくてはならない。さもないと、preedit テキストなどのフィードバック情報がユーザに表示されない。

マクロ M17N_INIT() は変数 minput_driver をこのドライバへのポインタに設定し、全ての内部入力メソッドがこのドライバを使うようにする。

したがって、minput_driver がデフォルト値のままであれば、minput_ で始まる関数のドライバに依存する引数 arg はすべて無視される。

MInputDriver* minput_driver

変数 minput_driver は内部入力メソッドによって使用されている入力メ ソッドドライバへのポインタである。マクロ M17N_INIT() はこのポイン タをminput_default_driver (<m17n.h> が include されている 時) に初期化する。

MSymbol Minput_driver


このページの先頭

Main Page   Modules   Data Structures   Globals   Appendix  

mulemark mule-aist@m17n.org