DvorakJ:チュートリアル:追補:市式仮配列を実装する

DvorakJ:チュートリアル:追補:市式仮配列を実装する


はじめに

以下のブログのエントリーで公開されている「市式仮配列」というキーボード配列をDvorakJ に実装してみます(市式仮配列という名称は、作者が2ちゃんねるのスレッドに書き込んだものです)。


キー配列の実装時に考えること2点

DvorakJ でキーボード配列を作成する際には、つぎの二点を考えます。

  1. どのキーをどのように打鍵するか
  2. どのような文字(やキー)を出力するか

言い換えると、使用するキーと打鍵する方法を決定し、出力する文字(やキー)を選択するのです。

すぐ後で紹介するシステム 4 つは前者に関するもので、ickw0911のブログ : 新配列とりあえず完成。の後半部分にある「二重母音(連母音)拡張」や「拗音拡張」は後者に関わるものです。


市式仮配列の特徴

市式仮配列の作者はその特徴として次のように述べています(ickw0911のブログ : 新配列とりあえず完成。)。

 配列そのものは割と普通。Km式や和ならべタイプの母音で、子音側の配列がちょっと違う

これは、「ア段」「ウ段」「オ段」用のキーが右手側中段に、「イ段」と「エ段」用のキーが右手側上段にあることと、子音用のキーが左手側にあることを意味しています。

作者の説明によると、市式仮配列は下記のシステム 4 つから構成されています。 それぞれのシステムについては、上記のブログのエントリー内で簡単に説明されています。

  1. ローマ字入力などの交互打鍵
  2. 下駄配列などの同時打鍵
  3. 月配列などのプリフィクスシフト
  4. 飛鳥カナ配列などの連続シフト

後に説明するように、「順に打鍵する配列」と「同時に打鍵する配列」を組み合わせて、これら 4 つのシステムを実装します。


交互打鍵の実装

ickw0911のブログ : 新配列とりあえず完成。の画像を参考にして、以下のような設定ファイルを作成します。 書き換えたら、その設定ファイルを読み込み直さなければなりません。 設定ファイルの選択ボタンから当該設定ファイルを選択するか、DvorakJ 自体を再起動してください。

順に打鍵する配列

/*
 * 市式仮配列
 * http://blog.livedoor.jp/ickw0911/archives/51402501.html
 */

[

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

簡単に解説します。 左手側には子音用のキーを配置しています。 ですので、Aを打鍵すると S が出力されるようになりました。 逆に右手側には母音用の文字を集めています。 ローマ字入力を想起すれば分かるように、イ行の文字を出力するということは、子音の後に母音キーとして I を出力することですから、ア行なら A を、イ行なら I を出力するようにしました。


プリフィクスシフトの実装

子音拡張の仕様

子音拡張、すなわち子音同士のキーの組み合わせで文字を出力する仕組みを把握しましょう。作者は以下のように述べています(ickw0911のブログ : 新配列とりあえず完成。)。

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

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

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

この表の入力する文字の部分を使用する指に置き換え、また、出力する文字をローマ字表記にした後、子音を取り除くと、どうなるでしょうか。 小指を一打目に使用する場合を追加すると、こうなります(ickw0911のブログ : 設定ファイル公開(窓使いの憂鬱))。

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

書き換えた表からわかることをまとめます。

仕様から上記のような規則性を見いだしたうえで、実装にとりかかりましょう。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ここまでの設定のまとめ

ここまでの設定をまとめると以下のようになります。 上述の -option-input[] を前の方に書いています。

順に打鍵する配列

/*
 * 市式仮配列
 * http://blog.livedoor.jp/ickw0911/archives/51402501.html
 */

-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|  |
  |   |  |   |  |
  |   |  |   |  |
]

この時点のキー配列の設定を実際に使用すれば、順に打鍵する配列の挙動を理解できるでしょう。 一打目の文字には、はじめに記述した設定した文字を使用し、二打目の文字には、設定した内容が存在するならばそれを、そうでなければ一打目の設定をここでも使います。


同時打鍵の実装

同時打鍵の仕様

一定の時間内に打鍵したときには、打鍵したキーの順序にかかわらず、同じ文字を出力します。

同時打鍵による子音拡張の一部の実装

実装にあたり重要となるのはつぎの三点です。

  1. 打鍵の順序を問わないと明示すること
  2. 打鍵するキーを指定すること
  3. 出力する文字を決めること

打鍵の順序を問わないと明示するためには、設定項目の冒頭に半角の開き丸括弧を書きます。 閉じ丸括弧は書きません。 ただし、これは「順」という文字が設定ファイルの一行目にある場合である。 「順」という文字が存在しないならば、半角の開き丸括弧を書く必要はありません。 なお、この実装では、同時に打鍵する処理を盛り込みますので、(書き換えても挙動は全く変わりませんが)設定ファイルの一行目の「順に打鍵する配列」を「順にも同時にも打鍵する配列」と書き換えておくとわかりやすいでしょう。

