ヒアドキュメント用の関数「R」
「R」という関数に、「以下のように、コメントを内側に書いた関数そのものを渡す」ことで、
ヒアドキュメント化された文字列が返るようになっています。
JavaScriptそのものには、ヒアドキュメントが存在しないため、このように「R」という関数を設けています。
#JS = loaddll( hidemarudir + @"\hmJS.dll" );
#_ = dllfuncw( #JS, "DoString", R"JS(
var str = R( function() {
/*
あいうえお
かきくけこ
\n\n
*/ } ); // /*~*/が「書いたままの文字列である」ヒアドキュメント化される。
hm.debuginfo(str)
hm.Macro.Var('$str', str); // 秀丸マクロの方に伝達
)JS"
);
message($str);
freedll( #JS );
JSから秀丸マクロへアクセスする関数
JavaScriptの機能をフルに生かしつつ、秀丸マクロの機能や各種値もほぼ全て使えるところが、
hmJSが優れている所以です。
- 秀丸マクロをそのまま実行
- 「秀丸マクロの変数」⇔「JSの変数」を相互にやり取り。
の2つの手段で秀丸マクロを取り扱うことが出来ます。
-
JSから秀丸マクロを実行
-
JSから秀丸マクロの変数の読み書き
#JS = loaddll( hidemarudir + @"\hmJS.dll" );
#_ = dllfuncw( #JS, "DoString", R"JS(
// 秀丸マクロの「#aaa」という変数に3を設定。
hm.Macro.Var('#aaa', 3 );
// 秀丸マクロの「$bbb」という変数に「あいうえお」を設定。
hm.Macro.Var('$bbb', "あいうえお。" );
// 秀丸マクロとして一連の文字列を実行
hm.Macro.Eval( function() {
/*
message($bbb);
$$message = $bbb + $bbb;
message($$message);
// アウトプット枠へ出力
#OP = loaddll("HmOutputPane.dll");
#ret = dllfunc(#OP, "Output",hidemaruhandle(0), $$message);
freedll(#OP);
*/
} );
hm.debuginfo( hm.Macro.Var('$bbb') );
hm.debuginfo( hm.Macro.Var('filename') );
var hmdate = hm.Macro.Var('date');
hm.debuginfo( hmdate );
)JS"
);
freedll( #JS );