generated at
helpfeel記法 カッコ閉じ忘れチェッカー(event版)

UserScript Eventsを使ったHelpfeel記法の文法チェックのサンプル
機能はカッコの閉じ忘れの警告のみ
サンプルなので


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があるともっと良さそうだshokai
でも複数のUserScriptが存在する状況を想定した実装は難しいな
自動的にuserscriptのファイル名をkeyとして、各行の次に書き込み領域を追加したい
しかし、どうせDOM操作されそう
テキストに色を付ける
テキスト以外の要素を表示したい
そうなるとcreateElementしてappendChildするしかなくなる