Provided by: libcanna1g-dev_3.7p3-17_amd64 

名前
UILib intro - ユーザインタフェースライブラリイントロ
説明
ユーザインタフェースライブラリは,1文字の入力,1キーの入力に対応して, 未確定文字列,確定文字列,注目文
節位置,ステータス表示のための文字列, 候補一覧のための文字列などを返還するライブラリです.アプリケーショ
ンプ ログラムは,返還された情報によって表示を行います.アプリケーションプロ グラムは,キー入力以外のトリ
ガーによって(例えばマウスによる選択など)モー ドの遷移を制御することもできます.
ユーザインタフェースライブラリでは,TTYベース でjrKanjiStringおよびjrKanjiControl,Xウィンドウベースで
XLookupKanjiStringおよびXKanjiControlを提供します.
ユーザインタフェースライブラリを使用する場合には以下のファイルが必要に なります.
・ TTYベース
関数 jrKanjiString, jrKanjiControl
ヘッダファイル canna/jrkanji.h
ライブラリ libcanna.a, libcanna.so
・ Xウィンドウベース
関数 XLookupKanjiString, XKanjiControl
ヘッダファイル canna/kanji.h
ライブラリ libXn.a, libXn.so, libcanna.a, libcanna.so
概要
jrKanjiString TTYからの入力,Xでの入力,基本ウィンドウでの入力など一般的なキーボー ド入力に対して
漢字文字列への変換を行います.
jrKanjiControl jrKanjiStringでの制御を指定されたパラメタにより行います.
XLookupKanjiString Xウィンドウシステムにおいて,キーボード入力(キーイベント)の漢字文字列 への変換を行い
ます.
XKanjiControl XLookupKanjiStringでの制御を指定されたパラメタにより行います.
4 April 1991 UILIBINTRO(3)
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────
JRKANJISTRING(3) JRKANJISTRING(3)
名前
jrKanjiString - 一般的名キーボード入力に対してのかな漢字変換
形式
#include <canna/jrkanji.h>
int jrKanjiString(context_id, ch, buffer_return, bytes_buffer, kanji_status_return)
int context_id;
int ch;
char *buffer_return;
int bytes_buffer;
jrKanjiStatus *kanji_status_return;
説明
jrKanjiStringはTTYからの入力,Xでの入力,基本ウィンドウでの入力など, 一般的なキーボード入力に対して漢字
文字列への変換を行う関数です.
jrKanjiStringは,アスキーコードで表されるキー入力を日本語文字列に対応 させる簡易ルーチンで,入力された
キーを表すコードをchにて与えるこ とにより,表示すべき文字列を返します.jrKanjiStringの内部においてロー マ
字かな変換,かな漢字変換が行われます.
ファンクションキーや,カーソルキーなどのキーについては,それらのキーの 発生するエスケープシーケンスの 代
わりにファンクションキーの項で示す特別の コードをjrKanjiStringに与えて下さい.
context_idで与えるコンテクスト識別子は,実際にはそのままの値が用 いられるわけではなく,context_idで与えら
れるコンテクスト識別子を キーとしたコンテクストが作成され,用いられることになります.したがって アプリ
ケーションプログラマはjrKanjiStringに与えるコンテクスト識別子に ついては,適当な値を与えれば良く,入力
ポートのファイルディスクリプタを 与えるのが適当と考えられます.ただし,0を与えた時は特別で,システムに デ
フォルトで準備されているコンテクストが用いられます.コンテクストに特 別の配慮を行わない場合には0を指定す
るのが適当です.
入力に対応して,ローマ字かな変換,かな漢字変換の中間結果を表示する必要 がありますが,表示すべき中間結果
はkanji_status_returnを介して, アプリケーションに返されます.
アプリケーションはkanji_status_returnに返される情報にしたがって 中間結果を表示しなければなりま せ
ん.kanji_status_returnはjrKanjiStatus型の構造体です.
jrKanjiStatus構造体は以下のように定義されます.
typedef struct {
unsigned char *echoStr; /* ローカルエコーのための文字列 */
int length; /* ローカルエコー文字列の長さ */
int revPos; /* ローカルエコー文字列のうち反転表示部分へのオフセット */
int revLen; /* ローカルエコー文字列のうち反転表示部分の長さ */
unsigned long info; /* その他の情報 */
unsigned char *mode; /* モード情報 */
struct {
unsigned char *line; /* 候補一覧の文字列 */
int length; /* 候補一覧文字列の長さ */
int revPos; /* 候補一覧文字列のうち反転表示部分へのオフセット */
int revLen; /* 候補一覧文字列のうち反転表示部分の長さ */
} gline; /* 候補一覧に関する情報 */
} jrKanjiStatus;
かな漢字変換を用いた日本語入力時には変換の対象となる読みなどをローカル エコーする必要がありま
す.jrKanjiStringはローカルエコーなど表示に関す ることは何も行わず,代わりにローカルエコーするべき 文字列
をjrKanjiStatus構造体を用いてアプリケーション側に返します.
変換が確定するまでは,ローマ字かな変換されている文字や,変換候補文字な ど,ローカルエコーすべき(EUC)文字
列がechoStrメンバにより返されま す.このとき,ローカルエコー文字列の長さ,リバース表示の 開始位置と長
さ(バイト単位)が, それぞれ,lengthメンバ,revPos,revLenメンバにて返されます.ロー カルエコーすべき文字
列のためのバッファはjrKanjiStringによって自動的に 確保されますが,その領域は読みとりのみに用いられるべき
であり,その領域 に文字列を書き込んではいけません.
ローカルエコーすべき文字列がない場合はlengthメンバに0が返ります.
ローカルエコーすべき内容が前回のjrKanjiStringの呼出しの時と変わらない 場合(例えばコントロール文字が押さ
れ,そのキーが無効であった 場合など)はlengthメンバに-1が返ります.
モードの変更や,候補一覧に関する情報の有無は,infoメンバによって 渡されます.infoメンバ
のKanjiModeInfoビットがonで あれば,modeに新しいモードを示す文字列が返されます.infoメ ンバ
のKanjiGLineInfoビットがonであれば,gline構造体に候補一覧等 の情報が格納されています.
gline構造体のlineメンバには候補一覧表示のための文字列が返 されます.gline構造体のline,revPos,revLenの各メ
ンバは,候 補一覧文字列のそれぞれ,長さ,リバース表示の開始位置,リバース表示の長 さが返されます.
変換中に確定した(EUC)文字列がある場合は, その文字列がbuffer_returnで指定したバッファに格納され,その文字
列の長さ(バイト単位)が返されます.確定した文字列が無い場合は戻り 値は0になります.確定文字列を格納する
バッファbuffer_returnの大き さをbytes_bufferにて与えます. 確定文字列の長さがbytes_bufferよりも長い場合に
は, 確定文字列のうち,bytes_buffer分 だけがbuffer_returnに格納され,jrKanjiStringの戻り値と し
て,bytes_bufferで与えた値が返ります.
ファンクションキー
エスケープシーケンスを発行するようなファンクションキーに関しては,ファ ンクションキーによるエスケープシー
ケンスの変わりに以下のマクロ名で示さ れるコードをchとして与えて下さい.
論理名 コード
Nfer CANNA_KEY_Nfer
Xfer CANNA_KEY_Xfer
Up CANNA_KEY_Up
Left CANNA_KEY_Left
Right CANNA_KEY_Right
Down CANNA_KEY_Down
Insert CANNA_KEY_Insert
Rollup CANNA_KEY_Rollup
Rolldown CANNA_KEY_Rolldown
Home CANNA_KEY_Home
Help CANNA_KEY_Help
S-Nfer CANNA_KEY_Shift_Nfer
S-Xfer CANNA_KEY_Shift_Xfer
S-Up CANNA_KEY_Shift_Up
S-Left CANNA_KEY_Shift_Left
S-Right CANNA_KEY_Shift_Right
S-Down CANNA_KEY_Shift_Down
C-Nfer CANNA_KEY_Control_Nfer
C-Xfer CANNA_KEY_Control_Xfer
C-Up CANNA_KEY_Control_Up
C-Left CANNA_KEY_Control_Left
C-Right CANNA_KEY_Control_Right
C-Down CANNA_KEY_Control_Down
F1 CANNA_KEY_F1
PF1 CANNA_KEY_PF1
関連情報
jrKanjiControl(3)
戻り値
入力処理中何らかのエラーが発生した場合は,この関数の戻り値として-1が返 され,外部変数(char
*)jrKanjiErrorに,エラーメッセージが格納されます.
この関数の呼出しにより確定した文字列がある場合は確定した文字列のバイト 長が返ります.
それ以外の場合は0が返ります.
4 April 1991 JRKANJISTRING(3)
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────
JRKANJICONTROL(3) JRKANJICONTROL(3)
名前
jrKanjiControl - jrKanjiStringでのモードや,処理の制御を行う
形式
#include <canna/jrkanji.h>
int jrKanjiControl(context_id, request, arg)
int context_id;
int request;
char *arg;
説明
jrKanjiControlはcontext_idで示される変換コンテクストに 関して,requestで示される処理を行います.処理に
よっては,引数を 伴う場合があり,その場合,引数はargにて与えます.
jrKanjiControlで制御される機能としては以下の5つがあります.
request名 機能
KC_INITIALIZE かな漢字変換を初期化する.
KC_CHANGEMODE 入力モードを変更する.
KC_SETWIDTH 候補一覧表示の時の幅を指定する.
KC_FINALIZE かな漢字変換の終了処理.
KC_SETUNDEFKEYFUNCTION
未定義キーに対する機能の設定を行う.
KC_SETMODEINFOSTYLE
モード情報を数値で表現するかどうかを指定する.
KC_KAKUTEI 入力中の文字列を確定する.
KC_KILL 入力中の文字列を削除する.
KC_QUERYMODE 現在のモードを問い合わせる.
KC_SETSERVERNAME 接続するサーバを指定する.
KC_SETINITFILENAME
カスタマイズファイルを指定する.
KC_CLOSEUICONTEXT コンテクストをクローズする.
KC_QUERYMAXMODESTR
モード表示文字列の最大長を求める.
jrKanjiControlの作用は基本的にはコンテクストで指定されたものに対しての み作用します.ただし,初期化の処理
や終了の処理に関してはその限りではあ りません.
jrKanjiControlの操作によって未確定文字列の状態が変化したり,モードの状 態が変わることがあります.そのよう
な可能性がある場合はarg部分に変化し た情報を格納できるような構造体へのポインタを渡します.その構造体の定
義 は以下のようになります.
typedef struct {
int val; /* バッファに格納された文字列の長さが返る */
unsigned char *buffer; /* 確定文字列を格納するためのバッファを与える */
int bytes_buffer; /* 上記のバッファの大きさを与える */
jrKanjiStatus *ks; /* 未確定文字列の情報を格納する構造体へのポインタ */
} jrKanjiStatusWithValue;
jrKanjiControlのそれぞれの機能の実行のしかたは以下の通りです.
(1) KC_INITIALIZE - かな漢字変換の初期化
KC_INITIALIZEをrequest部で指定することにより,かな漢字変換の初期 化を行います.argにはwarningメッ
セージを 格納するための(char **)型の変数へのポインタまたはNULLを指定します.初 期化の処理は基本的に
はjrKanjiString(3)が最初に呼ばれた時に自動的に行わ れますが,jrKanjiControlを用いて初期化する こと
により,jrKanjiString(3)での初期化処理は行われなくなります.
jrKanjiString(3)の使用に先立ってjrKanjiControlを用いてかな漢字変換に関 する制御を行う時などは,漢字
変換の初期化を行う必要があります.
正常終了時にはjrKanjiControlの戻り値として0が返り,異常終了時には-1が 返ります.
KC_INITIALIZEを行った場合,エラーとまではいかなくとも何らかのwarningが 発生することがありま
す.warningが発生した場合はargにて与えられた 変数に対してwarning文字列の配列へのポインタが格納され
返されます.warningがないときはNULLが格納され返されます.
(例)
int res; /* エラーが返ってくる場合に備える */
char **warning;
.....
res = jrKanjiControl(0, KC_INITIALIZE, &warning);
if (warning) {
char **p;
for (p = warning ; *p ; p++) {
fprintf(stderr, "%s0, *p);
}
}
第3引数に返されるwarningメッセージはライブラリの内部でmallocされます. これは,次
にKC_INITIALIZEやKC_FINALIZEが行われた時に開放されます.アプ リケーションプログラマが勝手にfreeして
はいけません.warningは今のとこ ろ最大64メッセージに限定されます.それ以上のメッセージは切捨てられ
ます.
メッセージに含まれる可能性のあるwarningには以下のものがあります.
・ カスタマイズファイルがシステムのものも含めてすべて利用できない.
・ カスタマイズファイルにシンタックスエラーがある.
・ ローマ字かな変換辞書が利用できない.
・ かな漢字変換辞書が利用できない.
・ かな漢字変換サーバに接続できない.
第3引数としてNULLを指定した場合warningメッセージは捨てられます.
(2) KC_CHANGEMODE - 入力モードの変更
入力モードをアプリケーションから変更します.requestの 部分にはKC_CHANGEMODEを指定
し,argにjrKanjiStatusWithValue構造体 を指定して下さい.jrKanjiStatusWithValue構造体のvalメンバにて
モー ド番号を指定することにより日本語モードが切り替わります.モード番号は以 下のマクロで示されま
す.
マクロ番号 モード
CANNA_MODE_AlphaMode アルファベットモード
CANNA_MODE_HenkanMode 変換入力モード
CANNA_MODE_KigoMode 記号入力モード
CANNA_MODE_ZenHiraKakuteiMode
全角ひらがな確定入力モード
CANNA_MODE_ZenKataKakuteiMode
全角カタカナ確定入力モード
CANNA_MODE_HanKataKakuteiMode
半角カタカナ確定入力モード
CANNA_MODE_ZenAlphaKakuteiMode
全角アルファベット確定入力モード
CANNA_MODE_HanAlphaKakuteiMode
半角アルファベット確定入力モード
CANNA_MODE_HexMode 16進コード入力モード
CANNA_MODE_BushuMode 部首入力モード
CANNA_MODE_TorokuMode 単語登録モード
この機能によりモードを変更するとモード名を始めとして多くの表示が変化を 受けます.表示の変更はargと
して指定したjrKanjiStatusWithValue構造体に て返されます.
(例)
jrKanjiStatus ks;
jrKanjiStatusWithValue ksv;
unsigned char buf[SOMESIZE];
.....
ksv.ks = &ks;
ksv.buffer = buf;
ksv.bytes_buffer = SOMESIZE;
ksv.val = CANNA_MODE_HexMode;
jrKanjiControl(context, KC_CHANGEMODE, &ksv);
len = ksv.val;
.....
/* 未確定文字列や確定文字列の情報がksvにより返されます. */
(3) KC_SETWIDTH - 候補一覧表示のための幅を指定
候補一覧のために用いられる領域のコラム数を指定します.1コラムの幅はア ルファベット文字あるいは半角
カタカナ1文字の文字幅であり,全角漢字は2 コラム占めることになります.候補一覧表示のための幅を 指
定するためにrequest部分に指定する値はKC_SETWIDTHで, このときargにコラム数を指定します.
(例)
jrKanjiControl(0, KC_SETWIDTH, (char *)60);
(4) KC_FINALIZE - かな漢字変換の終了処理.
プログラムを終了するなどの局面でかな漢字変換も終了することを指定します. かな漢字変換処理を終了させ
る時は必ずこの処理を行って下さい.終わるにあ たって今まで学習した内容がファイルに登録されま
す.request部分に はKC_FINALIZEを指定します.
正常終了時に0,異常終了時に-1が戻り値として返ります.
KC_FINALIZEを行った場合,エラーとまでいかなくとも何らかのwarningが発生 することがありま
す.warningが発生した場合はargにて与えられた 変数にwarning文字列の配列へのポインタが格納され返され
ます.warningがな い場合にはNULLポインタが格納され返されます.
(例)
int res; /* エラーが返る場合に備える */
char **warning;
.....
res = jrKanjiControl(0, KC_FINALIZE, &warning);
if (warning) {
char **p;
for (p = warning ; *p ; p++) {
fprintf(stderr, "%s0, *p);
}
}
第3引数に返されるwarningメッセージは,ライブラリの内部でmallocされま す.これは,次
にKC_INITIALIZEやKC_FINALIZEが行われた時に開放されます. アプリケーションプログラマが勝手にfreeして
はいけません.
warningは今のところ最大64メッセージに限定されます.それ以上のメッセー ジは切捨てられます.
メッセージに含まれる可能性のあるwarningには次のものがあります.
・ 辞書がアンマウントできない.
第3引数としてNULLを指定した場合,warningメッセージは捨てられます.
(5) KC_SETUNDEFKEYFUNCTION - 未定義キーに対する機能の設定
読みを入力している状態でC-tを打ったときのように未定義キーを入力した時 に取られる処理を指定しま
す.未定義キーに対応して行われる処理としては以 下の処理があります.
マクロ名 処理
kc_normal ビープ
kc_through アプリケーションプログラムに渡す
kc_kakutei 確定しアプリケーションプログラムに渡す
kc_kill 消去しアプリケーションプログラムに渡す
kc_normalを指定した場合,外部変数jrBeepFuncに設定された関数が未定義キー 入力時にライブラリによって
自動的に呼び出されます.jrBeepFuncに値を設定 しない場合には(jrBeepFunc == NULLの場合には)何も起こり
ません.
(例)
extern (*jrBeepFunc)(), beep();
jrBeepFunc = beep;
jrKanjiControl(0, KC_SETUNDEFKEYFUNCTION, kc_normal);
(6) KC_SETMODEINFOSTYLE - モード情報の表現
モード情報を文字列ではなくビットマップなどのデータで表示したい場合があ ります.そのような場合には
モード情報として数値データが返ってくると処理 がしやすくなりま
す.jrKanjiControlでKC_SETMODEINFOSTYLEを 指定し,argに1を渡すことによってそれ以後
はjrKanjiStatus構造体 のmodeメンバにはモードを表す数値に'@'(0x40)を加えた1文字が返さ れるようにな
ります.モードを表す数値に変換する場合には返ってきた文字列 から'@'(0x40)を引きます.モードを表す数
値については入力モードの 変更((2)KC_CHANGEMODE)のこうを参照して下さい.
(7) KC_KAKUTEI,(8) KC_KILL - 入力中の文字列の放棄
入力中の文字列を何らかの都合で放棄したい場合があります.放棄する場合に 入力中の文字列を確定文字列と
して取り込んでから放棄したい場合と全く捨て てしまってから放棄したい場合があります.確定する 場合に
はjrKanjiControlにてKC_KAKUTEIを指定し,放棄する 場合にはKC_KILLを指定します.
この処理は表示に影響を与えるので第3引数にはjrKanjiStatusWithValue構造 体を指定しなければなりませ
ん.
(例)
jrKanjiStatusWithValue ksv;
jrKanjiStatus ks;
unsigned char buf[SOMESIZE];
.....
ksv.ks = &ks;
ksv.buffer = buf;
ksv.bytes_buffer = SOMESIZE;
jrKanjiControl(context, KC_KAKUTEI, &ksv);
len = ksv.val;
.....
(9) KC_QUERYMODE - モードの問い合わせ
現在のモードを問い合わせるにはjrKanjiControlでKC_QUERYMODEを指定します.
第3引数にはモード文字列を格納するための文字配列のポインタを指定します. モード文字列はヌル文字で終
わる文字列です.ここに数値が返るようにするに はjrKanjiControlでKC_SETMODEINFOSTYLEを指定してモード
文字列のスタイル を変更しておきます.
(例)
char currentMode[MAXMODELEN];
.....
jrKanjiControl(0, KC_QUERYMODE, currentMode);
.....
(10) KC_SETSERVERNAME - サーバの指定
かな漢字変換サーバとしてどのサーバを使うかをアプリケーションプログラム を終了することなしに切替える
ことが可能です.かな漢字変換サーバとして接 続するべきサーバを指定するに
はjrKanjiControlでKC_SETSERVERNAMEを指定し ます.第3引数には接続したいサーバ名を指定します.
(11) KC_SETINITFILENAME - カスタマイズファイルの指定
カスタマイズファイルをアプリケーションプログラム側から変更することがで きます.カスタマイズファイル
の変更はjrKanjiControlの 第2引数にKC_SETINITFILENAMEを指定し,第3引数にファイル名文字列を指定 す
ることにより行います.この処理を行う場合はKC_INITIALIZEに先立って実 行しておかなければなりません.
(例)
char *inifile = "app-own.canna"
.....
jrKanjiControl(0, KC_SETINITFILENAME, initfile);
.....
(12) KC_CLOSEUICONTEXT - コンテクストのクローズ
変換コンテクストを表すコンテクストIDは任意の整数を割り当てることができ ます.今まで使われていない
コンテクストIDをjrKanjiStringあるいはjrKanjiControlに与えることが可能 であり,その場合,そのコンテ
クスト用のイニシャライズが行われ必要なメ モリが確保されます.
それまで使用していた入力ポートが使われなくなった場合に,そのポートに割 り当てて使っていたコンテクス
トID用に確保されたメモリを 開放するにはjrKanjiControlを第2引数にKC_CLOSEUICONTEXTを指定して呼び 出
します.
この処理は表示の変化をともなうので第3引数にはjrKanjiStatusWithValue構 造体を与えます.
(例)
jrKanjiStatusWithValue ksv;
jrKanjiStatus ks;
unsigned char buf[SOMESIZE];
.....
ksv.ks = &ks;
ksv.buffer = buf;
ksv.bytes_buffer = SOMESIZE;
jrKanjiControl(0, KC_CLOSEUICONTEXT, &ksv);
.....
(13) KC_QUERYMAXMODESTR - モード表示文字列の最大長を求める.
初期化ファイルにてモード表示文字列がカスタマイズできますが,カスタマイ ズされた結果モード表示文字列
にどれだけの表示領域を確保するかを調べる必 要がある場合があります.jrKanjiControlを第2引数
にKC_QUERYMAXMODESTRを 指定して呼び出すことにより,モード表示文字列として何コラム必要かが返り 値と
して返されます.ここで言うコラムとは半角英数文字の文字幅を1とした ときの値を示します.
第3引数は用いられないのでダミー値として0を与えます.
(例)
int max_mode_columns;
.....
max_mode_columns = jrKanjiControl(0, KC_QUERYMAXMODESTR, 0);
.....
4 April 1991 JRKANJICONTROL(3)
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────
XLookupKanjiString(3) XLookupKanjiString(3)
名称
XLookupKanjiString - キーボード入力の漢字文字列への変換
記述形式
#include <X11/Xlib.h>
#include <X11/kanji.h>
int
XLookupKanjiString(event_struct, buffer_return, bytes_buffer,
keysym_return, status_return, kanji_status_return)
XKeyEvent *event_struct;
char *buffer_return;
int bytes_buffer;
KeySym *keysym_return;
XComposeStatus *status_return;
XKanjiStatus *kanji_status_return;
引数
event_struct キーイベントを指定します。
buffer_return 変換した漢字文字列が返されます。
bytes_buffer バッファの長さを指定します。
keysym_return キーシンボルを返します。NULLを指定することもできます。
status_return XCompose構造体へのポインタを指定します。
kanji_status_return
かな漢字変換の様子が返されます。
説明
XLookupKanjiStringは、キーイベントを日本語文字列に 対応させる簡易ルーチンで、 キーイベントの修飾キービッ
トを使用してシフト、ロック、 コントロール等の処理を行います。
XLookupKanjiStringによって8bitアルファベット文字 及び16bit日本語文字を取り扱うことができます。
アルファベット文字の取り扱いについては、 XLookupKanjiStringはXLookupStringと同様の動作になります。
日本語文字の取り扱いについては、 この関数の内部においてローマ字かな変換、 かな漢字変換が行われます。 日本
語の入力時にXKanjiStatus構造体が用いられます。XKanjiStatus構造体は 以下のように定義されます。
typedef struct _XKanjiStatus {
unsigned char *echoStr; /* local echo string */
int length; /* length of echo string */
int revPos; /* reverse position */
int revLen; /* reverse length */
unsigned long info; /* other information */ │
unsigned char *mode; /* mode information */ │
struct { │
unsigned char *line; /* a grance of Kanji characters */ │
int length; /* length of it */ │
int revPos; /* reverse position of it */ │
int revLen; /* reverse length of it */ │
} gline; /* a grancing line information */ │
} XKanjiStatus;
#define KanjiModeInfo 01 │
#define KanjiGLineInfo 02 │
かな漢字変換を用いた日本語入力時には変換の対象となる読みなどを ローカルエコーする必要がありま
す。XLookupKanjiStringはローカル エコーなど表示に関することは何も行わず、代わりにローカルエコー するべき
文字列をXKanjiStatus構造体を用いて アプリケーション側に返します。
変換が確定するまでは、ローマ字かな変換されている文字や、 変換候補文字など、ローカルエコーすべき(EUC) 文字
列がechoStrメンバに より返されます。このとき、ローカルエコー文字列の 長さ、リバース表示の開始位置と長さ(
バイト単位)が、 それぞれ、lengthメンバ、revPos、revLenメンバにて 返されます。 ローカルエコーすべき文字列
のためのバッファはXLookupKanjiStringに よって自動的に確保されますが、その領域は読み取りのみに用いられるべ
きであり、 その領域に文字列を書き込んではいけません。
ローカルエコーすべき文字列が無い場合はlengthメンバに0が返ります。
ローカルエコーすべき内容が前回のXLookupKanjiStringの呼び出しのときと 変わらない場合(例えばシフトキーが押
された場合など)はlengthメンバに −1が返ります。 │
モードの変更や、候補一覧に関する情報の有無は、infoメンバによって渡され ます。infoメンバ │
のKanjiModeInfoビットがonであれば、modeに新しいモード を示す文字列が返されます。infoメンバ │
のKanjiGLineInfoビットがonであれば、 gline構造体に候補一覧等の情報が格納されています。 │
gline構造体のlineメンバには候補一覧表示のための文字列が返されます。 gline構造体のline,revPos,revLenの各メ │
ンバは、候補一覧文字列のそれぞれ、 長さ、リバース表示の開始位置、リバース表示の長さが返されます。
変換中に確定した(EUC)文字列がある場合は、 その文字列がbuffer_returnに格納され、 その文字列の長さ(バイト
単位)がこの関数の戻り値として返されます。 確定した文字列が無い場合は戻り値は0になります。
X Version 11 1 September 1988 XLookupKanjiString(3)
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────
XKANJICONTROL(3) XKANJICONTROL(3)
名前
XKanjiControl - XLookupKanjiStringでのモードや,処理の制御を行う
形式
#include <X11/kanji.h>
int XKanjiControl(dpy, win, request, arg)
Display dpy;
Window win;
int request;
char *arg;
説明
XKanjiControlはdpy, winで示されるウィンドウにおける日本語入力に 関して,requestで示される処理を行いま
す.処理によっては,引数を 伴う場合があり,その場合,引数はargにて与えます.
XKanjiControlで制御される機能としては以下があります.
request名 機能
KC_INITIALIZE かな漢字変換を初期化する.
KC_CHANGEMODE 入力モードを変更する.
KC_SETWIDTH 候補一覧表示の時の幅を指定する.
KC_FINALIZE かな漢字変換の終了処理.
KC_SETUNDEFKEYFUNCTION
未定義キーに対する機能の設定を行う.
KC_SETMODEINFOSTYLE
モード情報を数値で表現するかどうかを指定する.
KC_KAKUTEI 入力中の文字列を確定する.
KC_KILL 入力中の文字列を削除する.
KC_QUERYMODE 現在のモードを問い合わせる.
KC_SETSERVERNAME 接続するサーバを指定する.
KC_SETINITFILENAME
カスタマイズファイルを指定する.
KC_CLOSEUICONTEXT コンテクストをクローズする.
KC_QUERYMAXMODESTR
モード表示文字列の最大長を求める.
XKanjiControlの作用は基本的にはdpy, winで指定されたウィンドウで の日本語入力に対しての み作用します.ただ
し,初期化の処理や終了の処理に関してはその限りではあ りません.
XKanjiControlの操作によって未確定文字列の状態が変化したり,モードの状 態が変わることがあります.そのよう
な可能性がある場合はarg部分に変化し た情報を格納できるような構造体へのポインタを渡します.その構造体の定
義 は以下のようになります.
typedef struct {
int val; /* バッファに格納された文字列の長さが返る */
unsigned char *buffer; /* 確定文字列を格納するためのバッファを与える */
int bytes_buffer; /* 上記のバッファの大きさを与える */
XKanjiStatus *ks; /* 未確定文字列の情報を格納する構造体へのポインタ */
} XKanjiStatusWithValue;
XKanjiControlのそれぞれの機能の実行のしかたは以下の通りです.
(1) KC_INITIALIZE - かな漢字変換の初期化
KC_INITIALIZEをrequest部で指定することにより,かな漢字変換の初期 化を行います.argにはwarningメッ
セージを 格納するための(char **)型の変数へのポインタまたはNULLを指定します.初 期化の処理は基本的に
はXKanjiString(3)が最初に呼ばれた時に自動的に行わ れますが,XKanjiControlを用いて初期化する ことに
より,XKanjiString(3)での初期化処理は行われなくなります.
XKanjiString(3)の使用に先立ってXKanjiControlを用いてかな漢字変換に関 する制御を行う時などは,漢字変
換の初期化を行う必要があります.
正常終了時にはXKanjiControlの戻り値として0が返り,異常終了時には-1が 返ります.
KC_INITIALIZEを行った場合,エラーとまではいかなくとも何らかのwarningが 発生することがありま
す.warningが発生した場合はargにて与えられた 変数に対してwarning文字列の配列へのポインタが格納され
返されます.warningがないときはNULLが格納され返されます.
(例)
int res; /* エラーが返ってくる場合に備える */
char **warning;
.....
res = XKanjiControl(dpy, win, KC_INITIALIZE, &warning);
if (warning) {
char **p;
for (p = warning ; *p ; p++) {
fprintf(stderr, "%s0, *p);
}
}
第4引数に返されるwarningメッセージはライブラリの内部でmallocされます. これは,次
にKC_INITIALIZEやKC_FINALIZEが行われた時に開放されます.アプ リケーションプログラマが勝手にfreeして
はいけません.warningは今のとこ ろ最大64メッセージに限定されます.それ以上のメッセージは切捨てられ
ます.
メッセージに含まれる可能性のあるwarningには以下のものがあります.
・ カスタマイズファイルがシステムのものも含めてすべて利用できない.
・ カスタマイズファイルにシンタックスエラーがある.
・ ローマ字かな変換辞書が利用できない.
・ かな漢字変換辞書が利用できない.
・ かな漢字変換サーバに接続できない.
第4引数としてNULLを指定した場合warningメッセージは捨てられます.
(2) KC_CHANGEMODE - 入力モードの変更
入力モードをアプリケーションから変更します.requestの 部分にはKC_CHANGEMODEを指定
し,argにXKanjiStatusWithValue構造体 を指定して下さい.XKanjiStatusWithValue構造体のvalメンバにて
モー ド番号を指定することにより日本語モードが切り替わります.モード番号は以 下のマクロで示されま
す.
マクロ番号 モード
CANNA_MODE_AlphaMode アルファベットモード
CANNA_MODE_HenkanMode 変換入力モード
CANNA_MODE_KigoMode 記号入力モード
CANNA_MODE_ZenHiraKakuteiMode
全角ひらがな確定入力モード
CANNA_MODE_ZenKataKakuteiMode
全角カタカナ確定入力モード
CANNA_MODE_HanKataKakuteiMode
半角カタカナ確定入力モード
CANNA_MODE_ZenAlphaKakuteiMode
全角アルファベット確定入力モード
CANNA_MODE_HanAlphaKakuteiMode
半角アルファベット確定入力モード
CANNA_MODE_HexMode 16進コード入力モード
CANNA_MODE_BushuMode 部首入力モード
CANNA_MODE_TorokuMode 単語登録モード
この機能によりモードを変更するとモード名を始めとして多くの表示が変化を 受けます.表示の変更はargと
して指定したXKanjiStatusWithValue構造体に て返されます.
(例)
XKanjiStatus ks;
XKanjiStatusWithValue ksv;
unsigned char buf[SOMESIZE];
.....
ksv.ks = &ks;
ksv.buffer = buf;
ksv.bytes_buffer = SOMESIZE;
ksv.val = CANNA_MODE_HexMode;
XKanjiControl(dpy, win, KC_CHANGEMODE, &ksv);
len = ksv.val;
.....
/* 未確定文字列や確定文字列の情報がksvにより返されます. */
(3) KC_SETWIDTH - 候補一覧表示のための幅を指定
候補一覧のために用いられる領域のコラム数を指定します.1コラムの幅はア ルファベット文字あるいは半角
カタカナ1文字の文字幅であり,全角漢字は2 コラム占めることになります.候補一覧表示のための幅を 指
定するためにrequest部分に指定する値はKC_SETWIDTHで, このときargにコラム数を指定します.
(例)
XKanjiControl(dpy, win, KC_SETWIDTH, (char *)60);
(4) KC_FINALIZE - かな漢字変換の終了処理.
プログラムを終了するなどの局面でかな漢字変換も終了することを指定します. かな漢字変換処理を終了させ
る時は必ずこの処理を行って下さい.終わるにあ たって今まで学習した内容がファイルに登録されま
す.request部分に はKC_FINALIZEを指定します.
正常終了時に0,異常終了時に-1が戻り値として返ります.
KC_FINALIZEを行った場合,エラーとまでいかなくとも何らかのwarningが発生 することがありま
す.warningが発生した場合はargにて与えられた 変数にwarning文字列の配列へのポインタが格納され返され
ます.warningがな い場合にはNULLポインタが格納され返されます.
(例)
int res; /* エラーが返る場合に備える */
char **warning;
.....
res = XKanjiControl(dpy, win, KC_FINALIZE, &warning);
if (warning) {
char **p;
for (p = warning ; *p ; p++) {
fprintf(stderr, "%s0, *p);
}
}
第4引数に返されるwarningメッセージは,ライブラリの内部でmallocされま す.これは,次
にKC_INITIALIZEやKC_FINALIZEが行われた時に開放されます. アプリケーションプログラマが勝手にfreeして
はいけません.
warningは今のところ最大64メッセージに限定されます.それ以上のメッセー ジは切捨てられます.
メッセージに含まれる可能性のあるwarningには次のものがあります.
・ 辞書がアンマウントできない.
第4引数としてNULLを指定した場合,warningメッセージは捨てられます.
(5) KC_SETUNDEFKEYFUNCTION - 未定義キーに対する機能の設定
読みを入力している状態でC-tを打ったときのように未定義キーを入力した時 に取られる処理を指定しま
す.未定義キーに対応して行われる処理としては以 下の処理があります.
マクロ名 処理
kc_normal ビープ
kc_through アプリケーションプログラムに渡す
kc_kakutei 確定しアプリケーションプログラムに渡す
kc_kill 消去しアプリケーションプログラムに渡す
kc_normalを指定した場合,外部変数jrBeepFuncに設定された関数が未定義キー 入力時にライブラリによって
自動的に呼び出されます.jrBeepFuncに値を設定 しない場合には(jrBeepFunc == NULLの場合には)何も起こり
ません.
(例)
extern (*jrBeepFunc)(), beep();
jrBeepFunc = beep;
XKanjiControl(dpy, win, KC_SETUNDEFKEYFUNCTION, kc_normal);
(6) KC_SETMODEINFOSTYLE - モード情報の表現
モード情報を文字列ではなくビットマップなどのデータで表示したい場合があ ります.そのような場合には
モード情報として数値データが返ってくると処理 がしやすくなりま
す.XKanjiControlでKC_SETMODEINFOSTYLEを 指定し,argに1を渡すことによってそれ以後はXKanjiStatus構
造体 のmodeメンバにはモードを表す数値に'@'(0x40)を加えた1文字が返さ れるようになります.モードを表
す数値に変換する場合には返ってきた文字列 から'@'(0x40)を引きます.モードを表す数値については入力
モードの 変更((2)KC_CHANGEMODE)のこうを参照して下さい.
(7) KC_KAKUTEI,(8) KC_KILL - 入力中の文字列の放棄
入力中の文字列を何らかの都合で放棄したい場合があります.放棄する場合に 入力中の文字列を確定文字列と
して取り込んでから放棄したい場合と全く捨て てしまってから放棄したい場合があります.確定する 場合に
はXKanjiControlにてKC_KAKUTEIを指定し,放棄する 場合にはKC_KILLを指定します.
この処理は表示に影響を与えるので第4引数にはXKanjiStatusWithValue構造 体を指定しなければなりません.
XKanjiStatusWithValue ksv;
XKanjiStatus ks;
unsigned char buf[SOMESIZE];
.....
ksv.ks = &ks;
ksv.buffer = buf;
ksv.bytes_buffer = SOMESIZE;
XKanjiControl(dpy, win, KC_KAKUTEI, &ksv);
len = ksv.val;
.....
(9) KC_QUERYMODE - モードの問い合わせ
現在のモードを問い合わせるにはXKanjiControlでKC_QUERYMODEを指定します.
第4引数にはモード文字列を格納するための文字配列のポインタを指定します. モード文字列はヌル文字で終
わる文字列です.ここに数値が返るようにするに はXKanjiControlでKC_SETMODEINFOSTYLEを指定してモード文
字列のスタイル を変更しておきます.
(例)
char currentMode[MAXMODELEN];
.....
XKanjiControl(dpy, win, KC_QUERYMODE, currentMode);
.....
(10) KC_SETSERVERNAME - サーバの指定
かな漢字変換サーバとしてどのサーバを使うかをアプリケーションプログラム を終了することなしに切替える
ことが可能です.かな漢字変換サーバとして接 続するべきサーバを指定するに
はXKanjiControlでKC_SETSERVERNAMEを指定し ます.第4引数には接続したいサーバ名を指定します.
(11) KC_SETINITFILENAME - カスタマイズファイルの指定
カスタマイズファイルをアプリケーションプログラム側から変更することがで きます.カスタマイズファイル
の変更はXKanjiControlの 第3引数にKC_SETINITFILENAMEを指定し,第4引数にファイル名文字列を指定 するこ
とにより行います.この処理を行う場合はKC_INITIALIZEに先立って実 行しておかなければなりません.
(例)
char *inifile = "app-own.canna"
.....
XKanjiControl(dpy, win, KC_SETINITFILENAME, initfile);
.....
(12) KC_CLOSEUICONTEXT - コンテクストのクローズ
XKanjiControlやXKanjiStringを呼び出すと,dpy, winの組み合わせに 対してひとつの変換コンテクストを割
り当てます. 今まで使われていないdpy, winの 組み合わせをXKanjiStringあるいはXKanjiControlに与えるこ
とが可能 であり,その場合,そのウィンドウ用に新たにコンテクストが作成され必要なメ モリが確保されま
す.
それまで使用していたウィンドウが使われなくなった場合に,そのウィンドウに割 り当てて使っていたコンテ
クスト用に確保されたメモリを 開放するにはXKanjiControlを第3引数にKC_CLOSEUICONTEXTを指定して呼び 出
します.
この処理は表示の変化をともなうので第4引数にはXKanjiStatusWithValue構 造体を与えます.
(例)
XKanjiStatusWithValue ksv;
XKanjiStatus ks;
unsigned char buf[SOMESIZE];
.....
ksv.ks = &ks;
ksv.buffer = buf;
ksv.bytes_buffer = SOMESIZE;
XKanjiControl(dpy, win, KC_CLOSEUICONTEXT, &ksv);
.....
(13) KC_QUERYMAXMODESTR - モード表示文字列の最大長を求める.
初期化ファイルにてモード表示文字列がカスタマイズできますが,カスタマイ ズされた結果モード表示文字列
にどれだけの表示領域を確保するかを調べる必 要がある場合があります.XKanjiControlを第3引数
にKC_QUERYMAXMODESTRを 指定して呼び出すことにより,モード表示文字列として何コラム必要かが返り 値と
して返されます.ここで言うコラムとは半角英数文字の文字幅を1とした ときの値を示します.
第4引数は用いられないのでダミー値として0を与えます.
(例)
int max_mode_columns;
.....
max_mode_columns = XKanjiControl(dpy, win, KC_QUERYMAXMODESTR, 0);
.....
4 April 1991 XKANJICONTROL(3)