[ 新規に投稿する ]

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.
 現在、○○○○という文字列以外の全ての文字列にマッチさせる、単純明快な正規表現構文に悩んでいます。
[ ]

[ 新規に投稿する ]