繭姫におけるStrokeModeの記述理論

 ……ってゆーほど大げさではないですな。単なるメモ。


StrokeMode=0、姫踊子草のデフォルトである「単打鍵もしくは2キー同時打鍵による一発確定」モード。

 これは単純に書けば大丈夫ですな。
 一キーずつ書く場合はこんな感じ。

'単打鍵入力。
=
h	ゆ
j	ん
k	い
l	か
;	た
:	け
]	退

'2キー同時打鍵入力。
=R
h	ぼ
j	く
k	の
l	つ
;	に
:	ろ
]	退

 これをまとめるとこうなる。

=
hjkl;:]	ゆ$ん$い$か$た$け$退
=R
hjkl;:]	ぼ$く$の$つ$に$ろ$退

 ちなみに大文字の「R」は文字としての「R」では無くて、マニュアルに書いてある通り「右親指シフトキー(繭姫のプロパティで設定できるキー)」のことを指しています。
 ゆえに、「R(右親指)」と「h」を【同時打鍵】すると「ぼ」と出るわけです。

StrokeMode=1、「単打鍵を繰り返して定義を確定する」モード。

 これは単純に書けば大丈夫ですな。
 一キーずつ書く場合はこんな感じ。

'単打鍵入力。
StrokeMode=1
=
h	ゆ
j	ん
k	い
l	か
;	た
:	け
]	退

'2キー逐次打鍵入力。
=R
h	ぼ
j	く
k	の
l	つ
;	に
:	ろ
]	退

 これをまとめるとこうなる。

StrokeMode=1
=
hjkl;:]	ゆ$ん$い$か$た$け$退
=R
hjkl;:]	ぼ$く$の$つ$に$ろ$退

 ちなみに大文字の「R」は文字としての「R」では無くて、マニュアルに書いてある通り「右親指シフトキー(繭姫のプロパティで設定できるキー)」のことを指しています。
 ゆえに、「R(右親指)」を押してから「h」を【逐次打鍵】すると「ぼ」と出るわけです。


 タブの左側は区切り文字を指定できず「一文字が一定義」で、タブの右側は「$」を区切り文字として複数文字を定義できる……というのが繭姫のルールなのですが、ここに「{}でくくれば二文字を一定義とみなす」という特別ルールがあります。
 ……ってへたくそな説明をするよりはリストを書くほうが早いですな。
 ロマかなで普通に定義を書くとこんな感じになりますな。

StrokeMode=1
=k
a	か
i	き
u	く
e	け
o	こ
=ky
a	きゃ
u	きゅ
o	きょ

 これを普通にまとめると……

StrokeMode=1
=k
aiueo	か$き$く$け$こ
=ky
auo	きゃ$きゅ$きょ

 これを、下記のように一行にまとめることができます。 

StrokeMode=1
=k
aiueo{ya}{yu}{yo}	か$き$く$け$こ$きゃ$きゅ$きょ

 もちろん、上記の書式を下記のようにばらすことも出来ます(定義によってはこの方が楽に定義できる場合もある)。

StrokeMode=1
=k
a	か
i	き
u	く
e	け
o	こ
{ya}	きゃ
{yu}	きゅ
{yo}	きょ

StrokeMode=2、「「単打鍵もしくは2キー同時打鍵」を繰り返して定義を確定する」モード。


 これは「StrokeMode=0」で定義可能な同時打鍵を「StrokeMode=1」で多層化したものです。
 ゆえに、両方の配列を作ってみないと、その挙動はピンとこないと思います。


 ……なんて難しそうに書いても仕方ないですな。
 基本的には「StrokeMode=1」で使っていた{}の意味がちょっと変わります……それだけの話。
 「StrokeMode=1」における{}は「行を節約するため」に使いました。
 それに対して「StrokeMode=2」における{}は「同時打鍵を表現するために」に使います……ゆえに、既存の定義を変更して「StrokeMode=2」化する場合は、まず定義中から{}の部分を探して、「{}を使わずに定義する」ように変更してやる必要があります。


 つまり、以下の2つの定義では「StrokeMode=2」にすると意味が変わってしまうわけです。

StrokeMode=1
=k
aiueo{ya}{yu}{yo}	か$き$く$け$こ$きゃ$きゅ$きょ
StrokeMode=1
=k
a	か
i	き
u	く
e	け
o	こ
{ya}	きゃ
{yu}	きゅ
{yo}	きょ

 上記のような定義を下記のような定義へと置き換えれば、「StrokeMode=1」「StrokeMode=2」のどちらを用いても意味が変わらないので、「StrokeMode=2」対応を目指すならば{}に依存しない下記のような定義へと書き換えればよい……というわけです。

