前へ | 次へ | 目次 | 索引 |
入力文字列編集に関連する 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-4 オーバーストライク編集の例その2:浮動法
「固定法」は,スクリーン入力型のアプリケーション,たとえばエディタなどに適した実現方法です。すでにある文字列の位置が移動しないという利点があります。しかし,入力文字列が長すぎると元の文字列が見えなくなります。
これに対して「浮動法」は,行入力型のアプリケーションに適した実現方法といえます。元の文字列は編集中も見ることができます。しかし,最終的には元の位置に戻る文字列も,編集中は移動してしまうことになります。また,確定したときに上書きされるので,上書きされた文字列は確定したときに突然消えることになります。
2.3.9 自動ローマ字かな変換における入力文字列編集
ここでは,自動ローマ字かな変換を行う際に問題となることについて記述します。
自動ローマ字かな変換状態での入力文字列編集において,最も複雑な点は,
「キー入力バッファ」の内容と「キー・エコー・バッファ」の内容が異なることです。ユーザから見えるのは「キー・エコー・バッファ」だけであるにもかかわらず,編集は両方のバッファに対して行わなければなりません。
ローマ字とひらがなは 1 対 1 に対応しないため,ひらがなが表示されている状態で,ローマ字の1文字だけを操作するということはできません。編集時にカーソルはひらがなの上を1文字ずつ移動するので,「キー入力バッファ」には,どの位置にひらがなの境界があるのかを示す情報が必要になります。
たとえば,「キー入力バッファ」に "nihongo" という文字列が入っているとすると,「キー・エコー・バッファ」は"にほんご"となっています。このとき「キー入力バッファ」の中の "ni", "ho", "n", "go" がそれぞれ,ひらがなに対応しているという情報を持っておかなければなりません。「キー・エコー・バッファ」中で "ほ" が消去されると,「キー入力バッファ」においては"ho"が消去されることになります。これは,ひらがな文字1文字に対して,ローマ字が複数文字対応している例です。このとき"ho"は1編集単位です。
ローマ字複数文字に,ひらがな複数文字を対応させなければならない場合もあります。たとえば,ローマ字"ryoukin"に対する,ひらがな "りょうきん" がこれにあたります。この場合ひらがな"り"に対応するローマ字は存在しません。そのかわり,ひらがな "りょ" にローマ字 "ryo" が対応します。従って,ローマ字文字列の中の "ryo",ひらがな文字列の中の "りょ" が編集単位となります。カーソルは編集単位でしか移動できませんので,"りょ" の間にカーソルが置かれることはありません。
上記 2 つの例からわかるように,編集単位を示す情報は「キー入力バッファ」と「キー・エコー・バッファ」の両方に必要です。この情報は,入力が行われるのと同時に付けられます。両方のバッファ内には,常に同じ数の編集単位が存在します。
アプリケーションは,GET KEY ACTION (VMSバインディングでは GET ACTION) によって返された ACTION を順番に実行します。この章は,ACTION を実行するモジュールの作成方法について書かれています。
新しい入力を開始します。それまで確定していなかった文字列は確定し,変換領域はリセットされます。「漢字変換状態」にあるときには,かな漢字変換の学習も行わなければなりません。STARTの後,状態は「入力状態」に移ります。
アプリケーションが提供する文字列を,かな漢字変換前の入力文字列とします。たとえば選択した領域をかな漢字変換の対象にするときに,この機能が使われます。それまで確定していなかった文字列は確定し,変換領域はリセットされます。「漢字変換状態」にあるときには,かな漢字変換の学習も行わなければなりません。その後アプリケーションは文字列バッファに文字列を書き込みます。START_SELECTEDの後,状態は「入力状態」に移ります。
入力されたキーに対応した文字を表示します。自動ローマ字かな変換が指定されている場合には,ローマ字をかなに変換して表示します。入力されたキーがかなキーのときの表示方法 (半角カタカナ,全角ひらがななど) は,アプリケーションの任意です。もしその文字が表示できる文字でないときには,何も実行しません。アプリケーションは関係するバッファにこの文字を格納します。この機能は「入力状態」にあるときのみ有効です。
カーソルの直前の文字を削除します。この機能は「入力状態」にあって,カーソルが変換領域の中にあるときのみ有効です。
カーソルを左に移動します。この機能は「入力状態」にあって,カーソルが変換領域の中にあるときのみ有効です。
カーソルを右に移動します。この機能は「入力状態」にあって,カーソルが変換領域の中にあるときのみ有効です。
カーソルを変換領域の先頭に移動します。この機能は「入力状態」にあるときのみ有効です。
カーソルを変換領域の末尾に移動します。この機能は「入力状態」にあるときのみ有効です。
変換領域の中のアルファベットとカタカナをひらがなに変換します。
変換領域の中のアルファベットとひらがなをカタカナに変換します。
変換領域の中のアルファベット,ひらがなおよびカタカナを半角カナに変換します。
変換領域の中の半角文字を全角に変換します。
変換領域の中の全角文字を半角に変換します。
変換領域の中のアルファベット(全角および半角)の小文字を,大文字に変換します。
UPPERは表示されている文字列に対して実行されます。
変換領域の中のアルファベット(全角および半角)の大文字を,小文字に変換します。
LOWERは表示されている文字列に対して実行されます。
変換領域の中のシンボル変換を実行します。詳しくは『日本語ユーティリティ利用者の手引き』を参照してください。変換できなかった場合は入力文字列に戻ります。
変換領域に対してかな漢字変換を実行します。この機能は「入力状態」または「かな変換状態」にあるときのみ有効です。
現在の文節に対して次候補を得る操作を実行します。この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節に対して前候補を得る操作を実行します。この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節中のカタカナをひらがなに変換します。この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節中のひらがなをカタカナに変換します。この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節中の半角のアルファベットを,全角に変換します。この機能は「漢字変換状態」にあるときのみ有効です。現在のかな漢字変換の方法では,この機能はサポートできません。
現在の文節中の全角のアルファベットを,半角に変換します。この機能は「漢字変換状態」にあるときのみ有効です。現在のかな漢字変換の方法では,この機能はサポートできません。
現在の文節を文頭方向に1つ移動します。この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節を縮小します。この機能は「漢字変換状態」にあるときのみ有効です。
現在の文節を拡大します。この機能は「漢字変換状態」にあるときのみ有効です。
「初期状態」に戻ります。「漢字変換状態」にある場合は,変換の学習を行います。バッファの内容をすべてクリアし,画面上のビデオ属性を消します。
変換領域内を入力文字列に戻して,「入力状態」に移ります。これにより,文字列の編集ができるようになります。
変換領域内を入力文字列に戻して,「かな変換状態」へ移ります。次の入力文字が変換操作以外の入力であれば,確定後,入力に応じた操作を行います。
このとき押されたキーは定義されていないことを明示的に指定します。 NONE を指定したときには,そのキーに対して他の ACTION を同時に指定することはできません。NONE と他の 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.1 アプリケーションが用意する資源
IMLIBを使うアプリケーションは,以下に示す資源を用意しなければなりません。
自動ローマ字かな変換をサポートする場合には,ローマ字変換後の文字列を保持するためにこのバッファが必要です。
画面表示と同じ文字列を保持するバッファ。
IMLIBを使うアプリケーションは,かな漢字変換における内部状態を知っておかなければなりません。状態は,起動時には「初期状態」にあり,その状態は実行される ACTIONによって変化します。状態とその状態間の遷移を 図 4-1 に示します。
図 4-1 かな漢字変換の内部状態と状態間の遷移
図 4-1 に示される4つの丸は内部状態を表し,それらをつなぐ矢印は状態間の遷移を示します。内部状態には,「初期状態」,「入力状態」,「かな変換状態」,「漢字変換状態」があります。それぞれの状態の意味を以下に示します。
かな漢字変換を行っていない状態です。この状態にあるときアプリケーションは,かな漢字変換に関係しないアプリケーションの機能を実行します。たとえば,ユーザがかな漢字変換に関係しないところで,カーソルを移動しているときがこの状態にあたります。カーソル移動はアプリケーションの機能ですので,IMLIBは関係しません。
ユーザがかな漢字変換をするために,「ひらがな」や「ローマ字」を入力しているときがこの状態です。アプリケーションによっては,かな漢字変換の対象となる部分を高輝度やボールド表示にすることがあります。入力途中で間違いに気づいたときの編集は,入力状態で行われます。漢字変換をした後に入力の間違いに気づき,入力文字列に戻したときもこの状態になります。
入力した文字列に対してひらがな変換,カタカナ変換,半角カナ変換,全角変換,半角変換,シンボル変換などを実行した状態を総称して「かな変換状態」と呼びます。さらに,RESTORE_ECHO アクションによって一時的に変換が解除されたときもこの状態になります。
かな漢字変換を行った後の状態です。文節縮小,文節移動,文節カタカナ変換などを行っているときは,この状態にあたります。状態の遷移は,GET KEY ACTIONまたはSET KEYの呼び出しの際に得られるACTIONによって引き起こされます。状態遷移に付けられた番号に対応するACTIONを,以下に示します。ある状態にあるときに指定されたACTIONが,この図の中にないときは,その状態においてそのACTIONはエラーです。各ACTIONのエラー処理については, 第 4.3 節 を参照してください。
(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 |
以下にACTIONごとに実行する機能を示します。同じACTIONでも,そのときの状態によって実行する機能が異なります。
前へ | 次へ | 目次 | 索引 |