hilightファイルでのインデント表示No.41859
ANACOSTIA さん 25/04/11 09:11
 
 現在、hilightファイルではタブと改行が使えません。
 定義式を視易くする為に、タブと改行を使い、成形した表示にしたいのですが、対
応は難しいでしょうか?
 マクロ構文と同じように、タブと改行を無視して解釈するようにすれば行けると思
うのですが......。

 自分の使い方だと、正規表現で前方後方一致不一致も使った複雑な条件式になって
いるのですが、1行が2000〜4000桁にもなってしまっています。
 この状態で、文法エラーを起こさず、又、要求される結果が間違いなく得られる条
件式にする為の編集・追記作業が難しくなってきています。
 なので、これが解消できたらありがたいです。

[ ]
RE:41859 hilightファイルでのインデントNo.41861
秀丸担当 さん 25/04/11 10:59
 
hilightファイルは、改行を区切りとして定義しているので、改行を含めたり無視し
たりすることはできません。
タブ文字については、試してみたら無視ではなくタブ文字のまま使えました。
通常の強調表示の場合は、カンマ以降は改行までほぼ生で書くことができます。
複数行の強調の場合は、ファイルタイプ別の設定から保存した場合は可読性が低い形
式ですが、マクロヘルプのloadhilightのところに書かれている方法で、可読性があ
る書き方にすることも可能です。
改行を入れて見やすくする場合は、編集のために一時的に入れて、保存時に戻すなど
をしてほしいです。

[ ]
RE:41861 hilightファイルでのインデントNo.41862
ANACOSTIA さん 25/04/11 11:20
 
> 改行を入れて見やすくする場合は、編集のために一時的に入れて、保存時に戻すな
>どをしてほしいです。

 現状、hilightファイルを常に編集+上書き保存しながら行っているので、その方法
だと、正直やってられないです。


 これまでとの互換性の問題があると思うのですが、例えば[上のいずれかと組み合
わせするフラグ(10進数で上の値と足し算)]に新たなフラグを設定し、
 
・このフラグが0 → これまで同様、タブと改行の存在を許さず、行頭から行末まで
を一文と見做す。
・このフラグが〇 → タブと改行を無視し、行頭から";"までを一文と見做す。";"自
体を使いたい時は"\;"とする。

という方法で互換性の確保は可能だと思います。

[ ]
RE:41862 hilightファイルでのインデントNo.41863
igus さん 25/04/11 15:10
 
今の仕様の範囲で自分ならどうするか考えて、例えば拡張子".hilight2"のファイル
を編集用に準備してマクロを使ってhilightファイルを書き出すなんて方法を思いつ
いたのですが、どうでしょうか?

//hilight出力.mac
selectall;copy;
$f=leftstr(basename,strlen(basename)-strlen(filetype))+".hilight";
openfile "/h";
//openfile "";
paste;saveas $f;
replaceallquick @"\t","",regular;
replaceallquick @"(?<![\\]);",@"\n",regular;
replaceallquick @"\\;",";",regular;
save;
#hwnd=hidemaruhandle(0);
setactivehidemaru 1;
closehidemaruforced #hwnd;
endmacro;


[ ]
RE:41863 hilightファイルでのインデントNo.41864
秀丸担当 さん 25/04/11 16:59
 
そういうご意見があるということで参考にさせていただきます。
現状で、igusさんが書かれているように、変換する方式にするのがいいと思います。

[ ]
RE:41863 hilightファイルでのインデントNo.41866
ANACOSTIA さん 25/04/14 08:22
 
 マクロ文ありがとうございます。

 現在、
・変換後のファイルを任意のフォルダに出力する(変換前のhilightファイルと変換後
のhilightファイルを別ディレクトリに置きたい)
・"//"で始まる行に対しては変換の対象としない
となるように修正しようとしたのですが、かなり苦戦しております。
 こちらも実現できるような構文を戴けたら幸いです。

[ ]
RE:41866 hilightファイルでのインデントNo.41868
igus さん 25/04/14 12:12
 
//hilight出力するよ.mac

setcompatiblemode 0x00100000;

selectall;copy;
$dir="c:\\user\\";
$f=leftstr(basename,strlen(basename)-strlen(filetype))+".hilight";
openfile "";
paste;saveas $dir+$f;

