文を改行させるUserScript
code:js
function paragraphing(text) {
return text.replace(/。/g,"。\n");
}
長文を、文単位に区切って、文ごとに改行させるためのスクリプト。
なぜこれを作ったかというと、コピペした長文を文ごとに分解したかったから。
Scrapboxは段落の並び替えがしやすい。
ひとつの段落内の文の並び替えはしにくい。
私は、文章を並び替えて思考を整理する。
その整理の前段階の作業を自動化した形になる。
/icons/hr.icon
使い方
下のスクリプトを自分のページに貼る。(その後、サイトを更新)
文章を選択して、ポップアップから「全文改行」をクリック。
二つ以上の文を含む文章に対して使用することを前提にしている。
すると、文ごとに改行された文章になる。
/icons/hr.icon
但し書き
文は「。」で区切られていると認識する。
なので、「!」や「?」で終わっている文章は改行しない。
また、文が会話などを含む場合、会話の途中で改行してしまう。
/icons/hr.icon
スクリプトログ
code:script.js
scrapbox.PopupMenu.addButton ({
title: '全文改行',
onClick: text => {
const arr = text.split('。');
return arr.join('。\n');
}
})
正規表現を学んだので4行目に活かしてみた。
code:script.js
scrapbox.PopupMenu.addButton ({
title: '全文改行',
onClick: text => {
const arr = text.split(/。!?/g); return arr.join('。\n');
}
})
//[]というORを意味する正規表現を用いて「。」の他「!、?」でも改行するようにした。
replace()でもできるじゃんと気づく。
code:script.js
scrapbox.PopupMenu.addButton ({
title: '全文改行',
onClick: text => {
const rtn = text.replace(/。!?/g,'。\n'); return rtn;
}
})
//split()ではなくてreplace()を使うようにした。
更なる改善バージョン(1)
code:script.js
scrapbox.PopupMenu.addButton ({
title: '全文改行',
onClick: text => {
const rtn = text.replace(/。!?(?!\n)/g,'。\n'); return rtn;
}
})
//すでに改行済みの文が重ねて改行されるのを先読みで防いだ。
更なる改善バージョン(2)
code:script.jscode:script.js
scrapbox.PopupMenu.addButton ({
title: '↩️。',
onClick: text => {
let rtn = text
.replace(/(?<=。!?)\uFF09/g, ')\n') .replace(/(?<=。!?)\u300D/g, '」\n'); return rtn;
}
})
//「〜。)」や「〜!」」という表現があったとき、「。」のところで改行させず、「)」や「」」のところで改行させるようにした。
//「)」だけでは改行しない。文中に()で挿入される補足などを改行させないため。
/icons/hr.icon
例
田中さんは言った。「嘘だ!」その通りだった。
↑
この文章に対して、「全文改行」をすると……
田中さんは言った。
「嘘だ。
」その通りだった。カッコが次の行に来てしまう
……となる。