このドキュメントでは,Compaq のプラットホーム上で,X11R6 XIM ライブラリを使用してクライアントと通信するための X11R6 入力サーバを作成する際に必要な情報を記述します。
Tru64 UNIX オペレーティング・システムでは,通信メカニズムに関する詳しい知識がなくても入力サーバを作成できるようなアプリケーション・プログラミング・インタフェース (API) を提供しています。
名前 | 説明 |
---|---|
IMS (Input Method Server) | 入力サーバ。XIM ライブラリからの入力キー・イベントおよびプロトコルを受信および処理し,前編集と文字列の確定を行うプロセスです。 |
IMSSL (Input Method Server Service Layer) | IMS の開発に必要なすべての API が含まれている層です。 |
DECXim プロトコル | DEC の入力メソッド・プロトコルです。 |
IMS プログラマ | IMS の開発者です。 |
DIMs ウィジェット (Digital Input Method Server widget) | クライアントが XCreateIC() を実行するときに作成されるウィジェットです。DIMs ウィジェットは,クライアントの XIC オブジェクトを処理する基本単位です。 |
DIM クラス | DIMs ウィジェットの特性と動作を決定するオブジェクトです。IMS プログラマはこの DIMs クラスにリソースを設定します。 |
日本語,中国語,韓国語といったアジア言語環境では文字入力メソッドが複雑なため,文字入力メソッド部分は通常,アプリケーションから独立したサーバ・プロセスとして構成されます。ウィンドウ環境においては,入力サーバ (IMS) がその役割を受け持ちます。
Tru64 UNIX では入力サーバとクライアント間の通信は R6 XIM プロトコルで行われます。クライアント側では X ライブラリ (Xlib),X ツールキット・ライブラリ (Xt) および Motif ライブラリ (Xm) を使用することによって R6 XIM プロトコルを扱うことができます。しかし入力サーバ側にはそのような上位レベルのプログラミング・インタフェースは提供されていませんでした。
クライアントが XOpenIM() を呼び出すと,IM ライブラリと IMSSL との間の接続が行われます。IMSSL は接続を行い,IM ライブラリ・コンテキストを作成し,クライアントに対する XIMID を生成します。クライアントは,XCreateIC() を使用して各入力テキスト・フィールドに対応する入力コンテキスト (IC) を作成します。
クライアントが複数の入力フィールドを持っている場合,IMSSL は個々の入力フィールドを管理するためにフィールドと同数の IC を作成し,有効な XICID を生成します。さらに,個々の IC に対応する DIMs ウィジェットが作成されます。この DIMs ウィジェットは,IMS プログラマによってコールバック・ルーチンなどのリソースで設定される DIMs クラスの動作を継承します。このように,IMSSL の IM および IC のコンテキストが IMS プログラマに対して透過的になっています。このため,IMS プログラマはそれぞれの DIMs ウィジェットを扱い,IMS のスタートアップ時に DIMs クラスのリソースを設定するだけでよいのです。
図 1-1 に,IMSSLの構造と各構成要素の関係を示します。
イベント処理モデルには,FrontEnd メソッドおよび BackEnd メソッドの 2 種類があります。
FrontEnd メソッドでは,クライアント・ウィンドウの入力イベントは,X サーバによって IMS ライブラリと XIM ライブラリの両方に直接渡されます。FrontEnd メソッドは,対話式の前編集において優れた性能を提供します。ただし FrontEnd モデルでは,IMS が処理するキー・イベントとクライアントが処理する他のイベントとの間で,同期化の問題が発生します。このため,FrontEnd メソッドではキー・イベントの損失または重複が発生することがあります。
BackEnd メソッドでは,クライアント・ウィンドウの入力イベントは,XIM ライブラリに渡したあと IMS に渡されます。各イベントは渡された順でシリアルに処理されるため,XIM ライブラリと IMS ライブラリとの間で同期化の問題は発生しません。BackEnd メソッドを使用すると,IM ライブラリは,すべての KeyPress と KeyRelease,およびイベント・フロー制御で必要とするその他のイベントを IMS に転送し,IMS と同期をとります。
R6 XIM および R5 DECXim プロトコルは,BackEnd モデルのみをサポートしています。
R6 XIM および R5 DECXim プロトコルは,XIM ライブラリと IMS 間の通信のために静的イベント・フローおよび動的イベント・フローの 2 種類のイベント・フロー・モデルをサポートしています。
静的イベント・フローでは,入力キー・イベントがクライアントから IMS に常に送信されます。
動的イベント・フローでは,処理が必要なキー・イベントだけがクライアントから IMS に送信されます。たとえば,ASCII 文字と漢字を組み合わせて入力する場合,ASCII 文字は IMS で処理する必要はないのでキー・イベントを IMS に送信する必要はありませんが,漢字を形成するために必要なキー・イベントは IMS に送信しなければなりません。
動的イベント・フロー・モデルをサポートするには,IMS プログラマはトリガ・オン・キー・リストをクライアントに送信する必要があります (詳細は,第1.4.8項を参照)。クライアントは,トリガ・オン・キー・リストに含まれるキーを受信して初めて,キー・イベントを IMS に送信します。IMS プログラマがトリガ・オフ・キー・リストを提供している場合,トリガ・オフ・キー・リストに含まれるキーを受信すると,クライアントは IMS へのイベントの送信を停止します。IMS がトリガ・オフ・キー・リストを提供していない場合,IMS はトリガ・オフ・キーをチェックするために API を呼び出し,イベント・フローを停止します。詳細は,第1.5節の DIMsSetEventsForward の項を参照してください。
IMS は,クライアントからの接続のために 1 つまたは複数のアトムを登録します。クライアントは,ロケール情報と環境変数 XMODIFIERS から特定の IMS と接続しようとします。たとえば,XMODIFIERS が @im=wnn でロケールが ja_JP.SJIS の場合,クライアントは _XIM_ja_JP.SJIS@wnn というアトムを検索します。このアトムが検出できない場合,クライアントは _XIM_ja_JP@wnn というアトムを探します。このアトムも検出できない場合は,接続が失敗したとみなされます。XMODIFIERS 環境変数が設定されていない場合,クライアントは _XIM_ja_JP.SJIS@DEC および _XIM_ja_JP@DEC を検索します。これらは DEC が提供する IMS のサーバ名です。サーバ名の設定方法についての詳細は,第1.4.2項を参照してください。
Tru64 UNIX の IMSSL は,IMS の開発者に以下のような機能を提供します。
各 DIMs ウィジェットは,ウィジェット自身の動作を決定する一連のデータを持っています。これを DIMs クラスと呼びます。この節では,DIMs クラスの各リソースの意味とその使用方法を説明します。
次の表に,プログラマがデータを指定するために使用する DIMs クラスのリソースを示します。各リソースは,DIMsSetTriggerKeys() を使用して設定および変更を行う DIMsNtriggerKeys を除いて,DIMsClassCtxCreate() 使用時にのみ設定できます。DIMsClassCtxCreate() および DIMsSetTriggerKeys() については,第1.5節を参照してください。
次の表の備考の欄は,DIMs クラスの作成時にリソースの設定が必須 (M) であるか,あるいは任意 (O) であるかを示しています。
名前 | 省略時の値 | タイプ | 備考 |
---|---|---|---|
DIMsNlocale | NULL | DIMsLocaleInfo | M |
DIMsNserverName | NULL | DIMsStringList | M |
DIMsNversion | 動的 | DIMsVersion | O |
DIMsNextIMAttr | NULL | DIMsExtAttr | O |
DIMsNextICAttr | NULL | DIMsExtAttr | O |
DIMsNsupportStyles | NULL | DIMsSupportStyles | M |
DIMsNsupportEncodings | Compound Text | DIMssStringList | O |
DIMsNtriggerKeys | NULL | DIMsTriggerKeys | O |
DIMsNgetExtIMValuesCb | NULL | XPointer | O |
DIMsNcreateICCb | NULL | XPointer | O |
DIMsNdestroyICCb | NULL | XPointer | O |
DIMsNsetExtICValuesCb | NULL | XPointer | O |
DIMsNgetExtICValuesCb | NULL | XPointer | O |
DIMsNsetICFocusCb | NULL | XPointer | O |
DIMsNunsetICFocusCb | NULL | XPointer | O |
DIMsNresetICCb | NULL | XPointer | O |
DIMsNprocessEventCb | NULL | XPointer | M |
DIMsNsetAreaCb | NULL | XPointer | O |
DIMsNsetAreaNeededCb | NULL | XPointer | O |
DIMsNsetSpotLocationCb | NULL | XPointer | O |
DIMsNsetColormapCb | NULL | XPointer | O |
DIMsNsetStdColormapCb | NULL | XPointer | O |
DIMsNsetForegroundCb | NULL | XPointer | O |
DIMsNsetBackgroundCb | NULL | XPointer | O |
DIMsNsetBgPixmapCb | NULL | XPointer | O |
DIMsNsetFontSetCb | NULL | XPointer | O |
DIMsNsetLineSpaceCb | NULL | XPointer | O |
DIMsNsetCursorCb | NULL | XPointer | O |
DIMsNgetFilterEventsCb | 動的 | XPointer | O |
DIMsNgetAreaCb | NULL | XPointer | O |
DIMsNgetAreaNeededCb | NULL | XPointer | O |
DIMsNgetSpotLocationCb | NULL | XPointer | O |
DIMsNgetColormapCb | NULL | XPointer | O |
DIMsNgetStdColormapCb | NULL | XPointer | O |
DIMsNgetForegroundCb | NULL | XPointer | O |
DIMsNgetBackgroundCb | NULL | XPointer | O |
DIMsNgetBgPixmapCb | NULL | XPointer | O |
DIMsNgetFontSetCb | NULL | XPointer | O |
DIMsNgetLineSpaceCb | NULL | XPointer | O |
DIMsNgetCursorCb | NULL | XPointer | O |
DIMsNclientdata | NULL | XPointer | O |
以下の項で,これらのリソースについて説明します。
DIMs ウィジェットがサポートするロケールを指定します。このリソースの値は DIMsLocaleInfo 型で,次の構造体へのポインタです。
typedef struct_DIMsLocaleInfo { char *language; short num_support_codesets; char **support_codesets; } DIMsLocaleInfoRec, *DIMsLocaleInfo;
language フィールドには言語とテリトリを指定します。指定する値は,たとえば ja_JP のように,XNLS に準拠しているものでなければなりません。DIMs ウィジェットが複数のコードセットをサポートしている場合は,ヌル終了文字列の配列として support_codesetsフ ィールドを指定してください。たとえば日本語 DIMs ウィジェットの場合,support_codesets には eucJP,SJIS を指定することができます。DIMs ウィジェットがすべてのコード・セットをサポートする場合は,num_support_encodings に 0 を,support_codesets に NULL を指定してください。クライアントが IMS に接続された後,クライアントのロケールは DIMsLocale(w) を使用して得ることができます。DIMsLocale についての詳細は,第1.5節を参照してください。
このリソースは DIMs クラスの作成に必須です。
接続に使用される一連のアトム名を指定します。このリソースの値は,DIMsStringList 型で,次の構造体へのポインタです。
typedef struct_DIMsStringList { short num_of_strings; char **string_names; } DIMsStringListRec, *DIMsStringList;
num_of_strings フィールドには,接続に使用される別名の数を指定します。string_names フィールドには,接続に使用されるアトムの名前を指定するヌル終了文字列の配列を指定します。たとえば Tru64 UNIX では,日本語IMSの省略時の名前は DEC であり,次のようなアトムが作成されます。
_XIM_ja_JP@DEC
@DEC で終わるアトムは DEC 専用ですので,同じ名前でアトムを作成しないでください。Tru64 UNIX XIM と IMS との接続方法については,第1.3.2項および第1.3.3項を参照してください。
このリソースは DIMs クラスの作成に必須です。
DIMs ウィジェットがサポートする IM プロトコルのバージョンを範囲で指定します。このリソースの値は DIMsVersion 型で,次の構造体へのポインタです。
typedef struct_DIMsVersion { short highest_major_version; short highest_minor_version; short lowest_major_version; short lowest_minor_version; } DIMsVersionRec, *DIMsVersion;
highest_major_versionフィールドには,DIMs クラスがサポートする IM プロトコルの最高メジャー・バージョンを指定します。
highest_minor_version フィールドには,DIMs クラスがサポートする IM プロトコルの最高マイナー・バージョンを指定します。
lowest_major_version フィールドには,DIMs クラスがサポートする IM プロトコルの最低メジャー・バージョンを指定します。
lowest_major_version フィールドには,DIMs クラスがサポートする IM プロトコルの最低マイナー・バージョンを指定します。
本バージョンでは通常次のように設定します。
このリソースは任意です。
DIMs ウィジェットがサポートする拡張 XIM 属性 (XIM 値) を指定します。このリソースが指定されると,クライアントは,これらの拡張 XIM 値に対して XGetIMValues() を使用することができます。このリソースの値は DIMsExtAttr 型で,次の構造体へのポインタです。
typedef struct_DIMsExtAttr { short num_of_ext_attr; Attr ext_attr; } DIMsExtAttrRec, *DIMsExtAttr;
num_of_ext_attr フィールドには,拡張 XIM 属性の数を指定します。ext_attr フィールドには,拡張 XIM の属性の配列を指定します。このフィールドの値は Attr 型で,次の構造体へのポインタです。
typedef struct_Attr { unsigned short type; char *attributes; } AttrRec, *Attr;
type フィールドには,属性の型を定義する次のいずれかの値を指定します。
#define byte_t 1 /* 8 ビット符号なし整数*/ #define word_t 2 /* 16 ビット符号なし整数 */ #define long_t 3 /* 32 ビット符号なし整数 */ #define string_t 4 /* char の配列 */ #define window_t 5 /* Window フォーマット */ #define ximstyles_t 10 /* XIMStyles フォーマット */ #define xrectangle_t 11 /* XRectangle フォーマット */ #define xpoint_t 12 /* XPoint フォーマット */ #define xfontset_t 13 /* XFontSet フォーマット */
attributes フィールドには,拡張 XIM 値の名前を定義します。この値はヌル終了文字列でなければなりません。
このリソースは任意です。
DIMs ウィジェットがサポートする拡張 XIC 属性 (XIC 値) を指定します。このリソースが指定されると,クライアントはこれらの拡張 XIC 値に対して XGetICValues() および XSetICValues() を使用することができます。このリソースの値は DIMsExtAttr 型で,次の構造体へのポインタです。
typedef struct_DIMsExtAttr { short num_of_ext_attr; Attr ext_attr; } DIMsExtAttrRec, *DIMsExtAttr;
num_of_ext_attr フィールドには,拡張 XIC 属性の数を指定します。ext_attr フィールドには,拡張 XIC の配列を指定します。このフィールドの値は Attr 型で,次の構造体へのポインタです。
typedef struct_Attr { unsigned short type; char *attributes; } AttrRec, *Attr;
type フィールドには,属性のタイプを定義する次のいずれかの値を指定します。
#define byte_t 1 /* 8 ビット符号なし整数*/ #define word_t 2 /* 16 ビット符号なし整数*/ #define long_t 3 /* 32 ビット符号なし整数*/ #define string_t 4 /* char の配列*/ #define window_t 5 /* Window フォーマット*/ #define ximstyles_t 10 /* XIMStyles フォーマット*/ #define xrectangle_t 11 /* XRectangle フォーマット*/ #define xpoint_t 12 /* XPoint フォーマット*/ #define xfontset_t 13 /* XFontSet フォーマット*/
attributes フィールドには,拡張 XIC 値の名前を定義します。この値はヌル終了文字列でなければなりません。
このリソースは任意です。
DIMs ウィジェットがサポートする入力スタイルを指定します。このリソースの値は DIMsSupportStyles 型で,次の構造体へのポインタです。
typedef struct_DIMsSupportStyles { short num_support_styles; XIMStyle *support_styles; } DIMsSupportStylesRec, *DIMsSupportStyles;
num_support_styles フィールドには,サポートする入力スタイルの数を指定します。support_styles フィールドには,XIMStyle の配列を指定します。
クライアントが IMS と接続したら,クライアントが選択した入力スタイルを DIMsInputStyle(w) を使用して得ることができます。DIMsInputStyle についての詳細は第1.5節を参照してください。
このリソースは必須です。
DIMs ウィジェットがサポートするエンコーディングを指定します。XIM ライブラリは IMS に対して,確定した文字列または前編集の文字列に使用するエンコーディングを決定するよう要求します。IMS は省略時のエンコーディングとして少なくとも COMPOUND_TEXT をサポートする必要があります。このリソースの値は DIMsStringList 型で,次の構造体へのポインタです。
typedef struct_DIMsStringList { short num_of_strings; char **string_names; } DIMsStringListRec, *DIMsStringList;
num_of_strings フィールドには,サポートするエンコーディングの数を指定します。
string_names フィールドには,DIMs ウィジェットのエンコーディングを優先順位の高い順に定義するヌル終了文字列の配列を指定します。たとえば,通信のためのエンコーディングとして STRING を使用したい場合,string_names フィールドに STRING,COMPOUND_TEXT の順でエンコーディングを指定します。XIM ライブラリが STRING エンコーディングをサポートする場合は STRING が通信に使用され,STRING エンコーディングをサポートしない場合は COMPOUND_TEXT が使用されます。
これらの 2 つのフィールドが指定さていない場合,XIM ライブラリはエンコーディングとして COMPOUND_TEXT を使用します。クライアントが IMS と接続したら,サポートされているエンコーディングは DIMsEncoding(w) を使用して得ることができます。DIMsEncoding についての詳細は,第1.5節を参照してください。
IMS のトリガ・キーのオン/オフを指定します。このリソースの値は DIMsTriggerKeys 型で,次の構造体へのポインタです。
typedef struct_DIMsTriggerKeys { short num_of_on_keys; XIMTriggerkey on_keys; short num_of_off_keys; XIMTriggerkey off_keys; } DIMsTriggerKeysRec, *DIMsTriggerKeys;
on_keys には,入力メソッドをトリガ・オンできるキーのリストを指定します。num_of_on_keys には,リストに含まれるキーの数を指定します。
off_keys には,入力メソッドをトリガ・オフさせるキーのリストを指定します。num_of_off_keys には,リストに含まれるキーの数を指定します。
XIMTriggerkey は次の構造体へのポインタです。
typedef struct_XIMTriggerkey { KeySym keysym; unsigned long modifier; unsigned long modifier_mask; } XIMTriggerkeyRec, *XIMTriggerkey;
keysym フィールドには,たとえば XK_SPACE のような,入力メソッドをトリガ・オン/オフさせるためのキーシンボルを指定します。
modifier フィールドには,トリガ・キー・シーケンスのキー・マスクを指定します。ShiftMask,ControlMask,Mod1Mask (コンポーズ・マスク),あるいはこれらの組み合わせのいずれかです。
modifier_mask は,KeyPress イベントがトリガ・キーであるかどうかの評価に使用されるマスクです。たとえば,トリガー・オン (開始変換) キーが Ctrl 〜 Shift<key> スペースである場合,有効なトリガ・オン・キーの修飾子の状態は,ControlMask に対しては on,ShiftMask に対しては off です。したがって,modifier_mask フィールドを ControlMask | ShiftMask と設定するのに対して,modifier フィールドは ControlMask と設定します。
入力メソッドのトリガ・オン/オフのテストのため,受け入れるどのキー・イベントの修飾子も,最初に modifier_mask によってマスキングされます。この処理の結果は,修飾子の値と等しくなければなりません。
このリソースは,DIMsSetTriggerKeys() を呼び出すことによりいつでも変更することができます。DIMsSetTriggerKeys についての詳細は,第1.5節を参照してください。
このリソースは任意です。このリソースを指定しない場合は静的イベント・フローが使用されるため,すべてのイベントがクライアントから IMS に転送されます。イベント・フロー・モデルについての詳細は,第1.3.3項を参照してください。
拡張 XIM 属性の値を得るために,クライアントが XGetIMValues を呼び出すときに呼び出されるコールバックを指定します。詳細については,第1.5節を参照してください。
このリソースは任意です。
クライアントが XCreateIC を呼び出すときに呼び出されるコールバックを指定します。このコールバックを呼び出す前に DIMs ウィジェットが作成されます。IMS プログラマは,すべての初期化作業を行い,通常は DIMs ウィジェットに対応する入力メソッド特定データを作成する必要があります。詳細については,第1.5節を参照してください。
このリソースは任意です。
クライアントが XDestroyIC を呼び出すときに呼び出されるコールバックを指定します。IMS プログラマは,DIMs ウィジェット作成時に作成したすべてのデータを解放しなければなりません。詳細については,第1.5節を参照してください。
このリソースは任意です。
拡張 XIC 属性の値を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
拡張 XIC 属性の値を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
クライアントが XSetICFocus を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
クライアントが XUnsetICFocus を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
クライアントが XmbResetIC または XwcResetIC を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
クライアントが IMS に要求されたイベントを転送するときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは必須です。
XIC 属性の 1 つとして XNArea を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNAreaNeeded を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNSpotLocation を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNColormap を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNStdColormap を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNForeground を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNBackground を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNBackgroundPixmap を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNFontSet を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNLineSpace を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNCursor を設定するために,クライアントが XSetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNFilterEvents を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。このリソースが指定されない場合,IMSSL は KeyPressMask | KeyReleaseMask をクライアントに返します。
XIC 属性の 1 つとして XNArea を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNAreaNeeded を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNSpotLocation を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNColormap を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNStdColormap を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNForeground を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNBackground を設定するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNBackgroundPixmap を設定するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNFontSet を取得するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNLineSpace を設定するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
XIC 属性の 1 つとして XNCursor を設定するために,クライアントが XGetICValues を呼び出すときに呼び出されるコールバックを指定します。詳細は,第1.5節を参照してください。
このリソースは任意です。
上記のコールバック・ルーチンへの引数の 1 つとして渡されるクライアント・データを指定します。
このリソースは任意です。
この節では,コールバック・ルーチンを含む IMSSL のすべてのパブリック・ルーチンの使用方法を記述します。
DIMs ウィジェットで使用するクラス・コンテキストを作成する関数です。
DIMsClassCtx DIMsClassCtxCreate (head, name, arglist, argcount)
DIMsClassCtx | head; |
char | *name; |
ArgList | arglist; |
Cardinal | argcount; |
head | DIMs クラス・コンテキスト・リストのヘッドを指定します。この関数をはじめて呼び出す場合は,NULL 値を渡すことができます。別のクラス・コンテキストを作成する場合には,最初の呼び出しに対する戻り値をこの関数に渡す必要があります。 |
name | DIMs クラス名を指定します。DIMs クラス名は呼び出し後に解放されるヌル終了文字列でなければなりません。 |
arglist | DIMs クラスのリソースの名称と値を含む引数リストを指定します。リソースに割り当てられたメモリは,呼び出した後に解放することができます。 |
argcount | 引数リスト内の引数の数を指定します。 |
このルーチンは,DIMsClassInitialize() が呼び出される前に,最低 1 回呼び出す必要があります。
DIMs クラスのリソースの完全な定義については,第1.4節を参照してください。
DEC 入力サーバ・サービス層を初期化する関数です。
void DIMsSLInitialize (toplevel, ctx)
Widget | toplevel; |
DIMsClassCtx | ctx; |
toplevel | (XtAppInitialize() などによって返される) アプリケーション・シェル・ウィジェットのウィジェット ID を指定します。 |
ctx | DIMs ウィジェット・クラス・リストのヘッドを指定します。 |
プロトコル層を初期化する関数です。
void DIMsProtoInit (toplevel, app_context)
Widget | toplevel; |
XtAppContext | app_context; |
toplevel | (XtAppInitialize() などによって返される) アプリケーション・シェル・ウィジェットのウィジェット ID を指定します。toplevel は,この関数が呼び出される前に実現されていなければなりません。 |
app_context | IMS のアプリケーション・コンテキストを指定します。IMS プログラマは,XtAppInitialize() または Intrinsics アプリケーション・コンテキスト初期化ルーチンを使用することによって,IMS アプリケーション・コンテキストを得ることができます。 |
DIMs ウィジェットに対応する入力コンテキストの前編集セッションを開始する関数です。
int DIMsPreEditStart (w)
Widget | w; |
戻り値-1 は,前編集文字列のサイズが無制限であることを示します。
この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
DIMs ウィジェットに対応する入力コンテキストの前編集セッションを終了させる関数です。
void DIMsPreEditDone (w)
Widget | w; |
この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
DIMs ウィジェットに対応する入力コンテキストの前編集セッションが開始されているかどうかをチェックする関数です。
Boolean DIMsIsIState (w)
Widget | w; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
前編集セッションを開始した入力コンテキストで,文字列を挿入/削除/置換する関数です。
void DIMsPreEditDraw (w, caret, chg_first, chg_length, string, string_length, reditions, redition_length)
Widget | w; |
int | caret; |
int | chg_first; |
int | chg_length; |
void | *string; |
int | string_length; |
XIMFeedback | *renditions; |
int | rendition_length; |
この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
caret | 前編集文字列のカーソル・オフセット (文字単位) を指定します。 |
chg_first | 変更部分の開始位置 (文字単位) を指定します。 |
chg_length | 変更部分の長さ (文字単位) を指定します。 |
string | 入力コンテキストに渡す文字列を指定します。エンコーディングは DIMsEncoding(w) の戻り値に一致しなければなりません。IMS プログラマーは,このデータにメモリを割り当てたら呼び出し後に解放する必要があります。 |
string_length | string のバイト数を指定します。 |
renditions | 文字ごとの表示情報を持つ XIMFeedback の配列へのポインタを指定します。 |
redition_length | reditions のメンバ数を指定します。 |
前編集の際にテキスト挿入位置を移動する関数です。
void DIMsPreEditCaret (w, position, direction, style)
Widget | w; | |
int | *position; | (呼び出し側へ返す) |
XIMCaretDirection | direction; | |
XIMCaretStyle; | style; |
この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
position | 前編集文字列内のカレット・オフセットを指定します。呼び出し後には,初期位置からの新しいオフセット値が返されます。 |
direction | カレットが移動する方向を指定します。 |
style | カレットのフィードバックを指定します。 |
DIMs ウィジェットに対応する入力コンテキストの状態更新セッションを開始する関数です。
void DIMsStatusStart (w)
Widget | w; |
この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
DIMs ウィジェットに対応する入力コンテキストの状態更新セッションを終了させます。
void DIMsStatusDone (w)
Widget | w; |
この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
DIMs ウィジェットに対応する入力コンテキストの状態領域を更新する関数です。
void DIMsStatusDraw (w, type, string, string_length, reditions, renditions_length, bitmap)
Widget | w; |
XIMStatusDataType | type; |
void | *string; |
int | string_length; |
XIMFeedback | *renditions; |
int | rendition_length; |
Pixmap | bitmap; |
この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応する DIMs を指定します。 |
type | テキストまたはビットマップのいずれを使用するかを指定します。 |
string | 状態領域を更新するためのテキストを指定する。エンコーディングは DIMsEncoding(w) の戻り値と一致しなければなりません。このデータにメモリを割り当てたら呼び出し後に解放する必要があります。 |
string_length | string のバイト数を指定します。 |
renditions | 文字ごとの表示情報を持つ XIMFeedback の配列へのポインタを指定します。 |
rendition_length | renditions のメンバ数を指定します。 |
bitmap | type が XIMBitmapType の場合にビットマップを指定します。 |
クライアントと,ジオメトリについての折衝を開始する関数です。
Boolean DIMsGeometryNegotiation (w)
Widget | w; |
この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
DIMs ウィジェットに対応する入力コンテキストへの,クライアントからのイベント転送を有効または無効にします。
void DIMsSetEventsForward (w, state)
Widget | w; |
Boolean | state; |
この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
state | イベント・フロー状態を指定します。クライアントによる入力コンテキストへのイベント転送を有効にする場合は Ture を指定し,クライアントがトリガオン・キーを受信するまで入力コンテキストへのイベント転送を無効にするには False を指定します。 |
クライアントから DIMs ウィジェットに対応する入力コンテキストにイベントが転送されているかどうかを問い合わせる関数です。
Boolean DIMsIsEventsForwarded (w)
Widget | w; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
確定された文字列をクライアントに送信する関数です。
void DIMsCommit (w, string, string_length)
Widget | w; |
void | *string; |
int | string_length; |
この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
string | 確定された文字列を指定します。エンコーディングについては DIMsEncoding() によって返される値に一致する必要があります。詳細については DIMsEncoding の項を参照してください。IMS プログラマは,このデータにメモリを割り当てたら呼び出し後に解放する必要があります。 |
string_length | string のバイト数を指定します。 |
クライアントと IMS とで同意したエンコーディングを返す関数です。
char *DIMsEncoding (w)
Widget | w; |
この関数が返す文字列は解放されてはなりません。
エンコーディングの設定方法についての詳細は,第1.4.7項を参照してください。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
DIMs ウィジェットに対応する入力コンテキストのロケールを返す関数です。
char *DIMsLocale (w)
Widget | w; |
返される文字列は解放されてはなりません。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
DIMs ウィジェットに対応する入力コンテキストの入力スタイルを返す関数です。
XIMStyle DIMsInputStyle (W)
Widget | w; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
DIMs ウィジェットに対応する入力コンテキストの XNClientWindow の XIC 値を返す関数です。
Window DIMsClientWindow (W)
Widget | w; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
DIMs ウィジェットに対応する入力コンテキストの XNFocusWindow の XIC 値を返す関数です。
Window DIMsFocusWindow (w)
Widget | w; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
入力コンテキストの固有データを返す関数です。
Opaque *DIMsUserData (w)
Widget | w; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
すべてのクライアントのトリガ・キーを変更する関数です。
void DIMsSetTriggerKeys (new_keys)
DIMsTriggerKeys | new_keys; |
この呼び出しは,createICCb(),または reason 引数として DimCR_CreateIC を設定するようなコールバックでは,クライアントと IMS の接続がまだ確立されていないため使用できないことに注意してください。このようなコールバックの詳細については,setAreaCb の項およびそれ以降のいくつかの項を参照してください。
new_keys | IMS の新しいトリガ・キーを指定します。DIMsTriggerKeys のデータ型の定義は第1.4.8項を参照してください。IMS プログラマは,このポインタを後で解放しなければなりません。 |
このコールバック関数は,拡張 (非標準) XIM の属性値を取得するために呼び出されます。
int getExtIMValuesCb (client_data, attributes, value_len, value)
Opaque | *client_data; | |
char | *attributes; | |
short | *value_len; | (呼び出し側へ返す) |
Oparque | **value; | (呼び出し側へ返す) |
client_data | リソース DIMsNclientdata によって指定されるデータのポインタを指定します。詳細については,第1.4.41項を参照してください。 |
attributes | XIM 属性名を指定します。 |
value_len | 属性値のサイズ (バイト単位) を呼び出し元へ返します。value のデータ型が string_t ではない場合,このフィールドは任意です。第1.4.4項を参照してください。 |
value | 呼び出し側に属性値のポインタを返します。IMS プログラマは,このデータにメモリを割り当てなければなりません。これは後に IMSSL によって解放されます。 |
このコールバック関数は,入力コンテキストおよびそれに対応する DIMs ウィジェットが作成される場合に呼び出されます。
int createICCb (w, client_data, widget_data)
Widget | w; | |
Opaque | *client_data; | |
Opaque | **widget_data; | 呼び出し側へ返す |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
widget_data | ウィジェットに対応する入力コンテキスト固有データのポインタを呼び出し側に返します。このデータは,DIMsUserData(w) を呼び出して後で検索することができます。IMS プログラマは,このデータにメモリ割り当て,destroyICCb を使用して解放する必要があります。 |
このコールバック関数は,入力コンテキストおよびそれに対応する DIMs ウィジェットを破棄する場合に呼び出されます。
int destroyICCb (w, client_data)
Widget | w; |
Opaque | *client_data; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdataについては,第1.4.41項を参照してください。 |
このコールバック関数は,拡張 (非標準) XIC 属性の値を設定する場合に呼び出されます。
int setExtICValuesCb (w, client_data, attributes, value_len, value, attribute_flag, reason)
Widget | w; |
Opaque | *client_data; |
char | *attributes; |
short | value_len; |
Opaque | *value; |
DIMsAttributesType | attribute_flag; |
int | reason; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
attributes | 拡張 XIC 値の名称を指定します。 |
value_len | value フィールドのサイズ (バイト単位) を指定します。この属性のデータ型が string_t でない場合,このフィールドは無視できます。第1.4.4項を参照してください。 |
value | 属性値のポインタを指定します。属性値のデータ型は任意ですが,IMS プログラマは,実際のデータ型へのポインタを属性に従ってキャストする必要があります。 |
attribute_flag | XIC の属性の型を指定します。DIMsAttributeType のデータ型は次のとおりです。
typedef enum { GenericAttributesType, PreeditAttributesType, StatusAttributesType }DIMsAttributesType; GenericAttributesType は,XIC の値が PreeditAttribute および StatusAttribute のどちらにも属さないことを示します。 PreeditAttributesType は,XIC の値が PreeditAttribute に属すことを示します。 StatusAttributesType は,XIC の値が StatusAttribute に属すことを示します。 |
reason | コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。 |
このコールバック関数は,拡張 (非標準) XIC 属性の値を取得するために呼び出されます。
int getExtICValuesCb (w, client_data, attribute, value_len, value, attr_flag)
Widget | w; | |
Opaque | *client_data; | |
char | *attributes; | |
short | *value_len; | (呼び出し側へ返す) |
Opaque | **value; | (呼び出し側へ返す) |
DIMsAttributesType | attr_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata については第1.4.41項を参照してください。 |
attributes | 拡張 XIC 値の名称を指定します。 |
value_len | value フィールドのサイズ (バイト単位) を呼び出し側に返します。この属性のデータ型が string_t でない場合,このフィールドは無視できます。第1.4.4項を参照してください。 |
value | 属性値のポインタを呼び出し側に返します。IMS プログラマは,このデータにメモリを割り当てなければなりません。このメモリは,IMSSL によって後で解放されます。 |
attr_flag | 属性の型を指定します。データ型の定義については setExtICValuesCb の項を参照してください。 |
このコールバック関数は,入力コンテキストがフォーカスを取得した場合に呼び出されます。
int setICFocusCb (w, client_data)
Widget | w; |
Opaque | *client_data; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata については第1.4.41項を参照してください。 |
このコールバック関数は,入力コンテキストがフォーカスを失った場合に呼び出されます。
int unsetICFocusCb (w, client_data)
Widget | w; |
Opaque | *client_ data; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata については第1.4.41項を参照してください。 |
このコールバック関数は,入力コンテキストが再設定される場合に呼び出されます。
int resetICCb (w, client_data, string, string_length)
Widget | w; | |
Opaque | *client_data; | |
void | **string; | (呼び出し側へ返す) |
int | *string_length; | (呼び出し側へ返す) |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
string | DIMsEncoding(w) によって与えられたエンコーディングで現在の前編集文字列を返します。IMS プログラマは,このデータにメモリを割り当てなければなりません。このメモリは IMSSL によって後で解放されます。 |
string_length | string のバイト数を返します。 |
このコールバック関数は,入力コンテキストが IMS にイベントを転送する場合に呼び出されます。
int processEventCb (w, client_data, event, send_back)
Widget | w; | |
Opaque | *client_data; | |
XEvent | *event; | |
Boolean | *send_back; | (呼び出し側へ返す) |
クライアントが XNFilterEvent() を呼び出すと,XFilterEvent の値を取得する XGetICValues 関数で IMS によって選択されたイベントが IMS に転送され,このコールバックを呼び出します (IMS に必要なイベントの選択方法については getFilterEventsCb の項を参照してください)。IMS によっては,これらのイベントは,文字列の確定,前編集セッションの開始または終了,あるいはその他の状況を引き起こします。
ただし,入力スタイルが on-the-spot の場合,1 つの KeyPress イベントで DIMsCommit,DIMsPreEditDone,および DIMsPreEditStart を同時に呼び出すことはできません。同時に呼び出すと,クライアントは,確定文字列およびコールバックを正しい順序で得ることができません。このため,KeyPress イベントで DIMsPreEditDone と DIMsCommit を呼び出したあとで,対応する KeyRelease イベントで DIMsPreEditStart を呼び出して次の前編集セッションを開始してください。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
event | クライアントから転送するイベントを指定します。 |
send_back | イベントをクライアントに返送するかどうかを指定します。True が返されると XFilterEvent はクライアントに False を返し,False の場合,イベントはクライアントによって破棄されます。 |
このコールバック関数は,XIC 属性 XNArea の値を設定するために呼び出されます。
int setAreaCb (w, client_data, reason, attribut_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
XRectangle | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。 |
value | XRectangle タイプの属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNAreaNeeded の値を設定するために呼び出されます。
int setAreaNeededCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
XRectangle | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。 |
value | XRectangle タイプの属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNSpotLocation の値を設定するために呼び出されます。
int setSpotLocationCb (w, client_data, reason, value, attr_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
XPoint | *value; |
DIMsAttributesType | attr_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。 |
value | XPoint タイプの属性値へのポインタを指定します。 |
attri_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNColormap の値を設定するために呼び出されます。
int setColormapCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
Colormap | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。 |
value | Colormap タイプの属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNStdColormap の値を設定するために呼び出されます。
int setStdColormapCb (w, client_data, reason, value, attr_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
Atom | *value; |
DIMsAttributesType | attr_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。 |
value | Atom タイプの属性値へのポインタを指定します。 |
attri_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNForeground の値を設定するために呼び出されます。
int setForegroundCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
unsigned long | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。 |
value | 符号なし long タイプの属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNBackground の値を設定するために呼び出されます。
int setBackgroundCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
unsigned long | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。 |
value | 符号なし long タイプの属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute またはStatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCbの 項を参照してください。 |
このコールバック関数は,XIC 属性 XNBackgroundPixmap の値を設定するために呼び出されます。
int setBgPixmapCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
Pixmap | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。 |
value | Pixmap タイプの属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNFontSet の値を設定するために呼び出されます。
int setFontSetCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
XFontSet | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。 |
value | XFontSet タイプの属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNLineSpace の値を設定するために呼び出されます。
int setLineSpaceCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
int | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。 |
value | integer タイプの属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNCursor の値を設定するために呼び出されます。
int setLineSpaceCb (w, client_data, reason, value, attribute_flag)
Widget | w; |
Opaque | *client_data; |
int | reason; |
Cursor | *value; |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
reason | コールバックの理由を指定します。DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し,DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。 |
value | Cursor タイプの属性値へのポインタを指定します。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性のタイプを指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNFilterEvents の値を得るために呼び出されます。
int getFilterEventsCb (w, client_data, value)
Widget | w; | |
Opaque | *client_data; | |
unsigned long | **value; | (呼び出し側へ返す) |
このコールバック・リソースが設定されていない場合,IMSSL は省略時のイベント・マスクとして KeyPressMask | KeyReleaseMask をクライアントへ返します。この値が返された場合は,クライアントから IMS へのイベント・フローが増えることによりネットワークのアクティビティが増加し,IMS の性能に直接影響するため注意が必要です。必要ないイベント・マスクは削除するようにしてください。たとえば,DIMs ウィジェットの入力スタイルが on-the spot でない場合は,KeyReleaseMask の使用を削除することができます。
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | DIMsNclientdata リソースで指定されるデータへのポインタを指定します。 DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
value | 呼び出し側に,符号なし long 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。 |
このコールバック関数は,XIC 属性 XNArea の値を得るために呼び出されます。
int getAreaCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
XRectangle | **value; | (呼び出し側へ返す) |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
value | 呼び出し側に,XRectangle 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNAreaNeeded の値を得るために呼び出されます。
int getAreaNeededCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
XRectangle | **value; | (呼び出し側へ返す) |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
value | 呼び出し側に,XRectangle 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNSpotLocation の値を得るために呼び出されます。
int getSpotLocationCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
XPoint | **value; | (呼び出し側へ返す) |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata についての詳細は,第1.4.41項を参照してください。 |
value | 呼び出し側に,XPoint 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNColormap の値を得るために呼び出されます。
int getColormapCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
Colormap | **value; | (呼び出し側へ返す) |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | リソース DIMsNclientdata によって指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
value | 呼び出し側に,Colormap 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNStdColormap の値を得るために呼び出されます。
int getStdColormapCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
Atom | **value; | (呼び出し側ヘ返す) |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
value | 呼び出し側に,Atom 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNForeground の値を得るために呼び出されます。
int getForegroundCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
unsigned long | **value; | (呼び出し側ヘ返す) |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
value | 呼び出し側に,符号なし long 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNBackground の値を得るために呼び出されます。
int getBackgroundCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
unsigned long | **value; | (呼び出し側ヘ返す) |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
value | 呼び出し側に,符号なし long 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNBackgroundPixmap の値を得るために呼び出されます。
int getBgPixmapCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
Pixmap | **value; | (呼び出し側ヘ返す) |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
value | 呼び出し側に,Pixmap 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNFontSet の値を得るために呼び出されます。
int getFontSetCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
XFontSet | **value; | (呼び出し側に返す) |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
value | 呼び出し側に,XFontSet 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNLineSpace の値を得るために呼び出されます。
int getLineSpaceCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
int | **value; | (呼び出し側ヘ返す) |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
value | 呼び出し側に,整数型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当てはIMSSLによって後で解放されます。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
このコールバック関数は,XIC 属性 XNCursor の値を得るために呼び出されます。
int getCursorCb (w, client_data, value, attribute_flag)
Widget | w; | |
Opaque | *client_data; | |
Cursor | **value; | (呼び出し側ヘ返す) |
DIMsAttributesType | attribute_flag; |
w | 入力コンテキストに対応する DIMs ウィジェットを指定します。 |
client_data | DIMsNclientdata リソースで指定されるデータへのポインタを指定します。DIMsNclientdata については,第1.4.41項を参照してください。 |
value | 呼び出し側に,Cursor 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。 |
attribute_flag | PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。DIMsAttributesType のデータ型については,setExtICValuesCb の項を参照してください。 |
入力サーバに関するサンプル・ファイルが /usr/i18n/usr/examples/input_server ディレクトリに用意されています。このサンプル・ファイルを参照することにより,API の使用方法をより明確に理解することができるでしょう。
次のような Imakefile が用意されています。IMS の開発に必要なすべての API およびデータ構造体を含むヘッダ・ファイルは,/usr/i18n/usr/include/DIMs/DIMsDef.h ディレクトリにあります。IMSSL は,シェアード・ライブラリ /usr/shlib/libDIMs.so として実装されています。また,シェアード・ライブラリを使用したくない IMS プログラマのために,アーカイブ・ライブラリ /usr/i18n/usr/lib/libDIMs.a を提供しています。
/* use /usr/bin/X11/xmkmf to make Makefile */ LOCAL_LIBRARIES = -lDIMs -lXt -lX11 EXTRA_DEFINES = -DXK_LATIN1 NormalProgramTarget(IMS_example,IMS_example.o,,$(LOCAL_LIBRARIES),) DependTarget()
/* * ***************************************************************** * * * * * Copyright (c) Digital Equipment Corporation, 1991, 1996 * * * * * * All Rights Reserved. Unpublished rights reserved under * * * the copyright laws of the United States. * * * * * * The software contained on this media is proprietary to * * * and embodies the confidential technology of Digital * * * Equipment Corporation. Possession, use, duplication or * * * dissemination of the software and media is authorized only * * * pursuant to a valid written license from Digital Equipment * * * Corporation. * * * * * * RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure * * * by the U.S. Government is subject to restrictions as set * * * forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, * * * or in FAR 52.227-19, as applicable. * * * * * ***************************************************************** */ /* * HISTORY */ /* ***************************************************************************** Copyright (c) Digital Equipment Corporation, 1990 All Rights Reserved. Unpublished rights reserved under the copyright laws of the United States. The software contained on this media is proprietary to and embodies the confidential technology of Digital Equipment Corporation. Possession, use, duplication or dissemination of the software and media is authorized only pursuant to a valid written license from Digital Equipment Corporation. RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure by the U.S. Government is subject to restrictions as set forth in Subparagraph (c)(1)(ii) of DFARS 252.227-7013, or in FAR 52.227-19, as applicable. ***************************************************************************** * * IMS_example.c * * This is an example of how to write an Input Method Server for X11R6. * The only protocol being used in here is Xi18n and the transport mechanism * is X. * * In this example, there are only 26 composed characters, which are * formed by 2 consecutive key inputs which are equal. These key inputs * should be from a-z, case insensitive. The lookup string * will be found from an array, which is some kind of small-scale dictionary. * * You should load Iso-latin 1 keymap files in order to work properly for * this example. * * You can start this example using four of the languages: * Korean, Traditional Chinese, Simplied Chinese and Japanese * * To start this IMServer, set the xnllanguage resource properly, for example, * if you want to input Korean text, you should set the session language to * Korean, or simply start as * %IMS_example -xnllanguage ko_KR.deckorean * * To connect a client to this IMS, simply start up this IMS as a background * job, then start the client with the correct language setting and XMODIFIERS * environment. There are 4 modifiers that can be set according to locales : * "zh_tw_exam", "zh_cn_exam", "ko_kr_exam", ja_jp_exam". For example, * * %setenv XMODIFIERS @im=ko_kr_exam * %dxcardfiler -xnllanguage ko_KR.deckorean */ #include <X11/Intrinsic.h> #include <X11/keysymdef.h> #include <DIMsDef.h> static char my_dictionary[26][2] = {0xa1, 0xa1, 0xa1, 0xa2, 0xa1, 0xa3, 0xa1, 0xa4, 0xa1, 0xa5, 0xa1, 0xa6, 0xa1, 0xa7, 0xa1, 0xa8, 0xa1, 0xa9, 0xa1, 0xaa, 0xa1, 0xab, 0xa1, 0xac, 0xa1, 0xad, 0xa1, 0xae, 0xa1, 0xaf, 0xa1, 0xb1, 0xa1, 0xb2, 0xa1, 0xb3, 0xa1, 0xb4, 0xa1, 0xb5, 0xa1, 0xb6, 0xa1, 0xb7, 0xa1, 0xb8, 0xa1, 0xb9, 0xa1, 0xba, 0xa1, 0xbb}; typedef struct { char data[1]; int num_char; } MyDataRec, *MyData; /* This is the input context specific data */ static int CreateICCallback(w, client_data, widget_data) Widget w; Opaque *client_data; Opaque **widget_data; { MyData my_data = (MyData)XtMalloc(sizeof(MyDataRec)); if (!my_data) return 0; /* fail */ my_data->num_char = 0; *widget_data = (Opaque *)my_data; return 1; /* success */ } static int DestroyICCallback(w, client_data, widget_data) Widget w; Opaque *client_data; { MyData my_data = (MyData)DIMsUserData(w); if (my_data) XtFree((char *)my_data); return 1; /* success */ } static int GetFilterEventsCallback(w, client_data, mask) Widget w; Opaque *client_data; unsigned long **mask; { *mask = (unsigned long *) XtMalloc(sizeof(unsigned long)); /* Since this IMS supports root-window style only, so just KeyPress events are necessary */ **mask = (unsigned long)(KeyPressMask); return 1; } static int ProcessEventCallback(w, client_data, event, send_back) Widget w; Opaque *client_data; XEvent *event; Boolean *send_back; { MyData my_data = (MyData)DIMsUserData(w); Display *dpy = XtDisplay(w); *send_back = True; switch (event->type) { case KeyPress : { KeyCode keycode = event->xkey.keycode; KeySym keysym; char second_char; XTextProperty text_property; char *text_list[1]; char text[3]; keysym = XKeycodeToKeysym( dpy, keycode, 0 ); if ((keysym >= XK_A && keysym <= XK_Z) || (keysym >= XK_a && keysym <=XK_z)) { if (my_data->num_char) { if (keysym >= XK_a) second_char = keysym - XK_a; else second_char = keysym - XK_A; if (second_char == my_data->data[0]) { /* two consecutive key are equal, send commit string */ text[0] = my_dictionary[second_char][0]; text[1] = my_dictionary[second_char][1]; text[2] = '\0'; text_list[0] = text; XmbTextListToTextProperty(dpy, text_list, 1, XCompoundTextStyle, &text_property); DIMsCommit(w, (char *)text_property.value, strlen((char *)text_property.value)+1); XtFree((char *)text_property.value); *send_back = False; /* the key is used by IMS, no need to return to client */ } my_data->num_char = 0; /* reset to 0*/ } else { my_data->num_char = 1; if (keysym >= XK_a) my_data->data[0] = keysym - XK_a; else my_data->data[0] = keysym - XK_A; *send_back = False; } } break; } default : break; } return 1; } IgnorXErrors(dpy, event) Display *dpy; XErrorEvent *event; { return 0; } main(argc, argv) int argc; char **argv; { Widget toplevel; XtAppContext app_context; DIMsClassCtx ctx; char *zh_tw_server_strings[] = {"_XIM_zh_TW@zh_tw_exam"}; char *zh_cn_server_strings[] = {"_XIM_zh_CN@zh_cn_exam"}; char *ko_kr_server_strings[] = {"_XIM_ko_KR@ko_kr_exam"}; char *ja_jp_server_strings[] = {"_XIM_ja_JP@ja_jp_exam"}; XIMStyle support_styles[1] = {XIMPreeditNothing | XIMStatusNothing}; DIMsLocaleInfoRec locale; DIMsStringListRec server_names; DIMsSupportStylesRec im_styles; Cardinal n; Arg al[40]; DIMsVersionRec im_version; XtSetLanguageProc(NULL, NULL, NULL); toplevel = XtAppInitialize(&app_context, "example", NULL, 0, &argc, argv, NULL, NULL, 0); /* set up DIMs Class */ /* This example targets to work for 4 locales: zh_TW, ja_JP, zh_CN, ko_KR. Therefore many DIMs class contexts are created */ /* create contexts for locales zh_TW, ja_JP, zh_CN, ko_KR */ locale.language = "zh_TW"; locale.num_support_codesets = 0; locale.support_codesets = NULL; server_names.num_of_strings = 1; server_names.string_names = zh_tw_server_strings; im_styles.num_support_styles = 1; im_styles.support_styles = support_styles; n = 0; XtSetArg( al[n], DIMsNlocale, &locale);n++; XtSetArg( al[n], DIMsNserverName, &server_names);n++; /* use Xi18n protocol */ im_version.highest_major_version = 3; im_version.highest_minor_version = 0; im_version.lowest_major_version = 3; im_version.lowest_minor_version = 0; XtSetArg( al[n], DIMsNversion, &im_version);n++; XtSetArg( al[n], DIMsNsupportStyles, &im_styles);n++; XtSetArg( al[n], DIMsNcreateICCb, CreateICCallback);n++; XtSetArg( al[n], DIMsNdestroyICCb, DestroyICCallback);n++; XtSetArg( al[n], DIMsNprocessEventCb, ProcessEventCallback);n++; XtSetArg( al[n], DIMsNgetFilterEventsCb, GetFilterEventsCallback);n++; XtSetArg( al[n], DIMsNtransport, "X/");n++; ctx = DIMsClassCtxCreate(NULL, "zh_tw_xi18n_exam", al, n); locale.language = "zh_CN"; server_names.string_names = zh_cn_server_strings; XtSetArg( al[0], DIMsNlocale, &locale); XtSetArg( al[1], DIMsNserverName, &server_names); ctx = DIMsClassCtxCreate(ctx, "zh_cn_xi18n_exam", al, n); locale.language = "ko_KR"; server_names.string_names = ko_kr_server_strings; XtSetArg( al[0], DIMsNlocale, &locale); XtSetArg( al[1], DIMsNserverName, &server_names); ctx = DIMsClassCtxCreate(ctx, "ko_kr_xi18n_exam", al, n); locale.language = "ja_JP"; server_names.string_names = ja_jp_server_strings; XtSetArg( al[0], DIMsNlocale, &locale); XtSetArg( al[1], DIMsNserverName, &server_names); ctx = DIMsClassCtxCreate(ctx, "ja_jp_xi18n_exam", al, n); XSetErrorHandler(IgnorXErrors); /* Initialize IMSSL */ DIMsSLInitialize(toplevel, ctx); /* Realize widget hierrachy */ XtRealizeWidget(toplevel); /* Initialize protocol layer */ DIMsProtoInit(toplevel, app_context); XtAppMainLoop(app_context); }