StrokeMode=1
=k
aiueo	か$き$く$け$こ
=ky
auo	きゃ$きゅ$きょ
StrokeMode=1
=k
a	か
i	き
u	く
e	け
o	こ
=ky
a	きゃ
u	きゅ
o	きょ


 ……で、{}を使う定義を全て{}を使わない定義へと変換したとして。
 今度はその定義を「StrokeMode=2」対応にしましょう。


 元の配列が「StrokeMode=1(逐次打鍵複層)」であり、かつ{}を排除した後でしたら、基本的には単に「StrokeMode=1」を「StrokeMode=2」へと書き換えるだけで大丈夫です。
 一方で、元の配列が「StrokeMode=0(同時打鍵単層)」であり、かつ{}を排除した後については、「StrokeMode=2」を指定するだけではうまく動作しません。
 なぜかというと、「StrokeMode=2」では「同時打鍵を”{}”で括り、明示的に指定しないといけない」から。


 ええと、飛鳥の例をもう一度持ってきます。
 一キーずつ書く場合はこんな感じ。

StrokeMode=2
'単打鍵入力。
=
h	ゆ
j	ん
k	い
l	か
;	た
:	け
]	退

'2キー同時打鍵入力。
=
{Rh}	ぼ
{Rj}	く
{Rk}	の
{Rl}	つ
{R;}	に
{R:}	ろ
{R]}	退

 ……で、こう書くと面倒でしょうがないので、また特別ルールが登場。
 通常、{}の中には2キーをセットで記述しないといけません(そのための{}なので)。
 ところが、=の後であって、なおかつ行末である場合に限り、「{}の中が一文字ならば【それ以降の行との同時打鍵とみなされる】」というルールが存在します(もちろん、最後尾がきちんと{}内に二字を持つならば、それはカッコ内文字の同時打鍵として定義される)。
 そのルールを使うとこう記述できます。

StrokeMode=2
'単打鍵入力。
=
h	ゆ
j	ん
k	い
l	か
;	た
:	け
]	退

'2キー同時打鍵入力。
={R}
h	ぼ
j	く
k	の
l	つ
;	に
:	ろ
]	退

 ……ということは、次の2つは同じ定義である、ということにもなります。

StrokeMode=2
'単打鍵入力。
=
hjkl;:]	ゆ$ん$い$か$た$け$退
'2キー同時打鍵入力。
=
{Rh}{Rj}{Rk}{Rl}{R;}{R:}{R]}	ぼ$く$の$つ$に$ろ$退
StrokeMode=2
'単打鍵入力。
=
hjkl;:]	ゆ$ん$い$か$た$け$退
'2キー同時打鍵入力。
={R}
hjkl;:]	ぼ$く$の$つ$に$ろ$退


 で、同時打鍵を重ねるとこんな感じになります。

StrokeMode=2
'同時打鍵表現を混ぜた逐次表現をするための定義。
WantThemselves=1
'ここから漢字を直接投入する。
'-----------------------------------
'「う」シフト
'二打目は左シフト(親指シフト・飛鳥のカナ向きと同じ)
'-----------------------------------
=
={ q}
{Lq}	逢
{Lw}	襖
{Le}	横
{Lr}	欧
{Lu}	王
WantThemselves=0
'ここまで漢字を直接投入する。

 この場合、一打目に「スペース」と「Q」を同時打鍵し、二打目に「左親指シフト」と「Q」を同時打鍵すると「逢」という文字が出る……という感じになる。
 で、この場合は二打目のうち「L」が共通なので、こう書き直すこともできます(以下3つは、上と同じことを定義しています)。

StrokeMode=2
'同時打鍵表現を混ぜた逐次表現をするための定義。
WantThemselves=1
'ここから漢字を直接投入する。
'-----------------------------------
'「う」シフト
'二打目は左シフト(親指シフト・飛鳥のカナ向きと同じ)
'-----------------------------------
=
={ q}{L}
q	逢
w	襖
e	横
r	欧
u	王
WantThemselves=0
'ここまで漢字を直接投入する。
StrokeMode=2
'同時打鍵表現を混ぜた逐次表現をするための定義。
WantThemselves=1
'ここから漢字を直接投入する。
'-----------------------------------
'「う」シフト
'二打目は左シフト(親指シフト・飛鳥のカナ向きと同じ)
'-----------------------------------
=
={ q}{L}
qwert	逢$襖$横$欧$王
WantThemselves=0
'ここまで漢字を直接投入する。
StrokeMode=2
'同時打鍵表現を混ぜた逐次表現をするための定義。
WantThemselves=1
'ここから漢字を直接投入する。
'-----------------------------------
'「う」シフト
'二打目は左シフト(親指シフト・飛鳥のカナ向きと同じ)
'-----------------------------------
=
={ q}
{Lq}{Lw}{Le}{Lr}{Lu}	逢$襖$横$欧$王
WantThemselves=0
'ここまで漢字を直接投入する。


 ……って、解り易く書く方法は全然思いつかないなぁ……orz

