かつて日本語入力コンソーシアムの公式サイトに掲載されていた、状態遷移表です(2000-12-05修正バージョン)。現在は異なる内容に書き換えられ参照できないため、ここで再掲します。
OASYS方式(変換キー独立型)の処理
補足
- 当該キー押し上げ
当該キー押し上げとは各状態へ遷移したさい、遷移の原因となった最後のキーが離されたことです。
3キー分岐処理
3キー分岐処理は日本語入力コンソーシアムの同時打鍵遷移表において「処理A」と表記されたものであり、親指シフト同時打鍵判定の骨格ともいえる処理です。
ノンーシフト・タイム
- 最初に任意の文字キー(上図の例では[A]キー)が押されてから親指キーが押されるまでの時間。
- 親指シフトキーが押されていないのでノンーシフト・タイム。
シフト・タイム
- 親指キーが押されてからつぎの文字キー(上図の例では[B]キー)が押されるまでの時間。
- 同時打鍵状態なのでシフト・タイム。
同時打鍵状態からさらに任意の文字キー(上図の例では[B]キー)が押され、結果として3キー同時押しになった時点で分岐処理を行います。
ノンーシフト・タイム ≧ シフト・タイム
- 文字([A])キー出力 → 文字([B])キー&親指キー同時打鍵出力 → 初期化
ノンーシフト・タイム < シフト・タイム
- 文字([A])キー&親指キー同時打鍵出力 → 新文字([B])キーセット
となります。
引用者補足
日本語ワードプロセッサOASYSにおいて親指キーは通常のシフトキーと基本的に同等の扱いになっていたため、親指キーの単独打鍵は何も出力しません。
変換キー共用型の処理
当該キー押し上げ
- 親指キー押し上げ → 同時打鍵成立 → 出力 → 初期化へ
- 文字キー押し上げ → 文字キーリリース処理
文字キーリリース処理
文字キーリリース処理は変換キー共用型NICOLA固有の処理になります。
文字キーが単独で押されている時間をノン-シフト・タイム
親指キーが押されて同時打鍵になってから文字キーが離されるまでの時間をシフト・タイム
とします。
ここで
ノン-シフト・タイム ≧ シフト・タイム かつ シフト・タイム < τ
(τ=タウは固定値)
の条件を満たしたときには、同時打鍵未成立とみなし、
- 文字キー出力 → 親指キーセットへ
そうでなければ
- 文字キー&親指キー同時打鍵出力 → 初期化
となります。
引用者補足
NICOLA規格では固定値と比較しない方法、すなわち
ノン-シフト・タイム ≧ シフト・タイム
のみで判定する方法も提案しています。
固定値を使う場合であっても、文字キーを離すまでの時間シフト・タイムはブレの要素が大きいため、ここをタイトにすると逆に判定精度が落ちる可能性があります。引用者個人の見解だとお断りしたうえで、固定値は70ms~100ms程度の比較的大きめの値に設定すべきかと考えます。
「親指シフト・いんぷりめんと」テキストバージョン
以下は状態遷移表のテキスト版です。
前提
- 最初に押した文字キーの時間を FIG_TIME
- 親指キーの押し下げ時間を THUMB_TIME
とする。
初期状態
文字キー押し下げ
- 文字キー情報(キーコード、押し下げ時間など)取得(タイマーセット)
- 文字キーセット状態へ
親指キー押し下げ
- 親指キー情報取得、タイマーセット
- 親指キーセット状態へ
その他のイベント
- 処理なし
文字キーセット状態
文字キー押し下げ(新たに押された文字キー)
- 文字キー出力
- あらたに押された文字キー情報取得、タイマーセット
- 文字キーセット状態へ
親指キー押し下げ
- 親指キー情報取得、タイマーセット
- 文字キー&親指キーセット状態へ
当該キー押し上げ
- 文字キー出力
- 初期化へ
タイムアウト
- 文字キー出力
- 初期化へ(必要ならばリピート処理、ここでは割愛)
その他のイベント
- 文字キー出力
- 初期化へ
親指キーセット状態
文字キー押し下げ
- 文字キー情報取得
- 同時打鍵確定・出力
- 初期化へ(もしくはリピート処理)
親指キー押し下げ
- 親指キー出力(OASYSでは通常Shiftと同じ動作のため出力なし)
- 親指キー情報取得、タイマーセット
- 親指キーセット状態へ
当該キー押し上げ
- 親指キー出力(OASYSでは出力なし)
- 初期化へ
タイムアウト
OASYSの場合は処理なし
OASYSでなければ
- 親指キー出力
- 初期化へ(もしくはリピート処理)
その他のイベント
- 親指キー出力(OASYSの場合は出力なし)
- 初期化へ
文字キー&親指キーセット状態
文字キー押し下げ
(3キー分岐処理)
新たに押した文字キーの時間を NEW_TIMEとすると
条件1 THUMB_TIME – FIG_TIME ≧ NEW_TIME – THUMB_TIME
( ノンーシフト・タイム ≧ シフト・タイム ) の場合
- 文字キー出力
- 新文字キーセット
- 新文字キー&親指キー同時打鍵確定・出力
- 初期化へ(もしくはリピート処理)
条件2 THUMB_TIME – FIG_TIME < NEW_TIME – THUMB_TIME
( ノンーシフト・タイム < シフト・タイム ) の場合
- 文字キー&親指キー同時打鍵確定・出力
- 親指キー情報クリア
- あらたに押された文字キー情報取得、タイマーセット
当該キー押し上げ
条件 1 変換キー共用型NICOLAの設定になっていて、
条件 2 先に押した文字キーが押し上げられて、
条件 3 条件 2の時間をNEW_TIMEと定義したときに
NEW_TIME – THUMB_TIME < Τ) かつ
THUMB_TIME – FIG_TIME < NEW_TIME – THUMB_TIME ならば
Τ(タウ)は固定値
- 文字キー出力
- 親指キーセット状態へ
条件をひとつでも満たさない場合
- 同時打鍵確定・出力
- 初期化へ(もしくはリピート処理)
タイムアウト
- 同時打鍵確定・出力
- 初期化へ(もしくはリピート処理)
その他のイベント
- 同時打鍵確定・出力
- 初期化へ