JavaScriptでの秀丸・変換モジュールのサンプル

秀丸 v9.25正式版以降利用可能

(変数サイズの制限等がない) jsmodeがあるため、現在ではわざわざ変換モジュールにする利点はほぼ皆無ですが、
仕組み的には、JavaScriptでも変換モジュールは作成可能となっています。

JavaScriptの変換モジュール使用シーン

テキストのうち「選択している部分だけA⇒Bへと変換する」
それが処理の全てでその前後に処理が広がらない、拡張していくようなことがない。

このような場合に限定して、変換モジュールにする利点があるかもしれません。

ソース例

jsの変換モジュールの拡張子は「.hmfjs」ある必要がある

test.hmfjs
function enumHidemaruFilter(){
  return [
    {
      exportName: "sampleFunc1",
      nameJapan: "テスト変換1(大文字)",
      nameUs: "Test Filter 1(upper case)",
      accel: "X",
      mustLineUnit: false,
      fags: 0
    },
    {
      exportName: "sampleFunc2",
      nameJapan: "テスト変換2(タグ)",
      nameUs: "Test Filter 2(tag)",
      accel: "Y",
      mustLineUnit: false,
      flags: 0
    },
    {
      exportName: "sampleFunc3",
      nameJapan: "テスト変換3(インデント)",
      nameUs: "Test Filter 3(indent)",
      accel: "Z",
      mustLineUnit: true, //行単位
      flags: 0x01 //LFでやりとり FILTERFLAG_LFONLY
    },
  ];  
}

function hidemaruFilterGetVersion() { 
  return 1.23;
}

function sampleFunc1(strIn) {
  //テスト変換1(大文字)
  return strIn.toUpperCase();
}

function sampleFunc2(strIn) {
  //テスト変換2(タグ)
  return "<tag>"+strIn+"</tag>";
}

function sampleFunc3(strIn) {
 //var exe=hidemaru.runProcess("cmd /C test.cmd","","stdio","utf8");
  var exe=hidemaru.runProcess("sort.exe","","stdio","sjis");
  exe.stdIn.write(strIn);
  exe.stdIn.close();
  return exe.stdOut.readAll(5000);
}

登録方法

登録方法は一般の変換モジュールと同じです。

jsmodeから呼び出せる?

filterからも呼び出せるでしょうが、execjs文でjavascriptファイルをimportした方が分かりやすい記述になることでしょう。

test.hmfjs
      execjs(hidemarudir + "\\test4.hmfjs");
      js {
         var text = sampleFunc1("abc");
      }