[Anthy-dev 576] Re: uim: iconvを素通し

Back to archive index

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 バイト
説明:       無し
다운로드 


Anthy-dev メーリングリストの案内
Back to archive index