home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 January (DVD) / VPR980100.ISO / OLS / WIN32 / KAKIMAC / KAKIMACE.LZH / K_SRCH.MAC next >
Text File  |  1995-06-19  |  14KB  |  401 lines

  1. //【マクロ名】k_SRCH.mac by 水銀水(Suigwinsui)/小田 明夫 (HGD01603)
  2. //            日本語文書作成支援「書きマクロ」αシリーズ 第D集 Ver.1.1
  3. //            平成7年06月19日(月曜日) 午前08時36分40秒
  4. //【主な用途】カレント文書全体を検索(自称・全文検索機能(^^;)。超快感・全文検索の悦楽。快適全文検索(kSearch2)
  5. //【使用対象】秀丸 for Windows 上で日本語文章を快適に処理したい全てのみなさま。
  6. //【機能概略】(1)検索語の総数、検出位置のうち最上・最下の位置などへも簡単に移動し、快適な検索環境を実現します。
  7. //            (2)多彩な自動単語取得、設定機能など。
  8. //【マクロ構成】
  9. //            k_SRCH Ver.1.1は全3マクロで構成
  10. //            ・メインマクロ:k_SRCH,mac このマクロを実行して下さい(マクロ登録もこのマクロだけでOK)
  11. //            ・従属マクロ:k_srchST,mac k_srchHL,mac
  12. //【改定内容】表示内容の修正。マニュアルの訂正など。基本動作動作は変更無しです<m(_._)m>
  13.  
  14. call startSetting;
  15. call selectingCase;
  16. ssKsearch:
  17. ##s=keypressed;
  18. call setTitle;
  19. title $titleS;
  20. if(##s==0x1B)break;
  21. while(1){
  22.     ##s=keypressed;
  23.     if(##s==0x1B){//[Esc]
  24.         break;
  25.     }else if(##s==13){//ret
  26.         break;
  27.     }else if(##s==49||##s==97){//[1]
  28.         if($sT0==""){beep;goto ssKsearch;}
  29.         call kSearch3 $sT0;
  30.         goto ssKsearch;
  31.     }else if(##s==50||##s==98){//[2]
  32.         if($sT1==""){beep;goto ssKsearch;}
  33.         $$ssT=$sT1;
  34.         $sTT=$sT1;$sT1=$sT0;$sT0=$sTT;//順番の入れ替え
  35.         call kSearch3 $$ssT;
  36.         goto ssKsearch;
  37.     }else if(##s==51||##s==99){//[3]"
  38.         if($sT2==""){beep;goto ssKsearch;}
  39.         $$ssT=$sT2;
  40.         $sTT=$sT2;$sT2=$sT1;$sT1=$sT0;$sT0=$sTT;//順番の入れ替え
  41.         call kSearch3 $$ssT;
  42.         goto ssKsearch;
  43.     }else if(##s==82){//[r]"正規表現の拡張を交互に切り替え
  44.         if(!#regularYN)#regularYN=1;
  45.         else #regularYN=0;
  46.         goto ssKsearch;
  47.     }else if(##s==83){//[s]設定
  48.         execmacro "k_SRCHst.mac";// run setting macro
  49.         #endSetBuffer=getininum($f0,"LOOK00","endSetBuffer");
  50.         goto ssKsearch;
  51.     }else if(##s==71){//[g]画面上の文字列を範囲指定により取得したうえでkSearch3による全文検索)
  52.         escape;
  53.         enableinvert;
  54.         inputpos($hmH+"●取得したい文字列の始点へ移動後リターン     [Esc]中止");
  55.         if(!result){escape;goto ssKsearch;}
  56.         beginsel;
  57.         inputpos("    "+$hmH+"●取得したい文字列の終点へ移動後リターン [Esc]中止");
  58.         if(!result)escape;
  59.         else{
  60.             $$inputSS=gettext(seltopx,seltopy,selendx,selendy);
  61.             moveto seltopx,seltopy;// カーソルを範囲指定部分の先頭に持ってくると正しく算出される
  62. //            call ConvertMetaCharaToReguSearch $$sTarget;//メタキャラクタを含む文字列をマクロで正規表現検索可能な文字列へ変換したい場合
  63. //            $$sTarget=$$return;
  64.             if(#regularYN){#regularYN=0;#regularYNChanged=1;}
  65.             call checkCharOrder0 $$inputSS;
  66.             call kSearch3 $$inputSS;
  67.         }
  68.         if(#regularYNChanged)#regularYN=1;
  69.         goto ssKsearch;
  70.     }else if(##s==70){//[f](kSearch3による全文検索)
  71.         if(selecting){
  72.             $$si=gettext(seltopx,seltopy,selendx,selendy);
  73.             moveto seltopx,seltopy;// カーソルを範囲指定部分の先頭に持ってくると正しく算出
  74.         }else{
  75.                     getsearch;
  76.                     $$si=searchbuffer;
  77.         }
  78. //*1 手動入力ダイアログボックスで、IMEを使用しない場合は下の1行を削除(*2と同時に削除のこと)。削除は行頭"//"挿入でも代行可能。
  79.         if(!imestate)imeswitch;
  80.         if(!#regularYN)$$inputSSTitle="検索文字列入力 (通常の検索)";
  81.         else $$inputSSTitle="検索文字列入力 (正規表現による検索中)";
  82.         $$inputSS=input($hmH+$$inputSSTitle,$$si);
  83.         if(!result)goto ssKsearch;
  84. //*2 手動入力ダイアログボックスで、IMEを使用しない場合は下の1行を削除(*1と同時に削除のこと)。削除は行頭"//"挿入でも代行可能。
  85.         if(imestate)imeswitch;
  86.         if($$inputSS=="")goto ssKsearch;
  87.         call checkCharOrder0 $$inputSS;
  88.         call kSearch3 $$inputSS;
  89.         goto ssKsearch;
  90.     }else if(##s==112||##s==72){//F-1 hH help
  91.         call k_help0 1;
  92.     }else if(##s==48||##s==96){//[0]...[1]-[9]の記憶検索語の順番を[1]-[3]に戻す
  93.         #regularYN=#regularYN_org;
  94.         break;
  95.     }else if(##s!=0)beep;
  96.     if(imestate)imeswitch;
  97. }
  98. goto WriteAndEnd;
  99.  
  100. setTitle:
  101.     if(!#regularYN)$titleS=$hmH+"●通常 [f/g/r/s/F1/Esc/Ret]操 [1]"+$sT0+" [2]"+$sT1+" [3]"+$sT2;
  102.     else $titleS="◎正規 [f/g/R/s/F1/Esc/Ret]操 [1]"+$sT0+" [2]"+$sT1+" [3]"+$sT2;
  103. //    if(!#regularYN)$titleS=$hmH+"●通常 [f/g/r/s/F1/Esc]入/取/設/説/了 [1]"+$sT0+" [2]"+$sT1+" [3]"+$sT2;//3DWin等で利用
  104. //    else $titleS="◎正規 [f/g/R/s/F1/Esc]入/取/設/説/了 [1]"+$sT0+" [2]"+$sT1+" [3]"+$sT2;
  105. return;
  106.  
  107.  
  108. ////////kSearch サブルーチン開始/////////////////////////////////////
  109. kSearch3://keypressed使用による、検索文字列のカーソル位置による数を動的にカウント表示する
  110. //   - Ver Up 内容 -
  111. // ・正規表現に対応。(正規表現検索は、グローバル変数"#regularYN"によって指定。0:通常検索、1:正規表現)
  112. // ・searchup/downをfindup/downに変更
  113. // ・検出数をreturnする。
  114. $$sTarget=$$1;if($$sTarget=="")return 0;
  115. $$sTargetOrg=$$sTarget;
  116. kSearchTOP:##x1=x;##y1=y;
  117. $$sBuffer=searchbuffer;##sFlug=searchoption;
  118. ##GDN=0;##GUN=0;##GAN=0;
  119. ##Inner=0;
  120. // 検索文字列設定(正規表現による検索のためのリフォームを含む)
  121. disabledraw;
  122. if(!#regularYN){
  123.     setsearch $$sTarget,0;//無指定の純粋検索
  124. }else{
  125. //    call ConvMetaToReguSearch $$sTarget;//取得文字列をマクロの正規表現検索ができる形にコンバートする
  126. //    $$sTarget=$$return;
  127.     setsearch $$sTarget,16;
  128. }
  129. // 開始位置の文字列チェック
  130. if(!#regularYN){
  131.     ##sLen=strlen($$sTarget);
  132.     $$conpC=gettext(##x1,##y1,##x1+##sLen,##y1);//一応、折り返しには対応(^^)
  133.     if($$conpC==$$sTarget)##CheckOnTarget=1;
  134.     else ##CheckOnTarget=0;
  135. }else{
  136.     right;
  137.     findup;
  138.     if(result){
  139.         if(##x1==x && ##y1==y)##CheckOnTarget=1;
  140.         else ##CheckOnTarget=0;
  141.     }else ##CheckOnTarget=0;
  142.     moveto ##x1,##y1;
  143. }
  144. //元の位置から下方検索
  145. while(1){
  146.     finddown;
  147.     if(result)##GDN=##GDN+1;
  148.     else break;
  149. }
  150. if(##GDN>0){##endX=seltopx;##endY=seltopy;}
  151. //元の位置から上方検索
  152. moveto ##x1,##y1;
  153. while(1){
  154.     findup;
  155.     if(result)##GUN=##GUN+1;
  156.     else break;
  157. }
  158. if(##GUN>0){##topX=seltopx;##topY=seltopy;}
  159. moveto ##x1,##y1;
  160. // ヒット数
  161. ##GDNd=##GDN;
  162. ##GUNd=##GUN;
  163. ##GAN=##GDN+##GUN;
  164. if(##CheckOnTarget){##Inner=1;##GAN=##GAN+1;}
  165. //結果初期値
  166. ##GDNOrg=##GDNd;
  167. ##GUNdOrg=##GUNd;
  168. ##GANOrg=##GAN;
  169. ##InnerOrg=##Inner;
  170. ##CheckOnTargetOrg=##CheckOnTarget;
  171. // 先頭と末尾を決定
  172. if( ##GDN==0 && ##GUN==0){//無し
  173.     ##topX=##x1;##topY=##y1;
  174.     ##endX=##x1;##endY=##y1;
  175.     beep;
  176. }else if( ##GDN>0 && ##GUN==0){//上になし
  177.     if(!##CheckOnTarget){
  178.         finddown;
  179.         ##topX=seltopx;##topY=seltopy;
  180.     }else{##topX=##x1;##topY=##y1;}
  181. }else if( ##GDN==0 && ##GUN>0){//下になし
  182.     if(!##CheckOnTarget){
  183.         findup;
  184.         ##endX=seltopx;##endY=seltopy;
  185.     }else{##endX=##x1;##endY=##y1;}
  186. }else if( ##GDN>0 && ##GUN>0){
  187.     //決定済み
  188. }
  189. moveto ##x1,##y1;
  190. enabledraw;
  191. #reguDisp=0;
  192. if(!#reguDisp){//reguDisp=0:初期値(普通のみえ方)、=1正規表現に変形した文字列がみえる
  193.     if(!#regularYN)$$kST="○通常『"+$$sTargetOrg+"』";
  194.     else $$kST="◎正規『"+$$sTargetOrg+"』";
  195. }else{
  196.     if(!#regularYN)$$kST="○通常『"+$$sTarget+"』";
  197.     else $$kST="◎正規『"+$$sTarget+"』";
  198. }
  199. $$tTL="[t/e/o/F1/Bs/Esc/Ret]操";
  200. //$$tTL="[t/e/o/F1/Bs/Esc/Ret]初/尾/元/説/元/現/止";//高解像度かつ3DWinなどでキャプション文字拡張時
  201. title $$kST+str(##GAN)+"個  [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
  202. while(1){//kSearchW:
  203.     ##k=keypressed;
  204.     if(##k==0x1B){//Esc
  205.         escape;
  206.         setsearch $$sBuffer,##sFlug;
  207.         break;
  208.     }else if(##k==38||##k==33){//↑PgUp
  209.         if(##GAN==0 || ##GUNd==0){beep;continue;}
  210.         findup;##Idouhoukou=1;
  211.         if(result){if(##Idouhoukou){
  212.                 if(##Inner){##GUNd=##GUNd-1;##GDNd=##GDNd+1;}
  213.                 else{##Inner=1;if(##GDNd==0){##GUNd=##GUNd-1;##GDNd=0;}else{##GUNd=##GUNd-1;##GDNd=##GDNd;}}
  214.             }else{
  215.                 if(##Inner){##GUNd=##GUNd+1;##GDNd=##GDNd-1;}
  216.                 else{##Inner=1;if(##GUNd==0){##GUNd=0;##GDNd=##GDNd-1;}else{##GUNd=##GUNd;##GDNd=##GDNd-1;}}}
  217.         }else{beep;right;findup;}
  218.         title $$kST+str(##GAN)+"個  [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
  219.     }else if(##k==40||##k==34){//↓PgDn
  220.         if(##GAN==0 || ##GDNd==0){beep;continue;}
  221.         finddown;##Idouhoukou=0;
  222.         if(result){if(##Idouhoukou){
  223.                 if(##Inner){##GUNd=##GUNd-1;##GDNd=##GDNd+1;}
  224.                 else{##Inner=1;if(##GDNd==0){##GUNd=##GUNd-1;##GDNd=0;}else{##GUNd=##GUNd-1;##GDNd=##GDNd;}}
  225.             }else{
  226.                 if(##Inner){##GUNd=##GUNd+1;##GDNd=##GDNd-1;}
  227.                 else{##Inner=1;if(##GUNd==0){##GUNd=0;##GDNd=##GDNd-1;}else{##GUNd=##GUNd;##GDNd=##GDNd-1;}}}
  228.         }else{beep;right;findup;}
  229.         title $$kST+str(##GAN)+"個  [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
  230.     }else if(##k==84||##k==36){//t,T,Home
  231.         if(!##GAN){beep;continue;}
  232.         escape;
  233.         moveto ##topX,##topY;
  234.         right;
  235.         findup;
  236.         ##Idouhoukou=1;
  237.         ##Inner=1;//##Inner更新
  238.         ##GDNd=##GAN-1;
  239.         ##GUNd=0;
  240.         title $$kST+str(##GAN)+"個  [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
  241.     }else if(##k==69||##k==35){//e,E,End
  242.         if(!##GAN){beep;continue;}
  243.         moveto ##endX,##endY;
  244.         right;
  245.         findup;
  246.         ##Idouhoukou=0;
  247.         ##Inner=1;//##Inner更新
  248.         ##GUNd=##GAN-1;
  249.         ##GDNd=0;
  250.         title $$kST+str(##GAN)+"個  [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
  251.     }else if(##k==112||##k==72){//F-1 hH help
  252.         call k_help0 2;// k_SRCHHL.macによる表示
  253.         title $$kST+str(##GAN)+"個  [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
  254.     }else if(##k==79){//o この秀丸上で、元の位置へ移動
  255.         if(!##GAN){beep;continue;}
  256.         escape;
  257.         moveto ##x1,##y1;
  258.         ##GDNd=##GDNOrg;
  259.         ##GUNd=##GUNdOrg;
  260.         ##GAN=##GANOrg;
  261.         ##Inner=##InnerOrg;
  262.         ##CheckOnTarget=##CheckOnTargetOrg;
  263.         title $$kST+str(##GAN)+"個  [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
  264.     }else if(##k==13){//return
  265.         setsearch $$sBuffer,##sFlug;//一応、kSearchサブルーチン突入前の状態に戻す
  266.         goto WriteAndEnd;
  267.     }else if(##k==8){//BackSpace
  268.         escape;
  269.         setsearch $$sBuffer,##sFlug;
  270.         moveto ##x1,##y1;
  271.         break;
  272.         title $$kST+str(##GAN)+"個  [↑]<"+str(##GUNd)+"> [↓]<"+str(##GDNd)+"> "+$$tTL;
  273.     }else if(##k!=0)beep;
  274.     if(imestate)imeswitch;
  275. }
  276. return ##GAN;//一応、終了時には、検出数をreturnする
  277.  
  278. insReturn:
  279. if(overwrite){overwriteswitch;insertreturn;overwriteswitch;}else{insertreturn;}
  280. return;
  281. ////////- kSearch サブルーチン終了 -////////////////////////////////////
  282.  
  283. selectingCase://k_SRCHの起動オプション
  284. if(selecting){//範囲指定状態での起動オプション
  285.     if(!#getSearchChar){
  286.         $sT0=gettext(seltopx,seltopy,selendx,selendy);
  287.         moveto seltopx,seltopy;
  288.         call checkCharOrder1 $sT0;
  289.         call kSearch3 $sT0;
  290.     }else{
  291.         $sT0=$sT0g;$sT1=$sT1g;$sT2=$sT2g;
  292.     }
  293.  
  294. }else{//非範囲指定状態での起動オプションk_SRCH...
  295.     if(!#getSearchChar){
  296.         if(!#getWordChar){// getSearchCharが0の時(非選択起動時に文字取得=カーソル以降単語末)、
  297.                 //カーソル以降を取得(0)か、
  298.             getsearch;//message searchbuffer;
  299.             if(code==13||code==9){$sT0=$sT0g;$sT1=$sT1g;$sT2=$sT2g;return;}
  300.             else call checkCharOrder1 searchbuffer;
  301. //            setsearch $$SB,#sFlug;
  302.         }else if(#getWordChar==1){//カーソルのある単語全体(1)か
  303.             selectword;
  304.             $sT0=gettext(seltopx,seltopy,selendx,selendy);
  305.             if($sT0==""||strstr($sT0,"\t")!=-1){
  306.                 $sT0=$sT0g;$sT1=$sT1g;$sT2=$sT2g;return;
  307.             }
  308.         }else if(#getWordChar==2){//k_SRCH起動前に検索語(検索バッファ内の文字列)
  309.             $sT0=searchbuffer;
  310.             if(searchbuffer==""){
  311.                 $sT0=$sT0g;$sT1=$sT1g;$sT2=$sT2g;return;
  312.             }
  313.         }
  314.         call checkCharOrder1 $sT0;
  315.         call kSearch3 $sT0;
  316.     }else{
  317.         $sT0=$sT0g;$sT1=$sT1g;$sT2=$sT2g;return;
  318.     }
  319. }
  320. call setTitle;
  321. return;
  322.  
  323. checkCharOrder0://3つある候補と$sT0が同一かどうかのチェック
  324. if($$1==$sT0){//       same as 1
  325. //        順番の変更をしない
  326. }else if($$1==$sT1){// same as 2
  327.         $$sTT=$sT0;$sT0=$$1;$sT1=$$sTT;//$sT2はそのまま
  328. }else if($$1==$sT2){// same as 3
  329.         $sT2=$sT1;$sT1=$sT0;$sT0=$$1;
  330. }else if($$1!=""){////新しい検索語
  331.         $sT2=$sT1;$sT1=$sT0;$sT0=$$1;
  332. }else if($$1==""){// なにもしない
  333.     beep;
  334. }
  335. return;
  336.  
  337. checkCharOrder1://3つある候補と$sT0が同一かどうかのチェック
  338. $$ch=$$1;
  339. if($$ch==$sT0g){//       same as 1
  340.     $sT1=$sT1g;$sT2=$sT2g;
  341. }else if($$ch==$sT1g){// same as 2
  342.     $sT0=$$ch;$sT1=$sT0g;$sT2=$sT2g;
  343. }else if($$ch==$sT2g){// same as 3
  344.     $sT0=$$ch;$sT2=$sT1g;$sT1=$sT0g;//$sT0=$sT2g;
  345. }else if($$ch==""){//得たまま(^^;
  346.     $sT0=$sT0g;$sT1=$sT1g;$sT2=$sT2g;
  347. }else if($$ch!=""){//新しい検索語
  348.     $sT0=$$ch;$sT1=$sT0g;$sT2=$sT1g;
  349. }
  350. return;
  351.  
  352. k_help0://外部分離ヘルプ起動
  353.     writeininum $f0,"LOOK00","helpNumb",##1;
  354.     execmacro "k_SRCHHL.mac";
  355. return;
  356.  
  357. WriteAllIniSearch://INIファイル書き込み
  358. //message $sT0+"\n"+$sT1+"\n"+$sT2;
  359.     writeininum $f0,"LOOK00","regularYN",#regularYN;
  360.     writeinistr $f0,"LOOK00","sTarget0",$sT0;
  361.     writeinistr $f0,"LOOK00","sTarget1",$sT1;
  362.     writeinistr $f0,"LOOK00","sTarget2",$sT2;
  363. return;
  364.  
  365. startSetting:
  366. $sBuffer=searchbuffer;
  367. #sFlug=searchoption;
  368. $f0=hidemarudir+"\\kakimac\\kakimac.kdf";
  369. disablebreak;
  370. #SF=getininum("hidemaru.ini","Env","SelectFound");
  371. if(!#SF){writeininum "hidemaru.ini","Env","SelectFound",1;envchanged;}
  372. #regularYN=getininum($f0,"LOOK00","regularYN");
  373. #getSearchChar=getininum($f0,"LOOK00","getSearchChar");
  374. #getWordChar=getininum($f0,"LOOK00","getWordChar");
  375. #endSetBuffer=getininum($f0,"LOOK00","endSetBuffer");
  376. $sT0g=getinistr($f0,"LOOK00","sTarget0");
  377. $sT1g=getinistr($f0,"LOOK00","sTarget1");
  378. $sT2g=getinistr($f0,"LOOK00","sTarget2");
  379. if(imestate){imeswitch;#imeYNsw=1;}
  380. return;
  381.  
  382. WriteAndEnd:
  383. call WriteAllIniSearch;
  384. goto ending;
  385.  
  386. ending:
  387. escape;
  388. if(hidemaruhandle(0)==#hwndOrgHM)showwindow #wsINI;
  389. if(#imeYNsw){if(!imestate)imeswitch;}
  390. if(#endSetBuffer){
  391.     if(#regularYN)#sFlug=16;
  392.     $sBuffer=$sT0;
  393. }
  394. setsearch $sBuffer,#sFlug;
  395. if(!#SF){writeininum "hidemaru.ini","Env","SelectFound",0;envchanged;}
  396. //if(#endType==0)endmacroall;// k_WIND用処理
  397. //else if(#endType==1)endmacro;// k_LOOK用処理
  398. //else if(#endType==2)exit;//
  399. //endmacro;// k_LOOG用
  400. endmacro;
  401.