|
秀丸担当さん、こんにちは。
incolormarker を使ってみました。下記の テスト.mac をサンプルテキスト上で続け
て実行すると、
・期待する動作: ケース 3〜7 のみヒットし、他はヒットしない
(ケース 2, 8 がヒットするべきか否かは議論の余地あり)
・実際の動作: 全てのケースでヒットする
という結果になりました。
私が期待していた動作は、下記 SearchInColorMarker サブルーチンのような感じです。
追加の条件のカラーマーカーを使うこと自体初めてなので、何か根本的な勘違いをし
ているかもしれません。
仕様と使い方をご教示いただければ幸いです。
秀丸エディタ v8.56β10
// テスト.mac
$L = currentmacrobasename;
if (!replay) {
deletecolormarkerall $L;
// 3桁の数字、および、「<」の直前の0文字を塗る
setsearch "\\d{3}\\n?|(?=<)", 0x10;
colormarkerallfound 0xFFFFFF, 0x6666FF, 11, 0, 0, $L;
settargetcolormarker $L;
}
escape;
searchdown2 "(?\\1)ケース\\d+: *(.*)$", regular, nohilight;
if (!result) endmacro;
$src = gettext(foundtopx, foundtopy, foundendx, foundendy, false);
moveto2 0, lineno + 1;
if (1) {
searchdown2 $src, regular, incolormarker, nohilight;
} else {
loaddll hidemarudir + "\\HMJRE.DLL";
call SearchInColorMarker $src;
freedll;
}
endmacro;
SearchInColorMarker:
if (getcolormarker(0x08, $L) == ""){
nextcolormarker 0x09, 0, $L;
if (!result) return false;
}
##c = column;
##l = lineno;
nextcolormarker 0x0A, 0, $L;
$$text = gettext2(##c, ##l, column, lineno, false);
##p = dllfunc("FindRegular", $$1, $$text, 0);
if (##p < 0) return false;
// このサンプルでは複数行のマッチを考慮していない
moveto2 ##c + ##p + dllfunc("GetLastMatchLength"), ##l;
beginsel;
moveto2 ##c + ##p, ##l;
endsel;
return true;
/*
▼サンプルテキスト
テストケース: 検索文字列
対象文字列 → 期待する動作
ケース1: _+\d+
__123__ → ヒットしない
ケース2: (?<=_)\d+
__123__ → ヒットしない (議論の余地あり)
ケース3: _*\d+
__123__ → 「123」にヒットする
ケース4: \d+
__123__ → 「123」にヒットする
ケース5: \c+
__123__ → 「123」にヒットする
ケース6: [\d\n]+
__123
456__ → 「123\n456」にヒットする
ケース7: \d+_*
__123__ → 「123」にヒットする
ケース8: \d+(?=_)
__123__ → ヒットしない (議論の余地あり)
ケース9: \d+_+
__123__ → ヒットしない
ケース10: \d+_+\d+
123__456 → ヒットしない
ケース11: \d+_+
123__456 → ヒットしない
ケース12: _+\d+
123__456 → ヒットしない
ケース13: _+
123__456 → ヒットしない
ケース15: >
__><<__ → ヒットしない
ケース16: <
__><<__ → ヒットしない
*/
|
|