home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1998 January (DVD)
/
VPR980100.ISO
/
OLS
/
WIN32
/
KAKIMAC
/
KAKIMACG.LZH
/
K_GREPLS.MAC
< prev
next >
Wrap
Text File
|
1995-12-21
|
11KB
|
328 lines
// k_grepLS.mac look-search
//【マクロ名】k_lookSR.mac by 水銀水(Suigwinsui)/小田 明夫 (HGD01603)
// 日本語文書作成支援「書きマクロ」αシリーズ 第G集 Ver.1
// 平成7年07月03日(月曜日) 午後04時37分58秒
//【主な用途】カレント文書全体を検索(自称・全文検索機能(^^;)。超快感・全文検索の悦楽。快適全文検索(kSearch2)
//【使用対象】秀丸 for Windows 上で日本語文章を快適に処理したい全てのみなさま。
//【機能概略】(1)検索語の総数、検出位置のうち最上・最下の位置などへも簡単に移動し、快適な検索環境を実現します。
// (2)多彩な自動単語取得、設定機能など。
call startSetting;
call selectingCase;
ssKsearch:
##s=keypressed;
call setTitle;
title $titleS;
if(##s==0x1B)break;
while(1){
##s=keypressed;
if(##s==0x1B){//[Esc]
break;
}else if(##s==13){//ret
break;
}else if(##s==49||##s==97){//[1]
if($sT0==""){beep;goto ssKsearch;}
call kSearch3 $sT0;
goto ssKsearch;
}else if(##s==50||##s==98){//[2]
if($sT1==""){beep;goto ssKsearch;}
$$ssT=$sT1;
$sTT=$sT1;$sT1=$sT0;$sT0=$sTT;//順番の入れ替え
call kSearch3 $$ssT;
goto ssKsearch;
}else if(##s==51||##s==99){//[3]"
if($sT2==""){beep;goto ssKsearch;}
$$ssT=$sT2;
$sTT=$sT2;$sT2=$sT1;$sT1=$sT0;$sT0=$sTT;//順番の入れ替え
call kSearch3 $$ssT;
goto ssKsearch;
}else if(##s==82){//[r]"正規表現の拡張を交互に切り替え
if(!#regularYN)#regularYN=1;
else #regularYN=0;
goto ssKsearch;
}else if(##s==71){//[g]画面上の文字列を範囲指定により取得したうえでkSearch3による全文検索)
escape;
enableinvert;
inputpos($hmH+"●取得したい文字列の始点へ移動後リターン [Esc]中止");
if(!result){escape;goto ssKsearch;}
beginsel;
inputpos(" "+$hmH+"●取得したい文字列の終点へ移動後リターン [Esc]中止");
if(!result)escape;
else{
$$inputSS=gettext(seltopx,seltopy,selendx,selendy);
moveto seltopx,seltopy;// カーソルを範囲指定部分の先頭に持ってくると正しく算出される
// call ConvertMetaCharaToReguSearch $$sTarget;//メタキャラクタを含む文字列をマクロで正規表現検索可能な文字列へ変換したい場合
// $$sTarget=$$return;
if(#regularYN){#regularYN=0;#regularYNChanged=1;}
call checkCharOrder0 $$inputSS;
call kSearch3 $$inputSS;
}
if(#regularYNChanged)#regularYN=1;
goto ssKsearch;
}else if(##s==70){//[f](kSearch3による全文検索)
if(!imestate)imeswitch;
if(!#regularYN)$$inputSSTitle="検索文字列入力 (通常の検索)";
else $$inputSSTitle="検索文字列入力 (正規表現による検索中)";
$$inputSS=input($hmH+$$inputSSTitle,$$si);
if(!result)goto ssKsearch;
if(imestate)imeswitch;
if($$inputSS=="")goto ssKsearch;
call checkCharOrder0 $$inputSS;
call kSearch3 $$inputSS;
goto ssKsearch;
}else if(##s==112||##s==72){//F-1 hH help
call k_help0 17;
}else if(##s==48||##s==96){//[0]...[1]-[9]の記憶検索語の順番を[1]-[3]に戻す
#regularYN=#regularYN_org;
break;
}else if(##s!=0)beep;
if(imestate)imeswitch;
}
goto WriteAndEnd;
setTitle:
if(!#regularYN)$titleS=$hmH+"●k_GREP 検索 [1]"+$sT0+" [2]"+$sT1+" [3]"+$sT2+"...[f/g/r/F1/Esc/Ret]操";
else $titleS="◎k_GREP 正規 [1]"+$sT0+" [2]"+$sT1+" [3]"+$sT2+"...[f/g/r/F1/Esc/Ret]操";
return;
////////kSearch サブルーチン開始/////////////////////////////////////
kSearch3://keypressed使用による、検索文字列のカーソル位置による数を動的にカウント表示する
// - Ver Up 内容 -
// ・正規表現に対応。(正規表現検索は、グローバル変数"#regularYN"によって指定。0:通常検索、1:正規表現)
// ・searchup/downをfindup/downに変更
// ・検出数をreturnする。
$$sTarget=$$1;if($$sTarget=="")return 0;
$$sTargetOrg=$$sTarget;
kSearchTOP:##x1=x;##y1=y;
$$sBuffer=searchbuffer;##sFlug=searchoption;
##GDN=0;##GUN=0;##GAN=0;
##Inner=0;
// 検索文字列設定(正規表現による検索のためのリフォームを含む)
disabledraw;
if(!#regularYN){
setsearch $$sTarget,0;//無指定の純粋検索
}else{
// call ConvMetaToReguSearch $$sTarget;//取得文字列をマクロの正規表現検索ができる形にコンバートする
// $$sTarget=$$return;
setsearch $$sTarget,16;
}
// 開始位置の文字列チェック
if(!#regularYN){
##sLen=strlen($$sTarget);
$$conpC=gettext(##x1,##y1,##x1+##sLen,##y1);//一応、折り返しには対応(^^)
if($$conpC==$$sTarget)##CheckOnTarget=1;
else ##CheckOnTarget=0;
}else{
right;
findup;
if(result){
if(##x1==x && ##y1==y)##CheckOnTarget=1;
else ##CheckOnTarget=0;
}else ##CheckOnTarget=0;
moveto ##x1,##y1;
}
//元の位置から下方検索
while(1){
finddown;
if(result)##GDN=##GDN+1;
else break;
}
if(##GDN>0){##endX=seltopx;##endY=seltopy;}
//元の位置から上方検索
moveto ##x1,##y1;
while(1){
findup;
if(result)##GUN=##GUN+1;
else break;
}
if(##GUN>0){##topX=seltopx;##topY=seltopy;}
moveto ##x1,##y1;
// ヒット数
##GDNd=##GDN;
##GUNd=##GUN;
##GAN=##GDN+##GUN;
if(##CheckOnTarget){##Inner=1;##GAN=##GAN+1;}
//結果初期値
##GDNOrg=##GDNd;
##GUNdOrg=##GUNd;
##GANOrg=##GAN;
##InnerOrg=##Inner;
##CheckOnTargetOrg=##CheckOnTarget;
// 先頭と末尾を決定
if( ##GDN==0 && ##GUN==0){//無し
##topX=##x1;##topY=##y1;
##endX=##x1;##endY=##y1;
beep;
}else if( ##GDN>0 && ##GUN==0){//上になし
if(!##CheckOnTarget){
finddown;
##topX=seltopx;##topY=seltopy;
}else{##topX=##x1;##topY=##y1;}
}else if( ##GDN==0 && ##GUN>0){//下になし
if(!##CheckOnTarget){
findup;
##endX=seltopx;##endY=seltopy;
}else{##endX=##x1;##endY=##y1;}
}else if( ##GDN>0 && ##GUN>0){
//決定済み
}
moveto ##x1,##y1;
enabledraw;
#reguDisp=0;
if(!#reguDisp){//reguDisp=0:初期値(普通のみえ方)、=1正規表現に変形した文字列がみえる
if(!#regularYN)$$kST="○通常『"+$$sTargetOrg+"』";
else $$kST="◎正規『"+$$sTargetOrg+"』";
}else{
if(!#regularYN)$$kST="○通常『"+$$sTarget+"』";
else $$kST="◎正規『"+$$sTarget+"』";
}
$$tTL="[t/e/o/F1/Bs/Esc/Ret]操";
title $$kST+str(##GAN)+"個 [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
while(1){//kSearchW:
##k=keypressed;
if(##k==0x1B){//Esc
escape;
setsearch $$sBuffer,##sFlug;
break;
}else if(##k==38||##k==33||##k==0x10){//↑PgUp,Shift
if(##GAN==0 || ##GUNd==0){beep;continue;}
findup;##Idouhoukou=1;
if(result){if(##Idouhoukou){
if(##Inner){##GUNd=##GUNd-1;##GDNd=##GDNd+1;}
else{##Inner=1;if(##GDNd==0){##GUNd=##GUNd-1;##GDNd=0;}else{##GUNd=##GUNd-1;##GDNd=##GDNd;}}
}else{
if(##Inner){##GUNd=##GUNd+1;##GDNd=##GDNd-1;}
else{##Inner=1;if(##GUNd==0){##GUNd=0;##GDNd=##GDNd-1;}else{##GUNd=##GUNd;##GDNd=##GDNd-1;}}}
}else{beep;right;findup;}
title $$kST+str(##GAN)+"個 [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
}else if(##k==40||##k==34||##k==0x20){//↓PgDn,SpaceKey
if(##GAN==0 || ##GDNd==0){beep;continue;}
finddown;##Idouhoukou=0;
if(result){if(##Idouhoukou){
if(##Inner){##GUNd=##GUNd-1;##GDNd=##GDNd+1;}
else{##Inner=1;if(##GDNd==0){##GUNd=##GUNd-1;##GDNd=0;}else{##GUNd=##GUNd-1;##GDNd=##GDNd;}}
}else{
if(##Inner){##GUNd=##GUNd+1;##GDNd=##GDNd-1;}
else{##Inner=1;if(##GUNd==0){##GUNd=0;##GDNd=##GDNd-1;}else{##GUNd=##GUNd;##GDNd=##GDNd-1;}}}
}else{beep;right;findup;}
title $$kST+str(##GAN)+"個 [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
}else if(##k==84||##k==36){//t,T,Home
if(!##GAN){beep;continue;}
escape;
moveto ##topX,##topY;
right;
findup;
##Idouhoukou=1;
##Inner=1;//##Inner更新
##GDNd=##GAN-1;
##GUNd=0;
title $$kST+str(##GAN)+"個 [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
}else if(##k==69||##k==35){//e,E,End
if(!##GAN){beep;continue;}
moveto ##endX,##endY;
right;
findup;
##Idouhoukou=0;
##Inner=1;//##Inner更新
##GUNd=##GAN-1;
##GDNd=0;
title $$kST+str(##GAN)+"個 [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
}else if(##k==112||##k==72){//F-1 hH help
call k_help0 18;
title $$kST+str(##GAN)+"個 [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
}else if(##k==79){//o この秀丸上で、元の位置へ移動
if(!##GAN){beep;continue;}
escape;
moveto ##x1,##y1;
##GDNd=##GDNOrg;
##GUNd=##GUNdOrg;
##GAN=##GANOrg;
##Inner=##InnerOrg;
##CheckOnTarget=##CheckOnTargetOrg;
title $$kST+str(##GAN)+"個 [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
}else if(##k==13){//return
setsearch $$sBuffer,##sFlug;//一応、kSearchサブルーチン突入前の状態に戻す
goto WriteAndEnd;
}else if(##k==8){//BackSpace
escape;
setsearch $$sBuffer,##sFlug;
moveto ##x1,##y1;
break;
title $$kST+str(##GAN)+"個 [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
}else if(##k!=0)beep;
if(imestate)imeswitch;
}
return ##GAN;//一応、終了時には、検出数をreturnする
insReturn:
if(overwrite){overwriteswitch;insertreturn;overwriteswitch;}else{insertreturn;}
return;
////////- kSearch サブルーチン終了 -////////////////////////////////////
selectingCase://k_lookの起動オプション
$sT0=$sT0g;$sT1=$sT1g;$sT2=$sT2g;
call setTitle;
return;
checkCharOrder0://3つある候補と$sT0が同一かどうかのチェック
if($$1==$sT0){// same as 1
// 順番の変更をしない
}else if($$1==$sT1){// same as 2
$$sTT=$sT0;$sT0=$$1;$sT1=$$sTT;//$sT2はそのまま
}else if($$1==$sT2){// same as 3
$sT2=$sT1;$sT1=$sT0;$sT0=$$1;
}else if($$1!=""){////新しい検索語
$sT2=$sT1;$sT1=$sT0;$sT0=$$1;
}else if($$1==""){// なにもしない
beep;
}
return;
k_help0://外部分離ヘルプ起動
$f0h=hidemarudir+"\\kakimac\\k_grep00.kdf";
writeininum $f0h,"IT0","msg",##1;
execmacro "k_grep3m.mac";
return;
WriteAllIniSearch://INIファイル書き込み
writeininum $f0,$SS,"regularYN",#regularYN;
writeinistr $f0,$SS,"sTarget0",$sT0;
writeinistr $f0,$SS,"sTarget1",$sT1;
writeinistr $f0,$SS,"sTarget2",$sT2;
return;
startSetting:
$sBuffer=searchbuffer;
#sFlug=searchoption;
$f0=hidemarudir+"\\kakimac\\k_grep00.kdf";
$SS="IT0";
disablebreak;
#SF=getininum("hidemaru.ini","Env","SelectFound");
if(!#SF){writeininum "hidemaru.ini","Env","SelectFound",1;envchanged;}
#regularYN=getininum($f0,"LOOK00","regularYN");
$sT0g=getinistr($f0,$SS,"sTarget0");
$sT1g=getinistr($f0,$SS,"sTarget1");
$sT2g=getinistr($f0,$SS,"sTarget2");
$sT0=$sT0g;$sT1=$sT1g;$sT2=$sT2g;
if(imestate){imeswitch;#imeYNsw=1;}
$f0=hidemarudir+"\\kakimac\\k_grepLS.kdf";
return;
WriteAndEnd:
call WriteAllIniSearch;
goto ending;
ending:
escape;
if(hidemaruhandle(0)==#hwndOrgHM)showwindow #wsINI;
if(#imeYNsw){if(!imestate)imeswitch;}
if(#endSetBuffer){
if(#regularYN)#sFlug=16;
$sBuffer=$sT0;
}
setsearch $sBuffer,#sFlug;
if(!#SF){writeininum "hidemaru.ini","Env","SelectFound",0;envchanged;}
endmacro;