begingroupundo;disabledraw;
setsearch "^.[^/].*", 0x00100010;
colormarkerallfound 0x000000,0x944dff,-1,0,0,"a";
selectcolormarker "a";
replaceall @"(?<![\\]);",@"\n",regular,inselect2;
selectcolormarker "a";
replaceallfast @"\t","",regular,inselect2;
selectcolormarker "a";
replaceallfast @"\\;",";",regular,inselect2;
selectall;deletecolormarker "a";escape;
save;

#hwnd=hidemaruhandle(0);
//setactivehidemaru 1;
//closehidemaruforced #hwnd;
endgroupundo;enabledraw;
endmacro;

[ ]
RE:41868 hilightファイルでのインデントNo.41869
ANACOSTIA さん 25/04/14 15:41
 
 戴いた構文を基に、
・保存先フォルダのパスを設定
・";"を改行に置換する前に既存の改行を削除
・置換対象から除く行に、"/"で始まる行だけではなく、空行(1文字目が改行)も追加
しようと弄ったのですが、上手くいきません。
 具体的には、上記2番目を実現すべく、

colormarkerallfound 0x000000,0x944dff,-1,0,0,"a";

の下に、

selectcolormarker "a";
replaceallfast @"\n","",regular,inselect2;

を挿入したのですが、改行が消えないのです。

[ ]
RE:41869 hilightファイルでのインデントNo.41870
igus さん 25/04/14 15:52
 
selectcolormarker "a";
を省いたらどうなりますか?
ここのせいで改行のみの行が拾えてない気がします。

[ ]
RE:41870 hilightファイルでのインデントNo.41872
ANACOSTIA さん 25/04/15 09:44
 
replaceallfast @"\n","",regular,inselect2;
の上の
selectcolormarker "a";
を消しても、やっぱり改行が消えません。

[ ]
RE:41872 hilightファイルでのインデントNo.41874
igus さん 25/04/15 10:26
 
inselect2も要らないですね。
replaceallfast "^\n","",regular
でどうでしょう。

[ ]
RE:41874 hilightファイルでのインデントNo.41875
ANACOSTIA さん 25/04/15 11:27
 
 空行(行頭の改行)は消えて欲しくないのです。
 行頭の改行以外の改行を削除してから";"を改行に置換したいのです。

[ ]
RE:41875 hilightファイルでのインデントNo.41877
igus さん 25/04/15 13:10
 
意図は分かったと思うのですがうまい方法が思いつかずに、あまりスマートではない
ですがこんな感じでどうでしょう。

//行頭以外の改行を消すよ.mac
begingroupundo;disabledraw;gofiletop;
while(1){
  searchdown "\n",regular;delete;
  if(code==-1)break;
}
replaceallfast "// ","\n// ",regular;
gofiletop;delete;
enabledraw;endgroupundo;
endmacro;

[ ]
RE:41877 hilightファイルでのインデントNo.41878
igus さん 25/04/15 14:24
 
別バージョン

//行頭以外の改行を消すよ2.mac

setcompatiblemode 0x00100000;
begingroupundo;disabledraw;
setsearch "^.[^/].*", 0x00100010;
colormarkerallfound 0x000000,0x944dff,-1,0,0,"a";
selectcolormarker "a";
replaceallfast "$","○△□",regular,inselect2;
replaceallfast "○△□\n","",regular;
enabledraw;endgroupundo;
endmacro;

[ ]
RE:41878 hilightファイルでのインデントNo.41883
ANACOSTIA さん 25/04/16 16:04
 
 「(空行、又は、行頭が"//"の行)以外の行の改行で、且つ、次の行が(空行、又は、
行頭が"//"の行)ではない行の改行を削除」という動作を実現する為の構文を生み出す
のに、泥沼に嵌り込んでしまっていました。

 結局は、
・タブと改行で成形したhilightファイルの内容をコピー
・新しいウィンドウ(タブ)を新規作成し、そこに貼り付け
・ "\t" を削除
・ "(?<!^//)(.+)\n(?!\n|//)" を "\1" に置換
・ "(?<!\\);" を削除
・ 参照しているhilightファイルに、このhilightファイルを上書き保存
・ hilightファイルを参照しているウィンドウを更新
という操作なら、目的とする動作が実現できそうなので、これをマクロでやることに
なりました。
 今まで長々とお付き合い戴きありがとうございました。

P.S.
 現在、○○○○という文字列以外の全ての文字列にマッチさせる、単純明快な正規
表現構文に悩んでいます。

[ ]