|
//*1 *** Macro for 「秀丸エディタ」***
//*1 【マクロ名】 KZ_SSP2.mac - Ver. 02.00 β - 1998/04/27
//*1 【作者】 K.Nakatake / 番頭++ / E-mail:xxxxxxxx@niftyserve.or.jp
//*1 【機能】
//*1 ・空白文字の整理/削除を行う処理。
//*1 ・CR/LF の整理/削除を行う処理も付いています。
//*1 ・「ファイル全体」、または「範囲指定」されたブロックが処理の対象です。
//*1 ・一部の処理では [tab] も処理の対象としています。 // tab
//*1 ・[F] : 「ファイル全体」の処理しかできません。
//*1 ・[S] : 「範囲指定」の処理しかできません。論理行単位で選択してください。
//*1 ・マクロの不備を考慮して Undo, Redo をメニューに追加しました。Debug 用です !
//*1 【注意】
//*1 ・「ファイル全体」の処理の後、最後の行は改行だけの行にします。
//*1 個人の趣味、こだわり !
//*1 ・「空行 CR/LF 削除」の処理で、多くの改行だけの行があると整形されません。
//
if( version < 216 ){ // inselect
message "すみません、version のチェックを行なっています !"; about;
endmacroall;
}
// endmacroall;
// disableinvert;
// disabledraw;
$searchbuffer = searchbuffer; #searchoption = searchoption;
#sw_sel = selecting; // 範囲選択
if( #sw_sel ){
#seltopx = seltopx; #seltopy = seltopy;
#selendx = selendx; #selendy = selendy;
} else {
#x_start = x; #y_start = y;
}
#code_ff = 0xFF; // end of block.
pp_entry1:
$kz_title1 = "KZ_SSP2 - 【 空白/整形処理 】";
call pk_get_today1;
title basename2 + " : " + $kz_title1 + " - " + $$return + " " + time;
call pp_init1; // title 0;
$tbl_menu1[00] = "【 空白/整形処理 】 02.00 β ";
$tbl_menu1[01] = "(&1) 行末 空白削除 [tab] ";
$tbl_menu1[02] = "(&2) 両端 空白削除 [tab] ";
$tbl_menu1[03] = "(&3) 全角 空白削除 ";
$tbl_menu1[04] = "(&4) 全角/半角 空白削除 ";
$tbl_menu1[05] = "(&5) 全角 --> 半角 2 空白 ";
$tbl_menu1[06] = "(&6) 全角/半角 --> 半角 1 空白 ";
$tbl_menu1[07] = "(&7) 行末 CR/LF 削除 - [S] "; // 範囲指定
$tbl_menu1[08] = "(&8) 空行 CR/LF 削除 - [F] "; // ファイル全体
$tbl_menu1[09] = "(&R) Redo - (更新) を Redo する";
$tbl_menu1[10] = "(&U) Undo - (更新) を Undo する";
#tbl_menu1 = 10 + 1;
if( #menu1 <= 00 ){
mousemenuarray $tbl_menu1, #tbl_menu1;
#menu1 = result - 1;
#sw_shift = iskeydown(0x10); // [Shift]
}
if( #menu1 <= 00 ){ // [Esc]
escape; endmacro;
} else if( #menu1 >= 01 && #menu1 <= 08 ){
$kz_title2 = basename2 + " : KZ_SSP2 - " + midstr($tbl_menu1[#menu1],5,99);
title $kz_title2;
call pp_check1;
title $kz_title2;
call pp_proc1;
} else if( #menu1 == 09 ){
call pp_test_redo1;
endmacroall;
} else if( #menu1 == 10 ){
call pp_test_undo1;
endmacroall;
} else {
}
pp_exit1:
// gofiletop;
enableinvert;
enabledraw;
beep;
title 0;
setsearch $searchbuffer, #searchoption;
escape;
endmacro;
// process 1
pp_proc1:
if( #menu1 == 08 ){
$tbl_menu2[00] = $tbl_menu1[#menu1];
$tbl_menu2[01] = "(&0) すべて削除";
$tbl_menu2[02] = "(&1) 1 行 残す";
$tbl_menu2[03] = "(&2) 2 行 残す";
#tbl_menu2 = 03 + 1;
mousemenuarray $tbl_menu2, #tbl_menu2;
#menu2 = result - 1;
if( #menu2 <= 00 ){ // [Esc]
escape; endmacro;
} else if( #menu2 == 01 ){
$tbl_s1f[08] = "^\\n";
$tbl_s1t[08] = "";
} else {
$tbl_s1f[08] = "^\\n[\\n]+";
$tbl_s1t[08] = leftstr("\n\n",(#menu2-1));
}
}
$str_s1f = $tbl_s1f[#menu1]; $str_s1t = $tbl_s1t[#menu1];
if( ! #sw_sel ){
escape; gofiletop;
disableinvert; disabledraw;
if( #menu1 == 08 && #menu2 >= 02 ){ // spec. or bug ???
call pp_proc1_08;
//R replaceallfast $str_s1f, $str_s1t, regular;
} else {
replaceallfast $str_s1f, $str_s1t, regular;
}
gofileend;
if( x != 0 ){
insertreturn; // 最後は改行だけの行にします!
}
gofiletop;
//R moveto #x_start, #y_start;
} else {
disableinvert; disabledraw;
if( #menu1 == 08 && #menu2 >= 02 ){ // spec. or bug ???
call pp_proc1_08s;
} else {
replaceallfast $str_s1f, $str_s1t, regular, inselect;
}
moveto #seltopx, #seltopy;
}
return;
// "(&7) 行末 CR/LF 削除 - [S] "; // 範囲指定
pp_proc1_07s: // test 1
#seltopx = seltopx; #seltopy = seltopy;
#selendx = selendx; #selendy = selendy;
escape;
moveto #selendx, #selendy;
$wk1 = "[0-9A-Za-z.]$*\\n[0-9A-Za-z]"; // words
searchup $wk1, regular;
while( result && y >= #seltopy ){
##i = ##i + 1;
escape; right; delete; insert "\x20";
findup;
}
escape;
moveto #seltopx, #seltopy;
beginsel; moveto #selendx, #selendy - ##i;
endmacro;
return ##i;
// "(&8) 空行 CR/LF 削除 ";
pp_proc1_08:
gofileend;
replaceup $str_s1f, $str_s1t, regular;
while( result ){
replaceup $str_s1f, $str_s1t, regular;
}
return;
pp_proc1_08s:
escape;
moveto #selendx, #selendy;
replaceup $str_s1f, $str_s1t, regular, inselect;
while( result && y >= #seltopy ){
##i = ##i + 1;
replaceup $str_s1f, $str_s1t, regular, inselect;
}
if( y < #seltopy && ##i ){ undo; } // 必要かな !
escape;
return;
// check 1
pp_check1:
if( false && basename != "" && updated ){
$wk1 = "ファイルは (更新) されています !";
question $wk1 + "\n\nファイルを保存しますか ?";
if( result ){
saveas filename2;
if( ! result ){
$wk1 = "保存に失敗しました !";
message $wk1 + "\n\nマクロを中止します !";
endmacro;
}
}
}
if( strstr($tbl_menu1[#menu1],"[F]") != -1 ){
if( #sw_sel ){
$wk1 = "範囲指定の処理は出来ません。";
question $wk1 + "\n\nファイル全体の処理を継続しますか ?";
if( ! result ){ endmacro; }
escape; #sw_sel = 0;
#x_start = #seltopx; #y_start = #seltopy;
moveto #seltopx, #seltopy;
} else {
question "ファイル全体を処理しますか ?";
if( ! result ){
endmacro;
call pp_check1_q1;
}
}
} else if( strstr($tbl_menu1[#menu1],"[S]") != -1 ){
if( ! #sw_sel ){
call pp_check1_q1;
}
} else {
if( ! #sw_sel ){
question "ファイル全体を処理しますか ?";
if( ! result ){
//R endmacro; // シツコイ !
call pp_check1_q1;
}
}
}
if( ( #menu1 == 07 || #menu1 == 08 ) && #sw_sel && ( #seltopx + #selendx ) != 0 ){
$wk1 = "論理行単位で選択してください !";
message $wk1 + "\n\nマクロを中止します !";
endmacro; escape;
}
if( false && #sw_shift ){ // [Shift]
if( strstr("/1/2/4/6/",str(#menu1)) != -1 ){
$wk1 = $tbl_s1f[#menu1];
$wk2 = input("正規表現の文字列を変更してください !",$wk1);
if( ( ! result ) || $wk2 == "" ){
$wk1 = "変更は行なわれませんでした。";
message $wk1 + "\n\nマクロを中止します !";
endmacro;
}
$tbl_s1f[#menu1] = $wk2;
}
}
return;
// check 1
pp_check1_q1:
question "範囲指定を行ないますか ?";
if( ! result ){ endmacro; }
$wk1 = $kz_title2;
$wk1 = $wk1 + " 範囲選択をして、[Enter] を押してください !";
$wk1 = $wk1 + " [Esc] で中止します !";
inputpos $wk1;
if( iskeydown( 0x1B ) ){ // [Esc]
escape; endmacro;
}
#sw_sel = selecting; // 範囲選択
if( ! #sw_sel ){
$wk1 = "範囲選択は行なわれませんでした。";
message $wk1 + "\n\nマクロを中止します !";
endmacro;
}
#seltopx = seltopx; #seltopy = seltopy;
#selendx = selendx; #selendy = selendy;
return;
// init.
pp_init1:
$str_ltop = "^[\x20\x81\x40\t]+"; // line top // tab
$str_lend = "[\x20\x81\x40\t]+$"; // line end // tab
$str_lor = $str_ltop + "|" + $str_lend; // line top or end // tab
$tbl_s1f[00] = "";
$tbl_s1f[01] = $str_lend; // tab
$tbl_s1f[02] = $str_lor; // tab
$tbl_s1f[03] = "\x81\x40";
$tbl_s1f[04] = "[\x20\x81\x40]+";
$tbl_s1f[05] = "\x81\x40";
$tbl_s1f[06] = "[\x20\x81\x40]+";
$tbl_s1f[07] = "\\n";
$tbl_s1f[08] = "^\\n[\\n]+";
$tbl_s1t[00] = "";
$tbl_s1t[01] = "";
$tbl_s1t[02] = "";
$tbl_s1t[03] = "";
$tbl_s1t[04] = "";
$tbl_s1t[05] = "\x20\x20";
$tbl_s1t[06] = "\x20";
$tbl_s1t[07] = "";
$tbl_s1t[08] = "";
return;
// test redo - reset updated file
pp_test_redo1:
while( updated ){
question "Redo ? - " + str(##i);
if( ! result ){ endmacroall; }
redo;
if( ! result ){
message "redo failed !"; endmacroall;
call pp_test_undo1;
}
##i = ##i + 1;
}
return;
// test undo - reset updated file
pp_test_undo1:
while( updated ){
undo;
if( ! result ){
message "undo failed !"; endmacroall;
call pp_test_redo1;
}
}
return;
//*6MICRO pk_get_today1
//*6_Desc. yyyy/mm/dd 形式で今日の日付を得る Ver. 02.00 β
//*6 call pk_get_today1;
//*6 $$return : "yyyy/mm/dd"
//*6 global area : N/A
endmacroall;
pk_get_today1:
##i = val(leftstr(date,2));
$$today1 = midstr("19,20",(!(##i<80)-1)*3,2) + leftstr(date,8);
return $$today1;
//*6MICRO_END
endmacroall;
// end of macro.
|
|