改行マクロ(複数条件)No.08189
ピー子 さん 16/08/13 03:54
 
お世話になっております。

// 120文字以上160文字以下の句読点で改行
//全角文字2バイト、半角文字1バイト計算
gofiletop;
 while( 1 ) {
     searchdown "。(?!\\n)", regular;
     if( !result ) break;
     if( column >= 240 && column <= 320) {
         right;
         insertreturn;
     }
 }
 endmacro;
 //-----------------------------------

こちらの掲示板で山紫水明さん作の上記マクロを確認致しまして、
もしやもっと複雑な条件を含んだものも可能なのではと思い質問させて頂きます。


【条件1】
1行は全角のみで40文字、半角のみだと69文字分あります。


【条件2】 
「」で囲まれている文章は下記のように改行する。※全ての行において

----------------------------
1行目 あああ「ううう」えええ
----------------------------

----------------------------
1行目 あああ
2行目 
3行目 「ううう」
4行目 
5行目 えええ
----------------------------


【条件3】

特定の接続詞の前で改行する。※全ての行において
「だが」「しかし」「けれど」「けれども」「だけど」「ところが」
※特定の接続詞は今後増やしていく予定です。

---------------------
1行目 です。しかしその場合
---------------------

---------------------
1行目 です。
2行目 
3行目 しかしその場合
---------------------


【条件4】

2行目に句点(。)が有り、3行目に読点(、)が有る場合下記のように改行する。

---------------------------------
1行目 あああああああああああああ
2行目 あああああああ。あああああ
3行目 あああああ、ああああああ。
---------------------------------

---------------------------------
1行目 あああああああああああああ
2行目 あああああああ。
3行目
4行目 ああああああああああ、ああ
5行目 ああああ。
---------------------------------


【条件5】

2行目に句点(。)が無く、3行目に読点(、)があり、句点(。)が無い場合、下記のよう
に改行する。

---------------------------------
1行目 あああああああああああああ
2行目 あああああああああああああ
3行目 あああああ、あああああああ
4行目 ああああああああ。
---------------------------------

---------------------------------
1行目 あああああああああああああ
2行目 あああああああああああああ
3行目 あああああ、
4行目 
5行目 あああああああああああああ
6行目 ああ。
---------------------------------

【条件6】

3行目に読点(、)が無く、句点(。)が有る場合、下記のように改行する。

---------------------------------
1行目 あああああああああああああ
2行目 あああああああああああああ
3行目 あああああ。ああああああ。
---------------------------------

---------------------------------
1行目 あああああああああああああ
2行目 あああああああああああああ
3行目 あああああ。
4行目
5行目 あああああああ。
---------------------------------


【条件7】

3行目に読点(、)が有り、句点(。)が有る場合、下記のように改行する。

---------------------------------
1行目 あああああああああああああ
2行目 あああああああああああああ
3行目 あああああ、ああああ。ああ
4行目 ああああああああ。
---------------------------------

---------------------------------
1行目 あああああああああああああ
2行目 あああああああああああああ
3行目 あああああ、ああああ。
4行目 
5行目 ああああああああああ。
---------------------------------

※1行目、2行目等の表記は分かりやすくするためのもので、文中にはありません。

条件が全てで7つもあり、どのように条件を分岐すればよいか分からず質問させて頂
きました。
お力をお貸し頂けますと幸いです。
こちらの説明不足な点ありましたら、教えてくださいませ。

[ ]
RE:08189 改行マクロ(複数条件)No.08217
山紫水明 さん 16/08/16 16:57
 
 ピー子さん,

 条件がいろいろ錯綜していそうなので,少しずつ切り分けていった方がよさそ
うです。

>【条件1】
>1行は全角のみで40文字、半角のみだと69文字分あります。

 この1行というのは,改行記号までの文字数ではなく,見かけ上の1行=折り
返し文字数のことでしょうか?
 それから全角だけの文字と半角だけの文字は別のファイルでしょうか。

>【条件2】 
>「」で囲まれている文章は下記のように改行する。※全ての行において

これは置換でやれるでしょう。
replaceallfast "(?<!\\n)(「.+?」)(?!\\n)", "\n\n\\1\n\n", regular;

>【条件3】
>特定の接続詞の前で改行する。※全ての行において
>「だが」「しかし」「けれど」「けれども」「だけど」「ところが」

これも置換でやれると思います。
//replaceallfast "(?<!\\n)(だが|しかし|けれど|けれども|だけど|ところが)",
"\n\n\\1", regular;

 とりあえずここまではいかがでしょう。

                    山紫水明
                    SANSHISUIMEI

