|
//*1 *** Macro for 「秀丸エディタ」 ***
//*1 【マクロ名】 KZ_ColorPen2.mac - Ver. 03.04 - 1999/11/23
//*1 (C) Copyright 番頭++ (Bantou++). 1998 - 1999. All Rights Reserved.
//*1 【作者】 K.Nakatake / 番頭++ / E-mail:xxxxxxxx@nifty.ne.jp
//*1 ・このマクロは、シェアウェアです。<== あげます、あげます、あげます、
//*1 【機能】
//*1 ・色鉛筆 2 for 「秀丸エディタ」 - 即時の強調表示
//*1 カーソルがある文字列 (単語) に「特に強調 2」で (即座に) 色をつけます。
//*1 範囲選択して、このマクロを実行することもできます。
//*1 範囲選択しない場合には、
//*1 検索条件に「特に強調 2」で (即座に) 色をつけることもできます。
//*1 テスト的に正規表現で検索して、仮の .hilight の候補を作成 (支援) でき
ます。
//*1 検索の正規表現には「単語」が無いので、
//*1 .hilight の「単語」フラグは使用しません。
//*1 - 検索を行ったあと、色をつけるという方法です。
//*1 カーソル位置が、改行、スペース、タブまたは、 . / < > のときには、
//*1 (色が) すべてリセットされます。
//*1 同じ文字列 (検索文字列) を指定すると、その文字列は (色が) リセットさ
れます。
//*1 既存の .hilight ファイル "xxx.hilight" は参照だけで、更新は行いません。
//*1 仮の "temp1.hilight" または "temp1_xxx.hilight" を作成して、
//*1 その文字列を「特に強調 2」にします。
//*1 "temp1.hilight" 、 "temp1_xxx.hilight" は一つだけですから、
//*1 複数の .hilight には対応していません。
//*1 手作業で「強調表示一覧」を変更すると "temp1.hilight" となります。要
注意!!!
//*1 "temp1.hilight" 、 "temp1_xxx.hilight" は、
//*1 「秀丸エディタ」のディレクトリに作成されます。
//*1 ファイルタイプ別の設定で「特に強調 2」に好きな色を設定しておいて下さ
い。
//*1 このマクロの作者は、「特に強調 2」 - 明るい赤、下線、が好きです。
//*1 このマクロは、[その他] - [動作環境] - [ユーザーインタフェース]
//*1 - [検索での表示] - [範囲選択] を指定しないと正常には動きません。
//*1 loadhilight, hilighttitle, colorcode マクロの練習でもあります。
//*1 ・
//*1 【注意】
//*1 ・「秀丸エディタ」の Ver 3.00 以上で使用して下さい。
//*1 ・
//
if( version < 300 ){ // loadhilight etc. // Ver. 3.00 以上でしか
稼動しません !!!
message "すみません、version (3.00) のチェックを行なっています !";
about;
endmacroall;
}
if( code == eof ){ endmacro; }
config "y+"; // 強調表示
//* カーソル位置がコメント、文字リテラルでは対象としない。でもファイル名は対
象となる。
//R if( strstr("|3|20|",("|"+str(colorcode & 0x1F)+"|")) != -1 ){
//R endmacro;
//R }
//R disableerrormsg;
//R disableinvert;
//R disabledraw;
$f_temp1 = "temp1.hilight";
$wk3 = hilighttitle;
if( $wk3 != "" && leftstr($wk3,5) != "temp1" ){
$f_temp1 = "temp1_" + $wk3;
} else if( leftstr($wk3,5) == "temp1" ){
$f_temp1 = hilighttitle;
}
$d_temp1 = hidemarudir + "\\" + $f_temp1; // hidemarudir に作成される。
$file_name1 = filename2;
#sw_sel = selecting; #code = code;
#x_start = x; #y_start = y;
call pp_find_select1;
openfile "/h " + $d_temp1;
if( ! result ){ message "openfile failed !"; endmacro; }
down;
searchup "^//\\*2 .*\\.hilight$", regular;
if( result && y == 0 ){
escape; right 5; beginsel; golineend2;
$wk2 = gettext(seltopx,seltopy,selendx,selendy); escape;
} else {
escape; $wk2 = "";
}
gofiletop;
if( strstr("\n\t \x0D./<>",char(#code)) != -1 && ( ! #sw_sel ) && ( ! #s
w_find ) ){
if( $wk3 != "" && leftstr($wk3,5) != "temp1" ){
call pp_close1;
} else if( $wk2 != "" ){
call pp_close1;
if( existfile(hidemarudir + "\\" + $wk2 ) ){
loadhilight $wk2, 0;
}
} else {
selectall; delete;
insert "//*\n";
//R save;
saveas $d_temp1; // bug ??? - OK β20
if( ! result ){ message "save/saveas failed !"; endmacro; }
call pp_close1;
loadhilight $f_temp1, 0;
}
call pp_reset1;
endmacro;
}
if( $wk3 != "" && leftstr($wk3,5) != "temp1" ){
selectall; delete;
if( leftstr($wk3,5) != "temp1" ){
insert "//*2 " + $wk3 + "\n";
insertfile hidemarudir + "\\"+ $wk3; // 既存の .hilight ファ
イル
} else {
insert "//*\n";
}
}
if( ! #sw_find ){
#k = 0;
//R call pp_remove1 "67," + $wk1;
//R call pp_remove1 "99," + $wk1;
call pp_remove2 "," + $wk1;
} else {
#k = 0;
//* 理想は、同じ文字列は消すべきなのですが、処理がしんどいです !!!
//R call pp_remove1 $wk4 + "," + $wk1;
call pp_remove2 "," + $wk1;
}
if( #k == 0 ){
gofiletop;
down;
insert $wk4 + "," + $wk1 + "\n";
}
// save;
saveas $d_temp1; // bug ??? - OK β20
if( ! result ){ message "save/saveas failed !"; endmacro; }
call pp_close1;
loadhilight $f_temp1, 0;
call pp_reset1;
endmacro;
pp_find_select1:
$wk4 = "";
if( strstr("\n\t \x0D./<>",char(#code)) == -1 && ( ! #sw_sel ) ){
// if( ! #sw_sel ){
selectword;
$wk1 = gettext(seltopx,seltopy,selendx,selendy); escape;
if( $wk1 != "" ){
// if( strstr("\n\t \x0D./<>",char(#code)) == -1 ){
selectword;
// }
$tbl_m1[00] = "(&S) Select - この文字列/単語を選択";
$tbl_m1[01] = "(&F) Find - 検索条件を取得";
$tbl_m1[02] = "(&L) Load - " + $f_temp1;
$tbl_m1[03] = "(&C) CList - 強調表示の一覧";
#tbl_m1 = 03 + 1;
menuarray $tbl_m1, #tbl_m1;
#menu1 = result;
if( iskeydown( 0x1B ) ){ // [Esc]
escape; endmacro;
}
if( #menu1 == 01 ){
if( selecting ){
#sw_sel = selecting;
} else {
endmacro;
}
} else if( #menu1 == 02 ){
escape;
setsearch $wk1, searchoption; $wk1 = "";
// left; // 一つしかない時には処理を行わない !!!
find;
#f = searchoption;
if( selecting ){
$wk2 = "";
#j = 0x43;
if( searchoption & 0x01 ){
#j = #j | 0x20; // 単語
}
if( searchoption & 0x02 ){
#j = #j & ( 0xFF ^ 0x08 ); // 大文字/小文字を区別する
} else {
#j = #j | 0x08; // 大文字/小文字を区別しない
}
if( searchoption & 0x10 ){
#j = #j | 0x10 ; // 正規表現
//T #j = #j | 0x10 | 0x20; // 正規表現、単語
#j = #j & ( 0xFF ^ 0x08 ); // 大文字/小文字を区別する
}
$wk4 = str(#j);
$wk1 = searchbuffer;
#sw_find = 1;
//D message $wk1 + "\n" + $wk4; endmacro;
} else {
gosearchstarted;
endmacro;
}
escape;
} else if( #menu1 == 03 ){
escape;
if( existfile($d_temp1) ){
loadhilight $f_temp1, 0;
}
endmacro;
} else if( #menu1 == 04 ){
escape;
clist;
endmacro;
} else {
}
}
}
if( #sw_sel ){
//R if( ! #sw_sel ){ selectword; }
$wk1 = gettext(seltopx,seltopy,selendx,selendy); escape;
selectword;
$wk4 = gettext(seltopx,seltopy,selendx,selendy); escape;
if( $wk1 == $wk4 ){
$wk4 = "99"; // selectword - 必ずしも「単語」では無い !!!
} else {
$wk4 = "67";
}
}
return;
//*3 searchoption のフラグ
//*3 0x01 単語
//*3 0x02 大文字/小文字の区別をする
//*3 0x10 正規表現
//*3 .hilight ファイルのフラグ (番頭++ 流)
//*3 0x05 0000 0101 行の強調 1 のベース
//*3 0x45 0000 0101 行の強調 2
//*3 0x01 0000 0001 強調 1
//*3 0x41 0100 0001 強調 2
//*3 0x81 1000 0001 強調 3
//*3 0xC1 1100 0001 強調 4
//*3 0x03 0000 0011 特に強調 1
//*3 0x43 0100 0011 特に強調 2 のベース <== *3
//*3 0x08 0000 1000 大文字/小文字を区別しない
//*3 0x10 0001 0000 正規表現
//*3 0x20 0010 0000 単語
//*3 75, 4B 0100 1011
//*3 67, 43 0100 0011
//*3 107, 6B 0110 1011
//*3 99, 63 0110 0011
//*3 83, 53 0101 0011
//*3 115, 73 0111 0011
pp_remove1:
gofiletop;
searchdown $$1;
while( result ){
#x = x; right;
if( code == 0x0D && #x == 0 ){
deleteline; left;
#k = #k + 1;
}
finddown;
}
return;
pp_remove2:
gofiletop;
searchdown $$1;
while( result ){
##x = x; right;
if( code == 0x0D && ( ##x == 2 || ##x == 3 )){
escape; golinetop2;
selectword;
$$wk1 = gettext(seltopx,seltopy,selendx,selendy); escape;
##i = val($$wk1); $$wk2 = str(##i);
if( $$wk1 == $$wk2 && ( ##i & ( 0xFF ^ 0x38 ) ) == 0x43 ){
// deleteline; left;
if( $wk4 == $$wk2 ){
insert "//*2 ";
} else {
insert "//*1 ";
}
golineend2;
#k = #k + 1;
} else {
golineend2;
}
}
finddown;
}
return;
pp_close1:
setactivehidemaru hidemaruhandle(findhidemaru($file_name1));
//R redraw; // β 13 Bug ???
//R disableinvert;
//R disabledraw;
closehidemaru hidemaruhandle(findhidemaru($d_temp1));
return;
pp_reset1:
if( ! #sw_find ){
setsearch $wk1, 0x02;
//R setsearch "", 0x00;
} else {
setsearch $wk1, #f;
}
//R enableerrormsg;
// if( hilighttitle == "" ){
// message "bug 01 !";
// }
return;
pp_fel_find1:
$searchbuffer = searchbuffer; #searchoption = searchoption;
#selectfound = getininum("hidemaru.ini","Env","SelectFound");
if( ! #selectfound ){
writeininum "hidemaru.ini", "Env","SelectFound", 1;
envchanged;
}
setsearch $searchbuffer, #searchoption;
if( ! #selectfound ){
writeininum "hidemaru.ini", "Env", "SelectFound", 0;
envchanged;
}
return;
endmacroall;
// end of macro.
|
|