|
これで、完結にします。あとは使用する C, C++ と、コーヂングの癖に依存します。
番頭++ でした。
// KZ_BKK9.mac - 1998/05/15 - ナインです !
// さりげなく { (open block) の相棒 } (close block) を見つけるマクロです。
// 「秀丸エディタ」マクロの { } にも有効です。
// 文字、数値リテラルに関した「エスケープ処理」の考慮は完全ではありません。
// 開始位置の { を、delete; undo; します。これは golastupdated; への配慮です。
// } が見つかった後に、「最後に編集した個所に移動」ができます。余計なお世話 ...
// 行先頭の #if, #elif, #ifdef, #ifndef, #else, #endif の考慮があります。
// #if, #elif, #ifdef, #ifndef - true, false 判定は手動です。ダサイ ...
// #if, #elif, #ifdef, #ifndef - (T) True は次の論理行の処理とします。
// negative question ? は、混乱を招く事があります。趣味の問題です。
// /* ... */ の nesting は許さないものとします。許す C, C++ もあるのですが ...
// } の相棒 { は捜しづらいです。コードする意欲と言うか、能力も無いです。
// この作者は C, C++ を詳しくは知らないのです。
// C 書けますが、読めません。読み書きの差は、泥雲の差です。そうなんです ...
// 素人は書けます、プロは読めます ...
// サトリはそのソースを必要としません ... 相手の動きを読みます ...
// 我が家にはその C, C++ 関連書籍が全くありません。
// 現在は C, C++ コンパイラを持っていません。一ヶ月のビール代より安いのに ...
// このマクロはあくまでもサンプルであります。今後のエンハンスの予定はありません。
$searchbuffer = searchbuffer; #searchoption = searchoption;
escape; // 安全パイ !
if( x != 0 ){ left; #i = code; right; } // 左右の配慮 !
if( code == '{' ){
} else if( #i == '{' ){
left;
} else {
call pp_find_openkk1;
}
#x_start = x; #y_start = y; #i_code = code;
delete; undo; // golastupdated; // 余計なお世話 !
//R disabledraw; disableinvert;
call pp_set1;
#level = 00; // nesting
#false = 00; // ^# true, false blocking
call pp_cc_or_mac; // #type - 0: C, 1: macro
if( ! #type ){
$str_find = "^(#|//)|{|}|/\\*|\\*/|\".[^\\t]*\"|'.[^\\t]*'";
} else {
$str_find = "//.*\\n|{|}|\".[^\\t]*\"|'.[^\\t]*'";
}
searchdown $str_find, regular;
while( result ){
if( code == '{' ){
#level = #level + 1; // push
} else if( code == '}' ){
if( #level == 00 ){ #found = 01; break; } // メッケ !
#level = #level - 1; // pop
} else if( code == '/' ){
escape; right;
if( code == '/' ){
golineend2;
} else if( code == '*' ){
searchdown "\\*/|/\\*", regular;
if( ! result ){
message "*/ - not found !";
call pp_reset1; endmacro;
}
if( code == '/' ){
message "/* - found !"; // /* ... */ nesting !
call pp_reset1; endmacro;
}
escape;
}
} else if( code == '*' ){
message "*/ - found !";
call pp_reset1; endmacro;
} else if( code == '#' ){
call pp_cc_prepro1;
} else {
right; //R left; // { need "beer"} そんな気が ???
}
searchdown $str_find, regular;
}
if( ! #found ){
searchup "}"; // 個人的な趣味 !
if( ! result ){ moveto #x_start, #y_start; }
message "} - not found !";
}
escape; call pp_reset1;
endmacro;
// C, C++ - ^#
pp_cc_prepro1:
escape; right; selectword;
$wk1 = gettext(seltopx,seltopy,selendx,selendy); escape;
if( $wk1 == "elif" && ( ! #false ) ){
searchdown "^#endif", regular;
if( ! result ){
message "#endif - not found !";
call pp_reset1; endmacro;
}
escape; golineend2;
} else if( strstr("/if/elif/ifdef/ifndef/","/"+$wk1+"/") != -1 ){
golinetop; beginsel; golineend2;
$wk2 = gettext(seltopx,seltopy,selendx,selendy); escape;
$wk2 = leftstr($wk2,72); // 限度かな !
#menu2 = 00;
while( #menu2 <= 01 ){
menu $wk2, "(&T) True", "(&F) False";
#menu2 = result;
if( #menu2 == 00 ){
call pp_reset1; endmacro;
}
}
if( #menu2 == 02 ){
golineend2; #false = 00;
} else { // 03
searchdown "^#(endif|else|elif)", regular;
if( ! result ){
message "#endif - not found !";
call pp_reset1; endmacro;
}
escape; right; selectword;
$wk2 = gettext(seltopx,seltopy,selendx,selendy); escape;
if( $wk2 == "elif" ){
golinetop2; left; #false = 01;
} else {
golineend2; #false = 00;
}
}
} else if( $wk1 == "else" ){
searchdown "^#endif", regular;
if( ! result ){
message "#endif - not found !";
call pp_reset1; endmacro;
}
escape; golineend2; #false = 00;
} else if( $wk1 == "endif" ){
golineend2; #false = 00;
} else {
golineend2;
}
escape; // ボケ防止 !
return;
pp_find_openkk1:
#sw = 0; searchdown "{";
if( ! result ){
gosearchstarted; // 記憶 !
#sw = 1; searchup "{";
if( ! result ){ message "{ - not found !"; endmacro; }
}
escape;
#menu1 = 00;
while( #menu1 != 01 ){
menu "{ - this kakko ? - (&Y) Yes", "(&U) Up", "(&D) Down";
#menu1 = result;
if( #menu1 <= 00 ){
endmacro;
} else if( #menu1 == 01 ){
} else if( #menu1 == 02 ){
#sw = 1; findup;
if( ! result ){ message "{ - not found ! - up"; endmacro; }
} else if( #menu1 == 03 ){
#sw = 0; finddown;
if( ! result ){ message "{ - not found ! - down"; endmacro; }
}
}
escape; // ボケ防止 !
return;
// C, C++ or macro, text - #type - 0: C, 1: macro
pp_cc_or_mac:
#type = 00 < ( strstr(basename+"\\",".mac\\") + strstr(basename+"\\",".txt\\") );
if( basename == "" || strstr(basename,".") == -1 ){ #type = 0; } // 作者の都合 !
return;
pp_set1:
#selectfound = getininum("hidemaru.ini","Env","SelectFound");
if( ! #selectfound ){
writeininum "hidemaru.ini", "Env","SelectFound", 1;
envchanged;
}
return;
pp_reset1:
// setsearch $searchbuffer, #searchoption;
setsearch "{|}", 0x10; // ,regular; // 個人的な趣味 !
if( ! #selectfound ){
writeininum "hidemaru.ini", "Env", "SelectFound", 0;
envchanged;
}
return;
endmacroall;
// end of macro.
|
|