$Id: sj3def,v 2.5 1998/07/21 08:51:27 ishisone Exp $

[ このドキュメントは kinput2 で変換システムに sj3 を使用する時に使われる   ]
[ Sj3Object(クラス名 Sj3) を使用した場合のローマ字かな変換、その他         ]
[ 各操作キーのカスタマイズの方法について記述しています。                   ]

*** 入力文字変換の設定 ***
 
    ここでは kinput2 の変換オブジェクトの一つ Sj3Object が変換に使用する
    キー・バインドを含むユーザ・インターフェースや変換定義ファイル
    の書き方について説明します。できればデフォルトの定義ファイル 
    (/usr/lib/X11/sj3def/{sjrc,sjrk,sjhk,sjzh} を見ながら読むとよいと
    思います。デフォルトでインストールされる /usr/lib/X11/sj3def/sjrc
    は doc/defaultkeys、 つまり CcWnn のユーザ・インターフェース
    をエミュレートするようになっています。
    (● 変換サーバの仕様上、大文節／小文節変換はサポートしていません)

    また、最後に Canna と sjx のユーザ・インターフェースを
    エミュレートする例を紹介してあります。

    各項での注意点は「●」に続けて記述してます。

<目次>
    <1> Sj3Object の特徴
    <2> Sj3Object のモード
    <3> 各カスタマイズ用ファイルの場所とフォーマット
    <4> sjrc ファイルによるユーザ・インターフェースのカスタイマイズ
    <5> 変換サーバ(sj3serv) のホスト名の決定
    <6> 辞書登録／抹消モードの動作
    <7> 入力文字変換の概要(sjrk、sjhk、sjzh ファイルのカスタマイズ)
    <8> 制限事項
    <9> 今後の課題
    <10> バグを見つけたら…
    <付録1> Canna のユーザ・インターフェースをエミュレートする方法
    <付録2> sjx のユーザ・インターフェースをエミュレートする方法

<1> Sj3Object の特徴

    1.  Sj3Object ではかな漢字変換サーバに sj3serv (X11R5 の contribute に
        含まれています) を使用します。変換サーバは万一の変換サーバダウン時
        のためにセカンドサーバが指定可能です。変換サーバの指定については
        このドキュメントの <5> を、再接続の方法については
        <4>[1] の recconect の項を参照してください。

    2.  Sj3Object では変換文字列操作に sj3lib の上位ライブラリ Xsj3clib を
        使用します(lib/Xsj3clib/*)。

    3.  かなキーボードでないキーボードでも疑似的なかなロック・キーの
        キー・バインド（<4>[1] の kana の項参照）を設定することによって
        かな入力とのトグルが可能です。

    4.  入力文字列の５つの変換状態（<2>の[3]参照）によって
        同じキー・バインドに異なる文字列操作のファンクションを
        割り付けることができ、文字入力とファンクションの同時実行も可能など
        トランスレーションテーブル等を使用する方法よりも強力な
        キー・バインドのカスタイマイズが可能なため、
        キー・バインドの節約にもなり、ウィンドウマネージャ等
        他のアプリケーションとのバッティングを容易に避けることができます。

    5.  かな漢変換のユーザ・インターフェースもウィンドウ・マネージャ
        並にカスタマイズできるようにすべきだというポリシーに従い、
        sjrc ファイルを使用したカスタイマイズが非常に広範囲に渡って
        行うことができるようにしました。ユーザ・インターフェースに
        ついては CcWnn、sjx、Canna 等多くのかな漢字変換システムの
        文字列操作をエミュレートすることが可能です。
        もちろん自分好みのユーザ・インターフェースに
        チューンアップして使用することも可能です。

    6.  リソース／キー・バインド記述ファイル sjrc や
        ローマかな変換規則記述ファイル sjrk の記述方法は sjx や
        sj3 コマンドとの上位互換性を維持しています。
        また、ファンクション名については
        CcWnn ともなるべく同一になるようにしてあります。
        sjrc ファイルの形式についてはこのドキュメントの <3> を、
        実際のカスタイマイズ方法については <4> を参照してください。

    7.  コード入力では Shift-JIS、日本語EUC、JIS、区点コード
        の４種類、文字種では、ひらがな、全角カタカナ、半角カタカナ、
        全角アルファベット、半角アルファベットの５種類の文字種での
        入力、更に半角／全角、英小文字／英大文字を加えた文字種の間で
        全方向相互変換が可能になっています。Shift-JIS、日本語EUC、JIS
        は16進コード、区点コードは10進コードで入力します
        不正なコードやそのコード体系に存在しないコードの場合は
        エラーになります。

    8.  カスタイマイズ方法が判りやすいようにローマ字／かな変換(sjrk)、
        半角／全角変換(sjzh)やひらがな／カタカナ変換(sjhk)の変換規則の
        カスタマイズファイルはそれぞれ別にしました。大文字／小文字変換
        以外はこれらのカスタマイズによって幅の広いカスタイマイズが可能です。
        これらのファイルの形式についてはこのドキュメントの <3> を、
        実際のカスタイマイズの効果については <7> を参照してください。

    9.  入力後／かな漢字変換後の文字列の編集方法は CcWnn のユーザ
        インターフェースを採用しています。（このため sjx や Canna の
        動作のエミュレート用の sjrc を使用しても編集方法は
        CcWnn と同様になります）

    10. 直前に確定した文字列を再度呼び出す機能（sj2/sj3/sjx の機能
        :<4>[1] の saihenkan の項参照）があり、同様の変換を何度も
        行う際に便利です。

    11. 各種の設定ファイルのコードは Shift-JIS/日本語EUC/
        8bit-JIS/7bit-JIS の中からユーザの環境に対応して選択できます。

<2> Sj3Object のモード

    モードの概念には以下の３種類考えられます。

    [1] 入力モード
        入力する方法によって区別する方法で Sj3Object では

            1. ローマ字入力
            2. かな入力
            3. コード入力
            4. 記号選択入力

        の４つの区別ができます。Sj3Object ではこれを「入力モード」と
        呼ぶことにします。かな入力は通常 JIS キーボードのような
        かな配列のキーボードで可能ですが、Sj3Object では
        かなロックキーのないようなキーボードでも疑似的な
        かなロックキー用のキー・バインドを指定してローマ字入力と
        かな入力の両方を同時に実現するような方法を提供しています。

        コード入力は文字どおり１６進のコードによって入力する方法で、
        Shift-JIS、日本語EUC、JIS、句点コードの４種類のコードでの
        入力が可能です。記号選択入力は選択パネルから入力する
        記号を選択する入力方法です。

    [2] 文字種モード
        入力された結果表示される文字種によって区別する方法で、Sj3Object では

            1.  ひらがな（全角カタカナ）
            2.  全角カタカナ
            3.  半角カタカナ
            4.  全角アルファベット
            5.  半角アルファベット

        の５つの区別ができます。Sj3Object ではこれを「文字種モード」と
        呼ぶことにします。文字種のモード表示が「ひらがなモード」の時は
        sjrk ファイルの記述方法（後述）によっては全角カタカナでの
        入力も可能です。文字種は厳密には入力文字種と表示文字種に
        分けることができます。

        入力文字種はキーボードから直接入力する文字種のことで
        モード表示もこの変化に対応して変更されます。
        一方表示文字種はカレント（反転している or カーソルのある）
        文節の表示されている文字種のことで、表示文字種は入力後
        相互に変換できます。Sj3Object では入力文字種として使用できる
        上記の５つの文字種の他に以下の表示文字種を相互変換できます。

            6.  全角モード
            7.  半角モード
            8.  大文字アルファベットモード
            9.  小文字アルファベットモード

        ●入力文字種が変更された場合はモード表示が変わりますが、
            表示文字種が変更された場合はモード表示は変わりません。
        ●入力文字種が上記の 4. 全角アルファベット、5. 半角アルファベットの
            時はかな入力はできません。
        ●コード入力／記号選択入力によって入力された場合、表示文字種は
            ひらがなとみなされます。

    [3] 変換モード
        変換中の文字列の状態によって区別する方法で、Sj3Object では

            1.  NoInputMode 入力文字が存在しない状態
            2.  InputMode   カレント文節が未変換の状態
            3.  ConvedMode  カレント文節がかな漢字変換後の状態
            4.  SelectMode  変換候補一覧選択中や記号／品詞選択中の状態
            5.  DictMode    辞書登録、辞書登録抹消中の状態

        の５つの区別ができます。Sj3Object ではこれを「変換モード」
        と呼ぶことにします。それぞれ NoInputMode と InputMode は CcWnn
        での[未変換]、ConvedMode は CcWnn での[変換済]、SelectMode は
        [候補選択] と [記号入力] に対応すると考えれば良いでしょう。

        InputMode の「未変換の状態」というのと、「文字入力が可能な
        状態」というのは異なるので注意が必要です。

        NoInputMode から文字入力によって InputMode になる場合は
        常に「文字入力が可能な状態」ですが、一度かな漢字変換
        した後の各文節はカレント文節のとき文節全体が
        反転して文字入力できない状態になります。

        例えば、文字列一括変換後に後述の文字列操作
        ファンクションの unconvert(muhen) を
        呼び出した時には「未変換の状態」(InputMode) には
        になりますが、後述のリソース .MoveBySegment が on.on で
        InputMode での移動単位が文節単位であったりする場合、
        カレント文節は反転したままで「文字入力が可能な状態」
        にはなりません。

        このような場合、ファンクションの edit を呼び出すか、
        .FlushInConversion や .FlushSelectConversion で "edit"
        を指定し、カレント文節の反転状態を解除する必要があります。

        ただし、.MoveBySegment が off.on や off.off で
        InputMode での移動単位が文字単位のときは  unconvert(muhen)
        でも反転状態を解除し「文字入力が可能な状態」
        になります。

<3> 各カスタマイズ用ファイルの場所とフォーマット

    Xsj3clib のカスタマイズ用には以下の５種類のファイルが
    用意されています。

    [1] sjrk  ローマ字かな変換カスタマイズ用
    [2] sjhk  ひらがな／カタカナ変換カスタマイズ用
    [3] sjzh  半角／全角変換カスタマイズ用
    [4] sjsb  記号選択一覧表示のカスタマイズ用
    [5] sjrc  文節／変換操作のキー・バインド及びその他
              ユーザ・インターフェースカスタマイズ用

    以下それぞれのカスタマイズ用ファイルについて説明します。
    各ファイルに多バイト文字を記述するエントリがある場合、
    locale の LC_CTYPE が "ja_JP.SJIS" や "js_JP.mscode" の場合
    Shift-JIS として、"ja_JP.jis8" の場合は 8bit-JIS として、
    "ja_JP.jis7" の場合は半角カタカナを SO/SI で指示する 7bit-JIS
    といて、それ以外のときは EUC として読み込みます。

    LC_CTYPE が "ja_JP.SJIS/js_JP.mscode" でなく、Shift-JIS として
    読み込みたいとき、"ja_JP.jis8" でなく、 8bit-JIS として
    読み込みたいとき、"ja_JP.jis7" でなく、 7bit-JIS として
    読み込みたいときは、それぞれ include/Xsj3clib.h で
    FORCE_SJIS/FORCE_JIS8/FORCE_JIS7 を define してコンパイル
    すれば必ずそれぞれのコードとしてとして読み込まれます。

    また、各ファイルのサーチされる優先順位は以下のようになります。
    sjrc ファイル以外は kinput2 起動時にのみに読み込まれます。

        (1) オプション -{rk,hk,zh,sb,rc}file に続くファイル名
        (2) リソースファイル(リソースファイルのサーチ順は Xtoolkit の
            マニュアルを見てください)で *Sj3.{rk,hk,zh,sb,rc}file に
            指定されるファイル
        (3) 環境変数 SJ{RK,HK,ZH,SB,RC} に指定されるファイル
        (4) ホームディレクトリの直下の .sj{rk,hk,zh,sb,rc} という
            名称のファイル
        (5) /usr/lib/X11/sj3def の下の sj{rk,hk,zh,sb,rc} という
            名称のファイル

    ただし、リソースファイルやオプションに指定した場合は、
    指定されたファイルが存在しないとエラーで終了します。

    各ファイル中の各エントリの区切りは水平タブコード(0x09)か
    space(0x20) になります。それぞれのエントリ中に space(0x20)、
    '\'(0x5c)、'#'(0x23) '.'(0x2e) を含む場合は '\'
    でエスケープする必要があります。
    各ファイルに '#' が含まれる場合、その行の以降の記述は
    コメントとみなされます。

    通常カスタイマイズに頻繁に使用されるのは sjrc ファイルだけ
    でしょう。いろいろなかな漢字変換システムのユーザ・インターフェースを
    エミュレートする際も sjrc ファイルのカスタイマイズだけで済む場合が
    多いと思います。

    以下にそれぞれのファイルのエントリの記述方法について説明します。

    [1] sjrk    ローマ字／かな変換カスタマイズ用

        各行には以下の３つのエントリを記述します。

        [in_roma] [out_kana] [out_roma]

        [in_roma]  ローマ字入力時の変換元のローマ字（ASCII キャラクタセット
                のうち 0x00〜0x1f と 0x7f を除いた文字）を指定します。
        [out_kana] 変換時の全角文字列を指定します。
        [out_roma] 変換後に変換バッファに残し、次の入力文字と合わせて
                変換に使用したい文字列を指定します。指定できる文字は
                [in_romaji]のエントリと同様です。また、このエントリは
                省略可能です。

        <例>
         kya             きゃ
    
        上記の例は「kya」と入力したときに「きゃ」に変換される規則を
        記述した例です。

    [2] sjhk    ひらがな／カタカナ変換カスタマイズ用

        各行には以下の４つのエントリを記述します。

        [zhira] [zkata] [hkata] [ascii]

        [zhira] 全角ひらがなを１文字指定します
        [zkata] 対応する全角カタカナを１文字指定します
        [hkata] 対応する半角カタカナ(２文字以内)を記述します。
        [ascii] かなキーボードでないキーボードでかな入力を可能にするため
                のエントリです。かなキーボードで対応するキーの
                アスキー文字を半角で指定します。

        <例>
         ぎ              ギ              キ゛             g[
                                         ↑(本当は半角)
                                        SJIS/JIS8: 0xb7,0xde
                                        EUC:  0x8e,0xb7,0x8e,0xde
        上記の例はモード変換で「ぎ」を全角カタカナに変換したときは「ギ」
        に、半角カタカナに変換したときは「キ゛」に変換し、
        かな入力では「キ゛」と入力した場合または疑似的な
        仮名ロックの状態で「g[」と入力したときに「ぎ」に変換する
        規則を記述した例です。

    [3] sjzh    半角全角変換カスタマイズ用

        各行には以下の４つのエントリを記述します。
    
        [halpha] [zalpha] [zkana] [hkana]

        [halpha] 半角アスキー文字を１文字指定します
                （非アスキー文字として半角濁点(0xde)／半濁点(0xdf)
                は例外として認められる）    
        [zalpha] 対応する全角アスキー文字を１文字指定します
        [zkana] 対応する全角かなを１文字指定します
        [hkana] 対応する半角カタカナを１文字指定します

        <例>
         [               ［              「              「
                                                          ↑(本当は半角)
                                                        SJIS/JIS8: 0xa2
                                                        EUC:  0x8e,0xa2
        上記の例はモード変換で "「" を半角アルファベットに変換したときは
        "[" に、全角半角アルファベットに変換したときは "［" に、
        半角カタカナに変換したときは "「" に変換する規則を
        記述した例です。

    [4] sjsb    記号選択一覧表示のカスタマイズ用

        各行にはただ１つのエントリを記述します。

        [data]  記号選択時に表示したい全角文字を１文字指定します

        <例>
        ★

        上記の例は記号選択を開始するキー
        (sjrc で "ki2key.symbol" にバインドさているキー(後述))で
        記号選択表示をしたときに「★」を表示する例です。

    [5] sjrc  文節／変換操作のキー・バインド及びその他
              ユーザ・インターフェースのカスタマイズ用

        各行には以下の２つ（以上）のエントリを記述します。

        [key0].[key1] [value0] [value1] [value2]…………

        [key?]  カスタマイズしたい要素(keyword)を指定します。
                最初の keyword に続けて「.」(0x2e)で区切って第２の
                keyword を指定できます。このエントリはすべて
                コントロールコードを除く半角 ASCII 文字で記述されて
                いる必要があります。
        [value?] カスタマイズ内容(value)を指定します。最初の
                value に続けて「.」(0x2e)や space、tab で区切って
                最大 10個まで指定できます。

        <例>
        .guide.hiragana            ローマ

        上記の例は入力文字種がひらがなのときにモード表示文字列を
        「ローマ」にする例です。

        上記の例は入力文字種がひらがなのときにモード表示文字列を
        「ローマ」にする例です。

        各 keyword エントリに指定できる keyword と
        対応して指定できる value については後述します。
        同一の指定が複数ある場合や inlude key (<4>[3] 51. 参照)
        によってネストを行った場合は後に指定されたものが有効になります。

<4> sjrc ファイルによるユーザ・インターフェースのカスタイマイズ

    [1] 変換操作のキー・バインドカスタマイズ方法
    
    Xsj3clib の各変換操作、文字列／文節操作に対応するキー・バインド
    のはカスタイマイズは sjrc ファイルで行います。
    X のリソースファイルに書いて Xt のトランスレーションテーブルを
    変更する方法では、変換モードの状態によって異なるファンクションを
    同じキー・バインドにバインドすることができない、Xsj3clib が Xlib 
    だけで使用できなくなる、sj2/sj3/sjx との互換性等々の問題があるため
    sjrc ファイルを使用する方法にしました。
    sj2/sj3/sjx のキー・バインド方法との互換性ではエスケープシーケンス
    を使用する方法以外とは上位互換性を維持しています。
    
    Xsj3clib を使用した kinput2 の sj3 版では sj2/sj3/sjx とは異なる
    キー・バインド方法でカスタイマイズ機能が飛躍的に向上しています。
    format は以下のように４つのエントリ(2 keyword + 3 value)からなり、
    最後の [InputSame] のフィールドは省略可能です。

    .ki2key.[ファンクション名] [変換 Mode/Modifier] [KeySym] [InputSame]

        (1) ２番目の keyword[ファンクション名] のフィールドの指定

        ファンクション名には[変換 Mode/Modifier]のフィールドで指定する
        入力されるキー・バインドと注目している(カレント)文節の
        変換モードの組合せにおいて呼び出されるファンクション(操作)
        を指定します。（カレント文節とは反転している、もしくは現在テキスト
        カーソルのある文節を指します。）

        指定できるファンクションとそれの各変換モードでの動作は
        以下に説明するとおりです。source 中の lib/Xsj3lib/func.c
        のコメントも参考にするとよいでしょう。

------------------------------------------------------------------------------
henkan  [InputMode] 入力バッファの文字列を一括変換し、ConvedMode にします
        [ConvedMode] カレント変換候補の一覧を表示して、SelectMode にします
        [NoInputMode/SelectMode/DictMode] エラーであることを
            明示するためベルを鳴らします
        ● [InputMode] の時に変換される文節は後述の .HenkanSegment の
            指定で決まります
        ● [InputMode] の時に変換後に注目する文節は後述の
            .BeginConversionLast の指定で決まります
        ● [InputMode] の時にカレントの文節中にひらがな以外の文字種が
            あったときに自動的にひらがなに変換してからかな漢字変換するか
            どうかは後述の .BeforeConversion の指定できまります。
        ●カレントの文節の最後の文字がローマかな変換テーブルに同じ読みに
            対して複数のローマ字が登録されているような文字の場合、
            カレント文節の文字種に変換してからかな漢字変換するかは後述の
            .LastDoubleConversion の指定で きまります。
        ● [ConvedMode] の時に候補選択を始める前にカレント文節を次候補で
            置き換える動作(next/wrap と同じ)をする回数は後述の
            .BeforeSelectCount の指定で決まります。
        ● [ConvedMode] の時に候補選択を始める前にカレント文節の文字種が
            ひらがなでないときにひらがなに変換してかな漢字変換する
            段階を置くか、そのまま候補選択を始めるかどうかは後述の
            .BeforeSelectConversion の指定で決まります。
        ● かな漢字変換直後 .BeginConversionLast が none でカーソル位置
            が最後にあって注目する文節がないときは、自動的に１つ前の文節に 
            移動してから動作を開始します。
        ●モード表示を変更するかどうかは後述の .DisplayModeChange
            の指定で決まります
------------------------------------------------------------------------------
convert     "henkan" と同じです
------------------------------------------------------------------------------
muhen   [NoInputMode] 無視します
        [InputMode/ConvedMode] かな漢字変換前の状態に戻し、InputMode にします
        [SelectMode] 候補一覧をポップダウンし、かな漢字変換前の状態に戻し、
            InputMode にします
        [DictMode] 読み入力ウィンドウををポップダウンし、かな漢字変換前の
            状態に戻し、InputMode にします
        ● .MoveBySegment の指定が InputMode に対して on の時は
            InputMode に戻してもそのままカレント文節には
            文字入力可能になりません。このときに通常の文字入力の
            キーを押したときの動作は後述の .FlushInConversion の
            指定で決まります
        ●無変換状態にされる文節は後述の .MuhenkanSegment の指定で決まります
        ●無変換後のテキストカーソルの位置は .MuhenkanCursorLast の指定で
            決まります
        ●モード表示を変更するかどうかは後述の .DisplayModeChange
            の指定で決まります
------------------------------------------------------------------------------
unconvert   "muhen" と同じです
------------------------------------------------------------------------------
kettei  [NoInputMode] 無視します
        [InputMode/ConvedMode] 変換中の文字列を確定します
        [DictMode] 入力した読みや登録／抹消する文節の長さを確定し、
            または確認の場合は操作を続行します
        [SelectMode] 選択中(反転している)の文字列を選択して文を確定します
            ただし品詞選択の場合は select と同じです
        ●いずれの場合も確定後は NoInputMode になります
        ●モード表示を変更するかどうかは後述の .DisplayModeChange
            の指定で決まります
------------------------------------------------------------------------------
flush       "kettei" と同じです
------------------------------------------------------------------------------
fix         "kettei" と同じです
------------------------------------------------------------------------------
return  [NoInputMode] 改行します
        [InputMode] 変換中の文字列を確定し、現在のカーソル位置で改行します
        [ConvedMode] 変換中の文字列を確定し、現在注目している文節の後で
            改行します
        [SelectMode] 候補選択中のときは選択中(反転している)の文字列を選択して
                ConvedMode に戻ります 記号選択中の時は選択中の記号を
                選択して InputMode に戻ります 品詞選択中の時は選択中の
                品詞を選択して DictMode（確認モード）に戻ります
        [DictMode] 範囲選択／読み入力時は範囲／読みを確定します
            またの確認時の場合は操作を続行します
        ●[InputMode/ConvedMode] では確定後は NoInputMode になります
        ●モード表示を変更するかどうかは後述の .DisplayModeChange
            の指定で決まります
------------------------------------------------------------------------------
halpha  [NoInputMode/InputMode/ConvedMode/DictMode] 文字種を
            半角アルファベットにします
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●現在の入力文字種を変更するのか、カレント文節の表示文字種を
            変換するのかは後述の .ModeConversion の指定で決まります
            入力文字種を変えた場合はモード表示が変わります
        ●入力文字種を変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
zalpha [NoInputMode/InputMode/ConvedMode/DictMode] 文字種を
            全角アルファベットにします
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●現在の入力文字種を変更するのか、カレント文節の表示文字種を
            変換するのかは後述の .ModeConversion の指定で決まります
            入力文字種を変えた場合はモード表示が変わります
        ●入力文字種を変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
hkatakana[NoInputMode/InputMode/ConvedMode/DictMode] 文字種を
            半角カタカナにします
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●現在の入力文字種を変更するのか、カレント文節の表示文字種を
            変換するのかは後述の .ModeConversion の指定で決まります
            入力する文字種を変えた場合はモード表示が変わります
        ●入力文字種を変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
zkatakana[NoInputMode/InputMode/ConvedMode/DictMode] 文字種を
            全角カタカナにします
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●現在の入力文字種を変更するのか、カレント文節の表示文字種を
            変換するのかは後述の .ModeConversion の指定で決まります
            入力する文字種を変えた場合はモード表示が変わります
        ●入力文字種を変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
hiragana[NoInputMode/InputMode/ConvedMode/DictMode] 文字種を
            ひらがなにします
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●現在の入力文字種を変更するのか、カレント文節の表示文字種を
            変換するのかは後述の .ModeConversion の指定で決まります
            入力する文字種を変えた場合はモード表示が変わります
        ●入力文字種を変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
tohalpha[NoInputMode/InputMode/ConvedMode/DictMode] 後述の
        .ModeConversion の指定に関係なく表示文字種を
        半角アルファベットにします（逆ローマ字かな変換をします）
        [SelectMode] エラーであることを明示するためベルを鳴らします
------------------------------------------------------------------------------
tozalpha[NoInputMode/InputMode/ConvedMode/DictMode] 後述の
        .ModeConversion の指定に関係なく表示文字種を
        全角アルファベットにします（逆ローマ字かな変換をします）
        [SelectMode] エラーであることを明示するためベルを鳴らします
------------------------------------------------------------------------------
tohkatakana[NoInputMode/InputMode/ConvedMode/DictMode] 後述の
        .ModeConversion の指定に関係なく表示文字種を半角カタカナにします
        （ローマ字かな変換をします）
        [SelectMode] エラーであることを明示するためベルを鳴らします
------------------------------------------------------------------------------
tozkatakana[NoInputMode/InputMode/ConvedMode/DictMode] 後述の
        .ModeConversion の指定に関係なく表示文字種を全角カタカナにします
        （ローマ字かな変換をします）
        [SelectMode] エラーであることを明示するためベルを鳴らします
------------------------------------------------------------------------------
tohiragana[NoInputMode/InputMode/ConvedMode/DictMode] 後述の
        .ModeConversion の指定に関係なく表示文字種をひらがなにします
        （ローマ字かな変換をします）
        [SelectMode] エラーであることを明示するためベルを鳴らします
------------------------------------------------------------------------------
zenkaku [NoInputMode/InputMode/ConvedMode/DictMode] 表示文字種を
        全角にします（ローマ字かな変換はしません）
        [SelectMode] エラーであることを明示するためベルを鳴らします
------------------------------------------------------------------------------
hankaku [NoInputMode/InputMode/ConvedMode/DictMode] 
        表示文字種を全角にします（逆ローマ字かな変換をしません）
        [SelectMode] エラーであることを明示するためベルを鳴らします
------------------------------------------------------------------------------
toupper [NoInputMode/InputMode/ConvedMode/DictMode] カレント文節中の
        アルファベットを大文字にします
        [SelectMode] エラーであることを明示するためベルを鳴らします
------------------------------------------------------------------------------
tolower [NoInputMode/InputMode/ConvedMode/DictMode] カレント文節中の
        アルファベットを小文字にします
        [SelectMode] エラーであることを明示するためベルを鳴らします
------------------------------------------------------------------------------
sjis    [NoInputMode/InputMode/ConvedMode/DictMode] 入力モードを
            Shift-JIS コード入力にし、モード表示を変えます
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●入力コードを変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
euc     [NoInputMode/InputMode/ConvedMode/DictMode] 入力モードを
            EUC コード入力にし、モード表示を変えます
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●入力コードを変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
jis     [NoInputMode/InputMode/ConvedMode/DictMode] 入力モードを
            JIS コード入力にし、モード表示を変えます
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●入力コードを変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
kuten   [NoInputMode/InputMode/ConvedMode/DictMode] 入力モードを
            区点コード入力にし、モード表示を変えます
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●入力コードを変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
code    [NoInputMode/InputMode/ConvedMode/DictMode] ローマ字／かな入力
            モードの時は初期コード入力のモードにし、コード入力モード
            の時は入力するコードを RoolDown し、モード表示を変えます
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●初期コード入力のコードと入力コードの RoolDown する順番は
            後述の .DefaultCode の指定で決まります
        ●入力コードを変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
modedown[NoInputMode/InputMode/ConvedMode/DictMode] 入力文字種／コード
            あるいはカレント文節の表示文字種を RoolDown し、後述の
            .InitialMode の指定にない入力文字種や .PrintMode の指定に
            ない表示文字種の時は初期入力文字種（コード）／表示文字種にします。
            また、入力文字種を変更する場合はモード表示を変えます
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●現在の入力文字種／コードを変更するのか、カレント文節の表示文字種を
            変換するのかは後述の .ModeConversion の指定で決まります
        ●初期入力文字種と入力文字種の RoolDown する順番は
            後述の .InitialMode の指定で決まります
        ●初期表示文字種と表示文字種の RoolDown する順番は
            後述の .PrintMode の指定で決まります
        ●入力文字種を変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
toggle          "modedown" と同じです
------------------------------------------------------------------------------
modeup  [NoInputMode/InputMode/ConvedMode/DictMode] 入力文字種／コード
            あるいはカレント文節の表示文字種を RoolUp し、後述の
            .InitialMode の指定にない入力文字種や .PrintMode の指定に
            ない表示文字種の時は最後に指定された入力文字種（コード）
            ／表示文字種にします。
            また、入力文字種を変更する場合はモード表示を変えます
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●現在の入力文字種／コードを変更するのか、カレント文節の表示文字種を
            変換するのかは後述の .ModeConversion の指定で決まります
        ●初期入力文字種と入力文字種の RoolUp する順番は
            （modedown と逆）後述の .InitialMode の指定で決まります
        ●初期表示文字種と表示文字種の RoolUp する順番は
            （modedown と逆）後述の .PrintMode の指定で決まります
        ●入力文字種を変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
toggleback       "modeup" と同じです
------------------------------------------------------------------------------
nextmode[NoInputMode] 無視します
        [InputMode/ConvedMode/DictMode] .ModeConversion の指定に関係なく
            カレント文節の表示文字種を RoolDown し、後述の .PrintMode の
            指定にない表示文字種の時は最初に指定された表示文字種にします。
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●初期表示文字種と表示文字種の RoolDown する順番は
            後述の .PrintMode の指定で決まります
------------------------------------------------------------------------------
prevmode[NoInputMode] 無視します
        [InputMode/ConvedMode/DictMode] .ModeConversion の指定に関係なく
            カレント文節の表示文字種を RoolUp し、後述の .PrintMode の
            指定にない表示文字種の時は最後に指定された表示文字種にします。
        [SelectMode] エラーであることを明示するためベルを鳴らします
        ●初期表示文字種と表示文字種の RoolUp する順番は
            後述の .PrintMode の指定で決まります
------------------------------------------------------------------------------
muhenkan[NoInputMode/InputMode] 入力文字種がひらがなでないときは
            後述の .MuhenkanMode で指定されている入力文字種にし、
            .MuhenkanMode で指定されている文字種のときはひらがなにします
            同時にモード表示が変わります
        [ConvedMode] 表示文字種がひらがなでも全角カタカナでもないとき
            （変換後の漢字交じりの状態を含む）はひらがなにし、
            ひらがなのときは全角カタカナにし、全角カタカナの時は
            後述の .MuhenkanInEdit で指定されている文字種にします
        [SelectMode/DictMode] 無視します
        ●このファンクションは sj2/sj3/sjx の「無変換」キーが押されたときの
            動作との互換性を維持するためにあります
        ●後述の .MuhenkanToggle の指定によって [ConvedMode/DictMode]
            で .MuhenkanInEdit で指定されている表示文字種へのトグルを行うか
            しないか指定できます。
        ●入力文字種を変更したときに確定するかどうかは
            後述の .FlushAfterConversion の指定で決まります
------------------------------------------------------------------------------
forward [NoInputMode] 無視します
        [InputMode/ConvedMode] カレント（反転している）文節またはテキスト
            カーソルを１つ後ろの文節／文字に移動します
        [SelectMode] 現在選択中の変換候補(記号／品詞)を１つ右のものに移します
        [DictMode] 反転している文節が１つだけの時、カレント（反転している）
            文節を１つ後に移し、複数の文節が選択（反転）されているときは
            エラーであることを明示するためベルを鳴らします
        ● [InputMode/ConvedMode] での移動単位を文節単位にするか文字単位に
            するかは後述の .MoveBySegment の指定で決まります
        ● 文節単位で移動する場合、移動できる最後の文節の位置は
            後述の .BeginConversionLast で決まります
        ● カレント文節／カーソルのある文字が最後の文節／文字の時
            最初の文節／文字へ移動するかどうかは後述の
            .MoveLoop の指定で決まります
------------------------------------------------------------------------------
right           "forward" と同じです
------------------------------------------------------------------------------
backward[NoInputMode] 無視します
        [InputMode/ConvedMode] カレント（反転している）文節またはテキスト
            カーソルを１つ前のの文節／文字に移動します
        [SelectMode] 現在選択中の候補(記号／品詞)を１つ左のものに移します
        [DictMode] 反転している文節が１つだけの時、カレント（反転している）
            文節を１つ前に移し、複数の文節が選択（反転）されているときは
            エラーであることを明示するためベルを鳴らします
        ● [InputMode/ConvedMode] での移動単位を文節単位にするか文字単位に
            するかは後述の .MoveBySegment の指定で決まります
        ● カレント文節／カーソルのある文字が最初の文節／文字の時
            最後の文節／文字へ移動するかどうかは後述の
            .MoveLoop の指定で決まります
------------------------------------------------------------------------------
left            "backward" と同じです
------------------------------------------------------------------------------
top     [NoInputMode] 無視します
        [InputMode/ConvedMode] カレント（反転している）文節を変換中の文字列
            の一番最初の文節に移動するか、テキストカーソルを現文節の
            最初の文字に移動します
        [SelectMode] 現在選択中の候補(記号／品詞)を選択表示の行の一番最初に
            移動します
        [DictMode] 反転している文節が１つだけの時、カレント（反転している）
            文節を文字列の一番最初の文節に移動し、複数の文節が選択
            （反転）されているときはエラーであることを明示するためベル
            を鳴らします
        ● [InputMode/ConvedMode] での移動単位を文節単位にするか文字単位に
            するかは後述の .JumpbySegment の指定で決まります
------------------------------------------------------------------------------
end     [NoInputMode] 無視します
        [InputMode/ConvedMode] カレント（反転している）文節を変換中の文字列
            の一番最後の文節に移動するか、テキストカーソルを現文節の
            最後の文字の後ろに移動します
        [SelectMode] 現在選択中の候補(記号／品詞)を選択表示の行の一番最後に
            移動します
        [DictMode] 反転している文節が１つだけの時、カレント（反転している）
            文節を文字列の一番最後の文節に移動し、複数の文節が選択（反転）
            されているときはエラーであることを明示するためベルを鳴らします
        ● [InputMode/ConvedMode] での移動単位を文節単位にするか文字単位に
            するかは後述の .JumpbySegment の指定で決まります
        ● 文節単位で移動する場合、移動できる最後の文節の位置は
            後述の .BeginConversionLast で決まります
------------------------------------------------------------------------------
bottom          "end" と同じです
------------------------------------------------------------------------------
up      [NoInputMode/InputMode/ConvedMode/DictMode] エラーであることを
            明示するためベルを鳴らします
        [SelectMode] 現在選択中の候補(記号)を１つ上のものに移します
------------------------------------------------------------------------------
down    [NoInputMode/InputMode/ConvedMode/DictMode] エラーであることを
            明示するためベルを鳴らします
        [SelectMode] 現在選択中の候補(記号)を１つ下のものに移します
------------------------------------------------------------------------------
first   [ConvedMode] 変換済みの文節の内容を一番最初の候補のものに
            置き換えます（変換候補学習は文節移動等の際に行われます）
        [SelectMode] 現在選択中の候補(記号／品詞)を現在表示されていないもの
            も含め最初のものに移動します
        [NoInputMode/InputMode/DictMode] エラーであることを明示するため
            ベルを鳴らします
------------------------------------------------------------------------------
last    [ConvedMode] 変換済みの文節の内容を一番最後の候補のものに
            置き換えます（変換候補学習は文節移動等の際に行われます）
        [SelectMode] 現在選択中の候補(記号／品詞)を現在表示されていないもの
            も含め最後のものに移動します
        [NoInputMode/InputMode/DictMode] エラーであることを明示するため
            ベルを鳴らします
------------------------------------------------------------------------------
nextp   [NoInputMode/InputMode/ConvedMode/DictMode] エラーであることを
            明示するためベルを鳴らします
        [SelectMode] 現在選択中の候補(記号／品詞)を選択表示を次ページに
            移します
------------------------------------------------------------------------------
prevp   [NoInputMode/InputMode/ConvedMode/DictMode] エラーであることを
            明示するためベルを鳴らします
        [SelectMode] 現在選択中の候補(記号／品詞)を選択表示を前ページに
            移します
------------------------------------------------------------------------------
wrap    [ConvedMode] 変換済みの文節の内容を次候補のものに置き換えます
        [SelectMode] 現在選択中の候補を次候補のものに移動します
            (forward/right と同様)
        [NoInputMode/InputMode/DictMode] エラーであることを明示するため
            ベルを鳴らします
------------------------------------------------------------------------------
next            "wrap" と同じです
------------------------------------------------------------------------------
wrapback[ConvedMode] 変換済みの文節の内容を前候補のものに置き換えます
        [SelectMode] 現在選択中の候補を前候補のものに移動します
            (forward/right と同様)
        [NoInputMode/InputMode/DictMode] エラーであることを明示するため
            ベルを鳴らします
------------------------------------------------------------------------------
prev            "wrapback" と同じです
------------------------------------------------------------------------------
select  [NoInputMode/InputMode/ConvedMode/DictMode] エラーであることを
            明示するためベルを鳴らします
        [SelectMode] 候補選択中のときは選択中(反転している)の文字列を選択して
            ConvedMode に戻ります 記号選択中の時は選択中の記号を
            選択して InputMode に戻ります 品詞選択中の時は選択中の
            品詞を選択して DictMode（確認モード）に戻ります(return と同じ)
------------------------------------------------------------------------------
cancel  [NoInputMode] 無視します
        [InputMode/ConvedMode] 現在変換中、の文字列をキャンセルし、
            NoInputMode にします
        [SelectMode] 候補選択中のときは候補選択（変更）動作を行わずに
            ConvedMode に戻ります 記号選択中の時は選択中の記号を
            選択せずに NoInputMode または InputMode に戻ります
            品詞選択中の時は DictMode(読み入力／範囲選択）に戻ります
        [DictMode] 読み入力／範囲選択時は入力中の文字をキャンセルし、
            ConvedMode にします
            確認モーででは読み入力／範囲選択の時点に戻ります
------------------------------------------------------------------------------
kakucyou[NoInputMode/SelectMode] エラーであることを明示するため
            ベルを鳴らします
        [InputMode/ConvedMode] カレント文節を１文字伸ばします
        [DictMode] 現在反転している最後の文節と次の文節を併せて
            反転させ、選択します
        ●拡張部分の表示文字種をカレント文節と同じものに
            変換するかどうかは後述の .ExpandModeConversion の指定によって
            決まります
        ●拡張部分を合わせて再度現文節／次文節のかな漢字変換を行うかどうかは
            後述の .ExpandKanjiConversion の指定によって決まります
------------------------------------------------------------------------------
expand          "kakucyou" と同じです
------------------------------------------------------------------------------
syukusyou[NoInputMode/SelectMode] エラーであることを明示するため
            ベルを鳴らします
        [InputMode/ConvedMode] カレント文節を１文字縮めます
        [DictMode] 現在反転している最後の文節群のうちと最後のの文節の
            反転を解消します 反転している文節がひとつしかないときは
            ベルを鳴らします
        ●縮小部分の表示文字種を次文節と同じものに
            変換するかどうかは後述の .ShrinkModeConversion の指定によって
            決まります
        ●縮小部分を次文節に合わせて再度現文節／次文節のかな漢字変換を行うか
            どうかは後述の .ShrinkKanjiConversion の指定によって決まります
        ●現文節が１文字しかない場合、現文節を前文節と合併するかどうかは
            後述の .ShrinkAll の指定によって決まります
------------------------------------------------------------------------------
shrink          "syukusyou" と同じです
------------------------------------------------------------------------------
backspace[NoInputMode] 無視します
        [InputMode/ConvedMode] テキストカーソルのある位置の直前の１文字か、
            カレント（反転している）文節の直前の文節を消去します
        [SelectMode] 選択動作をせずに選択表示をポップダウンして
            変換候補選択のときは ConvedMode に、記号選択のときは NoInputMode
            か InputMode に、品詞選択のときは DictMode(読み入力モード)に戻り、
            それぞれのモードでの動作を行います
        [DictMode] 範囲指定／読み入力時には入力された読み文字列
                の最後の文字を１文字を消去し、それ以外のモードのときは、
                無視します
        ● [InputMode/ConvedMode] での消去単位を文節単位にするか文字単位に
            するかは後述の .DeleteBySegment の指定で決まります
        ● .DeleteBySegment off のときで変換済みの場合は無変換状態に
            戻したうえで文字単位で消去しますが、このとき無変換状態に
            戻す範囲は後述の .DeleteChangeSegment の指定で決まります
        ● 候補選択での状態[SelectMode]で後述の .SelectBackSpaceMove が
            on の時は直前の文節ではなく、カレント文節に対して
            backspace の動作を開始します
------------------------------------------------------------------------------
delete  [NoInputMode] 無視します
        [InputMode/ConvedMode] テキストカーソルのある位置の１文字か
            カレント（反転している）文節を消去します
        [SelectMode] 選択動作をせずに選択表示をポップダウンして
            変換候補選択のときは ConvedMode に、記号選択のときは NoInputMode
            か InputMode に、品詞選択のときは DictMode(読み入力モード)に戻り、
            それぞれのモードでの動作を行います
        [DictMode] 無視します
        ● [InputMode/ConvedMode] での消去単位を文節単位にするか文字単位に
            するかは後述の .DeleteBySegment の指定で決まります
        ● .DeleteBySegment off のときで ConvedMode の場合は無変換状態に
            戻したうえで文字単位で消去しますが、このとき無変換状態に
            戻す範囲は後述の .DeleteChangeSegment の指定で決まります
            ただし、.MuhenkanCursorLast の指定には依存せず、カーソル位置は
            常に無変換状態に戻された文字列の先頭になります。
        ● 消去した文節が最後の文節だったときにカレント文節を移動するか
            どうかは後述の .DeleteLastMove の指定で決まります
------------------------------------------------------------------------------
delafter[NoInputMode/DictMode] 無視します
        [InputMode/ConvedMode] テキストカーソルのある位置から後ろの
            カレント文節、またはカレント文節を含めたそれ以降の変換中の
            文字列を消去します
        [SelectMode] 選択動作をせずに選択表示をポップダウンして
            変換候補選択のときは ConvedMode に、記号選択のときは NoInputMode
            か InputMode に、品詞選択のときは DictMode(読み入力モード)に戻り、
            それぞれのモードでの動作を行います
        ● 消去する範囲をカレント文節以降全ての文字列にするか、
            カレント文節中のテキストカーソルよりあとの部分に
            するかは後述の .KillBySegment の指定で決まります
        ● 文節単位で最後の文節を消去した後にカレント文節を
            １つ前に移動するかどうかは後述の .DeleteLastMove の指定
            で決まります
------------------------------------------------------------------------------
start   [NoInputMode/InputMode/ConvedMode] 変換を終了します
        [SelectMode]  選択中(反転している)の文字列を選択して変換を終了します
        [DictMode] 範囲／読み決定中は辞書登録／抹消を解消して変換を終了します
        ●変換終了時に変換中の文字列を確定するかどうかは後述の
            .FlushEndConversion の指定で決まります
        ●モード表示を変更するかどうかは後述の .DisplayModeChange
            の指定で決まります
------------------------------------------------------------------------------
reconnect[InputMode/ConvedMode/SelectMode/DictMode] 現在変換中、
            first server か second server かどちらかに再接続可能ならば
            再接続し、NoInputMode にします
            再接続に失敗した場合 kinput2 を終了します
        ●モード表示を変更するかどうかは後述の .DisplayModeChange
            の指定で決まります
------------------------------------------------------------------------------
saihenkan[InputMode/ConvedMode/SelectMode/DictMode] エラーであることを
            明示するためベルを鳴らします
        [NoInputMode] 直前に確定した文字列を再度呼び出して編集可能に
            します 似たような変換を何度も行ったり、なんらかの原因で
            変換サーバがダウンしたときに再接続前に変換中だった文字列を
            呼び出すのには便利な機能です
        ●再度変換文字列を呼び出す際に注目する文節の位置は後述の
            .BeginConversionLast の指定で決まります
------------------------------------------------------------------------------
reconvert           "saihenkan" と同じです
------------------------------------------------------------------------------
edit    [NoInputMode] 無視します
        [InputMode/ConvedMode] カレント文節をかな漢字変換前の状態に戻し、
            InputMode にし、
        [SelectMode] 候補一覧をポップダウンし、カレント文節を
            かな漢字変換前の状態に戻し、InputMode にします
        [DictMode] 読み入力ウィンドウををポップダウンし、カレント文節を
            かな漢字変換前の状態に戻し、InputMode にします
        ●muhen/unconvert と異なる点は .MuhenkanSegment の指定
            に関係なく常にカレント文節１文節のみかな漢字変換前
            の状態に戻し、更に .MoveBySegment の指定が InputMode に対して
            on の時でも文字入力可能にする点です。
        ●無変換後のテキストカーソルの位置は .EditCursorLast の指定で
            決まります
        ●モード表示を変更するかどうかは後述の .DisplayModeChange
            の指定で決まります
------------------------------------------------------------------------------
toroku  [InputMode/ConvedMode] 辞書登録を開始し、DictMode にします
        [NoInputMode/SelectMode/DictMode] エラーであることを
            明示するためベルを鳴らします
        ●モード表示を変更するかどうかは後述の .DisplayModeChange
            の指定で決まります
------------------------------------------------------------------------------
register            "toroku" と同じです
------------------------------------------------------------------------------
syoukyo [InputMode/ConvedMode] 辞書からの抹消を開始し、DictMode にします
        [NoInputMode/SelectMode/DictMode] エラーであることを
            明示するためベルを鳴らします
        ●モード表示を変更するかどうかは後述の .DisplayModeChange
            の指定で決まります
------------------------------------------------------------------------------
eliminate           "syoukyo" と同じです
------------------------------------------------------------------------------
symbol  [NoInputMode/InputMode/ConvedMode] 記号選択を開始し、
            SelectMode にします
        [SelectMode/DictMode] エラーであることを明示するためベルを鳴らします
        ●記号選択開始時に変換中の文字列を確定するかどうかは後述の
            .FlushInConverion の指定で決まります
        ●ConvedMode の場合、選択開始時に確定するか、無変換状態にするか、
            新たな文節として入力するかどうかは FlushInConversion の指定で
            で決まります
------------------------------------------------------------------------------
quote   [NoInputMode/InputMode/ConvedMode/SelectMode/DictMode] 
            次の１文字を無条件に入力します
        ●通常はコンロールコードは変換文字列に入力されませんが、
            この場合は次に入力されるコンロールコードも無条件に
            入力を許します
        ●次の入力の際に各ファンクションの機能を同時に実行するかどうかは
            後述の .InputSameTime の指定で決まります
------------------------------------------------------------------------------
flushbefore[NoInputMode/DictMode] 無視します
        [InputMode/ConvedMode] カレント文節のテキストカーソルより
            前の変換中の文字列を部分確定します
        [SelectMode] 選択を中断してそれぞれ、候補選択の場合は
            ConvedMode に記号選択のときは NoInputMode/InputMode に
            品詞選択の場合は DictMode に戻り、それぞれの変換モードのときの
            動作をします。
        ●部分確定する前に無変換状態ににするか、また、無変換状態ににする
            領域は後述の .FlushChangeSegment の指定で決まります
        ●無変換後のテキストカーソルの位置は .FlushCursorLast の指定で
            決まります
        ●モード表示を変更するかどうかは後述の .DisplayModeChange
            の指定で決まります
------------------------------------------------------------------------------
bell    [NoInputMode/InputMode/ConvedMode/SelectMode/DictMode] 
            ベルを鳴らします
------------------------------------------------------------------------------
kana    [NoInputMode/InputMode/ConvedMode/SelectMode/DictMode] 
            かなキーボード入力とアスキーキーボード入力をトグルします
            （疑似かなロックキーとして使用するキー・バインドを指定します）
        ●キーボードの初期モードは .KanaInputOnly の指定で決まります
------------------------------------------------------------------------------
sjrc    [NoInputMode/InputMode/ConvedMode/SelectMode/DictMode] 
            変換中の文字列を確定／キャンセルし、再度 sjrc
            ファイルを読み込み、現在の設定に上書きする形で
            (内部デフォルトにには再初期化しない) key table
            やカスタイマイズ用のフラグを再設定します。
        ●再読み込み時に変換中の文字列を確定するかどうかは後述の
            .FlushEndConversion の指定で決まります
        ●モード表示を変更するかどうかは後述の .DisplayModeChange
            の指定で決まります
        ●ファンクション実行時に読み込まれる sjrc ファイルは
            後述の .NextRCFile の指定で決まります。
------------------------------------------------------------------------------
kill    [NoInputMode/InputMode/ConvedMode/SelectMode/DictMode] 
            kinput2 自体を終了します
        ●この機能はまだサポートされていません
        ●終了時に変換中の文字列を確定するかどうかは後述の
            .FlushEndConversion の指定で決まります
------------------------------------------------------------------------------
null    [NoInputMode/InputMode/ConvedMode/SelectMode/DictMode] 
            無視します（何もしません）デフォルトでバインドされている
            キー・バインドに対して何もしないようにするときなどに使います
------------------------------------------------------------------------------
ignore  [NoInputMode/InputMode/ConvedMode/SelectMode/DictMode] 
            デフォルトのバインドも含めて既にバインドされている
            キー・バインドと重なる場合そのバインドを
            キー・バインドとファンクションの対応テーブルから
            削除します。テーブル自体から削除する点が null と
            異なる点です。
------------------------------------------------------------------------------

        (2) [変換 Mode/Modifier]/[KeySym] フィールドの指定のしかた

        このエントリには１番目のエントリのファンクションを
        呼び出すときの変換モードとキー操作を指定します。
        [変換 Mode/Modifier] は以下の例のようにそれぞれ '|' で
        OR を取ることができます

        [Modifier] は小文字で、[変換 Mode] は大文字から始まる
        半角アルファベット文字列で指定します
        [変換 Mode] の指定方法は kinput2 sj3 版の初期バージョンとは
        若干異なっていますが上位互換性は維持しています。

        例 (Control Key と Shift Key が同時に押され変換モードが
            InputMode のときに KeySym 名が 'd' のキーが押されると
            ファンクション "toroku" の機能を呼び出す

        .ki2key.toroku    c|s|I                     d
        .ki2key.toroku    control|shift|Input       d

        [変換 Mode/Modifier] に '|' で区切って
        指定できるものとその意味は以下のとおりです
        指定は最初の１文字しか見ないので１文字に省略可能です。
        （最初の１文字が 'm' のときは最後の１文字もみます）
        ただし、大文字／小文字の区別は重要です。

        none        同時にモディファイアキーがなにも押されないとき
        shift       Shift-Key が同時に押されたとき
        control     Control-Key が同時に押されたとき
        mod         Mod1-Key (Meta-Key) が同時に押されたとき
        lock        Lock-Key が同時に押されたとき
        mod1        Mod1-Key (Meta-Key) が同時に押されたとき
        mod2        Mod2-Key が同時に押されたとき
        mod3        Mod3-Key が同時に押されたとき
        mod4        Mod4-Key が同時に押されたとき
        mod5        Mod5-Key が同時に押されたとき
        kana        かなロック時に Mode_switch のキーが
                    モディファイアとしてセットされているとき

        NoInput     変換モードが NoInputMode の時
        Input       変換モードが InputMode の時
        Conved      変換モードが ConvedMode の時
        Select      変換モードが SelectMode の時
        Dict        変換モードが DictMode の時
        Output      変換モードが ConvedMode か SelectMode の時 ('C|S' と同じ)
        Flush       変換モードが InputMode か ConvedMode の時 ('I|C' と同じ)
        All         すべての変換モードの時 ('N|I|C|S|D' と同じ)

        ただし、[変換 Mode/Modifier] のエントリが、none、shift、control、
        mod1、lock、の組合せだけで書かれているときはその操作はすべての
        変換モードの時に有効になります( 'All' が OR で指定されたのと
        同じになる)

        [KeySym] のフィールドには KeySym 名を指定します。
        間違った keysym を指定すると function に "ignore" を
        指定するのと同じになります。
         KeySym 名は XKeysymToString(3X11) のリターン値、
        xmodmap -pk の表示等から得ることができます。

        (3) [InputSame] フィールドの指定のしかた

        このフィールドは省略可能で、文字入力可能な
        キー・バインドと重なったときにファンクションの操作の実行と同時に
        文字入力も行うかどうかを指定します。この場合の動作指定の
        リソースとしては後述の .InputSameTime もありますが、
        .InputSameTime が全てのキー・バインドについて有効になるのに
        対して、このフィールドの指定は個別のキー・バインドについて
        して有効になります。.InputSameTime の指定とこのフィールドの指定
        が異なる場合はこのフィールドの指定が優先されます。

        指定できる値とその意味は以下のとおりです。

        on      文字入力を同時に行います。
        off     ファンクションの操作のみ実行します
        none    .InputSameTime の指定に依存します(デフォルト値)

        例
        sjrk ファイルに以下のような記述があって
        .       。
        sjrc ファイルに以下のような記述がある場合、
        .ki2key.convert   F   period   on

        .InputSameTime の指定に関係なく「.」の入力と同時に
        「。」に変換され、変換中の文字列に対して convert の
        ファンクションが実行されます。

        (4) プログラム内部でのデフォルトのキー・バインド

        内部のデフォルトのキー・バインドを sjrc に指定する形式で
        示すと以下のようになります。
        sjrc に前記のようなフォーマットで記述することによって
        異なるキー・バインドを追加したり変更したりできます。
        ignore ファンクションを使用して上書きすれば kinput2 では
        使用せず、アプリケーションにイベントを渡すようにもできます。

        KeySym と Modifier キーの組合せが同じで、同一の変換モードで
        有効になるように指定したキー・バインドがあった場合は後に
        記述されたものが有効になります。

[Function]  [Modifier/変換 Mode]    [Keysym] 

.ki2key.henkan          F           Select
.ki2key.convert         F           Select
.ki2key.muhen           s|C         Cancel
.ki2key.unconvert       s|C         Cancel
.ki2key.fix             F|D         Execute
.ki2key.kettei          F           KP_Enter
.ki2key.flush           F           Escape
.ki2key.return          A           Return
.ki2key.halpha          A           F6
.ki2key.zalpha          A           F7
.ki2key.hkatakana       A           F8
.ki2key.zkatakana       A           F9
.ki2key.hiragana        A           F10
.ki2key.tohalpha        s|F         F16
.ki2key.tozalpha        s|F         F17
.ki2key.tohkatakana     s|F         F18
.ki2key.tozkatakana     s|F         F19
.ki2key.tohiragana      s|F         F20
.ki2key.zenkaku         F           F4
.ki2key.hankaku         F           F3
.ki2key.toupper         c|F         u
.ki2key.tolower         c|F         l
.ki2key.sjis            s|N|F       F15
.ki2key.euc             s|N|F       F14
.ki2key.jis             s|N|F       F13
.ki2key.kuten           s|N|F       F12
.ki2key.code            N|F         F5
.ki2key.modedown        A           Tab
.ki2key.toggle          A           Tab
.ki2key.modeup          s|A         Tab
.ki2key.toggleback      s|A         Tab
.ki2key.nextmode        c|F         Tab
.ki2key.prevmode        s|c|F       Tab
.ki2key.muhenkan        N|F         Cancel
.ki2key.right           A           Right
.ki2key.forward         A           Right
.ki2key.left            A           Left
.ki2key.backward        A           Left
.ki2key.top             c|F|D       a
.ki2key.end             c|F|D       e
.ki2key.bottom          c|F|D       e
.ki2key.up              S           Up
.ki2key.down            S           Down
.ki2key.first           c|O         Up
.ki2key.last            c|O         Down
.ki2key.nextp           S           Select
.ki2key.prevp           S           Cancel
.ki2key.wrap            s|C         Down
.ki2key.next            s|C         Down
.ki2key.wrapback        s|C         Up
.ki2key.prev            s|C         Up
.ki2key.select          S           Execute
.ki2key.cancel          S|D         Escape
.ki2key.cancel          s|F         Cancel
.ki2key.kakucyou        F|D         Up
.ki2key.expand          F|D         Up
.ki2key.syukusyou       F|D         Down
.ki2key.shrink          F|D         Down
.ki2key.backspace       F|S|D       BackSpace
.ki2key.delete          F|S|D       Delete
.ki2key.delafter        c|F         k
.ki2key.start           s|A         Kanji
.ki2key.reconnect       m|s|A       Kanji
.ki2key.saihenkan       c|N         Select
.ki2key.reconvert       c|N         Select
.ki2key.edit            m|C         Select
.ki2key.toroku          C           F1
.ki2key.register        C           F1
.ki2key.syoukyo         C           F2
.ki2key.eliminate       C           F2
.ki2key.symbol          s|N|F       Escape
.ki2key.quote           c|N|F       q

    [2] モード表示文字列のカスタマイズ方法
    
    モード表示文字列のカスタマイズ
    は sjrc ファイルで行います。
    format は以下のように １つのエントリ(keyword + 1 value)
    からなります。

    .guide.[モード名]       [モード表示文字列]

        (1) [モード名] に指定できるもの

        モード名指定できるものには以下のものがあります
        hiragana〜syoukyo より後のものは Xsj3clib で機能拡張されたものです。

------------------------------------------------------------------------------
hiragana    ローマ字入力／かな入力モードで入力文字種がひらがな／全角カタカナ
            のときに表示する文字列を指定時に指定します
------------------------------------------------------------------------------
zkatakana   ローマ字入力／かな入力モードで入力文字種が全角カタカナのときに
            表示する文字列を指定時に指定します
------------------------------------------------------------------------------
hkatakana   ローマ字入力／かな入力モードで入力文字種が半角カタカナのときに
            表示する文字列を指定時に指定します
------------------------------------------------------------------------------
zalpha      ローマ字入力モードで入力文字種が全角アルファベットのときに
            表示する文字列を指定時に指定します
------------------------------------------------------------------------------
halpha      ローマ字入力モードで入力文字種が半角アルファベットのときに
            表示する文字列を指定時に指定します
------------------------------------------------------------------------------
sjis        コード入力モードで Shift-JIS 入力の時に表示する文字列を
            指定します
------------------------------------------------------------------------------
jis         コード入力モードで JIS 入力の時に表示する文字列を
            指定します
------------------------------------------------------------------------------
euc         コード入力モードで EUC 入力の時に表示する文字列を
            指定します
------------------------------------------------------------------------------
kuten       コード入力モードで区点コード入力の時に表示する文字列を
            指定します
------------------------------------------------------------------------------
toroku      辞書登録の時に表示する文字列を指定します
            ●登録時にモード表示を変更するかどうかは後述の .DisplayModeChange 
                の指定でで決まります
------------------------------------------------------------------------------
register    toroku と同じです
------------------------------------------------------------------------------
syoukyo     辞書登録抹消の時に表示する文字列を指定します
            ●抹消時にモード表示を変更するかどうかは後述の .DisplayModeChange 
                の指定でで決まります
------------------------------------------------------------------------------
eliminate   syoukyo と同じです
------------------------------------------------------------------------------
kanji       全ての文節の変換モードが ConvedMode のときに表示する文字列を
            指定します
            ●変換時にモード表示を変更するかどうかは後述の .DisplayModeChange 
                の指定でで決まります
------------------------------------------------------------------------------
edit        変換中の文字列に変換モードが InputMode/ConvedMode 双方の
            文節があるときに表示する文字列を指定します
            ●モード表示を変更するかどうかは後述の .DisplayModeChange 
                の指定でで決まります
------------------------------------------------------------------------------
candidate   変換モードが SelectMode で候補選択のときにに表示する文字列を
            指定します
            ●モード表示を変更するかどうかは後述の .DisplayModeChange 
                の指定でで決まります
------------------------------------------------------------------------------
symbol      変換モードが SelectMode で記号選択のときにに表示する文字列を
            指定します
            ●モード表示を変更するかどうかは後述の .DisplayModeChange 
                の指定でで決まります
------------------------------------------------------------------------------
hinsi       変換モードが SelectMode で品詞選択のときにに表示する文字列を
            指定します
            ●モード表示を変更するかどうかは後述の .DisplayModeChange 
                の指定でで決まります
------------------------------------------------------------------------------
quote       ファンクションの quote を呼び出して引用文字列の挿入を
            行うときにに表示する文字列を指定します
            ●モード表示を変更するかどうかは後述の .DisplayModeChange 
                の指定でで決まります
------------------------------------------------------------------------------
    
    2. [モード表示文字列] に指定できるもの

        [モード表示文字列] には全角文字／半角文字の両方を指定できますが、
        指定できるコードについては前章(<3> の [5])の記述をご覧ください。

    3. デフォルトのモード表示文字列の指定

        デフォルトの表示文字列の指定は以下のようになっています。
        
.guide.hiragana     かな
.guide.zkatakana    全カナ
.guide.hkatakana    半カナ
.guide.zalpha       ABC
.guide.halpha       ＡＢＣ
.guide.sjis         Shift-JIS
.guide.jis          ＪＩＳ
.guide.euc          ＥＵＣ
.guide.kuten        区点
.guide.toroku       登録 
.guide.syoukyo      消去
.guide.kanji        漢字
.guide.edit         編集
.guide.candidate    一覧
.guide.symbol       記号
.guide.hinsi        品詞
.guide.quote        引用

    [3] その他の各種ユーザ・インターフェースのカスタマイズ方法

    Sj3Object ではその他、様々なユーザ・インターフェースを
    選べるように sjrc ファイルでカスタマイズすることができます。
    それぞれのリソースは以下のものに分けられます。

    (1) sj2/sjx/sj3 と共通のリソース(3. 4. 5. 7. 8. 9, 10. 11.)
    (2) sj2/sjx/sj3 にあるリソースの解釈を拡張したもの(1. 2. 6.)
    (3) Xsj3clib でのオリジナルのリソース(12.〜51.)

    1. 入力文字種の変更順を指定する

[format] .InitialMode [文字種名／コード名].[文字種名／コード名].‥
[default value] hiragana.zkatakana.hkatakana.zalpha.halpha.sjis.euc.jis.kuten

        modedown(toggle)/modeup(toggleback) ファンクション（<4>[1]参照）
        での入力文字種（コード）の変更順を指定します。一番左に指定された
        入力文字種（コード）は変換機能を初めて呼び出したときの
        入力文字種、または modedown(toggle) で変更前の入力文字種が
        このリソース中にないときに変更される入力文字種になります。
        同様に一番右に指定された文字種は modeup(toggleback) で変更前の
        入力文字種がこのリソース中にないときに変更される文字種になります。

        指定できる入力文字種（コード）名は hiragana/zkatakana/hkatakana/
        zalpha/halpha/sjis/jis/euc/kuten の９つです。
        sj2/sj3/sjx との互換性のため、は unbuff/buffer/direct も
        指定できますが無視されます。

    2. コード入力の変更順を指定する

[format] .DefaultCode [コード名].[コード名]‥
[default value] sjis.euc.jis.kuten      

        code ファンクションの機能を呼び出したときの
        入力コードの変更順を指定します。
        指定できるコードは sjis/jis/euc/kuten です。

    3. NoInputMode/InputMode でファンクション muhenkan を呼び出した
        場合に入力文字種がひらがなのときの変更文字種指定
    
[format] .MuhenkanMode [文字種名]
[default value] halpha

        変換モードが NoInputMode/InputMode でファンクション muhenkan
        を呼び出した時に入力文字種がひらがなのときは入力文字種を
        指定された文字種に変更します。指定できる文字種は
        hiragana/zkatakana/hkatakana/zalpha/halpha の５つです。

    4. ConvedMode/DictMode でファンクション muhenkan を呼び出したとき
        の表示文字種のトグル指定

[format] .MuhenkanToggle [on/off]
[default value] on

        変換モードが ConvedMode/DictMode でファンクション muhenkan を
        呼び出したときに表示文字種のトグル動作を
        を行うかどうかの指定を on/off で行います。

    5. ConvedMode/DictMode でファンクション muhenkan を呼び出したとき
        のトグル動作時に表示文字種をどの文字種にトグルするかの指定

[format] .MuhenkanInEdit [文字種名]
[default value] halpha

        変換モードが ConvedMode でファンクション muhenkan を呼び出したとき
        に表示文字種が全角カタカナのときには指定された文字種に
        表示文字種を変更します。指定できるモードは
        hiragana/zkatakana/hkatakana/zalpha/halpha の５つです。

    6. ローマ字かな変換できないときベルを鳴らすかの指定

[format] .rkerrbell [on/off]
[default value] off

        ローマ字かな変換に失敗したときにベルを鳴らすかどうかを
        を on/off で指定します。Xsj3clib ではこの指定が on のとき
        コード入力で変換に失敗したときもベルを鳴らします。

    7. 入力文字種変更時に確定するかどうかの指定

[format] .FlushAfterConversion [on/off]
[default value] off

        
        入力文字種を変更したときに変換中の文字列を
        確定するかどうかを on/off で指定します。デフォルトは "off" です。
        
    8. 文節長学習機能を使用するか

[format] .bstudy [on/off]
[default value] on

        文節長（文節間）学習機能を使用するかどうかを on/off で指定します。

    9. first sj3serv のホスト名指定

[format] .sj3serv [ホスト名]
[default value] NULL(localhost)

        first 変換サーバとして接続するサーバのホスト名を指定します。
        これは kinput2 のオプション（リソース）でも指定できます。
        (sj3 コマンドとの互換性のため .server でも同じです)

    10. 変換文字列がある状態でアプリケーションに渡すコントロールコードの指定

[format] .SetNormal
[default value] NULL

        変換を確定後、変換を終了し、指定されたコントロールコードを
        クライアントに直接渡します。このリソースの動作は
        後述の .ControlSameTime を on にして、ここで指定する
        文字の KeySym を変換終了に割り当て、なおかつ、
        後述の .FlushEndConversion が on の場合と等価です。

    11. 指定されたコントロールコードと直後に入力された文字を
        アプリケーションに渡す指定

[format] .ThroughNext
[default value] NULL

        変換を確定し、指定されたコントロールコードと
        直後の１文字をクライアントに直接渡します。
        指定されているコントロールコードを発生するキー・バインドが
        ファンクションに割り当てられているときに同時に
        コントロールコードをクライアントに渡すかどうかは
        後述の .ControlSameTime の指定で決まります。

    12. second sj3serv のホスト名指定

[format] .sj3serv2 [ホスト名]
[default value] NULL(localhost)

        second 変換サーバとして接続する sj3serv のホスト名を指定します。
        これは kinput2 のオプション（リソース）でも指定できます。

    13. アルファベットを大文字に変換するか

[format] .AlphabetConversion [on/off]
[default value] off

        ローマ字かな変換時のアルファベットを全角に変換するか
        を on/off で指定します。この指定は表示文字種を
        「ひらがな」「全角カタカナ」に変換する場合も
        有効です。ただし、sj3 では辞書の性質上読みが全角の方が
        候補を選択できます。(Wnn と逆：例えば「１」に対しては候補
        がいくつかありますが、「1」にはありません)

        例えば NEWS-OS の sj2/sj3/sjx の動作は on、
        CcWnn/Canna の動作は off です。(Canna では数字に限って
        全角に変換しますが、これは sjrk ファイルでカスタイマイズ可能です。

    14. 文字消去時の動作（変換途中のローマ字を表示するか）

[format] .BackDisplay [on/off]
[default value] off

        InputMode での文字消去時に直前に入力したローマ字かな変換済の
        文字の変換途中のアルファベットを表示するかどうか
        を on/off で指定します。
        例えば NEWS-OS の sj3 の動作は on、CcWnn/Canna の動作は off です。
        sjx では変換バッファにあるすべての文字について消去時に
        変換途中のアルファベットを表示しますが、この方法は
        今回はサポートを見送りました。

    15. 一括変換時に注目するセグメントの位置の指定

[format] .BeginConversionLast [on/off/none]
[default value] on

        ファンクション henkan(convert) の機能を呼び出して一括変換を
        行ったときにどの文節をカレント(反転した)文節
        にするかを指定します。on の時は最後の文節を off の時は
        最初の文節をカレント(反転した)文節にします。
        none の時はどの文節もカレントにせず、更に次の
        文節入力準備の状態にし、文節移動のファンクション
        (forward/backward/end 等)を呼び出したときに
        この状態を最後の文節として扱います。
        例えば NEWS-OS の sj3 の動作は on、CcWnn の動作は none、
        Canna の動作は off です。

    16. 文節拡張時の拡張部分の表示文字種変換動作の指定

[format] .ExpandModeConversion [on/off].[on/off]
[default value] on.off

        ファンクション kakucyou(expand) の機能を呼び出して文節拡張
        を行ったときに拡張した部分の表示文字種をカレント文節と同じ
        文字種に変換するかどうかを指定します。
        on の時は表示文字種を変換し off の時は変換を行いません。

        value の第１フィールドには InputMode の時の動作を
        第２フィールドには ConvedMode の時の動作を指定します。

    17. 文節縮小時の縮小部分の表示文字種変換動作の指定

[format] .ShrinkModeConversion [on/off].[on/off]
[default value] on.off

        ファンクション syukusyou(shrink) の機能を呼び出して文節縮小
        を行ったときに縮小した部分を次文節と同じ
        文字種に再変換するかどうかを指定します。
        on の時は表示文字種を変換し off の時は変換を行いません。

        value の第１フィールドには InputMode の時の動作を
        第２フィールドには ConvedMode の時の動作を指定します。

    18. 文節拡張時の拡張部分のかな漢字変換動作の指定

[format] .ExpandKnajiConversion [on/off].[on/off]
[default value] off.on

        ファンクション kakucyou(expand) の機能を呼び出して文節拡張
        を行ったときにカレント文節と次文節の
        かな漢字変換をするかどうかを指定します。
        on を指定した時は再度かな漢字変換をします。
        off の時は変換を行いません。

        value の第１フィールドには InputMode の時の動作を
        第２フィールドには ConvedMode の時の動作を指定します。

    19. 文節縮小時の縮小部分のかな漢字変換動作の指定

[format] .ShrinkKnajiConversion [on/off].[on/off]
[default value] off.on

        ファンクション syukusyou(shrink) の機能を呼び出して文節縮小
        を行ったときにカレント文節と次文節の
        かな漢字再変換をするかどうかを指定します。
        on を指定した時はかな漢字再変換をします。
        off の時は再変換を行いません。デフォルトは "on" です。

        value の第１フィールドには InputMode の時の動作を
        第２フィールドには ConvedMode の時の動作を指定します。

    20. 文節縮小時に１文字しかないときの動作の指定

[format] .ShrinkAll [on/off]
[default value] off

        ファンクション syukusyou(shrink) の機能を呼び出して文節縮小時
        にカレント文節が１文字しかないときの動作を指定します。
        on の時はカレント文節と前文節とを合体してカレント文節を
        前文節に移します（前文節がないときはベルを鳴らします）。
        off の時はベルを鳴らしてそれ以上文節を縮小できません。

    21. ConvedMode で文字入力のキーを押したときの動作の指定

[format] .FlushInConversion [on/off/none/edit]
[default value] on

        ConvedMode で文字入力のキーが押されたとき、
        また、記号選択でファンクション
        Select/Return/fix(kettei.flush) の操作が行われたとき、
        もしくは InputMode の時で .MoveBySegment の指定が InputMode
        に対して文節単位に移動するように指定されていて、
        文字入力のキーが押されたとき、
        変換中の文字列を確定するかどうかを指定します。

        on の時は変換中の文字列を確定して新たな文字列の
        入力に移ります。off の時は最後の文節の次の文節として入力されます。
        none の時は無視します。edit の時はカレント文節を無変換
        状態(InputMode)にして .EditCursorLast で指定された
        カーソル位置に文字入力します。
        例えば NEWS-OS の sj2/sj3/sjx や Canna の動作は on、
        CcWnn の動作は off です。

    22. SelectMode （候補選択）で文字入力のキーを押したときの動作の指定

[format] .FlushSelectConversion [on/off/none/edit]
[default value] none

        SelectMode（候補選択）で文字入力のキーが押されたとき、
        変換中の文字列を確定するかどうかを指定します。
        on の時は選択動作をして変換中の文字列を確定して新たな文字列の
        入力に移ります。off の時は選択動作をして最後の文節の次の文節
        として入力されます。none の時は無視します。
        edit の時はカレント文節を無変換状態(InputMode)にして
        .EditCursorLast で指定された
        カーソル位置に文字入力します。ただし、記号選択のときは
        この指定に関係なく無視し、品詞選択のときは読み入力に戻ります。
        例えば NEWS-OS の sj2/sj3/sjx の動作は none、
        Canna の動作は on、CcWnn の動作は off です。

    23. 変換終了操作時の確定動作の指定

[format] .FlushEndConversion [on/off]
[default value] on

        変換文字列がある状態でファンクション start や sjrc、
        kill が呼び出されたときに変換中の文字列を
        確定するかどうかを指定します。
        on の時は変換中の文字列を確定してから各ファンクションの
        機能が実行されます。off の時には変換中の文字列は
        クリアされます。
        例えば NEWS-OS の sj2/sj3/sjx や CcWnn の動作は on、
        Canna の動作は off です。

    24. かな漢字変換を行う文節の指定

[format] .HenkanSegment [one/all/after]
[default value] all

        InputMode でファンクション henkan(convert)が呼ばれたときに
        変換中の文字列中のどの文節のかな漢字変換をするかを指定します。
        one の時はカレント文節（現在カーソルがある文節）を、all の時は
        変換中の全ての文節を、after の時はカレント文節含むカレント文節以降
        文節を変換します。
        例えば NEWS-OS の sj2/sj3/sjx の動作は one、 CcWnn の動作は after、
        Canna の動作は all です。

    25. 無変換状態にする文節の指定

[format] .MuhenkanSegment [one/all/after]
[default value] one

        ConvedMode でファンクション muhen(unconvert)が呼ばれたときに
        変換中の文字列中のどの文節を無変換状態にするかを指定します。
        one の時はカレント文節（現在反転している文節）を、all の時は
        変換中の全ての文節を、after の時はカレント文節含むカレント文節以降
        文節を無変換状態にします。
        例えば Canna の編集開始時や CcWnn の動作は one、
        Canna の BSキーの動作は all です。

    26. 文字消去時に無変換状態にする文節の指定

[format] .DeleteChangeSegment [one/all/after]
[default value] one

        ConvedMode のときで DeleteBySegment（後述）が off
        のとき backspace/delete のファンクションを呼び出したときに
        変換中の文字列のどの文節を無変換状態(InputMode)に戻すかを指定します。
        one の時はカレント文節（現在反転している文節）を、all の時は
        変換中の全ての文節を、after の時はカレント文節含むカレント文節以降
        文節を無変換状態にします。
        例えば CcWnn の動作は one、Canna の動作は all です。

    27. 部分確定時に無変換状態にする文節の指定

[format] .FlushChangeSegment [one/all/off]
[default value] one

        flushbefore のファンクションを呼び出したときに
        カレント文節もしくはそれ以降の文節を無変換状態(InputMode)に
        戻すかを指定します。
        one の時はカレント文節（現在反転している文節）を、all の時は
        カレント文節以降の全ての文節を、文節を無変換状態にしてから
        部分確定の動作を行います。all を指定したときは
        mobebyseg が InputMode で on の時でも文字入力可能な
        状態（入力開始時と同じ）にします。
        off の時はカレント文節の無辺感度憂さはしませんが、
        カレント文節が文字入力可能な（反転していない）状態で
        テキストカーソルが文節の端にないときにテキストカーソル
        より前の部分を確定します。

        例えば Canna の動作は all です。

    28. 文字種変更ファンクションが呼ばれたときの動作指定

[format] .ModeConversion.[モード名] [on/off].[on/off].[on/off]
[default value] hiragana off.on.off
[default value] zkatakana off.on.off
[default value] hkatakana off.on.off
[default value] halpha off.on.off
[default value] zalpha off.on.off

        hiragana、zkatakana、hkatakana、halpha、zalpha、modedown(toggle)、
        modeup(toggleback) の７つの文字種変更ファンクションが呼ばれたときに
        表示文字種を変更するのか、入力文字種を変更するのかを指定します。
        [モード名]に指定できるのは hiragana/zkatakana/hkatakana/halpha/zalpha
        /rolldown/rollup の７つで、それぞれのファンクションの動作
        に対応します。

        value の第１フィールドには InputMode の時の動作を
        第２フィールドには ConvedMode の時の動作を指定します。
        第３フィールドには NoInputMode の時の動作を指定します。

        これらのフィールドが on の時は表示文字種を、
        off の時は入力文字種を変更します。入力文字種の変更のときは
        表示モードも変更します。また、第３フィールド(NoInputMode の時) に
        on が指定された場合は何もしません。
        例えば NEWS-OS の sj2/sj3/sjx の動作や Canna の動作は
        デフォルトと同じですが、CcWnn では

        hiragana on.on.on
        zkatakana on.on.on

        になります。

    29. カレント文節やテキストカーソルを前後に移動する
        ファンクションが呼ばれたときの移動単位指定

[format] .MoveBySegment [on/off].[on/off]
[default value] off.on

        変換文字列に対して一度 henkan(convert) のファンクションが呼ばれた後、
        forward(right)、backward(left) のカレント文節、テキストカーソル
        を前後に移動するファンクションが呼ばれたときに
        文節単位で移動するか、文字単位で移動するかを指定します。

        value の第１フィールドには InputMode の時の動作を
        第２フィールドには ConvedMode の時の動作を指定します。
        これらのフィールドが on の時は文節単位で、
        off の時は文字単位で移動します。

        移動先が ConvedMode(変換済み文節)で文字単位に移動するように
        指定された場合、その文節を無変換の状態にして移動します。
        henkan(convert) のファンクションが呼ばれる以前は
        このリソースの指定に関係なく文字単位に移動します。

        例えば NEWS-OS の sj2/sj3/sjx の動作は on.on ですが、
        CcWnn や Canna の動作はデフォルトと同じです。
        
    30. カレント文節やテキストカーソルを前後に移動する
        ファンクションが呼ばれたときのループ指定

[format] .MoveLoop [on/off]
[default value] off

        MoveBySegment が on の時でカレント文節が最後の文節のとき、
        MoveBySegment が off の時でテキストカーソルが文節の
        最後にあるときに forward(right) のファンクションが呼ばれた
        時の動作、逆に
        MoveBySegment が on の時でカレント文節が最初の文節のとき、
        MoveBySegment が off の時でテキストカーソルが文節の
        最初にあるときに backward(left) ののファンクションが呼ばれた
        時の動作を指定します。

        on のときは、それぞれ最初の文節／文節の最初に、最後の文節
        ／文節の最後に移動します。
        off  の時は無視します。

        最後の文節として扱う文節の定義は .BeginConversionLast の
        指定に依存します。
        例えば NEWS-OS の sj2/sj3/sjx の動作や CcWnn の動作は off ですが、
        Canna の動作は on です。

    31. カレント文節やテキストカーソルを最初または最後にに移動する
        ファンクションが呼ばれたときの移動単位指定

[format] .JumpBySegment [on/off].[on/off]
[default value] off.on

        変換文字列に対して一度 henkan(convert) のファンクションが呼ばれた後、
        top、end(bottom) のカレント文節を変換文字列の最初あるいは最後
        の文節に、テキストカーソルをカレント文節の最初あるいは最後の文字に
        移動するファンクションファンクションが呼ばれたときに
        文節単位で移動するか、文字単位で移動するかを指定します。

        value の第１フィールドには InputMode の時の動作を
        第２フィールドには ConvedMode の時の動作を指定します。
        これらのフィールドが on の時は文節単位で、
        off の時は文字単位で移動します。

        henkan(convert) のファンクションが呼ばれる以前は
        このリソースの指定に関係なく文字単位に移動します。
        最後の文節として扱う文節の定義は .BeginConversionLast の
        指定に依存します。

        例えば CcWnn の動作は on.on ですが Canna の動作は
        デフォルトと同じです。

    32. 文字／文節消去のファンクションが呼ばれたときの消去単位指定

[format] .DeleteBySegment [on/off].[on/off]
[default value] off.on

        変換文字列に対して一度 henkan(convert) のファンクションが呼ばれた後、
        delete、backspace の文字／文節消去のファンクションが呼ばれたときに
        文節単位で消去するか、文字単位で消去するかを指定します。
        
        value の第１フィールドには InputMode の時の動作を
        第２フィールドには ConvedMode の時の動作を指定します。
        これらのフィールドが on の時は文節単位で、
        off の時は文字単位で消去します。

        消去する文節が ConvedMode(変換済み文節)で文字単位に消去するように
        指定された場合、前述の .DeleteChangeSegment の指定に従って
        その文節を無変換の状態にして消去します。
        最初に henkan(convert) のファンクションが呼ばれる以前や
        一度 edit が呼ばれて編集中の「文字入力可能な状態」の
        文節（カレントのときに下線が引かれた状態）に対しては
        このリソースの指定に関係なく文字単位に消去します。

        例えば NEWS-OS の sj2/sj3/sjx の動作は on.on、
        Canna の動作はデフォルト同じ、CcWnn の動作は off.off です。

    33. 文字／文節消去のファンクションが呼ばれたときの消去単位指定

[format] .KillBySegment [on/off].[on/off]
[default value] off.on

        delafter のファンクションが呼ばれたときに
        文節単位で（カレント文節以降の全ての文節を）消去するか、
        文字単位で（カレント文節内のカーソル位置以降の文字列消去するか
        を指定します。
        
        value の第１フィールドには InputMode の時の動作を
        第２フィールドには ConvedMode の時の動作を指定します。
        これらのフィールドが on の時は文節単位で、
        off の時は文字単位で消去します。

        文字入力可能な状態（反転していない）で on の時は
        テキストカーソル以降の文字列を全て消去し、off の時は
        テキストカーソル以降のカレント文節内の文字列を
        消去します。文字入力可能でない状態で on の時は
        カレントカーソルを含む以降の文字列を全て消去し、
        off の時はカレント文節を消去します。

        例えば、Canna の動作はデフォルト同じです。

    34. 無変換状態にするファンクション(muhen/unconvert)が呼ばれたとき
        のテキストカーソル位置指定

[format] .MuhenkanCursorLast [on/off]
[default value] off

        muhen(unconvert)のファンクションが呼ばれたときにテキストカーソルの
        位置を指定します。on の時は無変換状態にした文字列の最後に、
        off の時は無変換状態にした文字列の最初にテキストカーソルが
        移動します。例えば
        CcWnn の動作はデフォルトと同じですが、Canna の動作は on です。

    35. 編集開始のファンクション(edit)が呼ばれたときのテキスト
        カーソル位置指定

[format] .EditCursorLast [on/off]
[default value] off

        edit のファンクションが呼ばれたときにテキストカーソルの
        位置を指定します。on の時は無変換状態にした文字列の最後に、
        off の時は文字入力可能にした状態の文字列の最初にテキストカーソルが
        移動します。例えば
        CcWnn や Canna の動作はデフォルトと同じです。

    36. 部分確定するファンクションが呼ばれたときに無変換状態にするときの
        テキストカーソル位置指定

[format] .FlushCursorLast [on/off]
[default value] off

        flushbefore のファンクションが呼ばれて、前述の
        .FlushChangeSegment が off でないときのテキストカーソルの
        位置を指定します。on の時は無変換状態にした文字列の最後に、
        off の時は無変換状態にした文字列の最初にテキストカーソルが
        移動します。例えば Canna の動作はデフォルトと同じです。

    37. ConvedMode の文節の表示方法指定

[format] .ConvertedUnderLine [on/off]
[default value] on

        ConvedMode の文節でカレント文節でない文節の表示に
        下線を引くかどうかを指定します。on の時は下線を引き、
        off の時は下線を引きません。カレント文節の時は
        このリソースの指定に関係なく反転表示されます。
        例えば NEWS-OS の sj2/sj3/sjx や Canna の動作は on
        ですが、CcWnn の動作は off です。

    38. 変換モード変更時のモード表示変更指定

[format] .DisplayModeChange [on/off]
[default value] off

        変換中の文字列の変換モードの変化によってモード表示を
        変更するかどうかを指定します。on の場合以下のように
        モード表示を変更します。

        変換中の文字列中の文節が全て未変換の時：入力文字種／コード
            (.guide.{hiragana,zkatakana,hkatakana,halpha,zalpha,
                sjis,euc,jis,kuten} の指定)
        変換中の文字列中の文節が全て変換済みのとき： .guide.kanji の指定
        未変換／変換済み両方の文節があるとき： .guide.edit の指定
        候補選択中のとき： .guide.candidate の指定
        記号選択中のとき： .guide.symbol の指定
        品詞選択中のとき： .guide.hinsi の指定
        辞書登録中のとき： .guide.toroku の指定
        辞書抹消中のとき： .guide.syoukyo の指定
        引用文字入力中のとき： .guide.quote の指定

        off のときは変換モードの変化に関係なく
        常に現在の入力文字種／コードをモード表示します。

        例えば NEWS-OS の sj2/sj3/sjx や CcWnn の動作は off
        ですが、Canna の動作は on です。

    39. 最後の文節を消去したときのカレント文節移動指定

[format] .DeleteLastMove [on/off]
[default value] on

        backspace や delete の文字消去のファンクションで
        前述の .DeleteBySegment で文節単位で消去するように指定されている
        場合に消去する文節が変換中の文字列の右端の文節のとき、
        カレント文節を１つ前の文節に（消去操作後の右端の文節に）移動するか、
        どうかを指定します。
        on の時はカレント文節１つ前にを移動します。
        off の時は移動しません。

        例えば NEWS-OS の sj2/sj3/sjx の動作は on
        ですが、CcWnn の動作は off です。

    40. かなキーボードでないキーボードでかな入力をする機能の初期指定

[format] .KanaInputOnly [on/off]
[default value] off

        かなキーボードでないキーボードでかな入力をする機能を
        変換開始時に on にするかどうかを指定します。
        この機能は kana のファンクションに指定された機能で
        トグルできます。off の時は変換開始時にはこの機能を使用しないように
        します。

    41. 文字入力動作と同時にファンクションの機能を実行するかどうかの指定

[format] .InputSameTime [on/off]
[default value] on

        入力文字として有効なキー・バインドがファンクションの操作
        のキー・バインドと重なるときにファンクションの操作も同時に
        行うかどうかを指定します。on の時は文字入力動作の後
        同時にファンクションの操作が行われます。off の時は
        文字入力動作は行われず、ファンクションの操作のみが行われます。
        .ki2key の value の第３フィールドに指定があるときは
        そちらの指定が優先されます。

        例えば NEWS-OS の sj2/sj3/sjx の動作は off
        ですが、CcWnn の動作は on(ccdef で個別に指定)です。

    42. コントロールコード入力動作と同時にファンクションの
        機能を実行するかどうかの指定

[format] .ControlSameTime [on/off]
[default value] off

        上述の .InputSameTime が on の時に更にコントロール入力として
        有効なキー・バインドがファンクションの操作のキー・バインドと重なる
        ときにファンクションの操作も同時に
        行うかどうかを指定します。on の時はコントロールコードを
        クライアントに渡した後同時にファンクションの操作が行われます。
        off の時は、ファンクションの操作のみが行われます。

    43. 表示文字種の変更順を指定する

[format] .PrintMode [文字種名].[文字種名].‥
[default value] hiragana.zkatakana.hkatakana.zalpha.halpha.\
        hankaku.zenkaku.upper.lower

        modedown(toggle)/modeup(toggleback) 及び nextmode/prevmode
        ファンクション（<4>[1]参照）での表示文字種の変更順を指定します。
        一番左に指定された文字種は modedown(toggle)/nextmode で
        変更前の表示文字種がこのリソース中にないときに変換される
        文字種になります。同様に一番右に指定された文字種は
        modeup(toggleback)/prevmode で変更前の表示文字種がこのリソース
        中にないときに変換される文字種になります。

        指定できる表示文字種名は hiragana/zkatakana/hkatakana/
        zalpha/halpha/hankaku/zenkaku/upper/lower の９つです。

    44. 候補選択の前にひらがなにして再度かな漢字変換をするかを指定する

[format] .BeforeSelectConversion [on/off]
[default value] on

        変換済の文節(ConvedMode)に対して convert(henkan) ファンクション
        が呼び出されたときに表示文字種がひらがなでない場合に
        一度ひらがなに変換したものをかな漢字変換し、次の再度の
        convert(henkan) ファンクションの呼出しで
        候補選択を開始するかどうかを指定します。

        on の時は一度ひらがなに変換してから再度かな漢字変換する
        段階がありますが、off の時は表示文字種がひらがなでなくとも
        そのまま候補選択を開始します。

        例えば NEWS-OS の sj2/sj3/sjx の動作は on
        ですが、CcWnn や Canna の動作は off です。
        sj3serv を使用する場合、辞書の性質上 on にした場合の方が
        有効と思われます。

    45. かな漢字変換の前に文字種をひらがなにして変換をするかを指定する

[format] .BeforeConversion [on/off]
[default value] off

        未変換の文節(InputMode)に対して convert(henkan) ファンクション
        が呼び出されたときにカレント文節にひらがなでない文字種の
        文字があった場合に一度ひらがなに変換ししてからかな漢字変換
        するかどうかを指定します。

        on の時はひらがなに変換してからかな漢字変換しますが、
        off の時はカレント文節中にひらがなでない文字があった場合でも
        そのままかな漢字変換を開始します。

        例えば NEWS-OS の sj2/sj3/sjx、CcWnn や Canna の動作は off です。

    46. 最後の文字がローマかな変換テーブルに同じ読みに対して複数の
        ローマ字が登録されているような文字の場合、できる限り
        入力文字種に変換してからかな漢字変換するか指定する

[format] .LastDoubleConversion [on/off]
[default value] off

        未変換の文節(InputMode)に対して convert(henkan) ファンクション
        が呼び出されたときにカレント文節の最後の文字がローマかな変換
        テーブル(sjrk)に同じ読みに対して複数のローマ字列が、
        が同じアルファベットの重なりで登録されているような文字の場合
        (例 「ん」の「n」と「nn」)、一度カレント文節の文字種に変換して
        からかな漢字変換するかどうかを指定します。

        このリソースの指定は前述の .BeforeConversion が off の時のみ
        有効になります。
        on の時はカレント文節の文字種に変換してからかな漢字変換しますが、
        off の時はそのままかな漢字変換を開始します。

        例えば NEWS-OS の sj2/sj3/sjx、CcWnn の動作は off ですが、
        Canna の動作は on です。

    47. 最後の文字がローマかな変換テーブルに同じ読みに対して複数の
        ローマ字が登録されているような文字の場合、できる限り
        入力文字種に変換してからかな漢字変換するか指定する

[format] .BeforeSelectCount [0/1/2/3/4...]
[default value] 0

        変換済の文節(ConvedMode)に対して convert(henkan) ファンクション
        が呼び出されたときにすぐに候補一覧を表示せず、カレント文節を
        次候補で置き換える動作をする回数を指定します。
        0 が指定されたときはすぐに候補一覧を表示します。
        ただし、全候補数がこの指定よりも小さいとき、または
        同じ時はすぐに候補一覧を表示します。

        例えば NEWS-OS の sj2/sj3/sjx、CcWnn の動作は 0 です。 

    48. 候補選択のときに backspace の動作をする対象の文節を指定する

[format] .SelectBackSpaceMove [on/off]
[default value] off

        候補選択の状態(SelectMode)に対して backspace のファンクション
        が呼び出されたとき候補選択を抜けたあと、直前の文節を消去
        (無変換後消去)を実行するか、カレント文節に対して
        消去(無変換後消去)を実行するかを指定します。
        
        on の時はカレント文節に対して消去(無変換後消去)を実行しますが、
        off の時は直前の文節に対して消去(無変換後消去)を実行します。

        例えば CcWnn の動作は on です。

    49. 候補選択のときに常にひらがな／全角カタカナを表示するか指定する

[format] .CandidatePadding [on/off]
[default value] off

        候補選択表示(convert)または、next/prev 等で表示される候補表示で
        必ず、ひらがなと全角カタカナの候補を表示するかどうかを指定します。
        
        on の時は sj3serv の返す変換候補以外に必ず、ひらがなと
        全角カタカナの候補を最後に表示します。この最後の
        ２つは sj3 の学習機能とは無関係で、短文節変換で
        １度選択されても次に先頭に来ることはありません。
        off の時は sj3serv の返す変換候補のみを表示します。

        例えば CcWnn や Canna の動作は on ですが、sjx の動作は
        off です。このリソースを on にした場合、現文節を
        ２度文字種変換するぶん候補選択表示時のレスポンスが悪くなります。
        ひらがなや、カタカナ等、現文節を他の文字種にしたいときは
        (to)hiragana/(to)zkatakana/nextmode、等のファンクションを
        使用することをお薦めします。

    50. sjrc ファンクション実行時に読み込むファイルの指定

[format] .NextRCFile [path]
[default value] 最初の変換開始時に読み込んだ sjrc ファイル

        sjrc ファンクション実行時に読み込むファイルを
        絶対パスまたは起動したディレクトリからの相対パスで
        指定します。指定がない場合は -rcfile オプション等で
        指定した変換開始時と同じファイルを読み込みます。

    51. sjrc 形式の設定ファイルをネストして読み込む指定

[format] .Include [path]
[default value] なし

        別の sjrc 形式のファイルをその時点で読み込む場合に
        ファイル名を指定します。他のファンクションと同様、
        同一の sjrc ファイル内にいくつも指定可能で、ネストは
        デフォルトで 10回まで可能です。相対パスで指定した場合は

            [1] カレントディレクトリ
            [2] SJ3DEFPATH で指定したディレクトリ
                (デフォルトは /usr/lib/X11/sj3def)

        の順にサーチし、指定がない場合やファイルが
        オープンできない場合はエラーになります。

<5> 変換サーバ(sj3serv) のホスト名の決定

        first 変換サーバのホスト名は以下の優先度で決定されます。
        
            [1] sjrc の .sj3serv の指定(<4>[3]参照)
            [2] オプション -sj3serv に続くホスト名
            [3] リソースファイルの *Sj3.sj3serv リソースに指定された値
            [4] 環境変数 SJ3SERV の値
            [5] NULL (つまり localhost)

        second 変換サーバのホスト名は以下の優先度で決定されます。
        
            [1] sjrc の .sj3serv2 の指定(<4>[3]参照)
            [2] オプション -sj3serv2 に続くホスト名
            [3] リソースファイルの *Sj3.sj3serv2 リソースに指定された値
            [4] 環境変数 SJ3SERV2 の値
            [5] NULL (つまり localhost)

<6> 辞書登録／抹消モードの動作

    kinput2 の sj3 版ではインターラクティブな
    辞書登録／抹消できます。辞書登録／抹消には「読み」の入力
    登録する漢字文字列の選択、品詞の選択、確認、実際の登録／抹消
    と一連の動作が必要になりますので、他の変換モードのように
    一度の操作によってひとつの動作が実行されるというようには
    完結していません。

    登録／消去時の動作の流れはそれぞれ以下のようになります

    [1] 辞書登録時

    1. ConvedMode 
        ↓(ConvedMode: toroku/register に指定されたキー操作)

        ↑(DictMode: cancel に指定されたキー操作)
    2. DictMode 範囲指定／読み入力モード
        (この時点では forward/backward/expand/shrink に指定
        された操作で登録する漢字文字列の範囲選択、InputMode と
        同様の操作で読み文字列が入力でき、cancel の操作で
        ConvedMode に戻ります kettei/flush/return に指定された
        キー操作で次の品詞選択に移りますが、入力文字が無かったり、
        長すぎたり(<8>制限事項 の項参照)した場合は
        登録操作結果表示モードに飛びます)
        ↓(DictMode: kettei/flush/return に指定されたキー操作)

        ↑(SelectMode: cancel に指定されたキー操作)
    3. SelectMode 品詞選択
        品詞選択のウィンドウがポップアップされ、登録する
        読みと漢字文字列に対応する品詞を選択します。
        (この時点での動作は SelectMode として指定されたキー操作が
        有効になります)
        ↓(SelectMode: select/kettei/flush/return に指定されたキー操作)

    4. DictMode 確認モード
        選択された「読み」「漢字」「品詞」の組合せで
        登録操作を行うか最終確認を行います。
        (DictMode: cancel に指定されたキー操作) で
        2. の DictMode 範囲指定／読み入力モードに戻ります。
        (DictMode: kettei/flush/return に指定されたキー操作)
        で実際の登録動作を行います
        ↓(DictMode: kettei/flush/return に指定されたキー操作)

    5. DictMode 登録操作結果表示モード
        登録動作を行った結果を表示します。エラーで登録できなかった
        場合はその旨を表示します。
        (DictMode: cancel に指定されたキー操作) で
        2. の DictMode 範囲指定／読み入力モードに戻ります。
        (DictMode: kettei/flush/return に指定されたキー操作)
        で辞書登録開始前の ConvedMode の状態に戻ります。
        ↓(DictMode: kettei/flush/return に指定されたキー操作)
 
    6. ConvedMode 

    [2] 辞書消去時

    1. ConvedMode 
        ↓(ConvedMode: syoukyo/eliminate に指定されたキー操作)

        ↑(DictMode: cancel に指定されたキー操作)
    2. DictMode 範囲指定／読み入力モード
        (この時点では forward/backward/expand/shrink に指定
        された操作で消去する漢字文字列の範囲選択、InputMode と
        同様の操作で読み文字列が入力でき、cancel の操作で
        ConvedMode に戻ります kettei/flush/return に指定された
        キー操作で次の品詞選択に移りますが、入力文字が無かったり、
        長すぎたり(** 制限事項 ** の項参照)した場合は
        登録操作結果表示モードに飛びます)
        ↓(DictMode: kettei/flush/return に指定されたキー操作)

        ↑(DictMode: cancel に指定されたキー操作)
    3. DictMode 確認モード
        選択された「読み」「漢字」の組合せで
        消去操作を行うか最終確認を行います。
        (DictMode: cancel に指定されたキー操作) で
        2. の DictMode 範囲指定／読み入力モードに戻ります。
        (DictMode: kettei/flush/return に指定されたキー操作)
        で実際の消去動作を行います
        ↓(DictMode: kettei/flush/return に指定されたキー操作)

    4. DictMode 消去操作結果表示モード
        消去動作を行った結果を表示します。エラーで消去できなかった
        場合はその旨を表示します。
        (DictMode: cancel に指定されたキー操作) で
        2. の DictMode 範囲指定／読み入力モードに戻ります。
        (DictMode: kettei/flush/return に指定されたキー操作)
        で辞書消去開始前の ConvedMode の状態に戻ります。
        ↓(DictMode: kettei/flush/return に指定されたキー操作)
 
    5. ConvedMode 

    辞書登録／消去の一連の流れは以上のようになります。
    簡単に言えば辞書登録／消去の変換モードは
    その一連の流れに沿って
        ★ 範囲指定／読み入力モード
        （★ 品詞選択モード）
        ★ 確認モード
        ★ 操作結果表示モード
    に分けることができ、登録の場合には確認モードの前に
    SelectMode の品詞選択モードが余計に入ることになります。

    辞書登録／消去時のメッセージは品詞選択の部分以外は
    CandidatePanel ではなく、AuxPanel を使用します。

    ＊辞書登録時の注意事項＊

    (1) 登録／消去時の読み文字列は最大でも 31 文字までです。
        それ以上のときは登録動作が出来ません。
        また、対応する漢字文字列は最大でも 32 文字までです。

    (2) 読み文字列に使用できるものは以下のものに限られます。
        
      ー＃・〒
      ０１２３４５６７８９
      ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ
      ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ
      あいうえおかきくけこさしすせそたちつてとなにぬねの
      はひふへほまみむめもや　ゆ　よらりるれろわゐ　ゑをん
      がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ
      ぁぃぅぇぉっゃゅょゎヴヵヶ

        ただし以下の文字は読み文字列の先頭となることが出来ません。

      ーをんぁぃぅぇぉっゃゅょゎヵヶ

        なお、対応する漢字文字列には半角文字も指定できます。

    (3) 動詞や形容詞を登録する場合は登録しようとする動詞の
        「語幹部分」の読みと漢字文字列を与える必要があります。
        例えば「ケチる」という動詞を登録したい場合には読みに
        「けち」、対応する変換済み文字列に「ケチ」、品詞に
        「ラ行五段動詞」を指定します。また、「ヤバい」という
        形容詞を登録したい場合は読みに「やば」、対応する
        変換済み文字列に「ヤバ」、品詞に「形容詞」を指定します。

    (4) 消去時は一度にひとつの熟語<->品詞 の組合せしか消去しません。
        ひとつの熟語が複数の品詞で登録されているときは、[2]4. 消去操作
        結果表示モード で cancel にバインドされたキーでまた
        [2]2. 範囲指定／読み入力モードに戻って消去動作を繰り返し
        行ってください。

<7> 入力文字変換の概要

    Xsj3clib では文字入力は５種類の文字種と４種類のコードで直接
    入力できますが、この５種類の文字種で直接入力する際の
    変換規則について説明します。

    文字入力時のキー・イベントはまず、

#define IsKanaKey(ks)   ((unsigned)(ks) < 0xff00 && ((unsigned)(ks) & 0x0400))
#define IsLatin1Key(ks) ((unsigned)(ks) < 0x0100)

    という define によって、Latin1 の keysym と Katakana の keysym
    に分けられてそれぞれ全く異なる処理がされます。

    [1] Latin1 の keysym のときは入力文字種によって
        XmuLookupKana() で得られた半角文字列に対して
        それぞれ以下の処理を行います。

    (1) 入力文字種が「ひらがな」(デフォルトの sjrc の
        モード表示では「ローマ」)のとき sjrk ファイルの記述に
        従ってローマかな変換した結果を表示します。

    (2) 入力文字種が「全角カタカナ」(デフォルトの sjrc では未使用)のとき
        sjrk ファイルの記述に従ってローマかな変換した結果を
        sjhk ファイルの１列目([zhira])と２列目の([zkata])の
        変換規則に従って変換し、表示します。

    (3) 入力文字種が「半角カタカナ」(デフォルトの sjrc では未使用)のとき
        sjrk ファイルの記述に従ってローマかな変換した結果を
        ひらがなのときは sjhk ファイルの１列目([zhira])と３列目の([hkata])の
        変換規則、全角カタカナときは sjhk ファイルの２列目
        ([zkata])と３列目([hkata])の変換規則に従って変換し、
        そのいずれでもないときは sjzh ファイルの３列目([zkana])
        と４列目([hkana])の変換規則に従って変換し、表示します。

    (4) 入力文字種が「半角アルファベット」
        (デフォルトの sjrc のモード表示では「ABC」)
        のとき入力されたアスキー文字をそのまま表示します。

    (5) 入力文字種が「全角アルファベット」
        (デフォルトの sjrc のモード表示では「ＡＢＣ」)
        のとき入力されたアスキー文字を sjzh ファイルの１列目([halpha])
        と２列目([zalpha])の変換規則に従って変換し、表示します。

    例えば、デフォルトの sjrk ファイルには「.」に対応して
    「。」があるので、入力文字種が「ひらがな」で「.」(keysym が period)
    を入力すると全角の「。」として表示されます。
    よって、この場合(keysym が period で入力文字種がひらがなの場合)の
    表示結果を変えるには sjrk をカスタマイズします。

    ただし、Latin1 の keysym でも疑似かな入力機能が on になっているとき
    (<5>[3]40. の .KanaInputOnly、<5>[1]の "kana" の項参照)は
    例外で、入力されたアスキー文字を sjhk ファイルの４列目([ascii])
    と３列目([hkata])の変換規則によって半角カタカナに変換し、
    以降後に説明する [2] の動作を行います。

    また、.AlphabetConversion on の時は入力文字種が「ひらがな」の時と
    「全角カタカナ」の時に限り、ローマかな変換未定の文字列を
    sjzh ファイルの１列目([halpha])と２列目([zalpha])
    の変換規則に従って変換し、表示します。

    [2] Katakana の keysym のときは入力文字種によって
         XmuLookupKana() で得られた半角文字列に対して
        それぞれ以下の処理を行います。
        (CcWnn では XLookupString で見ているので何も表示されない)

    (1) 入力文字種が「ひらがな」のとき
        入力された半角カタカナを .AlphabetConversion off の時は
        sjhk ファイルの３列目([hkata])と１列目([zhira])の変換規則に従って
        変換し、表示します。.AlphabetConversion on の時はこれで
        変換しきれなかったものを sjzh ファイルの４列目([hkana])と
        ３列目([zkana])の変換規則に従って変換し、表示します。

    (2) 入力文字種が「全角カタカナ」のとき
        入力された半角カタカナを .AlphabetConversion off の時は
        sjhk ファイルの３列目([hkata])と２列目([zkata])の変換規則に従って
        変換し、表示します。.AlphabetConversion on の時はこれで
        変換しきれなかったものを sjzh ファイルの４列目([hkana])と
        ３列目([zkana])の変換規則に従って変換し、表示します。

    (3) 入力文字種が「半角カタカナ」のとき
        入力された半角カタカナをそのまま表示します。

    (4) 入力文字種が「半角アルファベット」のとき
        ベルを鳴らして何も入力されません。ただし、疑似かな入力機能が
        on の場合は入力された文字を半角カタカナにせず、そのまま
        アスキー文字で表示します。
        (実質的に [1] の (4) と同じ)

    (5) 入力文字種が「全角アルファベット」のとき
        ベルを鳴らして何も入力されません。ただし、疑似かな入力機能が
        on の場合は入力された文字を半角カタカナにせず、そのまま
        アスキー文字を sjzh ファイルの１列目([halpha])と２列目
        ([zalpha])の変換規則に従って変換し、表示します。
        (実質的に [1] の (5) と同じ)

    例えば、デフォルトの sjhk ファイルの３列目[hkata])の「。」(←本当は
    半角のつもり) には対応して１列目([zhira]）に全角の「。」があるので、
    入力文字種が「ひらがな」のとき JIS 配列のキーボードで半角の
    「。」(keysym が kana_fullstop) を入力すると全角の「。」として
    表示されます。よって、この場合(keysym が kana_fullstop で
    入力文字種がひらがなの場合)の表示結果を変えるには sjhk ファイル
    をカスタマイズします。

<8> 制限事項

    Xsj3clib(sj3lib) には以下のような制限事項があります。

    1. InputMode で変換対象の文節の読み文字列の合計が 480bytes
        を超えるとき(半角カタカナ／半角 ASCII 文字は
        1byte/1文字、それ以外は 2byte/1文字  として換算)は
        かな→漢字変換によって ConvedMode には移れません。
        ただし、そのまま確定することは可能です。

<9> 今後の課題

1. Xsj3clib のかな漢字変換サーバに sj3serv 以外もサポートして、
    ひとつの入力サーバで同時に複数のかな漢字変換システム
    と接続したり、動的に切り替えられるようにする
2. ローマ字かな変換で途中の Preedit 中に大文字小文字が混在しても
    CcWnn のように最後の母音の大小だけでひらがな／カタカナに
    変換できるようにする
3. コード一括変換、コード表示への変換をサポートする
4. １つのキー・バインドで同時に複数のファンクションを実行できるようにする
5. 可能な限り他の変換システムのユーザ・インターフェースもエミュレート
    できるようにする。
6. コントロールコードのアプリケーションへの受渡しの方法の検討
7. 未サポートファンクション(kill)のサポート
8. Undo 機能が欲しい？
9. ギリシャ文字やロシア文字もアスキーで入力したい？

<10> バグを見つけたら…

バグを見つけたら、また、その他質問、要望などは kinput2@sra.co.jp
宛にレポートしてください。また、こんなかな漢字変換システム
(PC 上のアプリケーション等を含む)をエミュレートする sjrc ファイルを
作ったよ、とかこんな機能が足りない、という情報を歓迎します。

<付録1> Canna のユーザ・インターフェースをエミュレートする方法

sj3def/ に Canna のユーザインターフェースを
エミュレートする sjrc/sjrk ファイルがありますので簡単に Canna の
ユーザ・インターフェースで sj3serv を使用できます。
以下の手順で行ってください。

● Kinput2.conf で "UseSj3" を define して kinput2 を
    インストールしてください。

● % cd sj3def
   % mv sj3def/sjrc.EUC{,.org}
   % cp sj3def/sjrc{.iroha.EUC,EUC}
   % mv sj3def/sjrk.EUC{,.org}
   % cp sj3def/sjrk{.iroha.EUC,EUC}
   % make clean
   % make
    のようにしてできた sj3def/{sjrc,sjrk} ファイルを
    $HOME/.{sjrc,sjrk} としてコピーします。

● kinput2 -sj3 で起動します。

◆ ただし、以下の点が実際の Canna と異なります。

1. 変換サーバの仕様のため、部首変換はサポートしていません
2. 一度かな漢字変換後に BS キーで無変換状態にしたとき、カレントの
    位置を反転ではなく、テキストカーソルで表します。
    テキストカーソルは文字列の一番前にあると結構見にくいです。
3. 記号入力は AuxPanel でなく、CandidatePanel の選択方式です。
4. 文節編集方法は CcWnn の方式です。
5. 文字種モードは別の変換モードになっていない(InputMode と共有)
    ので文字種変換領域の拡大縮小は Meta-Ctrl-o/Meta-Ctrl-i
    に割り付けています。文字種変換領域も反転しません。
6. 同時に複数の文節で編集、文字種変換領域の拡大縮小ができてしまいます。
7. 辞書登録／削除は ConvedMode の Help/Shift-Help に割り付けています。
8. Canna ではかな漢字変換したときにどの表示文字種のときも半角数字は
    必ず全角数字に変換しますが、sj3 では原則として変換候補の読みに半角は
    取れないので、自分で全角数字に変換する必要があります。

<付録2> sjx のユーザ・インターフェースをエミュレートする方法

sj3def/ に sjx のユーザ・インターフェースを
エミュレートする sjrc/sjrk ファイルがありますので簡単に sjx の
ユーザ・インターフェースで sj3serv を使用できます。
以下の手順で行ってください。

● Kinput2.conf で "UseSj3" を define して kinput2 を
    インストールしてください。

● % cd sj3def
   % mv sj3def/sjrc.EUC{,.org}
   % cp sj3def/sjrc{.sjx.EUC,EUC}
   % mv sj3def/sjrk.EUC{,.org}
   % cp sj3def/sjrk{.sjx.EUC,EUC}
   % make clean
   % make
    のようにしてできた sj3def/{sjrc,sjrk} ファイルを
    $HOME/.{sjrc,sjrk} としてコピーします。

● kinput2 -sj3 で起動します。

◆ ただし、以下の点が実際の sjx と異なります。

1. 文節編集(修正)方法は CcWnn の方式です。
2. .BackDisplay on でも最後の文字しかローマかな変換前のアルファベットを
    保持していません（NEWS-OS の sj3 コマンドと同様）。
3. 記号入力は、CandidatePanel の選択方式です
4. .SetNormal や .ThroughNext は kterm 等のクライアントの
    リソース AllowSendEvent が on の 時のみ有効です。
5. 同時に複数の文節が編集できてしまいます。
6. カーソル移動によって文の途中から入力できてしまいます。
