|
>秀丸エディタに実装するのもかなりの時間がかかりそうです
>から気長に待っています。
秀丸エディタで標準でやろうとすると、いろいろな言語や文法を正しく解釈する
ことを考えなければいけなさそうなので、ちょっと難しいかもしれません。
文法とかあまり考えずに適当にマクロを作ってみましたが、参考にしてみてくだ
さい。
IFのある場所で実行します。
V7.00以降でのみ使えます。
マクロ登録で、自動起動マクロのカーソル移動後タイマーに登録してもいいかも
しれません。
if(selecting)endmacro;
if(code!='I'&&code!='F'&&code!='i'&&code!='f') endmacro;
disabledraw;
#yTop=screentopy;
#xOrg=x;
#yOrg=y;
gowordtop;
#x1=x; #y1=y;
wordrightsalnen;
#x2=x; #y2=y;
$word=toupper(gettext(#x1,#y1,#x2,#y2));
if($word=="IF"){
wordleft;
$wordleft=toupper(gettext(x,y,#x1,#y1));
if($wordleft=="ELS")goto Exit;
wordleft;
$wordleft=toupper(gettext(x,y,#x1,#y1));
if($wordleft=="END ")goto Exit;
selectall;
colormarker;
escape;
#cNest = 1;
call ColorMark #x1,#y1,#x2,#y2;
while(1){
searchdown "IF|ELSIF|ELSE|END IF",
regular, word, nocasesense;
if( !result ) break;
#x1=foundtopx; #y1=foundtopy;
#x2=foundendx; #y2=foundendy;
$found=toupper(gettext(#x1,#y1,#x2,#y2));
if($found=="IF") {
#cNest = #cNest + 1;
} else if($found=="ELSIF"||$found=="ELSE") {
if(#cNest==1){
call ColorMark #x1,#y1,#x2,#y2;
}
} else if($found=="END IF") {
#cNest = #cNest - 1;
if(#cNest==0){
call ColorMark #x1,#y1,#x2,#y2;
break;
}
}
moveto #x2, #y2;
}
}
Exit:
moveto #xOrg,#yOrg;
enabledraw #yTop;
endmacro;
ColorMark:
moveto ##1,##2;
beginsel;
moveto ##3,##4;
colormarker -1, 0x0000ff,11,2;
escape;
return;
|
|