◀ANSI版開発トップへ
  • 3974 バグ修正用パッチ
    • 3975 Re: バグ修正用パッチ
    • 3976 選択処理について
    • 3977 RE: バグ修正用パッチ
      • 3978 RE2: バグ修正用パッチ
        • 3979 RE3: バグ修正用パッチ
  • [3974] バグ修正用パッチ もか 2005年07月11日 23:53

    バグ修正パッチです。内容は以下の通りです。
    e-groups の fix050711.zip です。
    [バグ修正]
    ・アウトプットウィンドウの状態のままファイルを開いてしまう
    >>data:4485
    Grepウィンドウと同じようにしました。
    ファイルを開くと、他のウィンドウを作りそちらに表示します。
    閉じて(無題)をすると、空の普通のウィンドウになります。
    ・NULを含むファイルをUTF-7で保存するとNULが復号できなくなる
    2002年10月から、コントロールコードもBASE64で保存するように変えましたが、
    UTF-7で使用する修正BASE64は、BASE64文字列の最後にあるNULをパディング扱いするため、復号時に削除されていました。
    ・UTF-7の自動認識のポイントが高くなっていた
    SJISに変換できる・できないに関わらず、ポイントが加算されてました。
    [その他]
    ・通常の範囲選択部分をまとめた
    • [3975] Re: バグ修正用パッチ もか 2005年07月12日 22:57

      >・NULを含むファイルをUTF-7で保存するとNULが復号できなくなる
      > 2002年10月から、コントロールコードもBASE64で保存するように変えましたが、
      > UTF-7で使用する修正BASE64は、BASE64文字列の最後にあるNULをパディング扱いするため、復号時に削除されていました。
      お手数かけて、すみません。
      これは、元のコードで、まったく問題ありませんでした。

      パッチ中の、CMemory.cpp
      + @date 2005.07.11 Moca NULはBASE64復号時に削除されるため、NULを直接エンコードするように変更
      (中略)
      + L'\x00' == wc || // NUL
      以上の2行は無視してください。


      改めて調べ直してみたらUTF-7は、そもそも24bit(3byte)になるようにパッドを付けない仕様でした。
      ただし、6bitの倍数になるように1-5bitを付加され、それが0でない場合、本来は不正です。
      しかしサクラエディタの場合は、問答無用で無視します。
      例えば「+AAB-」でも、「+AAA-」と同じと見なしてデコードされます。
    • [3976] 選択処理について げんた 2005年07月12日 23:52

      >・通常の範囲選択部分をまとめた
      選択処理については先日選択範囲の文字数計算を作ったときにいろいろと見たのですが,3種類の座標の意味がわかりにくいですよね.
      一番ダメだと思ったのはCEditView::m_nSelect**Oldの変数で,これは実質的にDrawSelectArea()のパラメータとしてしか使われないのでDrawSelectArea()を呼ぶたびに明示的に引数で渡すべきだと思います.
      と考えると始点~終点を表す座標4変数はまとめて1つの構造体として扱えるようにしておくのがいいかな.

      選択処理だけ別クラスに分けるべきなのかなー.
    • [3977] RE: バグ修正用パッチ げんた 2005年07月14日 00:07

      >・通常の範囲選択部分をまとめた
      CEditView::Command_SELECTALL()で
      [変更前]
      m_nSelectLineBgnFrom = 0; /* 範囲選択開始行(原点) */
      m_nSelectColmBgnFrom = 0; /* 範囲選択開始桁(原点) */
      m_nSelectLineBgnTo = 0; /* 範囲選択開始行(原点) */
      m_nSelectColmBgnTo = 0; /* 範囲選択開始桁(原点) */

      m_nSelectLineFrom = 0;
      m_nSelectColmFrom = 0;
      m_nSelectLineTo = m_pcEditDoc->m_cLayoutMgr.GetLineCount();
      m_nSelectColmTo = 0;

      [変更後]
      SetSelectArea( 0, 0, m_pcEditDoc->m_cLayoutMgr.GetLineCount(), 0 );
      とm_nSelectLineBgnToに設定される値が異なっていますが,これはOK?

      ---
      CEditWnd::SetDebugModeOFF()が新たに作られていますが,アウトプットウィンドウとは出力結果を取り込むための「バッファ」が本質だと思うので,CEditDocに追加した方がいいと思います.そうすればDebugModeフラグも中でチェックできますし.

      ---
      CMemory::CheckKanjiCode_UTF7()でバッファとして
      char szMbChar[4];
      を取っていますが,ここはきちんとマニュアル通りlimits.hをインクルードした上で
      char szMbChar[MB_LEN_MAX];
      とした方が行儀がよいのでは?
      • [3978] RE2: バグ修正用パッチ もか 2005年07月14日 02:10

        毎回レビュー等ありがとうございます。
        # 変な所多くて、すみません。

        >[変更後]
        >SetSelectArea( 0, 0, m_pcEditDoc->m_cLayoutMgr.GetLineCount(), 0 );
        >とm_nSelectLineBgnToに設定される値が異なっていますが,これはOK?
        定義は以下のようになってますから
        設定される値は変更前と同じですよね?
        SetSelectArea( A, B, C, D ){
        m_nSelectLineBgnFrom = A;
        m_nSelectColmBgnFrom = B;
        m_nSelectLineBgnTo = A;
        m_nSelectColmBgnTo = B;
        m_nSelectLineFrom = A;
        m_nSelectColmFrom = B;
        m_nSelectLineTo = C;
        m_nSelectColmTo = D;
        }

        >---
        >CEditWnd::SetDebugModeOFF() (中略.. )(は)CEditDocに追加した方がいいと思います.
        私もそう思ったのですが、SetDebugModeON()があったのと、m_pShareData->m_hwndDebugのデバッグのウィンドウ指定があるので、とりあえずWndのほうに置いておきました。
        でも、新分割画面を考えると......


        >CMemory::CheckKanjiCode_UTF7()でバッファとして
        >char szMbChar[4];
        >を取っていますが,ここはきちんとマニュアル通りlimits.hをインクルードした上で
        >char szMbChar[MB_LEN_MAX];
        >とした方が行儀がよいのでは?
        MB_LEN_MAXはVC6のヘッダだと 2、VC71のヘッダだと 5 に設定されていました。
        gentaさんの言うように、MB_LEN_MAXを使わないとまずいようです。
        • [3979] RE3: バグ修正用パッチ げんた 2005年07月14日 02:57

          >設定される値は変更前と同じですよね?
          確かに,よく見たらそうでした.私の方がちょっと勘違いしていました.

          >>---
          >>CEditWnd::SetDebugModeOFF() (中略.. )(は)CEditDocに追加した方がいいと思います.
          >私もそう思ったのですが、SetDebugModeON()があったのと、m_pShareData->m_hwndDebugのデバッグのウィンドウ指定があるので、とりあえずWndのほうに置いておきました。
          確かにONもありますね.でも,m_bDebugModeはCEditDocですし...
          CEditWndを通さずにCEditDocに外から直接メッセージを送れればこんなことしなくていいんでしょうけど.

          >でも、新分割画面を考えると......
          (∩゜д゜)アーアーきこえなーい...また今度見直すか...