Takuro Ashie
ashie****@homa*****
2006年 9月 25日 (月) 12:59:15 JST
足永です。 scim-anthy-1.2.0にバグが見付かったので http://www.homa.ne.jp/~ashie/diary/?200609c&to=200609221#200609221 今月の肉リリースで修正しようと思います。大力さんが原因を突き止めてくだ さったので、多分直せると思います(そろそろコードを忘れ始めてるので弱気)。 ちなみに今回の修正予定は以下の通りです。 * 辞書のエンコーディングをEUC-JP-MSからEUC-JPに戻す - どちらにしても完全な解決とはなりませんが、様子を見た結果として、 現時点ではEUC-JP-MSにしたほうが不具合が多いと判断しました - 技術的詳細については、時間があればWikiにでもまとめるつもりです * 設定画面に「辞書のエンコーディング」を追加 - 1.2.0で既に追加されていましたが、あえて非表示にしてありました * 上記問題の修正 また、今回の反省から、開発版となる1.3.xでテストの自動化を徐々に進めてい こうと思います。GUIのテストの自動化は難しい部分もあるためサボっていたの ですが、少なくともIMの部分はGUIは必須ではないので、テストケースさえ抽出 できれば自動化は難しくないと思います。 Begin forwarded message: Date: Sat, 23 Sep 2006 17:53:36 +0900 From: Ryo Dairiki <ryo-d****@users*****> To: Takuro Ashie <ashie****@homa*****> Subject: SCIM-Anthy-1.2.0のレグレッションについて 大力です。 SCIM-Anthy-1.2.0のレグレッションの原因が分かりました。 scim_anthy_reading.cppのvoid Reading::reset_pending (void)です。 void Reading::reset_pending (void) { if (m_key2kana->is_pending ()) m_key2kana->clear (); if (m_kana.is_pending ()) m_kana.clear (); if (m_segment_pos <= 0) return; m_key2kana->reset_pending (m_segments[m_segment_pos - 1].kana, m_segments[m_segment_pos - 1].raw); m_kana.reset_pending (m_segments[m_segment_pos - 1].kana, m_segments[m_segment_pos - 1].raw); m_key2kana->reset_pseudo_ascii_mode(); // <- こいつが不味い。 for (unsigned int i = 0; i < m_segment_pos; i++) m_key2kana->process_pseudo_ascii_mode(m_segments[i].kana); } ここを探ると、次のようなコードに飛びます。 void Key2KanaConvertor::reset_pseudo_ascii_mode (void) { m_is_in_pseudo_ascii_mode = false; m_pending.clear(); // <- 多分これが間違いの元。 } 結局、バックスペースを押したり、カーソルを動かしたりするとreset ()が呼ばれて、 この際に間違って非平仮名文字列まで初期化してしまっている訳です。 と言う訳で、この辺りのロジックの見直しをお願いします。 大力亮 <ryo-d****@users*****> # 追伸: SCIM-Anthyのspecial thanksに入っているメールアドレスは # ryo-d****@users*****に更新をお願いします。