具体的にどこを修正するべきか?……「StrokeMode=1」な「和ならべ」編。

 鈴見咲さんが書いたコード(StrokeMode=1専用)はこうなっています。

=f
jikoly,hun{gj}{gi}{gk}{go}{gl}	か$き$く$け$こ$きゃ$きぃ$きゅ$きぇ$きょ$くぁ$くぃ$くぅ$くぇ$くぉ

 {}をつけたままでは「StrokeMode=2」に移行できない({}の意味が変わってしまう)ので、下記のように書き直して「{}が無くとも同じ意味となる定義」へと変更します。
 (こう書き換えれば、StrokeMode=1でもStrokeMode=2でも大丈夫!です)

=f
jikoly,hun	か$き$く$け$こ$きゃ$きぃ$きゅ$きぇ$きょ
=fg
jikol	くぁ$くぃ$くぅ$くぇ$くぉ

具体的にどこを修正するべきか?……「StrokeMode=0」な「飛鳥・NICOLA」編。


 これは……
 http://www.eurus.dti.ne.jp/~yfi/keylayout/kanji_feel_code.html
をご覧ください(ぉぃ


 いや、転記すると……

 導入方法はこんな感じになります。

   1. 繭姫/姫踊子草に用意されている親指シフト定義ファイル(NICOLA・飛鳥どちらでもOK)を、別名コピーします。
          * その他の配列に漢触こーどをアドオンする場合は、元配列の定義が「StrokeMode=2」で正常に動作するよう定義を書き換える必要がありますので、その点ご注意願います。
   2. コピーした定義をエディタで開き、最後尾に本定義のコピーを貼り付けます。
   3. 親指シフト定義部分(一番上の方)の「逆」「裏」「小指」シフト三面に関して、下記を参考に中括弧を付加してください。
          * '逆=対手指同時打鍵
          * ={R}    *
          * '裏=同手親指同時打鍵
          * ={L}    +
          * '小指シフト入力。
          * ={H}
   4. 定義冒頭付近にある「MultiDownHold=LR」という行の下に、「StrokeMode=2」という行を追加してください。
          * TypeModeDefault=8
          * MultiDownHold=LR
          * StrokeMode=2
   5. 書き換えを終えましたら、保存して定義を繭姫/姫踊子草に読み込ませてください。
   6. 実際に使う場合は、(スペースシフトは空白キー固定のため)左親指シフトは「無変換」キーに、右親指シフトは「変換」キーに設定してください。
          * ただし、直接定義を書き換えることができる方であれば、スペースシフトを別のキーに割り当て直すこともできると思います……このあたりは繭姫/姫踊子草用定義の書き方をご存じの方であれば、まず問題なくできることかと。
(from http://www.eurus.dti.ne.jp/~yfi/keylayout/kanji_feel_code.html )

 こんな感じですな。
 要は、「=」の後に続く英字を{}でくくる&「StrokeMode=2を指定」を同時にやるわけです。
 この場合、改変した定義は「StrokeMode=2」専用となり、「StrokeMode=0」との共用はできません(たぶん)。

ちなみに。

StrokeMode=2
'同時打鍵表現を混ぜた逐次表現をするための定義。
WantThemselves=1
'ここから漢字を直接投入する。
'-----------------------------------
'「う」シフト
'二打目は左シフト(親指シフト・飛鳥のカナ向きと同じ)
'-----------------------------------
=
={ q}{Lq}{Lw}{Le}{Lr}
{Lu}	逢
WantThemselves=0
'ここまで漢字を直接投入する。

 と書くと、「スペース+Q」→「左親指+Q」→「左親指+W」→「左親指+E」→「左親指+R」→「左親指+U」と言う順序で同時打鍵を繰り返した場合に「逢」という漢字が出ます。もちろんこれは、

StrokeMode=2
'同時打鍵表現を混ぜた逐次表現をするための定義。
WantThemselves=1
'ここから漢字を直接投入する。
'-----------------------------------
'「う」シフト
'二打目は左シフト(親指シフト・飛鳥のカナ向きと同じ)
'-----------------------------------
=
={ q}{Lq}{Lw}{Le}{Lr}{L}
u	逢
WantThemselves=0
'ここまで漢字を直接投入する。

 とも書き直せるわけで。
 ついでに「同時打鍵と逐次打鍵を交ぜる」場合はこんな感じ。

StrokeMode=2
'同時打鍵表現を混ぜた逐次表現をするための定義。
WantThemselves=1
'ここから漢字を直接投入する。
'-----------------------------------
'「う」シフト
'二打目は左シフト(親指シフト・飛鳥のカナ向きと同じ)
'-----------------------------------
=
={ q}q{Lw}er{L}
u	逢
WantThemselves=0
'ここまで漢字を直接投入する。

 と書くと、「スペース+Q」→「Q」→「左親指+W」→「E」→「R」→「左親指+U」と言う順序で交ぜて打鍵した場合に「逢」という漢字が出ます。


 ……以上。