最終更新日 2024-09-25

秀丸エディタ・HmCustomLivePreviewのカスタム 応用編

概要

ここでは、前節「秀丸エディタ・HmCustomLivePreviewのカスタム 中級編」の続きです。

HmCustomLivePreviewCS.macの作成

それでは、HmCustomLivePreviewDefault.macをコピーして、HmCustomLivePreviewCS.macとしましょう。

今回は、JScriptではなくC#で関数を組むことになります。
(C#の知識が全く無い、今後も学習する予定はない、という人はこの節を読む必要はありません。)

「HmCustomLivePreviewCS.mac」編集

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#側

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("<", "&lt;");
            htmltext = htmltext.Replace(">", "&gt;");
            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で記述したものと同様になったことを確認できたことでしょう。