filterでincolormarkerが上手く行かない?No.09922
styth さん 22/08/08 08:37
 
setcompatiblemode 0x00120000;

$layer="templayer";
if ( !selecting ) selectline;
colormarker 0xff,-1,3,0,0,$layer;

settargetcolormarker $layer;
replaceall " ", "☆■☆", incolormarker;//inselect2; //
#cnt = result;

selectcolormarker $layer;
filter "" , "ToHankakuAlnum";  //英数字/記号/空白のみ半角に

if ( #cnt >= 1 ) {
    question "全角スペースをどうしますか?\n\n" +
            "Y=全角\n" +
            "N=半角";
    #yn = result;
   
    settargetcolormarker $layer;
    if ( #yn )  replaceall  "☆■☆", " ",  incolormarker;//inselect2;//ア
    else        replaceall  "☆■☆", " ",  incolormarker;//inselect2;//イ
}

deletecolormarkerall $layer;

endmacro;


 filterを使って、全角スペースは半角にしたくない時があるので、上記のようなマ
クロで作りました。

 テストした文字列は、「AB C」で、
 filter "" , "ToHankakuAlnum";  //英数字/記号/空白のみ半角に
 この行をコメントすると、//アイの行で、置換されます。("☆■☆"がスペースに
なる)
 コメントを外し、filterが実行されると、置換されません。("☆■☆"がスペース
にならない)

 filterで、incolormarkerが上手く行かない気がします。
 ご確認頂けないでしょうか?
 使い方が違っていたら、ご指摘願います。

 因みに、アイの行のincolormarkerをinselect2にして、実行すると上手く行きます。
(filter実行後、"☆■☆"がスペースになる)

 他にもっと良いやり方があれば、ご教授お願い致します。

[ ]
RE:09922 filterでincolormarkerが上手くNo.09923
秀丸担当 さん 22/08/08 16:36
 
マクロを調べてみたところ、filter文を実行した時点でカラーマーカーが消えている
ようです。
変換系コマンド(filter文)は、元の内容を削除してから挿入するような動作になるの
で、カラーマーカーの内容が保持されないようになってしまいます。
限定的な条件では維持させることはできるかもしれないですが、いろいろなパターン
があって維持は簡単ではなさそうでした。
filter文の後に改めてcolormarker ...,$layer;をするとできるので、維持させるに
は再度カラーマーカーするのが確実でいいと思います。

他のやり方では、全角英数字を検索ダイアログの「すべて検索 - 複数選択」で選択
して、それを全部半角に変換するといいかもしれません。
記号も含めて同等にする場合、秀丸ヘルプの「英数字/記号/空白のみ半角に」にある
対象文字を含めるといいです。
マクロにすると以下のような感じです。

setcompatiblemode 0x00120000;
if ( !selecting ) selectline;

#regular=0x00000010;
setsearch "[!”#$%&’()*+,−./0-9:;<=>?@A-Z[¥]^_
`a-z{|} ̄]+",#regular;
forceinselect 2;//inselect2 選択した範囲[文字単位]
selectallfound;//すべて検索 - 複数選択

tohankaku;
escapeinselect;
endmacro;

[ ]