= SDLSKK
* ((<SDLSKKによる日本語入力について>))
* ((<SDL::SKK::Context>))
* ((<SDL::SKK::Dictionary>))
* ((<SDL::SKK::Keybind>))
* ((<SDL::SKK::RomKanaRuleTable>))
* ((<SDLSKK関連メソッド>))
  * ((<SDL::SKK.encoding=>)) -- SDLSKK内部のエンコーディングを指定します。
  * ((<SDL::SKK.encoding>)) -- SDLSKKの内部エンコーディングを得ます。
  * ((<SDL::SKK::RomKanaRuleTable.new>)) -- アルファベットからかなへの変換テーブルを読み込みます。
  * ((<SDL::SKK::Dictionary.new>)) -- 空の辞書を生成します。
  * ((<SDL::SKK::Dictionary#load>)) -- 辞書ファイルを読み込みます。
  * ((<SDL::SKK::Dictionary#save>)) -- ユーザ辞書をファイルに出力します。
  * ((<SDL::SKK::Keybind.new>)) -- 空のキーバインドを作ります。
  * ((<SDL::SKK::Keybind#set_key>)) -- キーバインドを設定します。
  * ((<SDL::SKK::Keybind#set_default_key>)) -- Emacsに似た標準的なキーバインドを設定します。
  * ((<SDL::SKK::Keybind#unset_key>)) -- 指定したキーのキーバインドを無効にします。
  * ((<SDL::SKK::Context.new>)) -- 入力コンテキストを生成する。
  * ((<SDL::SKK::Context#input>)) -- キーボードからの入力を受け付けます。
  * ((<SDL::SKK::Context#str>)) -- 入力途中の文字列を得ます。
  * ((<SDL::SKK::Context#render_str>)) -- 入力文字列をレンダリングします。
  * ((<SDL::SKK::Context#render_minibuffer_str>)) -- ミニバッファの文字列をレンダリングします。
  * ((<SDL::SKK::Context#clear>)) -- 入力状態をクリアします。
  * ((<SDL::SKK::Context#clear_text>)) -- 入力テキストをクリアします。
  * ((<SDL::SKK::Context#get_basic_mode>)) -- 状態が入力途中の状態でないかどうかを得る。

== SDLSKKによる日本語入力について
Ruby/SDL には ((<SDLSKK|URL:http://www.kmc.gr.jp/~ohai/sdlskk.html>))
を利用した ((<SKK|URL:http://openlab.jp/skk/index-j.html>))
に似た日本語入力システムがあります。

これは日本語入力ができるだけでなく、
カット&ペーストを含む簡単な行編集機能を持っています。

sample/sdlskk.rb も参考にしてください。

== SDL::SKK
SDLSKK関連のモジュール関数およびクラスを持つモジュールです。

* ((<SDL::SKK.encoding=>)) -- SDLSKK内部のエンコーディングを指定します。
* ((<SDL::SKK.encoding>)) -- SDLSKKの内部エンコーディングを得ます。

== SDL::SKK::Context
入力の状態などを表わすクラスで、SDL::SKKの中心的なクラスです。

* ((<SDL::SKK::Context.new>)) -- 入力コンテキストを生成する。
* ((<SDL::SKK::Context#input>)) -- キーボードからの入力を受け付けます。
* ((<SDL::SKK::Context#str>)) -- 入力途中の文字列を得ます。
* ((<SDL::SKK::Context#render_str>)) -- 入力文字列をレンダリングします。
* ((<SDL::SKK::Context#render_minibuffer_str>)) -- ミニバッファの文字列をレンダリングします。
* ((<SDL::SKK::Context#clear>)) -- 入力状態をクリアします。
* ((<SDL::SKK::Context#clear_text>)) -- 入力テキストをクリアします。
* ((<SDL::SKK::Context#get_basic_mode>)) -- 状態が入力途中の状態でないかどうかを得る。

== SDL::SKK::Dictionary
辞書を表わすクラスです。ファイルから SKK 形式の辞書を読み込むこと
ができます。

* ((<SDL::SKK::Dictionary.new>)) -- 空の辞書を生成します。
* ((<SDL::SKK::Dictionary#load>)) -- 辞書ファイルを読み込みます。
* ((<SDL::SKK::Dictionary#save>)) -- ユーザ辞書をファイルに出力します。

== SDL::SKK::Keybind
入力のキーバインドを表わすクラスです。

* ((<SDL::SKK::Keybind.new>)) -- 空のキーバインドを作ります。
* ((<SDL::SKK::Keybind#set_key>)) -- キーバインドを設定します。
* ((<SDL::SKK::Keybind#set_default_key>)) -- Emacsに似た標準的なキーバインドを設定します。
* ((<SDL::SKK::Keybind#unset_key>)) -- 指定したキーのキーバインドを無効にします。

== SDL::SKK::RomKanaRuleTable
ローマ字 -> 仮名 の変換テーブルを表わすクラスです。
この変換テーブルは、SDLSKK独自の形式のテキストファイルで、
それを読み込んでインスタンスを生成します。

変換テーブルファイルは SDLSKK に付属しています。

* ((<SDL::SKK::RomKanaRuleTable.new>)) -- アルファベットからかなへの変換テーブルを読み込みます。

== SDLSKK関連メソッド

--- SDL::SKK.encoding=(encoding)

    SDLSKK内部のエンコーディングを ((|encoding|)) に指定します。
    * SDL::SKK::EUCJP
    * SDL::SKK::UTF8
    * SDL::SKK::SJIS
    のいずれかを指定してください。SDL::SKK::EUCJP がデフォルトです。
    また、これはSDLSKK関連の他のメソッドを呼ぶ前に呼んでください。
    
    これは、((<SDL::SKK::Dictionary#load>))と((<SDL::SKK::RomKanaRuleTable.new>))で
    読み込むファイルおよび ((<SDL::SKK::Context#str>)) で得られる文字列、
    ((<SDL::SKK::Dictionary#save>)) で書き出すファイルの
    エンコードを決定します。


    このメソッドを使うには SDLSKK が必要です。
    * NOTES

      このモジュール関数は最初に1回だけ呼んでください。
      途中でエンコーディングを変更すると正しく動作しません。

    * See Also
      
      ((<SDL::SKK.encoding>)), ((<SDL::SKK::Dictionary#load>)), ((<SDL::SKK::Dictionary#save>)), ((<SDL::SKK::RomKanaRuleTable.new>))

--- SDL::SKK.encoding

    SDLSKKの内部エンコーディングを返します。詳しくは ((<SDL::SKK.encoding=>)) を
    見てください。


    このメソッドを使うには SDLSKK が必要です。
    * See Also
      
      ((<SDL::SKK.encoding=>))

--- SDL::SKK::RomKanaRuleTable.new(filename)

    ((|filename|))で指定したファイルをアルファベットからかなへの変換テーブル
    として読み込みます。
    ファイルの形式は以下の通りです。
    * 「;;」 で始まる行はコメント
    * 空行は無視される
    * それ以外の行は1行1エントリーで、以下のような形式
        入力アルファベット<TAB>かな変換後に残るアルファベット<TAB>片仮名<TAB>平仮名
    
      


    このメソッドを使うには SDLSKK が必要です。
    * NOTES

      このファイルのエンコーディングは ((<SDL::SKK.encoding=>)) であらかじめ指定しておいて
      ください。

    * See Also
      
      ((<SDL::SKK::Context.new>))

--- SDL::SKK::Dictionary.new

    空の辞書として ((<SDL::SKK::Dictionary>)) のインスタンスを生成します。
    適当な辞書をこれに読み込んでください。


    このメソッドを使うには SDLSKK が必要です。
    * See Also
      
      ((<SDL::SKK::Dictionary#load>))

--- SDL::SKK::Dictionary#load(filename, user)

    ((|filename|)) で指定した辞書を読み込みます。辞書の形式は SKK のものと
    同一です(ただしannotationを含むものは不可です)。
    ((|user|)) を真にすると
    その辞書はユーザ辞書であると扱われ、そこに含まれる
    エントリーすべてにユーザ入力マークが付きます。
    
    ユーザ入力マークが付いたエントリーのみが ((<SDL::SKK::Dictionary#save>)) で
    ユーザ辞書に出力されます。

    失敗したときには例外((<SDL::Error>))を発生させます。


    このメソッドを使うには SDLSKK が必要です。
    * NOTES

      このファイルのエンコーディングは ((<SDL::SKK.encoding=>)) であらかじめ指定しておいて
      ください。

    * See Also
      
      ((<SDL::SKK::Dictionary.new>)), ((<SDL::SKK::Dictionary#save>)), ((<SDL::SKK::Context.new>))

--- SDL::SKK::Dictionary#save(filename)

    ((|filename|)) で指定したファイルにユーザ辞書を出力します。
    ユーザが利用した変換と、
    ((<SDL::SKK::Dictionary#load>)) で「ユーザ辞書」として読み込まれた
    項とをあわせたものを、ユーザ辞書として扱います。


    このメソッドを使うには SDLSKK が必要です。
    * See Also
      
      ((<SDL::SKK::Dictionary.new>)), ((<SDL::SKK::Dictionary#load>))

--- SDL::SKK::Keybind.new

    空のキーバインドに対応する ((<SDL::SKK::Keybind>)) のインスタンスを返します。
    これに ((<SDL::SKK::Keybind#set_key>)) や ((<SDL::SKK::Keybind#set_default_key>))
    などを使ってキーバインドを追加して使います。


    このメソッドを使うには SDLSKK が必要です。
    * See Also
      
      ((<SDL::SKK::Keybind#set_key>)), ((<SDL::SKK::Keybind#set_default_key>)), ((<SDL::SKK::Context.new>))

--- SDL::SKK::Keybind#set_key(key_str, cmd_str)

    ((|key_str|)) に設定したいキーを示す文字列を、((|cmd_str|)) に設定したい
    動作を示す文字列を与え、キーバインドを設定します。
    
    ((|key_str|)) としては以下のような文字列を与えることができます。
    * アルファベット、"%" などのasciiの記号
    * "SPC" "TAB" "DEL" "RET" "UP" "DOWN" "RIGHT" "LEFT" "INSERT" "HOME" "END"
      "PAGEUP" "PAGEDOWN" "F1" "F2" "F3" "F4" "F5" "F6" "F7" "F8" "F9" "F10"
      "F11" "F12" "F13" "F14" "F15" "HELP"
    * "C-a" "M-C-a" などといった修飾キーの付いた文字列
    _
    また、((|cmd_str|)) には以下の文字列を与えることができます。
    * "backward-char",
    * "forward-char",
    * "backward-delete-char",
    * "delete-char",
    * "kakutei",
    * "kettei",
    * "space",
    * "keyboard-quit",
    * "set-mark-command",
    * "kill-region",
    * "yank",
    * "copy",
    * "graph-char",
    * "upper-char",
    * "lower-char",
    * "abbrev-input",
    * "latin-mode",
    * "previous-candidate",
    * "jisx0208-mode",
    * "toggle-kana",
    * "beginning-of-line"
    * "end-of-line"
    * "do-nothing"
    
    ただし、"a" や "/" といったアスキー文字1文字のキーにはデフォルト
    以外のキーバインドはしないようにしてください。
    
    標準のキーバインドを少し変更したいという場合は、まず
    ((<SDL::SKK::Keybind#set_default_key>)) を呼んで、デフォルトのキーバインドを
    設定してからこのメソッドを呼んでください


    このメソッドを使うには SDLSKK が必要です。
    * See Also
      
      ((<SDL::SKK::Keybind#set_default_key>)), ((<SDL::SKK::Keybind#unset_key>))

--- SDL::SKK::Keybind#set_default_key

    Emacsに似た標準的なキーバインドを設定します。


    このメソッドを使うには SDLSKK が必要です。
    * See Also
      
      ((<SDL::SKK::Keybind#set_key>))

--- SDL::SKK::Keybind#unset_key(key_str)

    ((|key_str|)) で指定したキーのキーバインドを無効にします。
    ((|key_str|)) には ((<SDL::SKK::Keybind#set_key>)) と同じ値を使います。


    このメソッドを使うには SDLSKK が必要です。
--- SDL::SKK::Context.new(dict, romkama_table, bind, use_minibuffer)

    入力コンテキストを生成し、((<SDL::SKK::Context>)) のインスタンスを返します。
    ((|dict|)) は利用する辞書として ((<SDL::SKK::Dictionary>)) のインスタンスを、
    ((|romkama_table|)) はローマ字かな変換規則として ((<SDL::SKK::RomKanaRuleTable>))
    のインスタンスを、((|bind|)) にはキーバインドとして ((<SDL::SKK::Keybind>)) のインスタンス
    を与える。
    use_minibuffer に真値を与えるとミニバッファを利用するようになります。
    偽では利用しません。


    このメソッドを使うには SDLSKK が必要です。

    EXAMPLE
      # 辞書を生成し、ファイルから辞書データを読み込む
      dict = SDL::SKK::Dictionary.new
      dict.load( 'jisyo', false )
      # ローマ字仮名変換テーブルを読み込む
      table = SDL::SKK::RomKanaRuleTable.new( 'rule_table' )
      # キーバインドを設定する
      bind = SDL::SKK::Keybind.new
      bind.set_default_key
      
      # コンテキストを生成
      context = SDL::SKK::Context.new( dict, table, bind, use_minibuffer )

    * See Also
      
      ((<SDL::SKK::Context#input>)), ((<SDL::SKK::Context#str>))

--- SDL::SKK::Context#input(event)

    イベント経由でキーボードからの入力を受け付け、
    コンテキストの状態を変更します。
    ((|event|)) には ((<SDL::Event>)) のインスタンスを与えます。
    ((<SDL::Event::KeyDown>)) 以外のイベントは無視します。


    このメソッドを使うには SDLSKK が必要です。

    EXAMPLE
      while event = SDL::Event.poll do
        case event
        when SDL::Event::Quit
          exit
        when SDL::Event::KeyDown
          if event.sym == SDL::Key::ESCAPE then
            exit
          end
          if event.sym == SDL::Key::F1
            dict.save("test_user_dict")
          end
          context.input( event )      
        end
      end

--- SDL::SKK::Context#str

    入力途中の文字列を返します。
    
    NOTE
    Ruby 1.9ではRuby/SDLのm17n機能を有効にしている限り、
    返り値の文字列に適切なエンコーディングを付加します。


    このメソッドを使うには SDLSKK が必要です。
    * See Also
      
      ((<SDL::SKK::Context#render_str>)), ((<SDL::SKK::Context#clear>)), ((<SDL::SKK::Context#clear_text>))

--- SDL::SKK::Context#render_str(font, r, g, b)

    ((|self|)) が持っている入力途中の文字列をレンダリングして
    ((<SDL::Surface>)) のインスタンスを返します。
    ((|font|)) はレンダリングに利用するフォントを ((<SDL::TTF>)) のインスタンスで与え、
    その色を (((|r|)), ((|g|)), ((|b|))) で指定します。


    このメソッドを使うには SDLSKK が必要です。
    * See Also
      
      ((<SDL::SKK::Context#render_minibuffer_str>))

--- SDL::SKK::Context#render_minibuffer_str(font, r, g, b)

    ((|self|)) が持っている入力途中のミニバッファの状態をレンダリングして
    ((<SDL::Surface>)) のインスタンスを返します。
    ((|font|)) はレンダリングに利用するフォントを ((<SDL::TTF>)) のインスタンスで与え、
    その色を (((|r|)), ((|g|)), ((|b|))) で指定します。


    このメソッドを使うには SDLSKK が必要です。
--- SDL::SKK::Context#clear

    入力文字列と入力状態をクリアして初期状態に戻します。


    このメソッドを使うには SDLSKK が必要です。
    * See Also
      
      ((<SDL::SKK::Context#clear_text>))

--- SDL::SKK::Context#clear_text

    ((|self|)) の入力モードが、確定入力モード、アルファベット入力モード、
    JISX0208アルファベット入力モードのいずれかであればそのモードを
    維持したまま入力テキストを空にします。
    
    複数行の入力を実現したい場合、((<SDL::SKK::Context>)) を呼ぶと
    モードが確定入力モードに戻ってしまうのが不自然である場合、
    この関数を呼ぶとよいでしょう。
    
    また、カットバッファの内容も保存されます。


    このメソッドを使うには SDLSKK が必要です。
    * See Also
      
      ((<SDL::SKK::Context#get_basic_mode>))

--- SDL::SKK::Context#get_basic_mode

    ((|self|)) の入力モードが、確定入力モード、アルファベット入力モード、
    JISX0208アルファベット入力モードのいずれかであれば真を、それ
    以外では偽を返す。辞書登録モードのときなども偽を返します。
    
    これが真のときにリターンキーを押したら入力終了とみなす、
    などといった処理に利用します。


    このメソッドを使うには SDLSKK が必要です。
    * NOTES

      入力モードの名前やその内容については 
      ((<SKK|URL:http://openlab.jp/skk/index-j.html>))
      のマニュアルなどを参考にしてください。

    * See Also
      
      ((<SDL::SKK::Context#clear_text>))

