.HTML 文書のヘルプ的利用 No.00978
ENCODINGSHIFTJIS さん 00/02/02 15:31
 
//
// .html 文書と .INI (内容は索引) の対を作れば、この雛型マクロで
// HTML ヘルプを作れます。ここでは Ruby の場合です。
//
// Rubyhelp2.mac   ---------------------------------
// カーソル位置のword をキーにしてRubyマニュアル.html
// を引きます。
// run でページ替え表示させる方法を知らないので
// NN を事前に立ち上げておき ddeexec でページ切替えします。
//
// 単語取り出し
selectword $k=gettext(seltopx,seltopy,selendx,selendy);
// .INI より単語をキーにしてトピックの並びを取り出す。
$s=getinistr("Rubyhelp.INI","MAN-1.4",$k);if(""==$s)endmacro
// トピックが一つならば即表示。
if(-1==strstr($s,","))call disp,$s;
// split関数! 複数トピックをメニュー並びにして画面表示
#m=0;
while(strlen($s)>0){ #c=strstr($s,",");
if(-1==#c){$mary[#m]=$s; #m=1+#m;break }
           $mary[#m]=leftstr($s,#c);#m=1+#m;
      $s=rightstr($s,strlen($s)-#c-1);
 }
menuarray $mary,#m;if(0==result)endmacro;
// メニュー選択されたものを表示
call disp,$mary[result-1];
//
//
disp:///////////////
// URL 文字列作成
               ##c=strstr($$1,"#");
$g=leftstr($$1,##c)+".html"+rightstr($$1,strlen($$1)-##c);

// run を使ってページ切替えする方法は?わからない。
//run "start NC4.7.lnk "+"D:/Ruby/MAN-1.4/"+$g;// 遅い、画面増える。

// NN の ddeexec をたたいてページ切替え。.hlp と同等の早さ good!
ddeinitiate "NSShell","WWW_OpenURL";
if(!result){menu "NN は起動していますか?";endmacro }
ddeexecute "D:/Ruby/MAN-1.4/"+$g;
ddeterminate

 endmacro

// .INI ファイルの例
// [MAN-1.4]
// abort=ftplib#abort
// abort_on_exception=thread#Thread.abort_on_exception,thread#Thread. abort_
on_exception_eq,thread#thread_abort_on_exception,thread# thread_abort_on_exc
eption_eq
// abs=numeric#abs
// accept=socket#so_accept,socket#tsv_accept,socket#usv_accept
// acct=ftplib#acct
// addr=socket#tip_addr,socket#uso_addr

// 例えば ftplib#abort ==> D:/Ruby/MAN-1.4/ftplib.html#abort となる

// この程度の速さなら、.hlp でなく .html のヘルプでもよい。
// 更新が容易なので .html がいいかもしれない。
// IE で外部からページ切替えする方法があるとよいのだが、
// ActiveX でない方法で、(秀丸はActiveXクライアントになれないし)。
//



// Rubyhelp1.mac -----------------------------
// Rubyhelp1.ini の重復キーをまとめます。
//     Sort済の Word=Topic の.INIファイルを開いて
//     このマクロを実行。結果は 同一 Word=topic1,topic2,...
//     になる。
// 先頭の [MAN-1.4] は手で付けてから保存する。
//    
 
gofiletop
$k="";// 前行のWord
while(code!=eof){
golinetop2 selectword $h=gettext(seltopx,seltopy,selendx,selendy);
if($h!=$k){$k=$h;down;continue}
// 同じWord ならTopicを , でつなげる
searchdown "=";right;beginsel golineend2 cut deleteline golinetop2
left;insert ",";paste right;
 }
endmacro
//


// Rubyhelp0.mac ----------------------------------
// .ini Rubyhelp 各.html 毎の .ini の元を作ります。
//  .html のアンカータグを拾って Word=Topic の形で .I ファイルに
//  書き出します。
//
// 使い方の感じ
//                   FOR は複数本かぶるので.BAT展開した方がよい
// CD D:\Ruby\MAN-1.4
// LFNFOR on
// rem    統一したほうが以降もやりやすい。
// REN *.htm *.html
// rem   .html の <a name を秀丸マクロで拾い出す。    
// FOR %H IN (*.html) DO 秀丸.exe /xRubyhelp0.mac %H
// rem    各 .html の抽出結果(*.I)を一本化する。
// COPY *.I Rubyhelp0.INI
// rem    Word で整列する。
// SORT <Rubyhelp0.INI >Rubyhelp1.ini
//
//                                       5==strlen(".html");
$fname=leftstr(basename,strlen(basename)-5);//menu $fname;
#k=0;// カウント
gofiletop

while(1){// <a の形が統一されていたので助かった。
searchdown "<a name";if(!result)break
searchdown "\"";right;beginsel
searchdown "\"";$Kname[#k]=gettext(seltopx,seltopy,selendx,selendy);
//menu $Kname[#k];
searchdown ">[^< \n\t]",regular;right;
selectword $Kword[#k]=gettext(seltopx,seltopy,selendx,selendy);
//menu $Kword[#k];
#k=1+#k;
 }
//
//closeend: .I 書出し
changename $fname+".I"; selectall delete
while(#k>0){  #k=#k-1;
insert $Kword[#k]+"="+$fname+"#"+$Kname[#k]+"\n";
 }
//
saveexit



[ ]