Subject: [anthy:195] utena-905 From: yusuke at cherubim.icw.co.jp To: anthy@heke.quickml.com Date: Thu, 05 Sep 2002 23:23:31 +0900 (JST) Reply-To: anthy@heke.quickml.com X-Mailer: Mew version 2.2 on Emacs 21.2 / Mule 5.0 (SAKAKI) 田畑です utena-905をリリースしました 入力システムのモード(例 "直接","ひらがな","カタカナ","全角英数")のAPIを 実装しました. int utena_get_nr_modes(utena_context) char *utena_get_mode_name(utena_context, int nth) でモードの一覧を得ます。gtk-im-scmではここでメニューを作ります 言語切替えの時に、この一覧をinvalidateするインターフェイスは 近日中に付けます。 int utena_get_current_mode(utena_context ) void utena_set_mode(utena_context uc, int nth) void utena_context_set_cb(utena_context uc, void (*update_cb)(void *ptr, int mode)); モードの取得、設定、変更時のコールバックです TODOは *ドキュメントを書く(日本語&英語) *入力システムの一覧のAPIを作る *SKKの完成度を上げる *Anthyを実装する *候補を操作するAPIを作る *PY(中国語のピンイン)を完成させる *ハングルを処理できるようにオートマトンを変更する *テーブルの指定だけで入力システムを追加できるようにする *leimから色々とってくる *libtabe(中国語XIMサーバxcinの使うライブラリ)を勉強する ;中国語もリハビリする -- P.S. gtk+のimmoduleについて簡単に説明しておきます. 入力コンテキストのクラス階層は次のようになっています. GtkIMContext(基底クラス) GtkIMMultiContext(マルチプレクサ) GtkIMContextSimple(テーブルベースのIMの基底クラス) GtkIMContextIpa(発音記号) GtkIMContextAmharicEthiopia(エチオピア) ....その他の各言語 GtkIMContextXIM(XIM) ... GtkIMContextAnthy(Anthy用 拙作) テキストフィールドはGtkIMContextをメンバとして持ちますが, デフォルトのウィジェットはそれを継承したGtkIMMultiContextの インスタンスを持つようになっています. マルチプレクサのGtkIMMultiContextはいい加減な表現ですが, 次のような形式になってます. class GtkIMMultiContext { 現在有効なimmoduleのリスト メニュー GtkIMMultiContext *slave; }; テキストフィールドで右クリックするとimmoduleのリストがメニューとして 表示され,選択されたimmoduleをslaveとしてセットしslaveからの signalをテキストフィールドに転送するようになっています. GtkIMContextSimpleはローマ字平仮名テーブルのような形式を 処理するための基底クラスです.欧米の文字も含めて世界の ほとんどの言語はこのシンプルな形式で処理できます. 実装においてもgtkのシグナル機構をうまく使ってクリーンに作ってありますが, 問題点も少しあります. *テキストフィールドごとにコンテキストがあるせいで,フォーカスを移すたびに 状態を変えないといけない *英語以外の言語の場合はOn/Offの状態が必要なのに実装されていないので, いちいちマウスでメニューを操作しないといけない 一つ目の問題はそのうちなんとかしようとは思います. (gtkのbugzillaの中にもあるので,誰かが直してくれるかもしれません.) 後者の問題はim-anthyなどでは class IMAnthy { anthyの状態 GtkIMContextSimple *slave; }; というようにして,モードによってはイベントをslaveの方に 送りつけるというようにしています. -- ML: anthy@heke.quickml.com 使い方: http://QuickML.com/