English help on website



変換モジュール(JavaScript版)作成方法(.hmfjs)(Ver9.34対応版)
目次変換モジュール− 変換モジュール(JavaScript版)作成方法(.hmfjs)

変換モジュールをJavaScriptで書くことができます。(V9.25以降)

JavaScript版の変換モジュールは、秀丸マクロのJavaScript対応の限定的な使われ方になります。
秀丸マクロのJavaScript対応のうち、WebView2のマクロはできません。
非同期で呼ばれたような位置づけになります。そのため、非同期対応でないメソッドは使えません。
限定的である代わりに、変換系コマンドだけでなく、filter文/関数や置換でも使うことができます。

DLL同様、プログラム的に可能なことはできてしまうので、文字列の操作に限った記述にしてください。

enumHidemaruFilter関数とhidemaruFilterGetVersion関数が必須です。
拡張子.hmfjsとして保存します。

enumHidemaruFilterは、変換関数/表示名等を定義したオブジェクトの配列を返してださい。
各プロパティの意味はDLL版と同じです。

hidemaruFilterGetVersionは、バージョンを返します。
値はDLL版と同じか、小数点の数値表記でもいいです。

各変換用の関数は、DLL版と違います。
パラメータに入力の文字列、返り値に出力の文字列があるだけです。
DLL版にあるような関数に対してのパラメータの入出力はありません。



test.hmfjs
function enumHidemaruFilter(){
  return [
    {
      exportName: "sampleFunc1",
      nameJapan: "テスト変換1(大文字)",
      nameUs: "Test Filter 1(upper case)",
      accel: "X",
      mustLineUnit: false,
      flags: 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) {
  //テスト変換3(インデント)
  return strIn.replace(/^/gm, "\t" ).slice(0,-1);
}



test2.hmfjs
function enumHidemaruFilter(){
  return [
    {
      exportName: "cmdFilter",
      nameJapan: "コマンドラインフィルタ",
      nameUs: "command line filter",
      accel: "M",
      mustLineUnit: true,
      flags: 0
    },
  ];  
}

function hidemaruFilterGetVersion() { 
  return (1<<16)+(0*10)+0;//1.00
}

function cmdFilter(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);
}