繭姫における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」と言う順序で交ぜて打鍵した場合に「逢」という漢字が出ます。
……以上。