この章ではアプリケーションの作成方法について説明します。
IMLIBを使うアプリケーションは,以下に示す資源を用意しなければなりません。
キー入力に対応する文字列をそのままの形で保存するバッファ。
自動ローマ字かな変換をサポートする場合には, ローマ字変換後の文字列を保持するためにこのバッファが必要です。
画面表示と同じ文字列を保持するバッファ。
IMLIBを使うアプリケーションは, かな漢字変換における内部状態を知っておかなければなりません。 状態は,起動時には「初期状態」にあり, その状態は実行されるACTIONによって変化します。 状態とその状態間の遷移を 図 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でも,そのときの状態によって実行する機能が異なります。
バッファの初期設定を行い,入力できる状態にします。STARTを実行した後, ECHOによってバッファに文字が入っていきます。STARTによって入力状態に移ります。 この遷移は 図 4-1の(1)で示されます。
エラーです。エラー処理の方法はアプリケーションごとに定義されます。 変換途中の文字列を確定するときには, INIT KEY STATEを呼んでください。 また内部状態を「初期状態」に設定してください。
バッファの初期設定を行った後, アプリケーションは選択領域の文字列をバッファに書き込みます。 START_SELECTEDによって入力状態に移ります。 この遷移は図 4-1の(1)で示されます。
エラーです。エラー処理の方法はアプリケーションごとに定義されます。 変換途中の文字列を確定するときには, INIT KEY STATEを呼んでください。 また内部状態を「初期状態」に設定してください。
押されたキーに対応する文字を,入力バッファの現在の位置に挿入します。 自動ローマ字かな変換モードのときには, キー入力バッファをローマ字かな変換したものをキー・エコー・バッファに挿入します。 かなキーが押されたときに,アプリケーションが半角カナをキー入力バッファに入れるのか, 全角かなを入れるのかは,PROFILEファイルに書かれている DEC-JAPANESE.ECHO.kanaというINDEXによって決めます。 アプリケーションが半角カナをサポートしていないときには, 半角カナを全角ひらがな,または全角カタカナに変換してキー入力バッファに入れてください。 この遷移は図 4-1の(2)で示されます。
エラーです。エラー処理の方法はアプリケーションごとに定義されます。 内部状態が「初期状態」でないときに,変換途中の文字列を確定する場合には INIT KEY STATEを呼んでください。また内部設定を「初期状態」に設定してください。
キー入力バッファの内容に対して,ACTIONに従った変換を行い, その結果を表示バッファに入れます。状態はかな変換状態に移ります。 この遷移は図 4-1の(3)で示されます。
キー入力バッファの内容に対して,ACTIONに従った変換を行い, その結果を表示バッファに入れます。 この遷移は図 4-1の(6)で示されます。
キー入力バッファの内容に対してACTIONに従った変換を行い, その結果を表示バッファに入れます。内部状態はかな変換状態に移ります。 この遷移は 図 4-1の(13)で示されます。
エラーです。エラー処理の方法はアプリケーションごとに定義されます。
現在の文節に対してACTIONに従った動作を行い,その結果を表示バッファに入れます。 現在DECが提供するかな漢字変換ルーチンを使う場合には,CLA_ZENKAKU, CLA_HANKAKUは容易に実現することはできませんので,CLA_ZENKAKU, CLA_HANKAKUのサポートはアプリケーションの任意です。 CLA_ZENKAKU, CLA_HANKAKUをサポートしないアプリケーションに, これらのACTIONが指定されたときには,アプリケーションは何も実行しません。 この遷移は 図 4-1の(10)で示されます。
現在の文節が,最後の文節であるときに NEXT_CLAUSEが指定された場合, または現在の文節が最初の文節であるときに, PREV_CLAUSEが指定された場合には指定された動作を実行することができません。 この場合には,PROFILEのINDEX "DEC-JAPANESE.OUTRANGE.clauseNumber"の値によって動作を決定します。
何も実行しません。
現在の文節が最後の文節のときに NEXT_ CLAUSEが指定された場合には最初の文節に, 最初の文節のときにPREV_CLAUSEが指定された場合には最後の文節に移ります。
現在の変換を終了してアプリケーションがそのキーに対して定義した動作を実行します。
現在の文節長が最小であるときに SHORTEN_CLAUSEが指定されたとき, または現在の文節長が最大であるときにEXTEND_CLAUSEが指定された場合には, 指定された動作を実行することができません。この場合には,PROFILEのINDEX "DEC-JAPANESE.OUTRANGE.clauseSize"の値によって動作を決定します。
何も実行しません。
現在の文節長が最小であるときに SHORTEN_CLAUSEが指定された場合には, 文節長を最大長に,現在の文節長が最大であるときに EXTEND_CLAUSEが指定された場合には,文節長を最小長にします。
現在の変換を終了して,アプリケーションがそのキーに対して定義した動作を実行します。
エラーです。エラー処理の方法はアプリケーションごとに定義されます。 内部状態が「初期状態」でないときに,変換途中の文字列を確定する場合には, INIT KEY STATEを呼んでください。また内部状態を「初期状態」に設定してください。
変換領域の先頭あるいは最後にカーソルを移動します。 この遷移は 図 4-1の(2)で示されます。
エラーです。エラー処理の方法はアプリケーションごとに定義されます。 内部状態が「初期状態」でないときに,変換途中の文字列を確定する場合には, INIT KEY STATEを呼んでください。また内部状態を「初期状態」に設定してください。
変換領域内でカーソルを左右に移動します。カーソルが変換領域を外れるような操作をしたときは, すべてのバッファをクリアして初期状態に戻す方法と, カーソル移動を行わない方法の 2つがあります。 この遷移は 図 4-1の(2)で示されます。
現在のカーソル位置が,変換領域の最初の文字にあるときに MOVE_ LEFTが指定されたとき,または現在のカーソル位置が, 変換領域の最後の文字にあるときにMOVE_RIGHTが指定されたときには, 指定された動作を実行することができません。 この場合には,PROFILEのINDEX "DEC-JAPANESE.OUTRANGE.cursorPosition"の値によって動作を決定します。
何も実行しません。
現在の変換を終了してアプリケーションがそのキーに対して定義した動作を実行します。
エラーです。エラー処理の方法はアプリケーションごとに定義されます。 内部状態が「初期状態」でないときに,変換途中の文字列を確定する場合には, INIT KEY STATEを呼んでください。また内部状態を「初期状態」に設定してください。
カーソルの左側の1文字を消去します。 この遷移は 図 4-1の(2)で示されます。
エラーです。エラー処理の方法はアプリケーションごとに定義されます。 内部状態が「初期状態」でないときに,変換途中の文字列を確定する場合には, INIT KEY STATEを呼んでください。また内部状態を「初期状態」に設定してください。
表示バッファの内容を入力文字列として格納し,すべてのバッファ内の文字を すべて消去します。スクリーンにビデオ属性が表示されていたら, それをリセットします。 この遷移は図 4-1の(5)で示されます。
表示バッファの内容を入力文字列として格納し,すべてのバッファ内の文字を すべて消去します。スクリーンにビデオ属性が表示されていたら, それをリセットします。 この遷移は 図 4-1の(8)で示されます。
表示バッファの内容を入力文字列として格納し,すべてのバッファ内の文字をすべて消去します。 スクリーンにビデオ属性が表示されていたら,それをリセットします。 また現在の変換結果の学習を行います。 この遷移は 図 4-1の(11)で示されます。
何も実行しません。
キー・エコー・バッファ内の文字列を,表示バッファにコピーします。 状態は入力状態に移ります。 この遷移は 図 4-1の(9)で示されます。
キー・エコー・バッファ内の文字列を表示バッファにコピーします。 状態は入力状態に移ります。変換の学習は行いません。 この遷移は 図 4-1の(12)で示されます。
エラーです。エラー処理の方法はアプリケーションごとに定義されます。 内部状態が「初期状態」でないときに,変換途中の文字列を確定する場合には, INIT KEY STATEを呼んでください。また内部状態を「初期状態」に設定してください。
何も実行しません。
キー・エコー・バッファ内の文字列を表示バッファにコピーします。 状態はかな変換状態に移ります。 この遷移は 図 4-1の(6)で示されます。
キー・エコー・バッファ内の文字列を表示バッファにコピーします。 状態はかな変換状態に移ります。 この遷移は 図 4-1の(13)で示されます。
エラーです。エラー処理の方法はアプリケーションごとに定義されます。 内部状態が「初期状態」でないときに,変換途中の文字列を確定する場合には, INIT KEY STATEを呼んでください。また内部状態を「初期状態」に設定してください。
キー・エコー・バッファ内の文字列を表示バッファにコピーします。 状態は,かな変換状態に移ります。 この遷移は図 4-1の(3)で示されます。
キーが定義されていないことを明示的に指定するACTIONです。 この場合には,アプリケーションはGET KEY ACTIONまたはSET KEYから, IM__KEYNOTDEFINEDという条件値が返されたときと同じ動作をします。
すべてのバッファ内の文字をすべて消去します。スクリーンにビデオ属性が 表示されていたら,それをリセットします。 内部状態が「初期状態」でないときには, INIT KEY STATEを呼んでください。
すべてのバッファ内の文字をすべて消去します。 スクリーンにビデオ属性が表示されていたら,それをリセットします。 また,INIT KEY STATEを呼んでください。
現在の変換結果を学習させてから,上記の動作を実行します。
表 4-1に, 現在の状態とACTIONによる状態遷移をまとめています。 表の中の数字は 図 4-1 の状態遷移を示す矢印に付けられた数字と一致しています。 表の中で使われている表記は以下のとおりです。
カーソル移動に関連したACTIONです。 MOVE_LEFT, MOVE_RIGHT, HEAD, TAIL, DELETE がこれにあたります。
単純な変換を行うACTIONです。 HIRAGANA, KATAKANA, HANKAKU_KANA, HANKAKU, ZENKAKU, SYMBOL, UPPER, LOWERがこれにあたります。
漢字変換中の文節に関連したACTIONです。CLA_HIRAGANA, CLA_ KATAKANA, CLA_HANKAKU_KANA,CLA_ZENKAKU, CLA_HANKAKU, NEXT_ CLAUSE, PREV_CLAUSE, SHORTEN_CLAUSE, EXTEND_CLAUSE, NEXT_ CANDIDATE, PREV_CANDIDATE がこれにあたります。
今の状態でこのようなACTIONは許されないことを示します。KEYBINDファイルに, このようなACTIONが記述されていると,KEYBINDコンパイラは警告を出します。
このACTIONが来たときにはアプリケーションは何も実行しないことを示します。
ACTION | 初期状態 | 入力状態 | かな変換状態 | 漢字変換状態 |
---|---|---|---|---|
START | 入力状態(1) | error | error | error |
START_SELECTED | 入力状態(1) | error | error | error |
ECHO | error | 入力状態(2) | error | error |
カーソル | error | 入力状態(2) | error | error |
かな変換 | error | かな変換状態(3) | かな変換状態(6) | かな変換状態(13) |
CONVERT | error | 漢字変換状態(4) | 漢字変換状態(7) | no action |
DONE | no action | 初期状態(5) | 初期状態(8) | 初期状態(11) |
文節操作 | error | error | error | 漢字変換状態(10) |
RESTORE_ STRING | error | no action | 入力状態(9) | 入力状態(12) |
RESTORE_ECHO | error | かな変換状態(3) | かな変換状態(6) | かな変換状態(13) |