helpfeel記法 カッコ閉じ忘れチェッカー(event版)
機能はカッコの閉じ忘れの警告のみ
サンプルなので
script.js(() => {
function isHelpfeelLine (line) {
return /^\s*\? .+/.test(line.text)
}
function getError (line) {
const opens = (line.text.match(/\(/g) || []).length
const closes = (line.text.match(/\)/g) || []).length
if (opens !== closes) {
return 'SyntaxError: missing ' + (opens - closes > 0 ? ')' : '(')
}
}
function createErrorDom () {
const div = document.createElement('div')
div.style = 'text-align: right; color: yellow;'
return div
}
const errorDoms = new Map()
function checkLines () {
for (const line of scrapbox.Page.lines) {
if (isHelpfeelLine(line)) {
const errmsg = getError(line)
if (errmsg) {
if (!errorDoms.has(line.id)) {
errorDoms.set(line.id, createErrorDom())
document.querySelector(`#L${line.id}`).appendChild(errorDoms.get(line.id))
}
errorDoms.get(line.id).innerText = errmsg
console.log(errmsg)
} else if (errorDoms.has(line.id)) { // エラーがなくなった時
document.querySelector(`#L${line.id}`).removeChild(errorDoms.get(line.id))
errorDoms.delete(line.id)
}
}
}
}
if (scrapbox.Layout === 'page') checkLines()
scrapbox.on('lines:changed', checkLines)
})()
行の横に注釈を置く用の横のDOMがあるともっと良さそうだ
でも複数のUserScriptが存在する状況を想定した実装は難しいな
自動的にuserscriptのファイル名をkeyとして、各行の次に書き込み領域を追加したい
しかし、どうせDOM操作されそう
テキストに色を付ける
テキスト以外の要素を表示したい
そうなるとcreateElementしてappendChildするしかなくなる