HmJre.dllの公開用ソースコードNo.39815
秀まるお2 さん 22/05/27 16:23
 
 HmJre.dllのV5.30のソースコードを公開用に改造してアップロードしました。

    https://hide.maruo.co.jp/software/hmjre.html

 からダウンロードできます。

 一応、一番単純な文字列検索(固定文字列の検索)だけは出来ます。それで果たし
て秀丸エディタからどう呼ばれるかは検証できると思います。

[ ]
RE:39815 HmJre.dllの公開用ソースコードNo.39816
fzok4234 さん 22/05/27 18:08
 
ソースコードの提供ありがとうございます。

一応、確認のために申し上げますが、一通り読んだところ、Unicode を「秀丸独自
コード」に戻す際に
全角であったかどうかを判別する GetZenkakuFlag() 関数が見当たらないのですが、
同等のロジックは当方が見落としているだけでソース内にちゃんと書かれていますよ
ね ?


[ ]
RE:39816 HmJre.dllの公開用ソースコードNo.39817
mig さん 22/05/27 18:37
 
同梱の説明.txtには、

---ここから---
 このソースコードの中身についてや秀丸エディタの内部のデータ構造、処理方法な
どについての質問には一切お返事できません。
---ここまで---

とありますが...。

>ソースコードの提供ありがとうございます。
> ......
>

[ ]
RE:39817 HmJre.dllの公開用ソースコードNo.39818
fzok4234 さん 22/05/27 18:50
 
いや、もし当方の見落としとかじゃなくて本当に全角判別ロジックが HmJre.dll 側
に搭載されて
いなかったら、後日改めて秀丸エディタ本体から抜粋した全角判別ロジックだけの
ソースコードとか、
あるいはこれが非公開なら全角判別専用の DLL のバイナリの提供を受ける必要があ
ると思って
念のために確認しています。



[ ]
RE:39817 HmJre.dllの公開用ソースコードNo.39819
fzok4234 さん 22/05/27 19:05
 
実際に正規表現 DLL からエラーメッセージを返す時には
  int WINAPI GetJreMessage(int messageType, int language, LPSTR message, int
 messageLength ) ;
として LPSTR すなわち「秀丸独自コード」で message ポインターへメッセージ本文を
出力しないといけないです。このため、正規表現 DLL 側にも「秀丸独自コード」生成の
ロジックが必要ですが、その中で全角文字かどうかのフラグを設定しないといけない
箇所があります。


[ ]
RE:39819 HmJre.dllの公開用ソースコードNo.39820
fzok4234 さん 22/05/27 19:35
 
HmJre.dll のソースの GetJreMessage() の実装を確認したところ、Shift-JIS の文
字列リテラルを
ハードコードしているだけで、任意の Unicode の WCHAR を「秀丸独自コード」に逆
変換する
ロジックは実装されていません。おそらく、後日改めて全角判別ロジックだけを提供
してもらう
必要性があるようです。



[ ]
RE:39819 HmJre.dllの公開用ソースコードNo.39821
こみやんま さん 22/05/27 19:40
 
wch 1つに基づいて(sjis以外なら)4バイトにパッキングしているだけなのだから、
全角半角かはすぐだせるのでは。0x0〜0xFFFFまでの現状の秀丸の変換はわかるわけ
ですし。

0の時で全マップ 8の時で全マップして、true, false を作っていけばすぐなのでは。

[ ]
RE:39821 HmJre.dllの公開用ソースコードNo.39822
こみやんま さん 22/05/27 19:45
 
ちなみに、現在 私が把握しているwchar_t スタートの秀丸エディタが処理している
全角半角マップ(及びwchar_tからの秀丸独自エンコードへのDWORD値)は以下です。

https://github.com/komiyamma/hm_analyze_unique_encode/tree/main/%E5%85%A8%E8%A7%92%E5%8D%8A%E8%A7%92%E3%83%9E%E3%83%83%E3%83%97

[ ]
RE:39821 HmJre.dllの公開用ソースコードNo.39823
fzok4234 さん 22/05/27 19:51
 
サイトー企画さん側から全角判別ロジックが提供できない場合は、おっしゃる通り最
終手段として
U+0000 〜 U+FFFF までの全角かどうかのハッシュテーブルを用意することになる見
込みです。


[ ]
RE:39823 HmJre.dllの公開用ソースコードNo.39824
こみやんま さん 22/05/27 20:23
 
>サイトー企画さん側から全角判別ロジックが提供できない場合は、おっしゃる通り
>最終手段として
>U+0000 〜 U+FFFF までの全角かどうかのハッシュテーブルを用意することになる見
>込みです。
>
正直 秀丸のようにスタートが内部的にsjis基準ならまだしも、
基本制作する際は、基準はutf16/wstring になるでしょうから、
そこからのダイナミックなマップで処理した方がはるかによいかと。
(hmPython や hm.NET もそうしています)

> utf16 ⇒ cp932 にして、cp932の範囲ならcp932の文字コードを足し込んで、
> そうでなかったらutf16の文字コードをスタートユニコード付けながら4バイトへと
>ビット変換しつつ...
明らかにめちゃくちゃ遅いかと。
wchar_t ⇒ 秀丸独自ユニコードへの「DWORD変換結果値」だけのテーブルもっておい
て、
ただひたすら配列のindex(=wchar_tの値)⇒value(秀丸独自ユニコード値)へと変換し
た方がはるかに速度が速いと思います。


[ ]