最終更新日 2024-09-25

hmV8が持つ特別な関数一覧

ここでは、hmJSとの差分だけ記載します。

ヒアドキュメント用の関数「R」

hmJSに特別に追加されている「R」という関数はヒアドキュメントのリテラル文字列そのまま、に相当近い機能です。
一方、ECMAScript6には、「テンプレートリテラル」がありますが、2つは少し役割が異なりますので、
気を付けて使い分けて下さい。
また、String.raw` ***ここに秀丸マクロ `; もある程度はうまくいきますが、文字中に「\が」出現すると、意図せぬ変換をしやすいため注意してください。

#JS = loaddll( hidemarudir + @"\hmV8.dll" );

#_ = dllfuncw( #JS, "DoString", R"JS(

var str = R( f => { /*
あいうえお
かきくけこ
\n\n
*/ } ); // /*~*/が「書いたままの文字列である」ヒアドキュメント化される。


hm.debuginfo(str)
hm.Macro.Var['$str'] = str; // 秀丸マクロの方に伝達

)JS"
);

message($str);

freedll( #JS );

hm.Macro.Eval(..)

こちらも、同様です。
「ソースコードとして書いてある通りに実行する」という意味では、
やはりhmJSの方のサンプルと同じ書き方の方が良いと思われます。

秀丸マクロの変数の読み書き ~hmJSとは別の記述方法~

hmJSの書き方だけではなく、hmV8では、「hmPy/hmRb/hmPS/hmPython」と同じように["..."]による、「より自然な記述法」も提供しています。

  • hm.Macro.Var['変数名']

    対象の「秀丸マクロ」としてのシンボル名に対応する値を取得する。

  • hm.Macro.Var['変数名'] = 新たな値

    対象の「秀丸マクロ」としてのシンボル名に、新たな値を設定する。
    (読み取り専用の値には設定出来ません)

#JS = loaddll( hidemarudir + @"\hmV8.dll" );

#_ = dllfuncw( #JS, "DoString", R"JS(

   // 秀丸マクロの「#aaa」という変数に3を設定。
   hm.Macro.Var['#aaa'] = 3;

   // 秀丸マクロの「$bbb」という変数に「あいうえお」を設定。
   hm.Macro.Var['$bbb'] ="あいうえお。";

   // 秀丸マクロとして一連の文字列を実行
   hm.Macro.Eval( f => {
   /*
       message($bbb);
       $$message = $bbb + $bbb;
       message($$message);

       // 原始的な秀丸マクロを使ったアウトプット枠へ出力
       #OP = loaddll("HmOutputPane.dll");
       #ret = dllfunc(#OP, "Output",hidemaruhandle(0), $$message);
       freedll(#OP);
   */
   } );

   // アウトプット枠へと出力
   hm.OutputPane.Output( hm.Macro.Var['$bbb'] );
   hm.OutputPane.Output( hm.Macro.Var['filename'] + "\r\n");

   var hmdate = hm.Macro.Var['date'];
   hm.OutputPane.Output( hmdate + "\r\n");

)JS"
);

freedll( #JS );