blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

市式仮配列を実装してみよう 第三回

第三回の概要

市式仮配列に「プリフィクスシフト」を導入する。

子音拡張の仕様の把握

子音拡張、すなわち子音同士のキーの組み合わせで文字を出力する設定内容を把握しよう。作者は以下のように述べている*1

そのキーと同じ段の(おそらく)もっとも打ちやすいキー1個目が<○ょう>、2個目が<○ゅう>です。
Tの場合はK、Nの順で<ちょう>、<ちゅう>が出ます。
Hの場合はR、Yの順で<ひょう>、<ひゅう>が出ます。
Kの場合はN、Tの順で<きょう>、<きゅう>が出ます。

作者のこの説明が意味することを表にしてみると、つぎのようになる。ただし、ここでいう「入力する文字」とは、市式仮配列中のアルファベットのことである。

一打目に入力する文字 二打目に入力する文字 出力する文字
T K ちょう
T N ちょう
H R ひょう
H Y ひゅう
K N きょう
K T きゅう

この表の入力する文字の部分を使用する指に置き換え、また、出力する文字をローマ字表記にした後子音を取り除くと、どうなるだろう。小指を一打目に使用する場合を追加すると、こうなる*2

一打目に使用する指 二打目に使用する指 出力する文字
人差し指 中指 you
人差し指 薬指 yuu
中指 人差し指 you
中指 薬指 yuu
薬指 人差し指 yuu
薬指 中指 you
小指 中指 yuu
小指 薬指 you

書き換えた表からわかることをまとめよう。一打目に使用する指が人差し指と中指なら、二打目が小指に近い指である薬指なら yuu を、逆側の指なら you を出力する。一打目に使用する指が小指に近い指なら you を、そうでないなら yuu を出力する。
設定内容から上記のような規則性を見いだした上で、実装にとりかかろう。

「プリフィクスシフト」による子音拡張の実装の一部

任意のキーを順に打鍵して文字を出力する「プリフィクスシフト」を使用して、上記の内容のうち、「人差し指と中指グループ」用の設定表を仮に作成してみよう。このように、二打目をまとめて記述できれば見やすいと思われる。

/* 上段の「人差し指と中指グループ」用の共通の設定 */

[
  |yuu|  |  |  |
  |   |  |  |  |
  |   |  |  |  |
]

/* 上段の「人差し指」用の設定 */
[

  |  |you|  |  |
  |  |   |  |  |
  |  |   |  |  |
]

/* 上段の「中指」用の設定 */
[

  |  |  |you|  |
  |  |  |   |  |
  |  |  |   |  |
]

これらの表に、直前に入力するキーの情報を追加する。ここでは、これらの表よりも前に -option-input[] からなる記述を書き、それらの記述中の記号([e]など)を各表の冒頭に置く。"[q] | -10"というのは、-10、つまり sc010 というキーの位置を"[q]"で表す、ということである。実は"| -10"の左側に記述するのは[q]でなくても何でもよいが、QWERTY配列の印字をもとに [q] と書いた。これらの設定については、組み合わせるキーの記述方法 [DvorakJ Help]を参照してほしい。

-option-input[
    /* QWERTY */
        /* 上段 */
            [q] | -10
            [w] | -11
            [e] | -12
            [r] | -13
            [t] | -14
]

/* 上段の「人差し指」用の設定 */
[r],[t][

  |yuu|you|  |  |
  |   |   |  |  |
  |   |   |  |  |
]

/* 上段の「中指」用の設定 */
[e][

  |yuu|  |you|  |
  |   |  |   |  |
  |   |  |   |  |
]

子音拡張の中間まとめ

前回までの設定と今回の設定をまとめると以下のようになる。ただし、上述の -option-input[] を前の方に置くことにした。

順に打鍵する配列

/*
 * 市式仮配列
 */

-option-input[
    /* QWERTY */
        /* 上段 */
            [q] | -10
            [w] | -11
            [e] | -12
            [r] | -13
            [t] | -14
]

[

p|y|r|h|b| | |i|e| |
s|t|k|n|w| |a|u|o| |
z|d|g|m| | | | | | |
]

/* 上段の「人差し指」用の設定 */
[r],[t][

  |yuu|you|  |  |
  |   |   |  |  |
  |   |   |  |  |
]

/* 上段の「中指」用の設定 */
[e][

  |yuu|  |you|  |
  |   |  |   |  |
  |   |  |   |  |
]

この設定を実際に打鍵してみると、順に打鍵する配列の挙動を理解できるだろう。一打目の文字には、前回記述した設定した文字を使用し、二打目の文字には、(今のところ、上段の「人差し指と中指グループ」しか無いが)設定した内容が存在するならばそれを、そうでなければ一打目の設定をここでも使う。

他の子音拡張の実装……

上記の設定以外の子音拡張を実装するには機械的に設定を追加すればよいだけだから、ここでは記述を省略する。子音拡張として仕様に含まれている「頻出単語」についても同様である。


次回は、同時に打鍵する動作の原型を、市式仮配列に盛り込もう。

後日追記

設定例をわかりやすくするよう書き換えた。