コロンで改行する
AIがこういう解答をよくしてくる
code:-
TypeScript: JavaScriptに型がついた言語
Haskell: 純粋関数型言語
こう変換する
code:-
TypeScript
JavaScriptに型がついた言語
Haskell
純粋関数型言語
code:script.js
scrapbox.PopupMenu.addButton({
title: text =>
text.split('\n').some(line => splitTitleBody(line) !== null)
? ':改行'
: null,
onClick: text =>
text
.split('\n')
.map(line => splitTitleBody(line) ?? line)
.join('\n'),
});
// "タイトル: 本文" を "タイトル" + "本文"(1段深い)に分割する
// 区切りがなければ null(=そのままの行を使う)
function splitTitleBody(line) {
const indent, rest = line.match(/^(\s*)(.*)$/);
const sep = findSeparator(rest);
if (!sep) return null;
const title = rest.slice(0, sep.index).trimEnd();
const body = rest.slice(sep.index + sep.length).trimStart();
if (!title || !body) return null;
return [
indent + title,
indent + ' ' + body, // 親より 1 スペース深いインデント=子要素
].join('\n');
}
// コードスパン(...)の外側にある最初の区切りを再帰で探す
function findSeparator(s, i = 0, inCode = false) {
if (i >= s.length) return null;
if (c === '`') return findSeparator(s, i + 1, !inCode);
if (!inCode) {
const len = separatorAt(s, i);
if (len) return { index: i, length: len };
}
return findSeparator(s, i + 1, inCode);
}
// 位置 i が区切りなら、その区切りの長さを返す(違えば null)
// - ":" 全角コロン(前後スペース不要)
// - ": " 半角コロン + スペース
// - " … " " — " 三点リーダー / ダッシュ類は前後がスペースのときのみ
function separatorAt(s, i) {
if (c === ':') return 1;
if (c === ':' && si + 1 === ' ') return 2; if (
(c === '…' || c === '—' || c === '–') &&
) {
return 1;
}
return null;
}