hmJSが秀丸マクロへアクセスする関数

ヒアドキュメント用の関数「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から秀丸マクロを実行

    • hm.Macro.Eval( ヒアドキュメント or 文字列)

      引数の文字列を、「秀丸マクロ」として実行する。

      「Eval関数」には「R関数」の機能が内包されています。

  • JSから秀丸マクロの変数の読み書き

    • hm.Macro.Var( 変数名 )

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

    • hm.Macro.Var( 変数名 , 新たな値 )

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

    #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 );