秀丸マクロを可能な限り「JavaScript(JScript 5.8)」で記述可能とするためのライブラリです。
JavaScript内で、秀丸マクロの実行が可能です。又、「JavaScript」⇔「秀丸マクロの各種変数やシンボル」が非常に手軽に行えるようになっています。
.NET Frameworkのライブラリが利用可能であるとともに、独自にC#等で制作した.dllも読み込み&利用可能です。
ごく一部の関数を除き、大部分のjsmodeの関数(hidemaruGlobalなどの関数)の記述をそのまま利用することが出来ます。
デスクトップで利用される.jsファイルで良く利用される「ActiveXObject」も利用可能です。
秀丸エディタ ver8.73以上
Visual Studio 2017 C++ ランタイム
x86版をインストールしたことが無い方はインストールしてください。
お手持ちのOSが64bitか32bitかには関わりなく、x86版のインストールが必要です。
.NET Framework 4.0以上。
秀丸エディタ64bit版をご利用の方は、hmJS_x64.zipをダウンロードし、hmJS.dllを差し替えてください。
(又、この場合は、Microsoft VC++ 再頒布可能パッケージは、64bit版をインストールしてください。)
hmJSはストアアプリ版でも利用することが出来ます。詳細は左メニューのストアアプリ版での利用などを参照してください。
これらを、スクリプト言語の経験者数としては、圧倒的な母数を誇る「JavaScript」で、
シームレスに取り扱えるようにしたもの、それがhmJSとなります。
hmJS.dllを利用する秀丸マクロファイルや、.jsファイルは、全て「utf8」の「BOM付き」を前提としています。
但し、他の文字コードでのファイルも扱うことが可能です。
詳細は左メニューより、「秀丸マクロから利用するhmJSの関数」の「DoFile」や「SetCodePage」の項目を参照してください。
#JS = loaddll( hidemarudir + @"\hmJS.dll" ); #_ = dllfuncw( #JS, "DoString", R"JS( message("OK"); moveto(3,4); )JS" ); freedll(#JS);
#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.OutputPane.Output("ボタンが押されたよ!!\r\n"); 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は、Apache License 2.0となります。
hmJSはInternalアセンブリとしてClearScriptが利用されています。
ClearScriptはMITイセンスとなります。
詳細は、https://github.com/microsoft/ClearScriptを見てください。