ここでは、前節「秀丸エディタ・HmCustomLivePreviewのカスタム 中級編」の続きです。
それでは、HmCustomLivePreviewDefault.macをコピーして、HmCustomLivePreviewCS.macとしましょう。
今回は、JScriptではなくC#で関数を組むことになります。
(C#の知識が全く無い、今後も学習する予定はない、という人はこの節を読む必要はありません。)
hmJSのC#などで作った外部の「マネージドな.dll」の読み込みと 原則的には同じなのですが、少し工夫が必要です。
#dll = loaddll( currentmacrodirectory + @"\HmCustomLivePreview.dll" ); if (!#dll) { message("NO"); endmacro; } #_ = dllfuncw( #dll, "DoString", R"JSCRIPT( // 秀丸の現在使用しているマクロファイルのディレクトリを取得 var path = hm.Macro.Var("currentmacrodirectory"); // そのモジュールのパス(currentmacrodirectory)を「モジュールを置いても良いパス」として追加する AssemblyPath.Add(path); // モジュールを「clr」へと読み込み host.lib(clr, "CustomHtmlTranslater"); // 変数へと、クラスオブジェクトを生成 var htmltrans = new clr.MyNameSpace.MyClass(); function OnCustomTranslateHTML(filename, rawtext) { // 読み込んだC#で作ったライブラリを利用して、rawtextを変換 htmltext = htmltrans.translate(filename, rawtext); // このHTMLをブラウザ表示 return htmltext; } )JSCRIPT" ); #_ = dllfuncw( #dll, "Show", hidemaruhandle(0) );
C#側はわかりやすいサンプルとしましょう。
using System; namespace MyNameSpace { public class MyClass { public string translate(string filename, string rawtext) { string htmltext = rawtext; // 実際には、System.Web.HtmlUtility.HtmlEncodeメソッドなどを利用して正確なものとするだろうが // 今回はjavascript版と同様、簡易な処理とする。 htmltext = htmltext.Replace("<", "<"); htmltext = htmltext.Replace(">", ">"); htmltext = htmltext.Replace("---", "<hr>"); htmltext = htmltext.Replace("\n", "<br>"); return htmltext; } } }
プロジェクトの設定状態
.NET Frameworkのバージョンは、v4.0~4.62あるいは、4系であれば何でも読み込めます。
hmJSは、4系であれば(まだ存在しない v4.8であったとしても)読み込めるようになっています。
これをコンパイルすると、「CustomHtmlTranslater.dll」が出来上がりますので、
HmCustomLivePreview.dllと同じフォルダにコピーしてください。
これをHmCustomLivePreviewで見てみると、下図のようになります。
JScriptで記述したものと同様になったことを確認できたことでしょう。