hmJS (秀丸マクロ用 .NET & ActiveXObject ライブラリ via JavaScript)

  • 概要

    秀丸マクロを可能な限り「JavaScript(JScript 5.8)」で記述可能とするためのライブラリです。

    • JavaScriptで秀丸マクロ

      JavaScript内で、秀丸マクロの実行が可能です。又、「JavaScript」⇔「秀丸マクロの各種変数やシンボル」が非常に手軽に行えるようになっています。

    • .NET Framework

      .NET Frameworkのライブラリが利用可能であるとともに、独自にC#等で制作した.dllも読み込み&利用可能です。

    • ActiveXObject

      デスクトップで利用される.jsファイルで良く利用される「ActiveXObject」を読み込む記述を、特別に同様の記述で済むようにサポートされています。

  • ダウンロード

    hmJS.zipファイル。ver 1.551
    └更新日 2017/09/04
  • 動作環境

    • 秀丸

      秀丸エディタ ver8.66以上

    • Microsoft VC++ 再頒布可能パッケージ

      Visual Studio 2013 C++ ランタイム
      x86版をインストールしたことが無い方はインストールしてください。
      お手持ちのOSが64bitか32bitかには関わりなく、x86版のインストールが必要です。

    • Microsoft .NET

      .NET Framework 4.0以上。

    • 秀丸エディタ 64bit版について

      秀丸エディタ64bit版をご利用の方は、hmJS_x64.zipをダウンロードし、hmJS.dllを差し替えてください。
      (又、この場合は、Microsoft VC++ 再頒布可能パッケージは、64bit版をインストールしてください。)

    • 秀丸エディタ ストアアプリ版について

      hmJSはストアアプリ版でも利用することが出来ます。詳細は左メニューのストアアプリ版での利用などを参照してください。

  • インストール

    • hmJS.zipを解凍する。
    • 「hmJS.dllを秀丸エディタのディレクトリ内(hidemaru.exeと同じ場所)へと コピーする。
      (原則的には、hidemaru.exeと同じ場所である必要があります。これは.NET FrameWorkのdllを動作させる仕組みに拠るためです。)
  • hmJSの意義

    • 古い資産・新しい資産・秀丸マクロを...

      • 「WSH」時代の既存のJScript(=拡張子.jsで実行するファイル)古い資産の流用
      • 32bit/64bitを問わない、.NET やマネージアセンブリ による「新しい資産」
      • そして、秀丸マクロのみが可能な、「秀丸自身の独自の機能」
    • JavaScriptで繋げる!

      これらを、スクリプト言語の経験者数としては、圧倒的な母数を誇る「JavaScript」で、
      シームレスに取り扱えるようにしたもの、それがhmJSとなります。

  • 秀丸マクロファイルや「.js」ファイルの文字コード

    hmJS.dllを利用する秀丸マクロファイルや、.jsファイルは、全て「utf8」の「BOM付き」を前提としています。
    但し、他の文字コードでのファイルも扱うことが可能です。

    詳細は左メニューより、「秀丸マクロから利用するhmJSの関数」の「DoFile」や「SetCodePage」の項目を参照してください。

  • ソース例①

    #JS = loaddll( hidemarudir + @"\hmJS.dll" );
    
    #_ = dllfuncw( #JS, "DoString", R"JS(
    
    // 対象のテキストは、アスキーなのか? 
    function IsTextAscii(text) {
    
        // sjisエンコードインスタンス
        var sjis_enc = clr.System.Text.Encoding.GetEncoding("Shift_JIS");
    
        // バイト数
        var byte_count = sjis_enc.GetByteCount(text);
    
        // 文字数
        var char_count = text.length
    
        // バイト数と文字数が異なる。アウト
        if (byte_count != char_count) {
            console.log("バイト数と文字数が異なる");
            return false;
        }
    
    
        // 半角カタカナの定義(若干あれだがまぁ常識内で)
        var rgxHankakuKatakana = /[\uFF66-\uFF9F]/;
    
        // 半角カタカナが混じってるか
        if ( rgxHankakuKatakana.test(text) ) {
            console.log("半角カタカナが混じってる");
            return false;
        }
    
        return true;
    }
    
    // 今編集中のテキスト全体は、アスキーなのか? 
    var b = IsTextAscii(hm.Edit.TotalText);
    console.log( b );
    
    )JS"
    );
    
    freedll(#JS);
    
  • ソース例②

    #JS = loaddll( hidemarudir + @"\hmJS.dll" );
    
    #_ = dllfuncw( #JS, "DoString", R"(
    
    // .NETアセンブリの読み込みが可能
    // "System.Windows.Forms"だけでも問題はない。
    var addlib = host.lib("System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
    
    var TForms = addlib.System.Windows.Forms;
    var TForm = TForms.Form;
    var frm= new TForm();
    frm.Text = "こんにちわ";
    var iClicked = 0;
    
    
    var TButton = TForms.Button;
    var btn = new TButton();
    btn.Text = "クリック";
    btn.Left = 16;
    btn.Top = 16;
    
    // イベントハンドラも作れる
    btn.Click.connect(function (sender, args) {
        iClicked++;
    
        // デバッグモニター用の関数
        hm.debuginfo("ボタンが押されたよ!!");
        TForms.MessageBox.Show(iClicked.toString());
    
        // 秀丸マクロの「変数」とのやりとりも自由自在
        var filename2 = hm.Macro.Var('filename2');
    
        // .jsのWSHではよく利用されるActiveXObjectの記述方法をもそのままに
        var WSHShell = new ActiveXObject("WScript.Shell");
        WSHShell.Popup(filename2, 0, "今秀丸で開いているファイル", 1);
    
        // 秀丸マクロの「変数」とのやりとりも自由自在
        hm.Macro.Var('$count', iClicked.toString());
    
        // JavaScriptの中から秀丸マクロを一連のコマンドとして実行することも出来る。
        // ヒアドキュメントに似た仕組みが搭載されている。
        hm.Macro.Eval( function() { /*
            // アウトプット枠へ出力
            #OP = loaddll("HmOutputPane.dll");
            #ret = dllfunc(#OP, "Output",hidemaruhandle(0), $count);
            freedll(#OP);
        */ } );
    });
    
    frm.Controls.Add(btn);
    frm.ShowDialog();
    )");
    
    // JavaScriptから秀丸マクロへと書き込まれた変数は、当然秀丸マクロからも見える。
    message("ボタンは" + $count + "回クリックされました");
    
    freedll(#JS);
    
  • ライセンス

    • hmJS

      hmJSは、Apache License 2.0となります。

      ソースの場所

      • Githubにソースがあります。
    • ClearScript

      hmJSはInternalアセンブリとしてClearScriptが利用されています。
      ClearScriptはMicrosoft Public License (MS-PL)ライセンスとなります。

      詳細は、https://clearscript.codeplex.com/を見てください。