SDLSKKライブラリの使いかた プログラム側では、sdlskk.h をインクルードして、SDLSKKをリンクすれば使えます。 なお、データとしてSKKの辞書と rule_tableファイルが必要になります。 ただしSKKの辞書は書式が拡張されていないものを使ってください。 サンプルとしては testrender.c が参考になるでしょう。 testdict.c、testinput.c、testromkana.c、unittest.c(testunit)は開発者向け のものです。 テストやサンプルを動かすためには以下のファイルが必要です。 * sample.ttf 日本語を含むTrueTypeFontのファイル。 * test_rule_table rule_tableと同じもの。リンクするなりしてください。 * test_jisyo SKKの辞書ファイル。 API 構造体 SDLSKK_Dictionary 辞書データを持つ SDLSKK_RomKanaRuleTable ローマ字→仮名の変換のテーブルを持つ SDLSKK_Context 変換文字列や変換の状態などを保持する SDLSKK_Keybind キーバインドを表わす 列挙型 SDLSKK_Encoding 日本語のエンコーディングを表す SDLSKK_EUCJP SDLSKK_UTF8 SDLSKK_SJIS SDLSKK_Error エラーの種類を表す SDLSKK_NOERROR SDLSKK_MEMERROR 関数 void SDLSKK_set_encoding( SDLSKK_Encoding encoding ) 辞書ファイル等の入出力に使うエンコーディングを指定する この設定は他の関数を呼ぶ前に呼んで、それ以降は呼ばないでください。 これを呼ばなければEUC-JPが使われます。 SDLSKK_Encoding SDLSKK_get_encoding( void ) 設定されているエンコーディングを得る。 SDLSKK_Dictionary* SDLSKK_Dict_new( void ) SDLSKK_Dicitonaryを確保する。 int SDLSKK_Dict_load( SDLSKK_Dictionary* dict, char* filename, int user ) SDLSKK_Dictionaryの辞書データを読みこむ。 userに真を与えるとそのとき読みこむ辞書はユーザ辞書であるとして処理される。 先に読んだ辞書ほど優先順位が高くなる。そのためユーザ辞書などは 共通辞書を読む前に読みこむべきである。 int SDLSKK_Dict_save_user_dict( SDLSKK_Dictionary* dict, char* filename ); SDLSKK_Dictionaryに含まれる辞書データのうち必要なものをユーザ辞書として ファイルに書きだす。 void SDLSKK_Dict_delete( SDLSKK_Dictionary* dict ) SDLSKK_Dictionaryを解放する。 SDLSKK_RomKanaRuleTable* SDLSKK_RomKanaRuleTable_new( char* filename ) SDLSKK_RomKanaRuleTableを確保する。 void SDLSKK_RomKanaRuleTable_delete( SDLSKK_RomKanaRuleTable* rule_table ) SDLSKK_RomKanaRuleTableを解放する。 SDLSKK_Context* SDLSKK_Context_new( SDLSKK_Dictionary* dict, SDLSKK_RomKanaRuleTable* table, SDLSKK_Keybind* keybind, int use_minibuffer ) SDLSKK_Contextを確保する。 void SDLSKK_Context_delete( SDLSKK_Context* context ) SDLSKK_Contextを解放する。 void SDLSKK_Context_input_event( SDLSKK_Context* context,SDL_Event* event ) 入力する。 char* SDLSKK_Context_get_str( SDLSKK_Context* context, char* cstr, size_t size ) 入力した文字列を得る。 int SDLSKK_Context_get_basic_mode( SDLSKK_Context* context ) contextのモードが、確定入力モード、アルファベット入力モード、 JISX0208アルファベット入力モードのいずれかであれば真を、それ 以外では偽を返す。辞書登録モードのときなども偽を返す。 例えば、これが真のときにリターンキーを押したら入力終了とみなす、 などといった処理に利用する。 void SDLSKK_Context_clear( SDLSKK_Context* context ) contextを初期状態にもどす。 int SDLSKK_Context_clear_text( SDLSKK_Context* context ) contextのcontextのモードが、確定入力モード、アルファベット入力モード、 JISX0208アルファベット入力モードのいずれかであればそのモードを 維持したまま入力テキストを空にする。 複数行の入力を実現したい場合、SDLSKK_Context_clearを呼ぶと モードが確定入力モードに戻ってしまうのが不自然である場合、この関数を 呼ぶとよい。 また、カットバッファの内容も保存される。 SDL_Surface* SDLSKK_Context_render_display_str( SDLSKK_Context* context, TTF_Font* font, SDL_Color fg ) 入力した文字列を変換途中のものも含めてレンダリングする。 SDL_Surface* SDLSKK_Context_render_minibuffer_str( SDLSKK_Context* context, TTF_Font* font, SDL_Color fg ) ミニバッファをレンダリングする。 SDLSKK_Keybind* SDLSKK_Keybind_new(void) SDLSKK_Keybindを確保する。 void SDLSKK_Keybind_delete( SDLSKK_Keybind* keybind ) SDLSKK_Keybindを解放する。 void SDLSKK_Keybind_set_key( SDLSKK_Keybind* keybing, char* key_str, char* command_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" などといった修飾キー command_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" "/" などのascii character 一文字のキーにはデフォルト以外の キーバインドはしないようにしてください 標準のキーバインドを少し変更したいという場合は、まず SDLSKK_Keybind_set_default_keyを呼んで、デフォルトのキーバインドを設定して からSDLSKK_Keybind_set_keyを呼んでください void SDLSKK_Keybind_set_default_key( SDLSKK_Keybind* keybind ) 標準的なキーバインドを設定する void SDLSKK_Keybind_unset_key( SDLSKK_Keybind* keybind, char* key_str ) 指定したキーのキーバインドを消す void SDLSKK_set_error_func(SDLSKK_ErrorHandler handler) エラー処理用の関数を設定する。SDLSKK_ErrorHandlerの定義は以下の通り。 typedef void (* SDLSKK_ErrorHandler)(SDLSKK_Error err);