Main Page   Modules   Data Structures   Globals   Appendix  

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

入力メソッド用API. More...

Data Structures

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

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

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

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_in
MSymbol Minput_focus_move

Typedefs

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

Enumerations

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

Functions

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_commands (MSymbol language, MSymbol name)
 入力メソッドのコマンドに関する情報を得る.
int minput_assign_command_keys (MSymbol language, MSymbol name, MSymbol command, MPlist *keys)
 入力メソッドコマンドにキーシークエンスを割り当てる.
MPlistminput_get_variables (MSymbol language, MSymbol name)
 入力メソッドの変数リストを得る.
int minput_set_variable (MSymbol language, MSymbol name, MSymbol variable, void *value)
 入力メソッド変数の初期値を設定する.

Variables

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

Detailed Description

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

処理の流れ

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


Typedef Documentation

typedef struct MInputMethod MInputMethod
 

typedef struct MInputContext MInputContext
 

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

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

typedef struct MInputDriver MInputDriver
 

MInputDriver は、入力メソッドを取り扱う関数を含む入力メソッドドライバの構造体の型である。


Enumeration Type Documentation

enum MInputCandidatesChanged
 

Enumerator:
MINPUT_CANDIDATES_LIST_CHANGED 
MINPUT_CANDIDATES_INDEX_CHANGED 
MINPUT_CANDIDATES_SHOW_CHANGED 
MINPUT_CANDIDATES_CHANGED_MAX 


Function Documentation

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_lookup() を読んでそのコミットされたテキストを取り出すことができ、その際、 minput_lookup() の引数 KEYARG は無視される。

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_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
 

関数 minput_get_variables() は、languagename によって指定さ れた入力メソッドの振る舞いを制御する変数のプロパティリスト (MPlist) を返す。このリストは well-formed であり(m17nPlist) 以 下の形式である。

    (VARNAME (DOC-MTEXT DEFAULT-VALUE [ VALUE ... ] )
     VARNAME (DOC-MTEXT DEFAULT-VALUE [ VALUE ... ] )
     ...)

VARNAME は変数の名前を示すシンボルである。

DOC-MTEXT は変数を説明する M-text である。

DEFAULT-VALUE は変数のデフォルト値であり、シンボル、整数もしくは M-text である。

VALUE は、もし指定されていれば変数の取り得る値を示す。もし DEFAULT-VALUE が整数なら、 VALUE は (FROM TO) という形 のリストでも良い。この場合 FROMTO は可能な値の範囲を示す。

例として、ある入力メソッドが次のような変数を持つ場合を考えよう。

  • name:intvar, 説明:"value is an integer", 初期値:0, 値の範囲:0..3,10,20
  • name:symvar, 説明:"value is a symbol", 初期値:nil, 値の範囲:a, b, c, nil
  • name:txtvar, 説明:"value is an M-text", 初期値:empty text, 値の範囲なし(どんな M-text でも可)
この場合、返されるリストは以下のようになる。

    (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" ""))

戻り値:
入力メソッドが何らかの変数を使用していれば MPlist へのポインタを返す。 返されるプロパティリストはライブラリによって管理されており、呼び出し側で変更したり解放したりしてはならない。 入力メソッドが変数を一切使用してなければ、NULL を返す。

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

関数 minput_set_variable() は、languagename によって指定された入力メソッドの入力メソッド変数 variable の初期値を、 value に設定する。

デフォルトの初期値は 0 である。

この設定は、新しくオープンされた入力メソッドから有効となる。

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


Variable Documentation

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_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_in
 

MSymbol Minput_focus_move
 


このページの先頭

Main Page   Modules   Data Structures   Globals   Appendix  

mulemark mule-aist@m17n.org