TOKUNAGA Hiroyuki
tkng****@xem*****
2005年 2月 25日 (金) 05:09:15 JST
On Wed, 23 Feb 2005 21:02:08 +0900 (JST) Kenichi Handa <handa****@m17n*****> wrote: > In article <20050****@xem*****>, TOKUNAGA Hiroyuki > <tkng****@xem*****> writes: > >> > あと、latin-post/latin-preなどが使えない問題もr649で修正しておき > >> > ました。 > >> > >> こちらは私の環境では正常に動きません。 > >> 割り付け表を見ながら試用しましたが、 > >> http://www.m17n.org/m17n-lib/m17n-docs/latn-post.png > >> http://www.m17n.org/m17n-lib/m17n-docs/latn-pre.png > >> d/ (post) や /a (pre) と入力しても変換されません。 > > > すいません、実際に特殊な文字が入力できるかまでは確認してませんでし > > た。チェックしてみたのですが、明らかにlibuimの仕様の問題ではありませ > > んね。というわけで、m17nlib.scmのどこかがおかしいのだと思いますが、 > > どこら辺が悪いのか、よくわかりませんでした。予想以上に難しそうなの > > で、とりあえず修正は後回しにしてbeta1をリリースしたいと思います。 > > 0.4.6beta2/uim//m17nlib.c をちらっと見てみたのですが、少なく > とも以下の修正が必要です(Copyright AISTのコードを UIM に入 > れられるのかどうか分からないので、あえてパッチは送りません > が)。 コメントありがとうございます。いくつかは修正しておきました。(いくつか はまだ修正できてないです。) > (1) find_im_by_name は im_array[i].lang が NULL の時は > sprintf (buf, "%s", im_array[i].name) をしないと、 > get_input_method_name () の処理と整合性が取れません。この修 > 正で少なくとも latin-post/pre が使えるようになるようです。 r717で修正しました。 > (2) remap_lang_name () は自前でテーブルを持っていますが、 > m17n-lib が新たな XX-kbd.mim とかを追加した場合、テーブルに > "XX" が登録していないと NULL を返すので、 xx-kdb.mim とか > yy-kbd.mim とかが全部 m17n-kbd という名前に縮退してしまいま > す。 msymbol_get (im->language, Mlanguage) を使う方が良いと > 思います。例えば msymbo_get (msymbol ("ja"), Mlanguage) は > msymbol ("Japanese") を返します。 remap_lang_nameは"Japanese"から"ja"を取得しているので、msymbo_get (msymbol ("ja"), Mlanguage)では代用にはならなさそうです。 よく考えたら今のuimにはISO 639のテーブルが入ってるので、それを使えばよ さそうですね。 > それから im->language が Mt の場合は最初から言語指定なしとし > て処理して結構です。 im->languageがMtとはどういう意味でしょうか?uimの場合にはそもそもim- languageがMtの場合に関する処理というのは特に入っていないようです。 > 以上の変更で latn-post/pre が起動できるようになります。ただ、 > 動作がどうもおかしく、たとえば "a'" と打つと a-grave が > preedit として表示されますが、続いて "f" とうつと a-grave は > commit されますが、 "f" が無視されるようです。これはまだ原因 > がわかりません。 m17nlib.scmのm17nlib-press-key-handlerが非常に怪しいです。しかし、そろ そろ0.4.6をリリースしたいので、とりあえず後回しにします。 このように0.4シリーズにはまだだいぶ積み残しがあるので、0.6.0までのつな ぎとして、0.4.6以降もリリースしようかと考え始めました。 # たぶん0.4.7はリリースします。 > その他、気になるコードは、 > > (3) register_callbacks () がなんども呼ばれていますが、uim が > 使っているのは m17n-lib の internal input method のみですの > で、 minput_driver->callback_list に各 callback 関数を一度だ > け mplist_put で設定すれば大丈夫です。 r718で修正しました。 > (4) commit () 中に > /* To avoid a bug of m17n-lib */ > ic->candidate_to = 0; > というコードがあるのですが、これはどうゆうバグでしょうか? えーと、すいません、忘れました。また今度調べておきます。 > (5) ic_array[id].old/new_candidates があるんですが、 > ic->candidat_list の plist をそのまま毎回使った方が速いと思 > うのですが。 ベンチマークを取った訳ではないですが、例えば50個の候補があったとして、 41〜50個目の候補を取得しようと思った場合、候補のキャッシュをしないと mplist_nextが (41 + 50)/2*10回で450回ほど呼ばれる事になるので、キャッ シュした方が早いように思えます。(キャッシュ領域を確保するのに最初に50回 malloc呼ぶ方が重いかも知れませんけど…。) もしかして、n番目のplistの値を直接取得するAPIとかあった りしますか? -- 徳永拓之 tkng****@xem***** http://kodou.net/