複数の問題に対する複合パッチです。
1. 正規表現置換で範囲右側がおかしかったのを修正
2. 置換文字の右側にタブがあった場合の置換範囲がおかしかったのを修正
3. 通常・正規表現は置換の繰り返しのとき、折り返しをまたぐマッチ文字列が置換対象になっていたのを修正
4. 置換対象が置換で短くなった場合に右側の部分が置換されていたバグを修正
制限とか:
正規表現で量指定子を使うと、置換範囲を超える部分までマッチしてしまい、うまく置換できません。
また正規表現DLL APIに置換範囲終了位置を指定することができないので、先読みで置換範囲外を指定してマッチさせるようなこともできません。
※少ししかテストしていません。
・次の検索行を決める比較が反対で、置換がスキップされてしまうバグを修正
4番に該当すると思われるケース(1件だけ……)です。「すべて置換は置換の繰返し」がチェックされていない場合に期待を裏切ります。「置換範囲を超える部分までマッチしてしまい、うまく置換できません」には該当しないはずです。
2017-12-01 11:31:48
2例目のテストケースを追加しました。実は1例目を3行にコピーしただけです。2例のテストに対して、全滅のバイナリ、1勝1敗のバイナリ、半勝半敗(※フラグにより正しくない)の_v3パッチと三者三様の結果です。(全滅は2.3.2.0、1勝1敗は2.2.0.1です)
Last edit: ds14050 2017-12-01
1番のケースは知らずに作成したこれ[#1113]が該当するのではないかと思います。_v3パッチですべて通るようになりますから。
Related
PatchUnicode:
#1113これが3番のケースかなと思います。_v3パッチ版の結果が唯一予測可能なもので、これを期待値にしました。
2017-12-01 03:49:03
_v3パッチを読んで、これはダメそうだなというケースを2例目に追加しました。ダメでした。
2例目に関して最近のバイナリ(2.2)とやや古いバイナリ(2.0)は「正規表現: checked/すべて置換は置換の繰返し: unchecked」のチェック状態の組み合わせの場合だけ失敗する結果になりました。その他の組み合わせの場合(3通り)の結果は妥当だと思います。
2017-12-01 18:12:49
さらに2例追加して4例になりました。3例目は2例目の派生で(※マクロにコメントがあります)、4例目が新規の例です。折り返し線に密着した文字列を矩形選択置換する際に落とし穴があるようです。既存バイナリも _v3パッチもダメでした。2017-12-07 02:36:58 に訂正されました。2017-12-07 02:36:58
3例目のテストケースが根本的に間違っていましたので削除しました。2017-12-01 18:12:49 のコメントを次のように訂正します。
1例追加して3例になりました。折り返し線に密着した文字列を矩形選択置換する際に落とし穴があるようです。実質的に2例目と同じく折り返しをまたぐ文字列を置換することが求められます。既存バイナリはやはり「正規表現: checked/すべて置換は置換の繰返し: unchecked」の場合がダメで、_v3バッチはフラグによらずダメでした。
2017-12-11 13:42:28
矩形選択中にキャレットが折り返し移動する古いバージョンでは一部のテストができないとのコメントを追記しました。
2017-12-16 17:59
コメントをスクリプト化しました。
Last edit: ds14050 2017-12-16
これは _v3パッチの問題ですが、「次の検索開始位置へシフト」する際に「範囲選択をクリアしないと位置移動できていなかった」部分が正常化された結果なのでしょう、すべて置換が無限ループして手動でキャンセルボタンを押す必要が生じます。
2番のテストケースです。もちろん _v3パッチ版は通ります。これですべて網羅したでしょうか。
_v3パッチを取り込んだものを [r4201] でコミットしました。
Related
Commit: [r4201]