[ ]
RE:08217 改行マクロ(複数条件)No.08220
ニコ さん 16/08/16 18:33
 
>>【条件3】
>>特定の接続詞の前で改行する。※全ての行において
>>「だが」「しかし」「けれど」「けれども」「だけど」「ところが」
>
>これも置換でやれると思います。
>//replaceallfast "(?<!\\n)(だが|しかし|けれど|けれども|だけど|ところが)",
>"\n\n\\1", regular;

ごめんさない。
横レス失礼いたします。
私の投稿に近いものを感じたので書き込みさせて頂きました。
「」を囲む文字列をN文字以上の場合改行するという事も可能なのでしょうか。



[ ]
RE:08217 改行マクロ(複数条件)No.08223
ピー子 さん 16/08/16 19:41
 
>ピー子さん,

>  条件がいろいろ錯綜していそうなので,少しずつ切り分けていった方がよさそ
> うです。

>【条件1】
>1行は全角のみで40文字、半角のみだと69文字分あります。

>  この1行というのは,改行記号までの文字数ではなく,見かけ上の1行=折り
>返し文字数のことでしょうか?
>  それから全角だけの文字と半角だけの文字は別のファイルでしょうか。

失礼致しました。見かけ上の1行=折り返し文字数のことでございます。

ごめんさない 下記の条件煩雑すぎるため変更致します。
1行は全角のみで40文字、半角のみだと69文字分
  ↓
1行全角文字で40文字、半角で80文字
※全角1文字計算、半角0.5文字計算

全角文字と半角文字はそれぞれ独立ではなく、混在してます。
説明不足でした。申し訳ないです。


>【条件2】 
>「」で囲まれている文章は下記のように改行する。※全ての行において

> これは置換でやれるでしょう。
>replaceallfast "(?<!\\n)(「.+?」)(?!\\n)", "\n\n\\1\n\n", regular;

>【条件3】
>特定の接続詞の前で改行する。※全ての行において
>「だが」「しかし」「けれど」「けれども」「だけど」「ところが」

>これも置換でやれると思います。
>//replaceallfast "(?<!\\n)(だが|しかし|けれど|けれども|だけど|ところが)",
> "\n\n\\1", regular;
ありがとうございます。
完璧でございます。(?<!\\n)の部分、私の力で作れなかったため大変勉強になりまし
た。

[ ]
RE:08220 改行マクロ(複数条件)No.08227
山紫水明 さん 16/08/16 21:05
 
 ニコさん,

>「」を囲む文字列をN文字以上の場合改行するという事も可能なのでしょうか。

たとえば40字以上ということであれば,
replaceallfast "(?<!\\n)(「[^」]{40,}」)(?!\\n)", "\n\n\\1\n\n", regular;
でできるでしょう。
でも,全角,半角の区別はできず,いずれも1字は1字として扱います。

                    山紫水明

[ ]
RE:08223 改行マクロ(複数条件)No.08229
山紫水明 さん 16/08/16 21:26
 
 ピー子さん,

 あとの条件は複雑でどうも整理がつきにくいですがとりあえず,

>【条件4】
>
>2行目に句点(。)が有り、3行目に読点(、)が有る場合下記のように改行する。
>
>---------------------------------
>1行目 あああああああああああああ
>2行目 あああああああ。あああああ
>3行目 あああああ、ああああああ。
>---------------------------------
>↓
>---------------------------------
>1行目 あああああああああああああ
>2行目 あああああああ。
>3行目
>4行目 ああああああああああ、ああ
>5行目 ああああ。
>---------------------------------

 2行目に句点(。)が有り、3行目に読点(、)が無く,読点のみの場合はどう扱う
のでしょうか。
---------------------------------
1行目 あああああああああああああ
2行目 あああああああ。あああああ
3行目 あああああああああああ。
---------------------------------

                    山紫水明

[ ]
RE:08229 改行マクロ(複数条件)No.08234
ピー子 さん 16/08/16 22:53
 
> ピー子さん,
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>                    山紫水明

ご返信ありがとうございます。

---------------------------------
1行目 あああああああああああああ
2行目 あああああああ。あああああ
3行目 あああああああああああ。
---------------------------------
     ↓
---------------------------------
1行目 あああああああああああああ
2行目 あああああああ。あああああ
3行目 あああああああああああ。
---------------------------------
この場合はこのままです。


