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、mustLin
eSelect、flagsみたいにしようかと思います。

DLLのエクスポートされた関数名は、DLLの場合は意味があります。
EnumHidemaruFilterとHidemaruFilterGetVersionは必須で、この関数名である必要が
あります。
jsで合わせるかどうかについては、内部的なことですが、今までもブラックボックス
化されているということがありました。
EXEから見たら、DLLは64bitでも32bitでもよくて、"EnumHidemaruFilter"と"Hidemar
uFilterGetVersion"の文字列だけを入口にして、モジュールは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システム上のメッセージが出てしまってまずかったです。
古いバージョンでは読み込まれないようなレジストリの形式にします。

[ ]