対応する括弧における対応を除外したい括No.41847
ANACOSTIA さん 25/04/02 10:51
 
 "("と")"を対応させたいが、"\("と"\)"は対応する括弧の対象から除きたい、
つまり、"(\))"において、最初の"("と最後の")"を対応させたい(")"を無視したい)
時、これは可能なのでしょうか?
 複数行コメントにおいて、単一の文字列として"("と")"を"コメント"として指定し
ても、望む結果になりませんでした

[ ]
RE:41847 対応する括弧における対応を除外No.41849
秀丸担当 さん 25/04/02 13:05
 
強調表示文字列(複数行)のプロパティで、種類を[単一の文字列]にしている場合は、
使用するのは開始文字列だけになっています。
種類を[複数行]にして、開始文字列を"("、終了文字列を")"、エスケープ文字を"\"
とすると、"(\))"の最後まで強調されるようになると思います。

[ ]
RE:41849 対応する括弧における対応を除外No.41850
ANACOSTIA さん 25/04/02 14:16
 
 申し訳ありません。
 当方の記述に誤りがありました。
 正しくは、2行目と3行目が

つまり、"(\))"において、最初の"("と最後の")"を対応させたい("\)"を無視したい)
時、これは可能なのでしょうか?
 複数行コメントにおいて、単一の文字列として"\("と"\)"を"コメント"として指定
しても、望む結果になりませんでした

でした。
 この場合、"\("と"\)"を無視した上で、"("と")"を対応させることは可能なのでし
ょうか?
 "単一の文字列"ではなく、"複数行"とした上で、
・開始文字列 → "\\\("
・終了文字列 → "."や".{0}"としても駄目でした。

[ ]
RE:41850 対応する括弧における対応を除外No.41851
ANACOSTIA さん 25/04/02 14:20
 
開始文字列は"\\\(|\\\)"としてください。
何度もすみません。

[ ]
RE:41851 対応する括弧における対応を除外No.41852
秀丸担当 さん 25/04/02 16:59
 
単一の文字列の場合は、複数行の強調としての振る舞いはほぼ無くなるので、使えな
いです。
複数行で、入れ子を設定するとある程度可能だと思います。

まず、"("から")"は複数行で、[子を含むのを許可]をONにします。

"\("と"\)"も複数行で、終了文字列を"(?=.*)"や".*?"のような0文字全てにヒットす
るようにします。
そして[子になるのを許可]をONにします。
開始文字列は正規表現で"\\\(|\\\)"の1つにまとめていいと思います。

こうしておくと一応できました。
正規表現の文字列を想定した強調で、あらゆるパターンに対応できるかどうかはわか
らないです。

[ ]
RE:41852 対応する括弧における対応を除外No.41853
ANACOSTIA さん 25/04/03 12:09
 
 ご返信ありがとうございます。
 どうも泥沼に嵌り込んでしまったようで、暫く頭を冷やす時間をください。

[ ]
RE:41853 対応する括弧における対応を除外No.41854
igus さん 25/04/05 09:29
 

具体例があると分かりやすいのですが、ちなみに「対応を除外したい括弧」のサンプ
ル例を提示してもらうことはできますか?

[ ]
RE:41854 対応する括弧における対応を除外No.41855
ANACOSTIA さん 25/04/08 08:13
 
 例えば、こんな文字列です。
 
○○○○○(○○○○○○○\)○○○\(○○○○○○\)○○○○○○\(○○○○)○○
○○○○

 これで、一番最初の"("と一番最後の")"を対応する括弧の対象としたい、というこ
とです。


 で、結局は実現できました。
 要は、複数行コメントでは、

特に強調4
  |
特に強調1
#ifdef等での無効部分---------
コメント---------
行の強調4
  |
行の強調1
文字定数---------
数値
強調8
 |
強調1

の優先順位が無視される、ということを失念していました(複数行コメント一覧の上
下位置だけで決まる)。
 実際には、複数行コメントにて、他にも強調表示の定義をしています。
 また、"("、")"、"\\("、"\\)"は対応する括弧の対象としたいが、"\("、"\)"、"\
\\("、"\\\)"は対応する括弧の対象から除きたい、というものでした。

 で、複数行コメントにて、

単一の文字列 → (?#lookbehind)(?<=[^\\](\\\\)?)(\\\(|\\\))  (実際には他の
種類の括弧も記述してある)
表示方法 → コメント

単一の文字列 → (?#lookbehind)(?<=[^\\](\\\\)?)[()]  (実際には他の種類の括
弧や文字も記述してある)
表示方法 → 強調1

とし、入れ子設定や終了文字列を設定せずに希望する動作ができるようになっている
ようです。

[ ]
RE:41855 対応する括弧における対応を除外No.41856
igus さん 25/04/08 20:02
 
うまくいったようで良かったです。
こちらで考えていたのは41764でもコメントしましたが"\(","\)"を別の文字に一時退
避させるマクロで、選択部だけ処理できるように直してみました。解決済みのようで
すがせっかく作ったので紹介だけさせてください。

//括弧の変換と復元.mac

setmenudelay 700;
mousemenu
"&H 変換",   // 1
"&F 復元";   // 2
#r=result;
begingroupundo;#x=x;#y=y;
if(!selecting)selectall;
if(#r==1){
  replaceallfast @"\(","【",inselect2;
  selectinselect;
  replaceallfast @"\)","】",inselect2;
}else if(#r==2){
  replaceallfast "【",@"\(",inselect2;
  selectinselect;
  replaceallfast "】",@"\)",inselect2;
}
moveto #x,#y;
endgroupundo;
endmacro;


[ ]