日本語OpenVMS
IMLIB/OpenVMS ライブラリ・
リファレンス・マニュアル


前へ 次へ 目次 索引


2.3.8.2 入力文字列編集の実現

入力文字列編集に関連する ACTION を以下に示します。

入力文字列編集時には,上記の ACTION によって変換領域は解除しません。バッファの内容は ECHO と DELETE を除いて変化しません。ECHO のときは,カーソル位置に入力されたキーに対応する文字を挿入し,DELETE のときは,カーソルの左側の文字を削除します。文字の挿入と削除は,3つのバッファすべてに対して適用されます。

2.3.8.3 例外処理

入力文字列編集における例外条件を,以下に示します。

上記のような場合にはアプリケーションは,PROFILEのINDEX "DEC-JAPANESE.OUTRANGE.cursorPosition" の値によって動作を決定します。この値が "none" のときは,何も実行しません。カーソルはその位置に留まります。この値が "done" のときは,現在の変換を終了して,アプリケーションがそのキーに対して定義した動作を実行します。

2.3.8.4 オーバーストライク・モード

文字セル端末用のアプリケーションの多くは,オーバーストライク・モード (上書き) をサポートしています。ここには,オーバーストライク・モードの扱いについて IMLIB が推奨する方法について記述します。

IMLIB は,通常の編集状態がオーバーストライク・モードであっても入力文字列編集中は,インサート・モード ( 挿入 ) の動きをする方法をお勧めします。かな漢字変換が終了して確定した文字列は,アプリケーションのオーバーストライク/インサート・モードの設定に従って,アプリケーションのバッファ中に上書き,または挿入されます。次にオーバーストライク・モードにおける入力文字列編集について,具体的な例をあげて説明します。IMLIB は 2 つの実現方法を併記します。どちらの方法を選択するかはアプリケーションの責任です。カーソル位置は "_" で示します。

図 2-3 オーバーストライク編集の例その1:固定法


図 2-4 オーバーストライク編集の例その2:浮動法


「固定法」は,スクリーン入力型のアプリケーション,たとえばエディタなどに適した実現方法です。すでにある文字列の位置が移動しないという利点があります。しかし,入力文字列が長すぎると元の文字列が見えなくなります。

これに対して「浮動法」は,行入力型のアプリケーションに適した実現方法といえます。元の文字列は編集中も見ることができます。しかし,最終的には元の位置に戻る文字列も,編集中は移動してしまうことになります。また,確定したときに上書きされるので,上書きされた文字列は確定したときに突然消えることになります。

2.3.9 自動ローマ字かな変換における入力文字列編集

ここでは,自動ローマ字かな変換を行う際に問題となることについて記述します。

自動ローマ字かな変換状態での入力文字列編集において,最も複雑な点は,
「キー入力バッファ」の内容と「キー・エコー・バッファ」の内容が異なることです。ユーザから見えるのは「キー・エコー・バッファ」だけであるにもかかわらず,編集は両方のバッファに対して行わなければなりません。

ローマ字とひらがなは 1 対 1 に対応しないため,ひらがなが表示されている状態で,ローマ字の1文字だけを操作するということはできません。編集時にカーソルはひらがなの上を1文字ずつ移動するので,「キー入力バッファ」には,どの位置にひらがなの境界があるのかを示す情報が必要になります。

たとえば,「キー入力バッファ」に "nihongo" という文字列が入っているとすると,「キー・エコー・バッファ」は"にほんご"となっています。このとき「キー入力バッファ」の中の "ni", "ho", "n", "go" がそれぞれ,ひらがなに対応しているという情報を持っておかなければなりません。「キー・エコー・バッファ」中で "ほ" が消去されると,「キー入力バッファ」においては"ho"が消去されることになります。これは,ひらがな文字1文字に対して,ローマ字が複数文字対応している例です。このとき"ho"は1編集単位です。

ローマ字複数文字に,ひらがな複数文字を対応させなければならない場合もあります。たとえば,ローマ字"ryoukin"に対する,ひらがな "りょうきん" がこれにあたります。この場合ひらがな"り"に対応するローマ字は存在しません。そのかわり,ひらがな "りょ" にローマ字 "ryo" が対応します。従って,ローマ字文字列の中の "ryo",ひらがな文字列の中の "りょ" が編集単位となります。カーソルは編集単位でしか移動できませんので,"りょ" の間にカーソルが置かれることはありません。

