適当に翻訳する。
関数「_XOpenLC()」や構造体「XLCd」の「LC」とは何なのか?
「Locale Code」「Locale Converter」「Locale Character set」などだと思っていたが、調べてみたら全然違った。
「Locale」の略らしい。
----------
X11R6.8.0/xc/doc/hardcopy/i18n/Framework.PS.gz (日本語訳)によると、
Generally speaking, the internationalized portion of Xlib (Locale Dependent X, LDX) consists of three objects; locale (LC) , input method (IM) and output method (OM). The LC provides a set of information that depends on user's language environment. The IM manages text inputing, and the OM manages text drawing. Both IM and OM highly depend on LC data.
基本的には、Xlib の国際化されている部分(ロケール依存の X、Locale Dependent X、LDX)は、3つの部品(object)から成る。即ち、ロケール(locale、LC)、入力メソッド(input method、IM)、及び出力メソッド(output method、OM)である。LC は、ユーザの言語環境に依存する情報一式を提供する。IM はテキスト入力を管理し、OM はテキストの描画を管理する。IM と OM は、両者とも LC のデータ(LC data)に大きく依存している。
とのこと。
つまり、「LC」=「LoCale」、「IM」=「Input Method」、「OM」=「Output Method」。
また、X11R7.7/lib/libX11-1.5.0/src/xlibi18n/Xlcint.h において、
215行目から、
/*
* define an LC, it's methods, and data.
*/
338行目から、
typedef struct _XLCd {
XLCdMethods methods; /* methods of this LC */
XLCdCore core; /* data of this LC */
XPointer opaque; /* LDX specific data */
} XLCdRec;
したがって、「LCd」=「LoCale」の「data」だと思われる。
XFilterEvent は、入力メソッドのために X イベントのフィルタ処理を行うものである。
XFilterEvent の実際の動作は、条件に合う限りの個数だけ、登録してある XFilterEventProc 型の関数を呼び出すというものである。
実行される関数の登録作業を行っているコードは、次のファイルの中にある。
X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imLcIc.c
X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imRm.c
X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imInsClbk.c
X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imTrX.c
X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imDefFlt.c
登録には _XRegisterFilterByType 関数もしくは _XRegisterFilterByMask 関数を使う。
登録されている関数(実際に True や False を返す関数)の定義は、次のファイルの中にある。
「_XimLocalFilter」・・・X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imLcFlt.c
「_XimFilterPropertyNotify」・・・X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imInsClbk.c
「_XimXFilterWaitEvent」・・・/lib/libX11-1.5.0/modules/im/ximcp/imTrX.c
True・False の実際の判定作業は「_XimFilterWaitEvent」・・・X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imTransR.c に任せる。
「_XimFilterKeypress」・・・X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imDefFlt.c
実際の判定作業は同ファイル内の「_XimProtoKeypressFilter」に任せる。
「_XimFilterKeyrelease」・・・X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imDefFlt.c
実際の判定作業は同ファイル内の「_XimProtoKeyreleaseFilter」に任せる。
「_XimFilterServerDestroy」・・・X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imDefFlt.c
「_XimThaiFilter」・・・X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imThaiFlt.c
「_XimTransFilterWaitEvent」・・・X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imTrans.c
実際の判定作業は、「_XimFilterWaitEvent」・・・X11R7.7/lib/libX11-1.5.0/modules/im/ximcp/imTransR.c に任せる。
----------
X 環境で IM サーバを実装するには、IMdkit を使う。
0 から自分でコードを書く必要は無い。
IMdkit の API は、「IM Server Developers Kit - C Language Interface(日本語訳)」にある。
ai56go 氏の「XIM(X Input Method)日本語入力の流れ」が参考になる。
カレンダー
カテゴリー
最新コメント
最新記事
ブログ内検索
広告