マクロ埋め込み文書No.00844
ENCODINGSHIFTJIS さん 99/11/26 13:54
 

マクロを埋め込んだ現在文書を入力として
マクロ実行結果の文書を作ります。
------------------------------------------
eHidemac.mac
// e秀丸 (<SCRIPT> ASP ePerl eRuby  のマネはできるか?)
#inmac=0;// 結局使わなかった。
$basename=basename;
openfile "o.mac";selectall;delete;
call jumphidemaru $basename;gofiletop;// 頭から全部 eval の場合

while(1){
// text 中
beginsel;left;searchdown "<%";
if(result){#inmac=1;           call seltxtcopy;}// mac までのtext
else{// 終わりまでもうマクロはない
                     gofileend;call seltxtcopy;goto evalmac;}
// mac 中
right 2;if('='==code){// <%= の場合
right;beginsel;searchdown "%>";call selstrcopy;right 2;#inmac=0; }
else{// <% の場合
      beginsel;searchdown "%>";call selmaccopy;right 2;#inmac=0; }
 }
evalmac:
call jumphidemaru "o.mac";//endmacro;
save;selectall;delete;
        execmacro "o.mac";
endmacro;
// ------------------------------------------------
jumphidemaru:// $$1=>basename
while($$1!=basename){nexthidemaru; }
return;

seltxtcopy:// " の処理や行分割もしないと不完全
copy;call jumphidemaru "o.mac";
//insert "((text ";
insert "insert \"";paste;insert "\";\n";
//insert " text))";
call jumphidemaru $basename;
return;

selstrcopy:
copy;call jumphidemaru "o.mac";
//insert "((str ";
insert "insert ";paste;insert ";\n";
//insert " str))";
call jumphidemaru $basename;
return;

selmaccopy:
copy;call jumphidemaru "o.mac";
//insert "((mac ";
paste;insert "\n";
//insert " mac))";
call jumphidemaru $basename;
return;
-------------------------------------------
ehide.txt      //テスト入力文書 
Dynamic秀丸文書
e秀丸が作れるかどうかのテスト
 TeX編集 や HTML発生するほど割り付けに凝らないとき
 に使う。あるいは定型文書のひな型発生用。
 簡単な事は何でやっても簡単、これも一つの手です。

ただいまの時刻:<%=date%> <%=time%>
<% #chapcount=0;%>
<% while(4>#chapcount){ #chapcount=#chapcount+1;%>
第<%=str(#chapcount)%>章
<%}%>

出力結果
Dynamic秀丸文書e秀丸が作れるかどうかのテスト TeX編集 や HTML発生するほ
ど割り付けに凝らないとき に使う。あるいは定型文書のひな型発生用。 
簡単な事は何でやっても簡単、これも一つの手です。ただいまの時刻:
99/11/26(金) 13:46:03第1章第2章第3章第4章

参考
PerlでASPみたいなことをする のすすめ
http://sv.pixy.ne.jp/~miyama/tech/perl/miniasp.htm
erb.rb (eRubyとは)
http://ww2a.biglobe.ne.jp/~seki/ruby/erb.html

秀丸にも eval があると少し作りやすくなる。
(あると無名1行マクロの即実行等が作りやすい。
今作るとしたら新規文書画面で入力/マクロ保存/execmacro)
Win内ではCOM呼び出し機能がほしい。
HTMLなどのように改行が見た目の結果に出ないほうが作りやすい、
改行を保存する規則は?。
テキスト/マクロ混在はデバッグしにくい。ループすると
各種秀丸設定値の文書化くらいには使える。

\END

[ ]
RE:00844 マクロ埋め込み文書No.00861
安久津 さん 99/11/30 17:57
 
こんにちは安久津といいます。

(1)<%=???%>
// マクロ始まり
  disabledraw; escape; ##cy = y;
  $$date = date; $$time = time;// 日付と時刻に齟齬ないように
  $$y = leftstr($$date,2);
  if( $$y != "99" ){
    $$year = "20" + $$y;
    ##y = val($$y) + 12; $$jyear = str(##y);
  }else{
// もうすぐ、要らなくなる。
    $$year = "1999"; $$jyear = "11";
  }
  call replaceDown "<%=jyear%>",$$jyear;
  call replaceDown "<%=year%>",$$year;
  $$d = midstr($$date,6,2);
  call replaceDown "<%=jdate%>",$$d;// 間違え防止
  call replaceDown "<%=date%>",$$d;

 $$monthClass = "01|02|03|04|05|06|07|08|09|10|11|12|" +
 "JanFebMarAprMayJunJulAugSepOctNovDec";
  $$jmonth = midstr( $$date, 3, 2 );
  ##k = strstr( $$monthClass, $$jmonth );
  $$month = midstr( $$monthClass, ##k + 36, 3 );
  $$weekClass = "日|月|火|水|木|金|土|SunMonTueWedThuFriSat";
  $$jweek = midstr( $$date, 9, 2 );
  ##k = strstr( $$weekClass, $$jweek );
  $$week = midstr( $$weekClass, ##k + 21, 3 );
  call replaceDown "<%=jmonth%>",$$jmonth;
  call replaceDown "<%=jweek%>",$$jweek;
  call replaceDown "<%=month%>",$$month;
  call replaceDown "<%=week%>",$$week;

  call replaceDown "<%=time%>",$$time;
  call replaceDown "<%=path%>",getenv("path");
  call replaceDown "<%=tz%>",getenv("tz");
  call replaceDown "<%=filename2%>",filename2;
  call replaceDown "<%=basename2%>",basename2;
  call replaceDown "<%=directory2%>",directory2;
  call replaceDown "<%=fontname%>",fontname;
  call replaceDown "<%=fontsize%>",str(fontsize);
  moveto 0, ##cy;
// changename ""; // newfile
  beep;
endmacro;
replaceDown:
  if( $$2 == "" ) $$2 = "<!-- "+midstr($$1,3,strlen($$1)-5)+" -->";
  gofiletop;
  replacedown $$1,$$2,casesense; // 大文字小文字区別
  while( result ) finddown;
return;
// マクロおわり
データ例
<%=week%>, <%=date%> <%=month%> <%=year%> <%=time%>
平成<%=jyear%>年<%=jmonth%>月<%=jdate%>日 <%=jweek%>曜日 <%=time%>

(2)<%???%>
埋め込みマクロは、<hidemarumacro></hidemarumacro> 等で、
囲んでしまった方が簡単そうです。
ナンバリングだったら、それ自体を埋め込んでしまう。
<hidemarumacro>
  #chapcount=1;
  gofiletop;
  replacedown "<%=chapcount%>","1",casesense;
  while( result ){
    #chapcount = #chapcount + 1;
    replacedown "<%=chapcount%>",str(#chapcount),casesense;
  }
</hidemarumacro>

ではでは。

[ ]
RE:00861 マクロ埋め込み文書No.00868
ENCODINGSHIFTJIS さん 99/12/01 11:24
 
発想が少し違います。
置換え用のパターンを考えないという点です。
任意文字式の実行結果埋め込みです。
(1)<%=???%>の場合でも次週の予定表は出せますか?
(2)<%???%> の場合、変則ナンバリングがあると
そのつど0リセットのパターン等を考え追加することになる。

非プログラマーの普通の人々には単純置換が使いやすいが。

<! 〜 !> でPerlを埋める例もあります、埋め込み構文は
ほんとにさまざま。
埋め込み構文も少量ならカワイイが現状のHTML+JavaScript
は手に負えない。



[ ]
RE:00868 マクロ埋め込み文書No.00873
ENCODINGSHIFTJIS さん 99/12/01 19:19
 
//eHidemac.mac 第2版
// e秀丸 (<SCRIPT> ASP ePerl eRuby  のマネはできるか?)
//  マクロ間でデータを渡せないのは不便だ。レジストリで代用
// Perlのq{〜}類があると楽かな?
//
// 処理テキストは .mac のディレクトリ内のこと
#i=0;// text() 出現順
$basename=basename;
openfile "o.mac";selectall;delete;
insert "openreg \"CURRENTUSER\",\n";
insert "\"Software\\\\Hidemaruo\\\\Hidemaru\\\\Hidemaru.dat\";\n";
call jumphidemaru $basename;gofiletop;// 頭から全部 eval の場合
        openreg "CURRENTUSER",
        "Software\\Hidemaruo\\Hidemaru\\Hidemaru.dat";

while(1){
// text 中
beginsel;left;searchdown "<%";
if(result){          call seltxtcopy;}// mac までのtext
else{// 終わりまでもうマクロはない
                     gofileend;call seltxtcopy;goto evalmac;}
// mac 中
right 2;if('='==code){// <%= の場合
right;beginsel;searchdown "%>";call selstrcopy;right 2; }
else{// <% の場合
      beginsel;searchdown "%>";call selmaccopy;right 2; }
 }
evalmac:
closereg;
call jumphidemaru "o.mac";
insert "\nclosereg;\n";
//endmacro;
save;selectall;delete;
        execmacro "o.mac";
endmacro;
// ------------------------------------------------
jumphidemaru:// $$1=>basename
while($$1!=basename){nexthidemaru; }
return;

seltxtcopy:
#i=1+#i; $k="E"+str(#i);// 配列キー
writeregstr $k,gettext(seltopx,seltopy,selendx,selendy);//書き込み
call jumphidemaru "o.mac";
//insert "((text ";
insert "insert getregstr(\""+$k+"\");\n";
//insert " text))";
call jumphidemaru $basename;
return;

selstrcopy:
copy;call jumphidemaru "o.mac";
//insert "((str ";
insert "insert ";paste;insert ";\n";
//insert " str))";
call jumphidemaru $basename;
return;

selmaccopy:
copy;call jumphidemaru "o.mac";
//insert "((mac ";
paste;insert "\n";
//insert " mac))";
call jumphidemaru $basename;
return;


[ ]
RE:00873 複合文書No.01099
ENCODINGSHIFTJIS さん 00/03/01 18:43
 
区切りさえしっかりしていたら、複合文書は使いやすいかもしれない。
埋め込みだから、構文着色などにはキビシイが。

// Domacro.macソース埋め込みマクロの実行
//ソースのコメントに埋め込まれたカーソル位置以降の
//無名の秀丸マクロをその場で実行します。
//動作
//・<MACRO> マクロソース </MACRO> を目印にソースを範囲選択。
//・行頭の // を削除 [ソースの種類で様々]
//・Do.mac に書き込み execmacro "Do.mac"; します。
//
// 動作条件:Do.mac を開いておくこと、閉じない (作業面)
//面のサイズはタイトルバー程度でよい。
//
//  名前を付けて保存したり、キー割り当てには適さない macro は
//  それを使うソース自体に組み込んで置ける。
//  あるいは汎用のマクロを使うときの個別起動設定の量が多いとき
//  <MACRO> 設定を行い、execmacro "汎用.mac"; </MACRO> などとする。
//

#hwnd0=hidemaruhandle(0);
searchdown "<MACRO>|</MACRO>",regular;if(!result)endmacro;
right;if('/'==code)
{left;beginsel searchup "<MACRO>";right strlen("<MACRO>");
}else{right strlen("<MACRO>");beginsel searchdown "</MACRO>";
}copy
// ------------
setactivehidemaru findhidemaru("Do.mac");
if(!result){menu "Do.mac が開かれていません";endmacro}
// -----------
selectall paste replaceall "^//","",regular; save
setactivehidemaru #hwnd0;
execmacro "Do.mac";

endmacro

// <MACRO>
//// コメント
//gofiletop searchdown "macro";
//
//</MACRO>

// <MACRO>
//gofileend
//</MACRO>
**************************
// Dobat.macソース埋め込み .BAT の実行
//ソースのコメントに埋め込まれたカーソル位置以降の
// 無名 .bat をその場で実行します。
//手順
//・<BAT>  .bat ソース </BAT> を目印にソースを範囲選択。
//・行頭の // を削除 [ソースの種類で様々]
//・Do.bat に書き込み runsync2 "Do.bat"; します。
//
// 動作条件:Do.bat を開いておくこと、閉じない (作業面)
//面のサイズはタイトルバー程度でよい。
//
//  名前を付けて保存したり、キー割り当てには適さない .BAT は
//  それを使うソース自体に組み込んで置ける。
//  あるいは汎用の .bat を使うときの個別起動設定の量が多いとき
//  <BAT> 個別設定を行い、 汎用.bat . . . </BAT> などとする。
//

#hwnd0=hidemaruhandle(0);
searchdown "<BAT>|</BAT>",regular;if(!result)endmacro;
right;if('/'==code)
{left;beginsel searchup "<BAT>";right strlen("<BAT>");
}else{right strlen("<BAT>");beginsel searchdown "</BAT>";
}copy
// ------------
setactivehidemaru findhidemaru("Do.bat");
if(!result){menu "Do.bat が開かれていません";endmacro}
// -----------
selectall paste replaceall "^//","",regular; save
setactivehidemaru #hwnd0;
runsync2 "Do.bat";

endmacro

// <BAT>
//rem コメント
//copy Dobat.mac h
//
//</BAT>

// <BAT>
//dir c:\windows\デスクトップ > %TMP%\h.txt
//</BAT>
**************************

end/

[ ]
RE:01099 複合文書No.01100
きいろいまふらあ さん 00/03/01 19:58
 
全くの偶然なのですが、昨日ふと思い付いてこんなの書いてみました。
やってるこたほとんど同じですね。
きっとENCODINGSHIFTJISさんの方が配慮がゆきとどいていることでしょう。

//imac.mac iはinstantのi
$mymacro = "a:\\bin\\hidemaru\\macro\\temp1.mac"; //小文字で書く。

if(!selecting)selectline;
cut;
//copy;
openfile $mymacro;
if(basename != $mymacro)then{
        message "専用マクロファイルのオープンに失敗しました。";
        endmacro;
}
selectall;
paste;
if(basename != $mymacro)then{
        message "不吉な予感がするので終了します。";
        endmacro;
}
save;
prevhidemaru;
execmacro $mymacro;
closehidemaru findhidemaru($mymacro);
endmacro;
//---

要はテキスト編集中にふとマクロを使って編集したくなったんですが、
わざわざ新しいウィンドウ開いて書いてマクロフォルダに保存して実行するのが
面倒だったのです。

使い捨てのマクロ向きです。
コメントとか付けずに、今いるところにたらたらっとマクロのコードを書いて実行し
ます。
あまり複雑なことやると破綻するかも。

temp1.macはあらかじめダミーで作っておくとよいでしょう。
開いておく必要はないです。

[ ]