改行マクロ(複数分岐)の追加条件No.08404
Lizu01 さん 16/10/11 08:59
 
いつもお世話になっております。
以前こちらで改行マクロ(複数分岐) の依頼をさせて頂きました。

下記urlをご参照ください
http://www.maruo.co.jp/hidesoft/4/x08277_.html#8277

その節はありがとうございました。
その時作成頂いたマクロに新たな条件を付与して頂きたいと考えています。

条件
折り返し7行以上文字列が続く(途中に改行を含まない、指定幅 config "w80";)
文字列の中に句点(。)がない
行頭に・や@〜Sが付いていない
※全ての条件を満たす事場合、改行する

下記urlに例を記載致しました。
http://www.dotup.org/uploda/www.dotup.org1030870.txt.html

[ ]
RE:08404 改行マクロ(複数分岐)の追加条件No.08407
秀まるお2 さん 16/10/11 21:25
 
 特に誰からもコメントが無いようでしたら・・・、今ちょっと仕事がたまって
てすぐは無理なのですが、なんとか今週中に作りたいと思います。

[ ]
RE:08407 改行マクロ(複数分岐)の追加条件No.08408
秀まるお2 さん 16/10/11 23:03
 
 今ちょっといじろうかと思ったんですが、元々の発言にある要望が2つあって、
それのどっちの話かすら分からなくて挫折しました。

@ ()が2回以上連続して続く場合下記のようにしたいです。
  ※ ) と ( の間に何もない場合


A ()で囲まれた折り返し行が7行以上の場合、
  ()で囲まれた文字数を半分で割った数に一番近い句点(。)で改行

 前者は山紫水明さんのマクロで解決して、後者は僕の作ったマクロで解決した
ようですが、もしかして両方合体したような条件になるのでしょうか。

 だとすると、例えば()で囲まれたのが3つ以上あった場合に句読点で改行しな
いといけないのだとすると、句読点が無かったらどこで改行したらいいのやら?。

 山紫水明さんのマクロに対して「7行以上なら」とか「行頭が@〜Sで無いな
ら」とかを付けたらいいのか、それとも僕の作ったマクロについて、()が3つ以
上でもとかって話になるのやら?。

 あと、サンプルも、もっとたくさんの条件で用意して欲しいような・・・

[ ]
RE:08408 改行マクロ(複数分岐)の追加条件No.08409
秀まるお2 さん 16/10/11 23:27
 
 とりあえず、僕が昔作ったマクロの中の、変換の部分を山紫水明さんのに入れ替え
たマクロを作ってみました。

 変換対象の行としては、

 行頭が「・」や「@〜S」でない
 「。」を含まない
 折り返しした行数が7行以上

 を対象とするようにしてみました。


    setcompatiblemode 0x00000100;
    gofiletop;

    while(1) {
        searchdown "^(?![・@-S])(?!.*。)(?=.*\\(.*\\)\\(.*\\)).*$", regular;
        if( !result ) {
            //message "not found";
            break;
        }
        golinetop2;
        #ytop = y;
        golineend2;
        #yend = y;
        if( #yend - #ytop + 1 < 7 ) {
            //7行でなければ対象外。
            //message "#yend - #ytop = " + str(#yend - #ytop);
            continue;
        }
        #xend = x;
        $s = gettext( 0, #ytop, #xend, #yend );
        loaddll "hmjre.dll";
        //message $s;
        $result = dllfuncstr("ReplaceRegular"
                    , "(?<!\\))(\\(.+\\(.+\\))(?!\\()"
                    , $s
                    , 0
                    , "\\n\\n\\1\\n\\n"
                    , 2 );
        $result = dllfuncstr("ReplaceRegular"
                    , "\\)\\("
                    , $result
                    , 0
                    , ")\\n("
                    , 2 );
        if( $result != $s ) {
            beginsel;
            golinetop2;
            begingroupundo;
            delete;
            insert $result;
            endgroupundo;
        }
    }

[ ]
RE:08408 改行マクロ(複数分岐)の追加条件No.08410
Lizu01 さん 16/10/12 10:54
 
> 今ちょっといじろうかと思ったんですが、元々の発言にある要望が2つあって、
>それのどっちの話かすら分からなくて挫折しました。
>

>
> 前者は山紫水明さんのマクロで解決して、後者は僕の作ったマクロで解決した
>ようですが、もしかして両方合体したような条件になるのでしょうか。
>
> だとすると、例えば()で囲まれたのが3つ以上あった場合に句読点で改行しな
>いといけないのだとすると、句読点が無かったらどこで改行したらいいのやら?。
>
> 山紫水明さんのマクロに対して「7行以上なら」とか「行頭が@〜Sで無いな
>ら」とかを付けたらいいのか、それとも僕の作ったマクロについて、()が3つ以
>上でもとかって話になるのやら?。
>
> あと、サンプルも、もっとたくさんの条件で用意して欲しいような・・・>@ ()
>が2回以上連続して続く場合下記のようにしたいです。
>  ※ ) と ( の間に何もない場合
>
>
>A ()で囲まれた折り返し行が7行以上の場合、
>  ()で囲まれた文字数を半分で割った数に一番近い句点(。)で改行

失礼致しました。
>@ ()が2回以上連続して続く場合下記のようにしたいです。
>  ※ ) と ( の間に何もない場合
>
>
>A ()で囲まれた折り返し行が7行以上の場合、
>  ()で囲まれた文字数を半分で割った数に一番近い句点(。)で改行

混乱させてしまい申し訳ありません。
@の方だけでお願いしたいと考えております。

[ ]
RE:08409 改行マクロ(複数分岐)の追加条件No.08411
Lizu01 さん 16/10/12 11:30
 
> とりあえず、僕が昔作ったマクロの中の、変換の部分を山紫水明さんのに入れ替
>えたマクロを作ってみました。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>    }

早速ありがとうございます。
テキストサンプルの例2での動作確認ができないため、
ご確認の程よろしくお願いいたします。
お手数おかして申し訳ありません。


[ ]
RE:08411 改行マクロ(複数分岐)の追加条件No.08412
秀まるお2 さん 16/10/12 11:55
 
 例2の内容をコピペして秀丸エディタに貼り付けて、80桁折り返しにすると、
実は途中に改行が混じってるがために、「7行以上」の条件にマッチせずに変換
されないようです。

 2つめの「)」の後ろに改行が混じってます。

 この改行を削除して実行するとうまく変換します。

[ ]
RE:08412 改行マクロ(複数分岐)の追加条件No.08415
Lizu01 さん 16/10/12 12:21
 
> 例2の内容をコピペして秀丸エディタに貼り付けて、80桁折り返しにすると、
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
> この改行を削除して実行するとうまく変換します。

申し訳ありません。
動作完ぺきでした。
大変助かりました。ありがとうございます。

[ ]