[ 新規に投稿する ]

V9.25β15No.11519
秀丸担当 さん 23/10/05 15:15 [ コメントを投稿する ]
  V9.25β15を公開しました。
変換モジュールをjavascriptで書ける対応をしています。

以下のページの「先行開発バージョンはこちら」からダウンロードできます。
https://hide.maruo.co.jp/software/hidemaru.html

32bit版:
https://hide.maruo.co.jp/software/bin3/hm925b15_signed.exe

64bit版:
https://hide.maruo.co.jp/software/bin3/hm925b15_x64_signed.exe
[ ]
RE:11519 V9.25β15No.11520
こみやんま さん 23/10/07 02:11 [ コメントを投稿する ]
  >V9.25β15を公開しました。
>変換モジュールをjavascriptで書ける対応をしています。


>変換モジュールをjavascriptで書ける対応をしています。


モジュールのところですが、あまりC言語ソースの提示サンプルに使った
変数名の影響を受けなくてもよいのでは...
(Cの場合は、構造体内の変数名に意味はなかったわけですし)

せっかくJavaScriptでも書けるようにするなら、
ある程度は綺麗に整え直した方がよいかと思います。

------------------------------------------------------------


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

function onFilterVersion() { 
  return 1.23; // ★秀丸本体側で (1<<16)+(2*10)+3  相当に内部で直す
}

------------------------------------------------------------

あと、ヘルプの「秀丸マクロのJavaScript対応のうち、WebView2のマクロはできません。」
は、「JScriptエンジンでの処理となり、WebView2での処理を選択することはできません」的な意味ですよね?


[ ]
RE:11520 V9.25β15No.11521
秀丸担当 さん 23/10/10 09:44 [ コメントを投稿する ]
  ご意見ありがとうございます。
C言語の構造体メンバの名前は、DLLの場合はプログラム的には何でもいいので、確かに何でもいいです。
最近のものに合わせるとしたら、先頭小文字のキャメルケースのほうがいいです。
名前の部分は一応サンプルのものしてexportName、nameJp、nameUs、accel、mustLineSelect、flagsみたいにしようかと思います。

DLLのエクスポートされた関数名は、DLLの場合は意味があります。
EnumHidemaruFilterとHidemaruFilterGetVersionは必須で、この関数名である必要があります。
jsで合わせるかどうかについては、内部的なことですが、今までもブラックボックス化されているということがありました。
EXEから見たら、DLLは64bitでも32bitでもよくて、"EnumHidemaruFilter"と"HidemaruFilterGetVersion"の文字列だけを入口にして、モジュールはDLLに限らない何かです。
そのためjsでも同じ名前であれば、ブラックボックスの中身の1つなので都合がいいです。
とはいえ、pszExportNameがexportNameになるのであれば、この2つだけ大文字が残るのはすっきりしないです。
頭文字は許容して"enumHidemaruFilter"と"hidemaruFilterGetVersion"でいけるようにしてみます。

WebView2のマクロが使えないというのは、jsmode "WebView2";に相当するjavascriptはできないという意味になります。
必然的にJScriptということになります。(chakraというのもありますし、将来的にはわからないですが)

変換モジュールのネタはあったのですが、V9.25の当初のhttpサーバーとsocketを作って今頃アプリ間マクロを作り始めたら、不足がけっこうあって、それを補っていたら変換モジュールもできそうで対応してしまいました。
[ ]
RE:11521 V9.25β15No.11522
こみやんま さん 23/10/11 00:16 [ コメントを投稿する ]
  >> て"enumHidemaruFilter"と"hidemaruFilterGetVersion"でいけるようにしてみます。

この2つ、たしかに、元のdll/extern ではその関数名である必要があり、
それと合わせておきたいという主張なのはわかりますが、
元の関数名が非対称というか統一性がなくないですか?
(まぁすごい細かいことだし、まーいいじゃないか、ってな話ではあるんですが)

元々の関数名がたとえば、
 HidemaruFilterGetList()
 HidemaruFilterGetVersion()
とかならまだ統一性があるから、「まぁそのまま流用して先頭だけ小文字とかでもいいかな」とかも思わないではないですが。

いずれにしても関数名に関しては細かいことですが..


あと、C/dllとは異なり、使える道具(関数等)が「今後の秀丸バージョンが上がることで非同期関数が増えることに大きく依存する」性質を持っているので、

hidemaruversion の指定なども必要になるような気も。

他の案としては、引数が1つ渡される形にして、
---------------------------------------------------------------
setFilterAttribute(filter) {

   filter.version = 1.31;

   filter.hidemaruversion = 9.34;
  // このfilterが実行可能な最低の秀丸バージョンが指定可能
  (これによって実行してからではなく、
   フィルターとして秀丸本体に登録した段階で「ダメですよ」と出せる)

   filter.list = 
   [
    {
      exportName: "sampleFunc1",
      nameJp: "テスト変換1(大文字)",
      nameUs: "Test Filter 1(upper case)",
      accelKey: "X",
      needLineSelect: false,
      bFlags: 0
    },
    ....
   ];  
}
---------------------------------------------------------------

みたいな案でしょうかねぇ。


(リターンする形ではなく、引数に設定する形にすることで、
 設定項目の大枠は継承しているが、違う形式であることが示唆できる)



[ ]
RE:11522 V9.25β15No.11523
秀丸担当 さん 23/10/11 10:57 [ コメントを投稿する ]
  元の関数名が非対称というのは、確かにその通りでした。
元々もっといい名前になっていればよかったですが、いまさら変えるのも何なので、まあいいじゃないかということでお願いします。

hidemaruversionのような判定は、事前にできたらいいです。
hidemaruversionの指定は通常のマクロ実行のようにエラーは出ませんでした。
V9.20くらいで、パラメータありの文相当とは別に、パラメータなしのキーワード相当も追加していました。
例えば、強引ですが以下のような感じにして変換名で表すことがやってみたらできました。
  {
    ExportName: "sampleFunc",
    NameJapan: (Number(hidemaruversion().replace(/(\..*)\./,"$1"))<9.26)?"(バージョンが古いです)":"変換名",

あとそもそも古いバージョンで動かそうとするとhmfjsが読めなくて、LoadLibraryが失敗した的なWindowsシステム上のメッセージが出てしまってまずかったです。
古いバージョンでは読み込まれないようなレジストリの形式にします。
[ ]

[ 新規に投稿する ]