[ 新規に投稿する ]

複数行の強調で名前付きタグが動作しないNo.42376
Fzok4234 さん 25/12/17 09:53 [ コメントを投稿する ]
  おはようございます。Fzok4234 です。


さて、複数行コメントの強調表示の「開始文字列のタグを終了文字列でも使う」の機能についでですが、
hmonig.dll でサポートされている「名前付きタグ」を使用すると、正しく動作しなくなってしまいます。

例えば、
 ・開始文字列 = (?#hmonig)(?#lookbehind)(?u)(?<A>abcd)
 ・終了文字列 = (?#hmonig)(?#lookbehind)(?u)\k<A>
とした場合では、終了文字列が「abcd」にマッチしなくなってしまいます。

名前無しの番号指定タグを使用して、
 ・開始文字列 = (?#hmonig)(?#lookbehind)(?u)(abcd)
 ・終了文字列 = (?#hmonig)(?#lookbehind)(?u)\1
とした場合は正しく動作しますが、実際の運用においての正規表現のパターンは、部分式呼び出しなどを
多用するために大量の名前付きタグを含ませた非常に複雑なものとなっているため、これらを全て
名前無しタグに置き換えるのは現実的ではありません。


環境は、
 ・秀丸エディタ    : 9.52β4 x64
 ・hmonig.dll      : 0.8.7.0
 ・HmJreSelect.dll : 0.20
となっています。


[ ]
RE:42376 複数行の強調で名前付きタグが動作しないNo.42379
秀丸担当 さん 25/12/17 16:03 [ コメントを投稿する ]
  [開始文字列のタグを終了文字列でも使う]は、数字のみの対応になっています。
hmonig.dllの名前付きタグは対応していません。
そういうことができたらいいということで、参考にさせていただきます。
ヘルプに書いたほうがいいという話になると思いますが、そのことも含めて1つのご意見として参考にさせていただきます。
[ ]
RE:42379 複数行の強調で名前付きタグが動作しないNo.42383
Fzok4234 さん 25/12/17 17:47 [ コメントを投稿する ]
  回答ありがとうございます。


> [開始文字列のタグを終了文字列でも使う]は、数字のみの対応になっています。
> hmonig.dllの名前付きタグは対応していません。

とのことですが、そもそもこの機能を実現させるための正規表現 DLL の関数が、タグ名として
整数しか受け付けない仕様である、ということでしょうか ?

具体的には、
int WINAPI JreGetTagPosition(
    LPJRE2 pJre         , 
    char   chTagWantGet ,
    int*   pcchMatch
) ; 
関数を用いていて、タグ名の '1' 〜 '9' の数字の文字を char 型として chTagWantGet
パラメーターに渡して検索することで、この機能を実現させている、ということでしょうか ?

もしそうであるならば、現状の HmJre.dll のみの関数では実現不可能であるということで、
hmonig.dll を使用している場合は、その専用関数の
int WINAPI JreGetCaptureList(
    LPJRE2            lpjreJre    ,
    NameCaptureInfo** CaptureInfo
) ;
を用いて名前付きタグへのマッチを調べる必要があるみたいですね。


[ ]
RE:42383 複数行の強調で名前付きタグが動作しないNo.42395
秀丸担当 さん 25/12/22 15:57 [ コメントを投稿する ]
  申し訳ありませんが、当該機能の内部実装については回答できかねます。
[ ]
RE:42395 複数行の強調で名前付きタグが動作しないNo.42398
Fzok4234 さん 25/12/22 16:50 [ コメントを投稿する ]
  > 申し訳ありませんが、当該機能の内部実装については回答できかねます。

とりあえず、現状において \k<Foo> とかの名前付きタグへの対応が「不可能」であるかどうかを
確認したかった次第でございます。

本機能が JreGetTagPosition() に依存していることが明確になれば、対応が「不可能」であること
を意味するので、本件は無理難題な要望として諦めがつきます。

「不可能」であることがハッキリすれば、素直に該当のファイル形式を構文解析する LSP サーバーを
作成して、
https://hide.maruo.co.jp/lib/macro/lspclientsample003.html
のマクロで呼び出す方法に着手する、という流れになります。もちろん、LSP サーバー作りは膨大な
作業量となるので、正直あまりやりたくはありませんが ...


[ ]
RE:42398 複数行の強調で名前付きタグが動作しないNo.42399
秀まるお2 さん 25/12/22 17:56 [ コメントを投稿する ]
  これは僕がコメントすべき話かもしれないのでコメントさせていただきますが、HmJre.dll側としては、\k<Foo>のような、任意の名前を付けるタグ付き正規表現には対応予定無しです。

ちなみにJreGetTagPosition()は僕が独自に追加した関数ですが、これも名前付きタグには対応してないです。なので鬼車を使う場合でも対応不可ってことになってしまうんだろうと思います。

鬼車のソースコードを一回見てタグ付き正規表現をどうやって実現してるのか調べたことはあるんですが、よく分からずであきらめました。僕の方とはまったく違うやり方なのは間違いないだろうと思います。
[ ]
RE:42399 複数行の強調で名前付きタグが動作しないNo.42400
Fzok4234 さん 25/12/22 18:06 [ コメントを投稿する ]
  とりあえず、現状の HmJre.dll 互換 API では対処不可能であることを納得いたしました。結局、
手間はかかるが LSP サーバーの自作などで各ユーザーが対処しないといけないようですね。



[ ]
RE:42400 複数行の強調で名前付きタグが動作しないNo.42401
秀まるお2 さん 25/12/22 18:26 [ コメントを投稿する ]
  一応、いろいろ要望いただいて名前付きタグは以前は0〜9までだったのを16個までは対応はしたんですが、それ以上増やすと遅くなってしまうことが分かってまして、対応不可にしました。

鬼車さんは、たぶんタグが増えても遅くならないようなロジックなんだろうと思います。

力不足ですみません。
[ ]

[ 新規に投稿する ]