hmjre.dll関連で質問No.01584
h-tom さん 09/01/04 23:13
 

h-tom です。

hmjre.dll関連で、いくつか質問があります。(DLLの使い方?)

1)hmjre.dllで、Unicodeでの検索が可能なのか?
 ヘルプの「Jre2SetCodePage」の所には、UTF-8はダメとありますが、
 UTF-16(LE)は可能なのでしょうか?
 簡単なサンプル作って確認してみましたが、失敗してしまいます。
 何か方法があるのか、それとも、UTF-16もダメなんでしょうか?
 
 Jre2SetCodePage で、1200(UTF-16LE)を設定し、検索パターンと、
 対象文字列を、UTF-16(LE)で、渡してみました。
 検索パターン:b.+
 検索文字列 :abcdef
 (実際はUTF-16LE)
  Jre2GetMatchInfoでは、マッチしない。
  Jre2GetMatchInfo_HmJreでは、マッチするが(nPosition=2)、長さは1。

2)Jre2SetCodePageで、FALSEを返しても問題ないか?
 hmjre.dll互換の正規表現DLLで、ruby等で使用されている、正規表現エン
 ジン鬼車への対応を考えています。
 鬼車自体、各種エンコーディングに対応しているため、Jre2SetCodePageを
 利用して、エンコードを切り替えようと思っています。
 対応していないコードページの場合、FALSEを返そうかと思いましたが、
 ヘルプを見ると、「返り値は現在の所、常にTRUEとなっています。」と、
 あります。Jre2SetCodePageで、FALSEを返すと、何か問題がありますか?
 (Jre2SetCodePageではなく、Jre2Compileで、FALSEにした方がいい?)

[ ]
RE:01584 hmjre.dll関連で質問No.01585
秀まるお さん 09/01/05 09:37
 
> 1)hmjre.dllで、Unicodeでの検索が可能なのか?

 コードページを932にした上で、秀丸エディタの内部的な形式を使ってユニ
コード文字列を渡せば一応検索は可能なんですが、その内部的な形式がどういう
物なのかは非公開になっています。

 その仕様を非公開にする関係もあって、最近のHmJre.dllのソースコードも公
開してないです。

 コードページをutf-8にするのもダメです。HmJre.dllの内部では、
「IsDBCSLeadByteEx」ってAPIを使って2バイト文字か1バイト文字かの判定を
しているんですが、utf-8は3〜4バイトになることもあり、そういう「3バイ
ト以上の文字」についてはHmJre.dllは想定外になってしまい、結果としてうま
く動作しないです。utf-16はもっとダメです。

> 2)Jre2SetCodePageで、FALSEを返しても問題ないか?

 HmJre.dll互換のDLL側にJre2SetCodePage関数を実装するとして、その関数が
FALSEを返したとしても、秀丸エディタが誤動作することは無いです。秀丸エデ
ィタ(秀丸メールも含む)はJre2SetCodePage関数からの返り値を無視していま
す。

[ ]
RE:01585 hmjre.dll関連で質問No.01586
h-tom さん 09/01/06 01:05
 

h-tom です。

>> 1)hmjre.dllで、Unicodeでの検索が可能なのか?
> コードページを932にした上で、秀丸エディタの内部的な形式を使ってユニ
>コード文字列を渡せば一応検索は可能なんですが、その内部的な形式がどういう
>物なのかは非公開になっています。
現状では、Unicodeそのものでの検索は、不可ということですね。
(汎用(?)正規表現検索エンジンとして)将来的に、Unicodeでの検索が可能になると、
うれしいですが、いろいろと難しそうですね。

それと、HmJre.dll互換DLL関連で、確認したいのですが、
「コードページが932」で、「秀丸エディタの内部的な形式の文字列」
という状態は、HmJre.dll以外でも、あり得るのでしょうか?
(HmJre.dll用の特殊な方法(?)なのかどうか、ということです。)
JRE32.DLLでも、「CP932」+「秀丸エディタの内部的な形式の文字列」で、特に
問題がないなら、心配しなくてもいいとは思うのですが。

>> 2)Jre2SetCodePageで、FALSEを返しても問題ないか?
> HmJre.dll互換のDLL側にJre2SetCodePage関数を実装するとして、その関数が
>FALSEを返したとしても、秀丸エディタが誤動作することは無いです。秀丸エデ
>ィタ(秀丸メールも含む)はJre2SetCodePage関数からの返り値を無視していま
>す。
了解です。対応していないコードページの場合、Jre2SetCodePageでFALSEを返し、
さらに、Jre2Compileで、FALSEを返すようにします。

[ ]
RE:01586 hmjre.dll関連で質問No.01587
秀まるお さん 09/01/06 09:22
 
> それと、HmJre.dll互換DLL関連で、確認したいのですが、
> 「コードページが932」で、「秀丸エディタの内部的な形式の文字列」
> という状態は、HmJre.dll以外でも、あり得るのでしょうか?

 ありえてしまいます。

 実は、ソースコードを公開していた頃のHmJre.dllまでは、そういう状態にな
ってました。しかし、実はそれでは問題の起きるケースが少々あって、それでち
ょっとまずいということで、最近のHmJre.dll(たしかV1.50以降)ではユニコー
ド文字についての特別な処理が入っています。

 もし内部的なユニコード文字についての情報がどうしても必要でしたら、それ
はそれで個別に教えて差し上げることは出来るので、メールで連絡いただきたい
と思います。 僕のメールアドレスは、 maruo@mitene.or.jp です。

[ ]
RE:01587 hmjre.dll関連で質問No.01593
h-tom さん 09/01/09 01:04
 

h-tom です。

> ありえてしまいます。
>
> 実は、ソースコードを公開していた頃のHmJre.dllまでは、そういう状態にな
>ってました。しかし、実はそれでは問題の起きるケースが少々あって、それでち
>ょっとまずいということで、最近のHmJre.dll(たしかV1.50以降)ではユニコー
>ド文字についての特別な処理が入っています。
現状のhmjre互換DLLで、状況を確認できました。
hmjre.dllの動作を確認しながら、対処方法を検討してみます。

内部的なユニコード文字についての情報は、対処方法が決まってから、
改めて問い合わせるようにします。

[ ]