打鍵するキーと出力する文字は、順に打鍵するよう設定したのと同様、設定ファイルの表内のキーの位置に文字を記入し、それ以外のキーは表のすぐ外に記述します。

つぎのような設定を追加すれば、「S→ア行もア行→Sも同じ文字<さ>」を出力します。

-option-input[
    /* QWERTY */
        /* 中段 */
            [a] | -1E
]

([a][

 | | | | | |  | | | |
 | | | | | |sa| | | |
 | | | | | |  | | | |
]

これは A を起点にした設定方法であるが、次のように、 J を起点にする設定を書いてもかまいません。

-option-input[
    /* QWERTY */
        /* 中段 */
            [j] | -24
]

([j][

  | | | | | | | | | |
sa| | | | | | | | | |
  | | | | | | | | | |
]

そうはいうものの、サ行の設定を以下のようにまとめられることを考慮すれば、前者の設定の方が好ましいでしょう。

-option-input[
    /* QWERTY */
        /* 中段 */
            [a] | -1E
]

([a][

 | | | | | |  |si|se| |
 | | | | | |sa|su|so| |
 | | | | | |  |  |  | |
]

DvorakJ は、設定ファイル中のかなをローマ字に自動的に変換しますので、こう書き換えられます。

-option-input[
    /* QWERTY */
        /* 中段 */
            [a] | -1E
]

([a][

 | | | | | |  |し|せ| |
 | | | | | |さ|す|そ| |
 | | | | | |  |  |  | |
]

ここまでの設定の改良

ここまでの設定を改良してみましょう。 前回までの -option-input の部分では、キーの位置情報を QWERTY 配列のキーの文字にひもづけていました。 この設定に加えて、キーの位置情報を、キーの位置そのものと市式仮配列上の文字にも関連づけさせましょう。 こうすることで、設定ファイル全体が見やすくなるでしょう。 また、[r],[t]のように半角カンマを挟むことで、[r] と [t] に共通の設定を適用する機能を利用します。 これらを反映させると、つぎのように書き換えられます。

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

            [y] | -15
            [u] | -16
            [i] | -17
            [o] | -18
            [p] | -19
            [@] | -1A
            [[] | -1B

        /* 中段 */
            [a] | -1E
            [s] | -1F
            [d] | -20
            [f] | -21
            [g] | -22

            [h] | -23
            [j] | -24
            [k] | -25
            [l] | -26
            [;] | -27
            [:] | -28
            []] | -2B

        /* 下段 */
            [z] | -2C
            [x] | -2D
            [c] | -2E
            [v] | -2F
            [b] | -30

            [n] | -31
            [m] | -32
            [,] | -33
            [.] | -34
            [/] | -35
            [\] | -73

        /* 位置の指定 */
        /* 上段 */
            {上段左手小指}     | [q]
            {上段左手薬指}     | [w]
            {上段左手中指}     | [e]
            {上段左手人差し指} | [r], [t]

        /* 中段 */
            {中段左手小指}     | [a]
            {中段左手薬指}     | [s]
            {中段左手中指}     | [d]
            {中段左手人差し指} | [f], [g]

        /* 下段 */
            {下段左手小指}     | [z]
            {下段左手薬指}     | [x]
            {下段左手中指}     | [c]
            {下段左手人差し指} | [v]

    /* 市式仮配列上の設定 */
        /* 上段 */
            {p} | [q]
            {y} | [w]
            {r} | [e]
            {h} | [r]
            {b} | [t]

            {上段ち} | [y]
            {上段き} | [u]
            {イ行} | [i]
            {エ行} | [o]
            {上段つ} | [p]

        /* 中段 */
            {s} | [a]
            {t} | [s]
            {k} | [d]
            {n} | [f]
            {w} | [g]

            {中段つ} | [h]
            {ア行} | [j]
            {ウ行} | [k]
            {オ行} | [l]
            {★} | [;]
            {中段く} | [:]

        /* 下段 */
            {z} | [z]
            {d} | [x]
            {g} | [c]
            {m} | [v]
            {◇} | [b]

            {下段く} | [n]
            {◆} | [m]
            {下段ち} | [,]
            {下段き} | [.]
]

この膨大な設定のおかげで、それ以後の設定は簡単なものになります。

まとめます。 整理する際は、表にできるだけ多くの文字を割り当てることと、表そのものをできるだけ減らすことの二点に気をつければよいでしょう。

/* 基本の設定 */
[

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

/* 子音同士を打鍵 */
        /* 上段 */
                {上段左手小指}[

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

                {上段左手薬指}[

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

                {上段左手中指}[

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

                {上段左手人差し指}[

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

        /* 中段 */
                {中段左手小指}[

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

                {中段左手薬指}[

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

                {中段左手中指}[

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

                {中段左手人差し指}[

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

        /* 下段 */
                {下段左手小指}[

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

                {下段左手薬指}[

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

                {下段左手中指}[

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

                {下段左手人差し指}[

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


        /* 頻出単語 */
                {k}[

                  |  |ara|  |  |
                  |  |   |  |  |
                  |  |oto|  |  |
                ]

                {t}[

                  |ta|  |  |  |
                  |  |  |  |  |
                  |te|  |  |  |
                ]

/* 同時に打鍵 */
        ({ア行}[

        pa|ya|ra|ha|ba|
        sa|ta|ka|na|wa|
        za|da|ga|ma|
        ]

        ({イ行}[

        pi|yi|ri|hi|bi|
        si|ti|ki|ni|wi|
        zi|di|gi|mi|
        ]

        ({ウ行}[

        pu|yu|ru|hu|bu|
        su|tu|ku|nu|wu|
        zu|du|gu|mu|
        ]

        ({エ行}[

        pe|ye|re|he|be|
        se|te|ke|ne|we|
        ze|de|ge|me|
        ]

        ({オ行}[

        po|yo|ro|ho|bo|
        so|to|ko|no|wo|
        zo|do|go|mo|
        ]

これで、設定ファイルの内容が把握しやすくなったでしょう。

真に同時に打鍵する動作の実装

市式仮配列の説明で何度も出てくる「押しながら」という動作を実現するには、 -1E といった設定を +1E へと書き換える必要があります。 DvorakJ で「真に同時に打鍵する動作」と呼ぶ、キーを押し下げている間はそのキーを押し下げたものとして扱う挙動は、"-" を "+" に変更することで設定します。 具体的には、-option-input 内の該当箇所を書き換えるか、+1E というような表記を各表のはじめにそのまま書きます。

例を示しましょう。 以下のように書けば、スキャン・コードが 24 のキー、つまり QWERTY 配列でいうJ 、 市式仮配列では「ア行」のキーを、押し下げたものとして判定し続けます。

(+24[

pa|ya|ra|ha|ba|
sa|ta|ka|na|wa|
za|da|ga|ma|
]

もしも -option-input 内の -24 を +24 に書き換えたなら、同時に打鍵する設定と同一の設定を記述してください。

({ア行}[

pa|ya|ra|ha|ba|
sa|ta|ka|na|wa|
za|da|ga|ma|
]

二重母音(連母音)拡張のような、複数のキーを押し下げる動作の実装

では、「ア行とイ行押しながら」のように、複数のキーを押し下げている状態で他のキーを打鍵するという挙動はどのように設定するのでしょうか。 答えは簡単です。 使用するキーをただ並べて記述するのです。 例を挙げますが、ここでは、{ア行}と{イ行}に該当するキーの設定を "-" から "+" に書き換えていることを前提としています。

({ア行}{イ行}[

pai|yai|rai|hai|bai|
sai|tai|kai|nai|wai|
zai|dai|gai|mai|
]

キーを発行する「特殊拡張」

市式仮配列の「特殊拡張」は特定のキーを発行する設定から構成されています。 たとえば、ア行用キー、ウ行用キー、オ行用キーのキー三つを押し下げた状態で、QWERTY 配列の Aを打鍵すると、カーソル・キーの を押したことにします。 特殊拡張として盛り込まれている機能には、カーソル移動のみならず、EnterBackSpaceも含まれています。

キーを発行する設定方法

これまで説明してきました文字を出力する設定方法とは異なり、キーを発行するにはキーの情報を中括弧で括る必要があります。 を発行したいなら {Down} を記述します。 ただし、 については、英単語を中括弧内に書く必要は無くて、{<-}{->}{←}{→} と記述します。

「特殊拡張」の実装

上記より以下のように記述すれば「特殊拡張」を実装できます。

({ア行}{ウ行}{オ行}[

{PgDn}|{Up}  |{PgUp}|
{<-}  |{Down}|{->}  |

]
({ア行}{イ行}{オ行}[


{Delete}|{Enter}|{BackSpace}|

]

おわりに

これで市式仮配列を実装し終えたことになります。 設定し終えた設定ファイルは DvorakJ に収録しています。 設定ファイルのありかは、"\data\lang\jpn\順にも同時にも打鍵する配列\市式仮配列.txt" です。 参考にして下さい。


Last modified : 2012/01/18 01:29:20 JST