|
java.hilight を種に作ってみました、補完は手間がかかる。
inputchar の表示の粘りけがほしい。
conhilight.mac が補完を処理
addhilight.mac が語の登録をします。
java2.hilight ---- 強調と補完で共用する ---------------------------
035,_BindingIteratorImplBase
035,_BindingIteratorStub
035,_NamingContextImplBase
035,_NamingContextStub
099,abstract
035,AbstractAction
035,AbstractBorder
035,AbstractButton
// ,AbstractButtonA
035,AbstractButton.AccessibleAbstractButton
035,AbstractButton.ButtonChangeListener
035,AbstractCollection
035,AbstractColorChooserPanel
035,AbstractDocument
035,AbstractDocument.AbstarctElement
以下同様
--------------------------------
// conhilight.mac ///////////////////////////////////////
//選択された語範囲を強調定義ファイルにより補完します。
//手順
//・選択語をコピー
//・hilightファイル面に移行、同一頭部位置を検索
//・補完入力モードで語を選択
//・元の面に戻る、補完語を挿入
//
//強調定義ファイルの形
//// コメントは頭スペースを多めに
//// ,Words補完語 頭は // , 固定
//000,Words補完&強調語 強調IDは3桁固定 強調のみ、はない。
// (Wordsはsortでソート済み).BAT>sort /+5 IN.file > OUT.file
// もし秀丸文字列比較と順が異なったら手で移動する。
//
//java.hilight をボーと眺めていたら補完にも使えるのでは!
// 漢字を含む語はかな漢字ソフトに任せます、英数補完用です。
// JAVA ソースの語を想定しているから汎用ではないです。
//各々、ソースの種類で調整が必要です。補完は難しい。
//
if (1/2 == 0 && version < 302) {
message "田楽.DLLには秀丸の Ver.3.02 以降が必要です。";
endmacro;
}
goto main;
// -----------------
//田楽DLLのロード
dgload: // 秀丸面 毎に接続
loaddll(hidemarudir + "\\DengakuDLL.dll"); if (!result) {
message "田楽.DLL をロードできませんでした。";endmacro; }
return;
//
getdicword:// 語移動毎に取得
golinetop right 4; beginsel golineend // 折り返し文字数より短いこと
$dicword= gettext(seltopx,seltopy,selendx,selendy);
return;
// 秀丸マクロの文字列比較は辞書順らしい
// 大小を意識する処理では文字コードを使う、"A"!="a" "a"<"B"
//
main:// =========================================
//
#hwnd=hidemaruhandle(0);
// ctrl+shift+← などキーで単語選択できるような状況を仮定している
if(!selecting){left; selectword }
$word= gettext(seltopx,seltopy,selendx,selendy);
if(0 <= strstr($word,"\n")){menu "改行不可";endmacro }
moveto seltopx,seltopy; // 書き戻し用カーソル位置
//
setactivehidemaru findhidemaru("java2.hilight");
if(!result){menu " .hilight ファイルを開いて下さい。";endmacro }
call dgload;
// 頭出し
//gofiletop // searchdown "^//<BODY>",regular;
// 秀丸search regularではcasesense になってしまう?
// 同一頭部を見つけて補完入力モードに入る
#wlen=strlen($word); // 書き戻すときの元の長さ
//menu $word;endmacro
atamadasi:
// 2分法 語数は少なすぎないこと eof前のコメントX
#step=linecount2/2; moveto 0,#step;// 中央開始位置
while(#step > 6){ #step=#step/2+1;
call getdicword;
if($dicword > $word)up #step; else down #step;
if(eof==code) up #step;
}
up #step;
//
while(eof!=code){ // 最終行にも改行を // 大小比較
call getdicword;
// menu $WORD+"/"+$DICWORD;
if($dicword >= $word) break // 補完モードへ
down; // 次行へ
} // while loop
//
// 補完モード
// ガイド表示は searchによる一時反転表示 / title どちらがよいか?
// とても面倒 改良が必要
hmode:
#ll=strlen($word); #lr=strlen($dicword)-#ll;
#inkey=inputchar(leftstr($dicword,#ll)+">"+rightstr($dicword,#lr));
// 途中で画面を切り替えると inputchar の表示は消えるが
// input待ちのマクロ実行は続いている。チョット注意
if(0x1B==#inkey)goto modoru; // [ESC] 補完とりやめ
if(0x0D==#inkey)goto uwagaki; // {ENTER] 確定
if(0x1E==#inkey)goto setu; // [TAB or ->] 次の節目に
if(0x1C==#inkey)goto back1; // [<- ] 一文字前に戻る
if(0x1D==#inkey){up; goto recon;}// [UP] 再構築
if(0x1F==#inkey){down; goto recon;}// [DOWN] 再構築
if(''==#inkey)goto setu;
if(('A'<=#inkey) & (#inkey<='Z'))goto next1;//1文字進む
if(('a'<=#inkey) & (#inkey<='z'))goto next1;//1文字進む
// 特殊記号 同一頭部の次の節目を探す
//menu "特殊";//endmacro ------------------------------
while(1){
#lr=strlen($dicword)-#ll;
#pos=strstr(rightstr($dicword,#lr),char(#inkey));
if(0<=#pos)break
down; call getdicword; // 次行を当たってみる
//menu $dicword+" "+$word;
if(leftstr($dicword,#ll)!=$word){up;call getdicword; // ハズレ
beep goto hmode; }
}
$word=leftstr($dicword,#ll+#pos+1);
//menu "特の節"+$word;//endmacro
goto hmode; // 特殊−−−−
// AbstractDocument.Content ========================
uwagaki: // menu "確定";//endmacro
setactivehidemaru #hwnd;//元の画面
beginsel right #wlen;insert $dicword;
endmacro
// ===================================
setu: // menu "次節";//endmacro// 英大小の切れ目の直前
while(1){ // 文字コードにしないと大小はわからない
#s=ascii(midstr($dicword,#ll,1));// 次の1文字
//menu "大小決定文字"+char(#s);//endmacro
if('A'<=#s && #s<='Z'){#ra='a';#rz='z';}else{#ra='A';#rz='Z';}
#x=#ll+1;
while(#x<strlen($dicword)){
#s=ascii(midstr($dicword,#x,1)); if(#ra<=#s && #s<=#rz)break
#x=#x+1; }
if(#x<strlen($dicword))break// 切れ目あり
down; call getdicword; // 次行を当たってみる
if(leftstr($dicword,#ll)!=$word){up;call getdicword; //頭部不一致
beep goto hmode; }
}
$word=leftstr($dicword,#x);
//menu "次の節"+$word;//endmacro
goto hmode; // 特殊−−−−
// Ab
// AccessControlContext ========================
back1: // menu "1文字戻り";//endmacro;
$word=leftstr($word,#ll-1); goto atamadasi; // とりあえず動けばよい
// −−−−−−−−−−−−−−−−−−−−−−−−−−−
recon: // menu "再構築";//endmacro
call getdicword; $word=$dicword; goto hmode;
// −−−−−−−−−−−−−−−−−−−−−−−−−−
next1: // menu "1文字進む";//endmacro
while(1){ // "A"=="a" と見るには
//menu char(#inkey)+midstr($dicword,#ll,1);
$inS = dllfuncstr("TOUPPER",char(#inkey));
$midS= dllfuncstr("TOUPPER",midstr($dicword,#ll,1));
if($inS==$midS) break // この行でよし
down; call getdicword; // 次行を当たってみる
if(leftstr($dicword,#ll)!=$word){up;call getdicword; // 頭部不一致
beep goto hmode; }
}
$word=leftstr($dicword,#ll+1);
//menu "進み1"+$word;//endmacro
goto hmode; // −−−−−−−−−−−−−−−−−−−−
//
modoru://
setactivehidemaru #hwnd;
endmacro
//menu "endmacro"; endmacro
// AbstractButton.AccessibleAbstractButzn
// AbstractDocument
// _NamingContextImplBase
---------------------------------------
// addhilight.mac ////////////////////////////////////////
//選択された語範囲を強調定義ファイルに登録します。
//手順
//・選択語をコピー、補完のみ/強調IDを選択し
//・hilightファイル面に移行、挿入位置を検索、重複警告
//・語を追加
//・元の面に戻る
//
//強調定義ファイルの形
//// コメントは頭スペースを多めに
//// ,Words補完語 頭は // , 固定
//000,Words補完&強調語 強調IDは3桁固定 強調のみ、はない。
// (Wordsはsortでソート済み).BAT>sort /+5 IN.file > OUT.file
//
//java.hilight をボーと眺めていたら補完にも使えるのでは!
// 漢字を含む語はかな漢字ソフトに任せます、英数補完用です。
// JAVA ソースの語を想定しているから汎用ではないです。
//各々、ソースの種類で調整が必要です。補完は難しい。
//
goto main;
// -----------------
//Regexquote:// メタ文字をエスケープ
//$$wordrg=""; #c=strlen($$1);
//while(#c>0){ #c=#c-1; $$m=midstr($$1,#c,1);
// if(-1 == strstr("[]()^$.*+?|\\",$$m))
// $$wordrg= $$m+$$wordrg;
// else $$wordrg="\\"+$$m+$$wordrg;
// } return $$wordrg;
// 結局不使用
//? $word に正規表現メタ文字が入っているなら?
//call Regexquote $word; $wordrg=$$return;
// menu $wordrg;
getdicword:// 語移動毎に取得
golinetop right 4; beginsel golineend // 折り返し文字数より短いこと
$dicword= gettext(seltopx,seltopy,selendx,selendy);
return;
// 秀丸の文字列大小比較は辞書順 ヘルプに一言ほしい。
//
main:// =========================================
//
#hwnd=hidemaruhandle(0);
// ctrl+shift+← などキーで単語選択できるような状況を仮定している
if(!selecting)selectword
$word= gettext(seltopx,seltopy,selendx,selendy);
if(0 <= strstr($word,"\n")){menu "改行不可";endmacro }
//
menu "補完のみ","特に &1","特に &2","強調 &4";
if(!result)endmacro
if( 1==result) $kflag="// ";
else if( 2==result) $kflag="035";
else if( 3==result) $kflag="099";
else if( 4==result) $kflag="225";
// menu $kflag;
//
setactivehidemaru findhidemaru("java2.hilight");
if(!result){menu ".hilight ファイルを開いて下さい。";endmacro }
// 頭出し
//gofiletop // searchdown "^//<BODY>",regular;
// 秀丸search regularではcasesense になってしまう?
// 間を見つけて新規追加
// menu $word+$WORD;
// 2分法 語数は少なすぎないこと eof前のコメントX
#step=linecount2/2; moveto 0,#step;// 中央開始位置
while(#step > 6){ #step=#step/2+1;
call getdicword;
if($dicword > $word)up #step; else down #step;
if(eof==code) up #step;
}
up #step;
//
while(eof!=code){ // 最終行にも改行を // 大小比較
call getdicword;
// menu $DICWORD;
if($dicword < $word){ down; continue } // 次行へ
if($dicword == $word) goto jyuuhuku;// 同一語
// 挿入位置発見
// menu $WORD+"/"+$DICWORD;
break
} // while loop
golinetop insertline insert $kflag+","+$word; // 新規追加
goto modoru;
// ----------------------------
jyuuhuku: // 完全一致
menu "重復しています?";if(!result)goto modoru; // [ESC]元の面に戻る
golinetop beginsel right 3; insert $kflag;
goto modoru; // 同じ語に再設定
// Float と float を登録したいときは手動で
// ----------------------------------------
modoru://
setactivehidemaru #hwnd;
endmacro
//menu "endmacro"; endmacro
// @@
// AbstractButton.AccessibleAbstractButzn
// Float
// SYYYY
// zz
http://www.ceres.dti.ne.jp/~sugiura/hidemaru/macros/
サポート会議室の グローバル変数の議論も見てください。
__END__
|
|