上記 2 つの例からわかるように,編集単位を示す情報は「キー入力バッファ」と「キー・エコー・バッファ」の両方に必要です。この情報は,入力が行われるのと同時に付けられます。両方のバッファ内には,常に同じ数の編集単位が存在します。


第 3 章
ACTIONの実行

アプリケーションは,GET KEY ACTION (VMSバインディングでは GET ACTION) によって返された ACTION を順番に実行します。この章は,ACTION を実行するモジュールの作成方法について書かれています。

3.1 ACTION の定義

1 度の GET KEY ACTION の呼び出しによって複数の ACTION が返されることもあります。このときにアプリケーションは, 1 つ 1 つの ACTION を順番に実行します。 VMS バインディングでは,SET KEY,GET ACTION の 2 つのルーチンによって GET KEY ACTION と同じ機能が実行されます。 1 度の GET ACTION では,ACTION が 1 つだけ返されますので, IM__LASTACTION というステータスが返されるまで,繰り返し GET ACTION を call することになります。 KEYBIND ファイルに定義されていないキーが押されたときには GET KEY ACTION から ACTION が返されません。これはそのキーはかな漢字変換キーではないという意味ですので,アプリケーションはかな漢字変換を終了して「初期状態」に戻し (INIT KEY STATE),アプリケーションがそのキーに対応する機能を実行します。このとき,かな漢字変換を実行中で「漢字変換状態」にあると,変換結果の学習も行わなければなりません。


第 4 章
アプリケーションの作成方法

この章ではアプリケーションの作成方法について説明します。

4.1 アプリケーションが用意する資源

IMLIBを使うアプリケーションは,以下に示す資源を用意しなければなりません。

  1. キー入力バッファ

    キー入力に対応する文字列をそのままの形で保存するバッファ。

  2. キー・エコー・バッファ

    自動ローマ字かな変換をサポートする場合には,ローマ字変換後の文字列を保持するためにこのバッファが必要です。

  3. 表示バッファ

    画面表示と同じ文字列を保持するバッファ。

4.2 ACTION による状態の遷移

IMLIBを使うアプリケーションは,かな漢字変換における内部状態を知っておかなければなりません。状態は,起動時には「初期状態」にあり,その状態は実行される ACTIONによって変化します。状態とその状態間の遷移を 図 4-1 に示します。

図 4-1 かな漢字変換の内部状態と状態間の遷移


図 4-1 に示される4つの丸は内部状態を表し,それらをつなぐ矢印は状態間の遷移を示します。内部状態には,「初期状態」,「入力状態」,「かな変換状態」,「漢字変換状態」があります。それぞれの状態の意味を以下に示します。

(1) START, START_SELECTED
(2) ECHO, MOVE_LEFT, MOVE_RIGHT, HEAD, TAIL, DELETE
(3) HIRAGANA, KATAKANA, HANKAKU_KANA,HANKAKU, ZENKAKU, SYMBOL, UPPER, LOWER, RESTORE_ECHO
(4) CONVERT
(5) DONE
(6) HIRAGANA, KATAKANA, HANKAKU_KANA,HANKAKU, ZENKAKU, SYMBOL, UPPER, LOWER
(7) CONVERT
(8) DONE
(9) RESTORE_STRING
(10) CLA_HIRAGANA, CLA_KATAKANA, CLA_HANKAKU_KANA,CLA_ZENKAKU, CLA_HANKAKU, NEXT_CLAUSE, PREV_CLAUSE, SHORTEN_CLAUSE, EXTEND_CLAUSE, NEXT_CANDIDATE, PREV_CANDIDATE
(11) DONE
(12) RESTORE_STRING
(13) HIRAGANA, KATAKANA, HANKAKU_KANA, HANKAKU, ZENKAKU, SYMBOL, UPPER, LOWER, RESTORE_ECHO

4.3 ACTIONの動作

以下にACTIONごとに実行する機能を示します。同じACTIONでも,そのときの状態によって実行する機能が異なります。


前へ 次へ 目次 索引