最終更新: 2011-05-10T18:49+0900
どういう関数?>「改行のエスケープシーケンス('\\'+'n')で区切られる文字列の個数を数える(WCHAR版)」
使われ方>「複数行指定方法の改善(正規表現パターンの行数とダイアログ設定値の大きい方を採用する)」
これだけ対応していないなら「正規表現による」というより、\nというエスケープシーケンスにだけ対応した普通の検索といったほうが当たってる。正規表現ライブラリに今以上の機能(hitEnd)を求めないのなら、これが最大限度の対応なのかもしれないが……。GetCountOfDividedStringW
には期待せず、ダイアログで 100とか設定しておけば大体はうまくいくのかもしれない。
どういう関数?>「0文字マッチや改行文字の途中を考慮した置換文字数の補正値を取得する」
なぜ必要?>ドキュメントの操作がビュー経由でしか行えないため、ロジック単位で行った検索をレイアウト単位に変換してから置換を実行しなければいけない。置換関数の中ではレイアウト単位をロジック単位に変換して……といったことがもちろん行われるわけで……ムキー、ってなことを 20100907p01.03に書いた。
とりあえずロジック単位で置換範囲を指定できる置換関数をどこかに作ろうとして、20100709p01の複数行置換の実装は止まっている。CMultiLineSearch::GetCompensationLength
を使うアプローチはこれまでのやり方を踏襲するもので、置換範囲と置換文字列をレイアウト単位境界にそろえてから置換関数を呼び出す。計画倒れよりできあがってる方が偉い。