strike-multiple-lines
使い方
範囲選択する
strikeを選ぶ
https://gyazo.com/896ab28feecb33c1c33ecc34679e7951
制約
トグルはできない
sta.icon
早速ちょいちょい使ってて便利
code:script.js
scrapbox.PopupMenu.addButton({
title: 'strike',
onClick: text => {
const result = text.split(/\n/)
.map(line => line
(_,p1,p2)=> !!p1 ? [${p1} ${p2}] : p2)
.replace(/(^\s+)|([^]+)|([^]*)/ug,(_,p1,p2,p3)=>{
if (p1) return p1; // インデント文字列
if (p3) return p3; // インラインコード記法
if (p2) return [- ${p2}]; // それ以外
throw Error('正規表現で捕捉できていないよ!')
})
).join('\n');
// テロメアが無駄に更新されるのを防ぐ
if(text == result) return;
return result;
}
});
export const DUMMY = '';
コードリーディング
textに範囲選択文字列が入っている
複数行になっていることもある
これを\nで区切った後、なんかしてる
return xxxすると、範囲選択部分がxxxになる
replace
第一引数にRegExpオブジェクト置くと、「マッチしたパターン」を「第二引数(で渡してる関数の戻り値)」で置き換える
!!p1 is 何
つまり to_boolean(p1)
sta.icon短期記憶追いつかないのでいったんギブ
リーダブルなコードに書き換えながらやらないと追いつかない感じ
テストエリア
list
list
list
list
list
list
これを一気に打ち消せるか
list
list
list
list
list
list
おーsta.icon*2