秀丸エディタ・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で記述したものと同様になったことを確認できたことでしょう。