\r\n と \n の揺れは hidemaru.* hidemaruNo.11641
こみやんま さん 24/05/16 04:47
 
秀丸の「編集ペイン」の改行文字のコードにかかわらず、
hidemaruGlobal.***やhidemaru.*** の関数(というかメソッドというか)群を通し
て取得したものは、
必ず、\r\nになると考えてよいのでしょうか?

他のところで、最近いくつか投稿していて思ったのですが、(\r\nでも\nでもどちら
でも良いように記述してはいるのですが)
編集ペインの改行文字のモードを「LF」だけにしてみたとしても、
hidemaruGlobal.* やhidemaru.*** を通して取得した文字列は必ず\r\nになっていま
す。

var targetText = gettotaltext(); // lfだけでもtextは\r\nは(多分)確定

var textArr = targetText.split("\n"); // \nだけ指定だけど、\rは空気を読んで
勝手に消す処理がJSエンジン側に元々入っている

var jointext = textArr.join("\n"); // 本来は元通りなハズなんだけど、もちろん
元には戻らない。理由は元は\rがあったから。こちらは空気を読んで自動で追加され
たりはしない。

この辺をどのようにするのが妥当なのかなぁ。といった次第です。




var textArr = targetText.split(/\r?\n/);

for(...) {
}

var joinText = "";
if (targetText.includes("\r\n")) {
    // \r\n が改行だったなら、\r\nでくっつける。
    joinText = textArr.join("\r\n");
} else {
    // \nが改行だったなら\nでくっつける。
    joinText = textArr.join("\n");
}

みたいな揺らした処理が妥当なのかどうなのか...


あるいは、改行文字を取得できるような geteol() みたいな関数を得て

var textArr = targetText.split(geteol());

for(...) {
}

joinText = textArr.join(geteol());

みたいなのが妥当なのか。

それとももはや

var targetText = gettotaltext();

var textArr = targetText.split("\r\n");

joinText = textArr.join("\r\n");

console.log(targetText == joinText);

// selectall();
insert(joinText);

とかで「hidemaruGlobal.***やhidemaru.***」を通した関数とやり取りする分には、
\nだけなのか\r\nなのかの「揺れを吸収する」記述を必要性すらないのでしょうか。



[ ]
RE:11641 \r\n と \n の揺れは hidemaru.*No.11642
秀丸担当 さん 24/05/16 09:59
 

gettextなどで得られる文字列の改行は、ファイルの改行コード指定に関わらず、常
に\r\nとなっています。
hidemaruGlobal.***やhidemaru.*** の関数でも同様です。

一方で、insertは(パラメータなし既定で)、\nだけの記述だけでいいです。
正規表現の検索も、\nだけでいいようになっています。
検索は編集ペインの本文だけを対象にする場合は\nで気にすることはないのですが、
gettextなどで文字列化した後は、気にする必要があります。

>var textArr = targetText.split("\n");

これは、自動的に\rが除去されてはいない気がするのですが、どうでしょうか。

[ ]
RE:11642 \r\n と \n の揺れは hidemaru.*No.11643
こみやんま さん 24/05/16 10:40
 
なるほどなるほど。

>
>>var textArr = targetText.split("\n");
>
>これは、自動的に\rが除去されてはいない気がするのですが、どうでしょうか。

おや、残っていますね。どこで勘違いしたのか。
うーむ。



とりあえず、「編集ペイン(hidemaru.get***Text」や「ファイルからの入力(hidemar
u.loadF***)」が現状すでに、\r\n固定なのであれば、
気にする項目が1つ減ったので楽です。

ありがとうございます。

[ ]