|
h-tom です。
「gettext」の第五引数の設定を変えると、検索の動作が変わります。
再現の条件としては、正規表現DLLを「BregIf.dll+bregonig.dll」に変える
必要があります。
・BregIf.dll
http://www.arimac.com/BRegIf/index.html にあるV1.30以上(BRegIf8か9)
(V1.20(BRegIf7)だと再現しません。)
・bregonig.dll
http://webs.to/ken/ にあるbregonig.dll Ver.1.42
BregIf.dllとbregonig.dllを秀丸本体と同じ所へ置いて、設定を変更し、
再現用マクロを実行すると、以下のようになり、gettextの範囲選択保持
設定により、結果が異なります。
実行結果その1 ここから---------------------------
0-------------
section1 x:1 foundtopx:1 foundendx:9
section1 x:1 foundtopx:1 foundendx:9
section1 x:1 foundtopx:1 foundendx:9
section1 x:1 foundtopx:1 foundendx:9
1-------------
section1 x:1 foundtopx:1 foundendx:9
section2 x:1 foundtopx:1 foundendx:9
section3 x:1 foundtopx:1 foundendx:9
section4 x:1 foundtopx:1 foundendx:9
実行結果その1 ここまで---------------------------
ちなみに、「検索での表示」を「点滅表示」(setcompatiblemode 0x0100)にすると、
gettextの範囲選択保持による違いは、なくなります。
実行結果その2 ここから---------------------------
0-------------
section1 x:1 foundtopx:1 foundendx:9
section2 x:1 foundtopx:1 foundendx:9
section3 x:1 foundtopx:1 foundendx:9
section4 x:1 foundtopx:1 foundendx:9
1-------------
section1 x:1 foundtopx:1 foundendx:9
section2 x:1 foundtopx:1 foundendx:9
section3 x:1 foundtopx:1 foundendx:9
section4 x:1 foundtopx:1 foundendx:9
実行結果その2 ここまで---------------------------
「BregIf.dll+bregonig.dll」に変えた場合に発生するので、正規表現仕様の
違いが原因だと思いますが、秀丸側の設定をかえると、動作も変わるので、
報告です。
//再現用マクロ ここから
newfile;
insert "[section1]\n";
insert "[section2]\n";
insert "[section3]\n";
insert "[section4]\n";
insert "[section5]\n";
$BAK_SEARCHBUFFER = searchbuffer;
#BAK_SEARCHOPTION = searchoption;
//setcompatiblemode 0x0100;
setcompatiblemode 0x0200;
$out = "";
#flg = 0;
#max = 4;
while(#flg < 2){
gofiletop;
#cnt = 0;
$out = $out + str(#flg) + "-------------\n";
while(#cnt < #max){
searchdown2 "(?<=^\\[)[^\\]]+(?=\\])", regular;
##ret = result;
if(!##ret) break;
$get = gettext(foundtopx, foundtopy, foundendx, foundendy,#flg);
$out = $out + $get + " x:" + str(x) + " foundtopx:" + str(foundtop
x) + " foundendx:" + str(foundendx) + "\n";
#cnt = #cnt + 1;
}
#flg = #flg + 1;
}
message $out;
setsearch $BAK_SEARCHBUFFER, #BAK_SEARCHOPTION;
setreplace $BAK_REPLACEBUFFER;
endmacro;
//再現用マクロ ここまで
|
|