◀Unicode版開発トップへ
  • 2373 ファイル保存時の改行コード統一は仕様?
    • 2374 Re:ファイル保存時の改行コード統一は仕様?
      • 2375 Re2:【解決】ファイル保存時の改行コード統一は指定時のみ。
  • [2373] ファイル保存時の改行コード統一は仕様? ばぼ 2016年07月30日 16:41

    ご存じの方がいれば教えてください。

    現在、ver2系のsakuraでは、
    ファイル保存のフローで保存前に改行コードを修正しています。
    SVNログを見る限り、ver2発案時からの動作ですが、
    これは仕様なんでしょうか?

    .\sakura_core\CSaveAgent.cpp(105):
    //改行コード統一
    CDocVisitor(pcDoc).SetAllEol(sSaveInfo.cEol);


    sakura内部では全行に対して行末記号を保持しており、
    データ構造とロジックに矛盾があるように思います。

    全行の行末記号情報を個別に持つ、ということは、
    行末記号が混在した状態のファイルを保存したら、
    混在状態がそのまま出力されるのが自然だと思います。

    意図してやってると思うんですが、
    なんでそうしたのか(だんまりで修正する仕様にしたのか)
    経緯があれば教えてほしいです。
    • [2374] Re:ファイル保存時の改行コード統一は仕様? もか 2016年07月31日 02:35

      ▼ ばぼさん
      > .\sakura_core\CSaveAgent.cpp(105):
      > //改行コード統一
      > CDocVisitor(pcDoc).SetAllEol(sSaveInfo.cEol);
      分かりにくいと思いますがSetAllEol内部で統一するかの判断をしており、
      CDocVisitor.cpp(31):
        //改行コードを統一する
        if(cEol.IsValid()){

      cEol.IsValid() != falseのときだけ改行コードが統一されます。
      通常保存で無変換の時は、改行コード指定のcEolがEOL_NONEになっていて、
      EOL_NONEのときIsValidはfalseを返すので、2.xでも改行コードは統一されません。
      CViewCommander::Command_FILESAVE
      sakura_core\cmd\CViewCommander_File.cpp(185):
        sSaveInfo.cEol = EOL_NONE; //改行コード無変換
      保存ダイアログ表示の場合は、改行コードコンボボックスの一番上が無変換indexが0==EOL_NONEです。
      • [2375] Re2:【解決】ファイル保存時の改行コード統一は指定時のみ。 ばぼ 2016年07月31日 09:45

        回答ありがとうございます。
        見事に勘違いしました。


        CDocVisitor(pcDoc).SetAllEol(sSaveInfo.cEol);

        この書き方でCDocVisitorが非visitorとか。
        デザインパターンと一致する用語で関係ない概念なのは紛らわしい気がしました。

        ▼ もかさん
        > 分かりにくいと思いますがSetAllEol内部で統一するかの判断をしており、

        分かりづらいですね...
        出力時の行末記号変更だったら「出力前処理」より、
        出力処理そのものに組み込んだ方が直観的な気がしないでもないです。

        野良版できたらまたネタ提供させていただきます。