下記の場合だとこのようになります。
---------------------------------
1行目 あああああああああああああ
2行目 あああああああ。あああああ
3行目 あああああああああああ。あ
4行目 ああああああ。
---------------------------------
   ↓
---------------------------------
1行目 あああああああああああああ
2行目 あああああああ。あああああ
3行目 あああああああああああ。
4行目 
5行目 あああああああ。
---------------------------------

2行目に句点(。)が有り、3行目に読点(、)が無く,句点(。)のみの場合は3行目の句
点で改行したいです。
お手数お掛け致しまして申し訳ないです。

[ ]
RE:08227 改行マクロ(複数条件)No.08240
ニコ さん 16/08/17 15:11
 
> ニコさん,
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>                    山紫水明


ありがとうございます。
このような条件でも正規表現1行で現せるとは驚きです。
大変勉強になりました。

[ ]
RE:08234 改行マクロ(複数条件)No.08244
山紫水明 さん 16/08/17 17:29
 
 ピー子さん,

 3行目に句点がある場合は無条件に改行するようですので,ここだけは自動的
に処理し,あとはその都度判断するのが現実的かなと思います。

//-----------------------------------
gofiletop;
while( 1 ) {
    searchdown "。(?!\\n)", regular;
    if( !result ) break;
    if( column > width * 2 && column <= width * 3 ) {
        right;
        insert "\n\n";
    }
}
setcompatiblemode 0x0200;
gofiletop;
while( 1 ) {
    searchdown "[。、](?!\\n)", regular, hilight;
    if( !result ) break;
    if( column > width ) {
        if( correctlineno ) #line = lineno;
        else #line = y + 1;
        question str(#line) + " 行目,改行を挿入しますか?";
        if( result== yes ) {
            right;
            insert "\n\n";
        }
    }
}
endmacro;
//-----------------------------------

 すべてをマクロで処理するのも不可能ではないかもしれませんが,面倒そうな
のでパスさせてください。
 もしどなたか,そんなのたいしたことではないよと言われる方いらっしゃいま
したらお願いします。

                    山紫水明

[ ]
RE:08244 改行マクロ(複数条件)No.08248
ピー子 さん 16/08/17 21:04
 
山紫水明さん

ありがとうございます。
とても複雑すぎるため妥協すべき所考えた結果、条件を下記のみにしてみました。

4行以上の文字列で(途中改行を含まない)
2行目に句点(。)があり、3行目に句点(。)が無い場合、2行目句点(。)で改行

これさえクリア出来ればとても助かります。

[ ]
RE:08248 改行マクロ(複数条件)No.08249
山紫水明 さん 16/08/17 21:58
 
 ピー子さん,

 そういう条件であれば,前回の分とあわせて次のようにしたらいかがでしょう。

//-----------------------------------
gofiletop;
while( 1 ) {
    searchdown "。(?!\\n)", regular;
    if( !result ) break;
    if( column > width * 2 && column <= width * 3 ) {
        right;
        insert "\n\n";
    }
}
gofiletop;
while( 1 ) {
    searchdown "。(?!\\n)", regular;
    if( !result ) break;
    if( column > width && column <= width * 2 && linelen2 > width * 3 ) {
        right;
        insert "\n\n";
    }
}
endmacro;
//-----------------------------------

                    山紫水明

[ ]
RE:08249 改行マクロ(複数条件)No.08250
ピー子 さん 16/08/17 22:24
 
> ピー子さん,
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>                    山紫水明

山紫水明さん
動作確認致しました。
素晴らしいです。理想通りのものです。
これ以外の細かい条件は勉強を重ね、少しずつ実現していこうと思います。
ご尽力いただきありがとうございました。

[ ]
RE:08250 改行マクロ(複数条件)No.08256
山紫水明 さん 16/08/18 17:18
 
 ピー子さん,

 ふと思いつきましたが,前回お示ししたマクロの endmacro; の直前に次のマ
クロを追加すると,「3行目に読点(、)があり、句点(。)が無い場合」の条件が
解決できるかもしれません。

gofiletop;
while( 1 ) {
    searchdown "、(?!\\n)", regular;
    if( !result ) break;
    if( column > width * 2 && column <= width * 3 && linelen2 > width * 3 ){
        right;
        insert "\n\n";
    }
}
                    山紫水明

[ ]
RE:08256 改行マクロ(複数条件)No.08257
ピー子 さん 16/08/19 23:29
 
> ピー子さん,
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>                    山紫水明
動作確認致しました。
ありがとうございます。
大変助かりました。

[ ]