generated at
文を改行させるUserScript

js
function paragraphing(text) { return text.replace(/。/g,"。\n"); }

長文を、文単位に区切って、文ごとに改行させるためのスクリプト。

なぜこれを作ったかというと、コピペした長文を文ごとに分解したかったから。
Scrapboxは段落の並び替えがしやすい。
ひとつの段落内の文の並び替えはしにくい。
私は、文章を並び替えて思考を整理する。
その整理の前段階の作業を自動化した形になる。


hr
使い方
下のスクリプトを自分のページに貼る。(その後、サイトを更新)
文章を選択して、ポップアップから「全文改行」をクリック。
二つ以上の文を含む文章に対して使用することを前提にしている。
すると、文ごとに改行された文章になる。


hr
但し書き
文は「。」で区切られていると認識する。
なので、「!」や「?」で終わっている文章は改行しない。
また、文が会話などを含む場合、会話の途中で改行してしまう。


hr
スクリプトログ

script.js
scrapbox.PopupMenu.addButton ({ title: '全文改行', onClick: text => { const arr = text.split('。'); return arr.join('。\n'); } })

正規表現を学んだので4行目に活かしてみた。
script.js
scrapbox.PopupMenu.addButton ({ title: '全文改行', onClick: text => { const arr = text.split(/[。!?]/g); return arr.join('。\n'); } }) //[]というORを意味する正規表現を用いて「。」の他「!、?」でも改行するようにした。

replace()でもできるじゃんと気づく。
script.js
scrapbox.PopupMenu.addButton ({ title: '全文改行', onClick: text => { const rtn = text.replace(/[。!?]/g,'。\n'); return rtn; } }) //split()ではなくてreplace()を使うようにした。

更なる改善バージョン(1)
script.js
scrapbox.PopupMenu.addButton ({ title: '全文改行', onClick: text => { const rtn = text.replace(/[。!?](?!\n)/g,'。\n'); return rtn; } }) //すでに改行済みの文が重ねて改行されるのを先読みで防いだ。

更なる改善バージョン(2)
script.jscode:script.js
scrapbox.PopupMenu.addButton ({ title: '↩️。', onClick: text => { let rtn = text .replace(/[。!?](?![\n\uFF09\u300D])/g, '。\n') .replace(/(?<=[。!?])\uFF09/g, ')\n') .replace(/(?<=[。!?])\u300D/g, '」\n'); return rtn; } }) //「〜。)」や「〜!」」という表現があったとき、「。」のところで改行させず、「)」や「」」のところで改行させるようにした。 //「)」だけでは改行しない。文中に()で挿入される補足などを改行させないため。


hr

>田中さんは言った。「嘘だ!」その通りだった。
この文章に対して、「全文改行」をすると……

>田中さんは言った。
>「嘘だ。
>」その通りだった。 カッコが次の行に来てしまう

……となる。