[Scim-imengine-dev 1344] Fw: SCIM-Anthy-1.2.0のレグレッションについて

Back to archive index

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*****に更新をお願いします。



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