整形用UserScript
たぶんtakker.iconはもう使わないと思います
一応公開しておきますが、あまり参考にはならないです
web browserが重くなるので非推奨
/icons/hr.icon
その1
事前準備
利用できそうなOCRの引用文を、問題ごとに並び替える
Scriptがやること
一度にすべての問題ページを生成する
整形
table:questionsを作る
元ページへのリンクをつける
作成日時を入れる
引用の> を外す
あとは各問題ごとに書き出す
テーブルの中身もある程度作ってからscriptを実行したほうがいいかもしれない
コピペが面倒
問題番号も先に入れてしまおう
code:script.js
const format = text => text.replace(/^\s*>\s*/, '').trim();
const ng = text => text.trim().replace(/[\\\n]/g, ' '); const zero = n => String(n).padStart(2, '0');
const toYYYYMMDD_HHMMSS = d => ${d.getFullYear()}-${zero(d.getMonth()+1)}-${zero(d.getDate())} ${zero(d.getHours())}:${zero(d.getMinutes())}:${zero(d.getSeconds())};
scrapbox.PopupMenu.addButton({
title: 'format',
onClick: text => {
const selections = text.split(/\n/);
const pages = [];
let indent = false;
let page = {
title: '',
lines: [],
};
for (const line of selections) {
if (!/^\s+/.test(line)) {
pages.push(page);
const title, no = format(line).match(/^(.+?)(\d+)$/);
page = {
title,
no,
lines: [],
};
continue;
}
if (page.lines.length === 0) {
page.lines.push(\t${page.title}\t${format(line)}\t${page.no});
continue;
}
page.lines.push(format(line));
}
pages.push(page);
for (const {title, no, lines} of pages) {
const pageLines = [
'table:questions',
...lines,
'',
from [${scrapbox.Page.title}],
#${toYYYYMMDD_HHMMSS(new Date())},
];
window.open(https://scrapbox.io/system-english/${encodeURIComponent(ng(title))}?body=${encodeURIComponent(pageLines.join('\n'))});
}
return '';
},
});