YamaKen
yamak****@bp*****
2004年 2月 20日 (金) 18:25:01 JST
ヤマケンです。 もうそろそろuim 0.3.0が近づいてきてると思うので駆け込み仕様変更 です。まだcommitしないで保留してあるので、ご意見お願いします。 At Tue, 10 Feb 2004 01:59:35 +0900, tkng****@xem***** wrote: > > On Fri, 06 Feb 2004 20:04:22 +0900 > YamaKen <yamak****@bp*****> wrote: > > > ここまで書いてから気づいたのですが、ヤマケンさんが考えてるのは、 > > > uim_contextのメンバのconvはまったく使わずに、ブリッジ側でエンコーデ > > > ィングを変換するという方法ですよね。たしかにその方がlibuimは変更せず > > > に済むので楽なような気もするのですが、将来的にはどっちが楽なんでしょ > > > う?もうちょっと考えてみないと、私にはわかりそうにないです。 > > > > ブリッジ側がiconv相当の機能を提供するコールバックインタフェイス > > を作れば綺麗にまとまると思います。それが以下の発言の意図でした。 > > 0.3で変えようとしているAPIが他にも結構多いのでこの部分はあまり下 > > 手にいじらずにそっとしておこうと思ったんですが、一緒に変えてしま > > いましょうか? > > 余裕があればお願いします。uim-ximのshft_page_cbへの対応を考えると、 > 0.3.0にはまだもうちょっと時間がかかりそうですし。 作ってみました。最初は他のコールバック関数と同様にuim_contextに *_cb をセットするインタフェイスを考えてみたんですが、以下の不都 合があったので別の方法に変更しました。uim_create_context()の仕様 が変わります。 ・iconv()に相当するコールバックでは第1引数が実装依存の opaque(iconv_t等)になるが、uim_create_context()の第1引数として 渡したvoid *ptrが渡されるものと誤解される恐れがある ・コード変換はuimの最低限の動作にも必須の機能なので uim_create_contextの引数として渡すのが望ましいが、コード変換に 必要な4つもの関数を追加すると呼び出しコードが見づらくかつ理解 しにくくなる ・複数のコード変換実装を使い分けたい場合(QTextCodecからiconvに フォールバックする場合等)、コード変換に必要な4つの関数をひとま とめに扱えた方が便利 とりあえず以下のような実装にしてみました。基本的にiconvに似せて あります。今までのiconvによる実装はuim_iconvとして残してあるので、 uim_create_context()の第5引数として'uim_iconv'を渡してやれば後は 今まで通りに動きます。 /* abstracting platform dependent character code conversion method */ struct uim_code_converter { int (*is_convertible)(const char *tocode, const char *fromcode); void *(*create)(const char *tocode, const char *fromcode); char *(*convert)(void *obj, const char *str); void (*release)(void *obj); }; uim_context uim_create_context(void *ptr, char *enc, char *lang, char *engine, struct uim_code_converter *conv, void (*commit_cb)(void *ptr, char *str)); /* an uim_code_converter implementation using iconv */ extern struct uim_code_converter *uim_iconv; ------------------------------- ヤマケン yamak****@bp***** -------------- next part -------------- テキスト形式以外の添付ファイルを保管しました... ファイル名: uim-trunk-484-uim-code-converter-20040220.diff 型: application/octet-stream サイズ: 10465 バイト 説明: 無し 다운로드