【要望】改行の取り扱いについて

  1. Kuroさん、こんにちは。
    改行の取り扱いについてお伺いです。

    アウトプットバーをデバッグウィンドウとして使い始めたのですが、文字列中で改行させるのに"\r\n"とする必要があります。
    これが、"\n"だと非常にありがたいのですが、いかがでしょう。

    クリップボードに複数行をClipboardData.SetData()でセットした場合の改行は"\n"ですが、Ctrl+Cでセットした場合は"\r\n"(復帰改行)になっているようです。
    これもに"\n"に統一されるとうれしいです。

    正規表現の /^/gm が復帰("\r")の直後にもマッチしてしまっているようです。
    改行("\n")の後だけになるとありがたいのですがいかがでしょう。

    よろしくご検討お願いします。

    // Microsoft Windows 7 Home Premium 64 ビット Service Pack 1
    // Mery 2.2.2.4953

    ----- 確認コード ----------
    var s = document.Selection.Text;  // コメント部分を選択。
    // ClipboardData.SetData( s );
    var c = ClipboardData.GetData();

    var ary_s1 = s.split( "\n" );
    var ary_s2 = s.split( /\n/g );
    var ary_s3 = s.split( /^/gm );
    var ary_c1 = c.split( "\n" );
    var ary_c2 = c.split( /\n/g );
    var ary_c3 = c.split( /^/gm );

    document.Selection.EndOfDocument();
    document.writeln( ">" + ary_s1.toString().replace( /\r/g, "\\r" ).replace( /\n/g, "\\n" ) );
    document.writeln( ">" + ary_s2.toString().replace( /\r/g, "\\r" ).replace( /\n/g, "\\n" ) );
    document.writeln( ">" + ary_s3.toString().replace( /\r/g, "\\r" ).replace( /\n/g, "\\n" ) );
    document.writeln( ">" + ary_c1.toString().replace( /\r/g, "\\r" ).replace( /\n/g, "\\n" ) );
    document.writeln( ">" + ary_c2.toString().replace( /\r/g, "\\r" ).replace( /\n/g, "\\n" ) );
    document.writeln( ">" + ary_c3.toString().replace( /\r/g, "\\r" ).replace( /\n/g, "\\n" ) );

    /*

    1
    2

    3

    */

    // -- 出力結果 --
    >,,1,2,,,3,,
    >1,2,3
    >\n,\n,1\n,2\n,\n,\n,3\n,\n
    >\r,\r,1\r,2\r,\r,\r,3\r,\r,
    >\r,\r,1\r,2\r,\r,\r,3\r,\r
    >\r,\n,\r,\n,1\r,\n,2\r,\n,\r,\n,\r,\n,3\r,\n,\r,\n

     |  手石  |  返信
  2. こんばんは、書き込みありがとうございます。
    アウトプットバーの文字列中での改行コードにつきましては検討させて頂きます。

    CTRL + C でコピーした場合の改行コードは他のエディタなどにペーストするケースを考慮して現在設定されている改行コードに従うようになっています。

    マクロ内で document.selection.Text で取得したテキストは加工しやすさを重視して「\n」に統一していますので、document.selection.Text を ClipboardData.SetData() した場合は「\n」になります。

    > 正規表現の /^/gm が復帰("\r")の直後にもマッチしてしまっているようです。

    マクロ内での正規表現、例えば split や replace で使用する正規表現は Windows の WSH (Windows Scripting Host) の仕様に依存します。

    .replace(/\r\n/gm , "\n" );

    こんな感じでいったん \n に改行コードを統一してから操作するなど工夫するしかないかなと思います。

     |  Kuro  |  返信
  3. こんばんは。

    > アウトプットバーの文字列中での改行コードにつきましては検討させて頂きます。
    よろしくご検討お願いします。

    > 他のエディタなどにペーストするケース
    なるほど。他のエディタを使わなくなって久しいので思い付きませんでした。

    > マクロ内での正規表現、例えば split や replace で使用する正規表現は Windows の WSH (Windows Scripting Host) の仕様に依存します。
    > いったん \n に改行コードを統一してから操作するなど工夫するしかないかなと思います。
    そうですね。
    納得&了解です。

     |  手石  |  返信
  4. 返信ありがとうございます。

    > > アウトプットバーの文字列中での改行コードにつきましては検討させて頂きます。
    > よろしくご検討お願いします。

    アウトプットバー出力の際の改行コードは \n, \r, \r\n いずれの場合も改行とみなすように修正する方向で進めたいと思います。

    > > 他のエディタなどにペーストするケース
    > なるほど。他のエディタを使わなくなって久しいので思い付きませんでした。

    何気にありがたいお言葉、ありがとうございます。
    文字列として操作するだけであれば \n に統一が一番扱いやすいところですが、ウィンドウズ用のテキストエディタということで改行コードは \r\n という風習もあったりしますので、結構ややこしい部分ですね。

    Linux の場合は \r のみだったりしますが、Windows のメモ帳とかは \r のみだと改行とすらみなしてもらえませんからね…w

    Mery でもこのあたりの仕様はどうすれば良いのか悩んだ部分ですが、現在の仕様に落ち着いております。

    > > いったん \n に改行コードを統一してから操作するなど工夫するしかないかなと思います。
    > そうですね。
    > 納得&了解です。

    力及ばずで申し訳ございません。
    しかし \r にもヒットする /^/gm の正規表現ってどうなんだ!って思いますね、、、実際。ウィンドウズなのに…

     |  Kuro  |  返信
スポンサーリンク