updateEditorStyle = debounce(
250,
(editor, viewer) => requestIdleCallback(() => {
const startMark = performanceNow()
const mdastTree = mdastUtilFromMarkdown.fromMarkdown(editor.value)
const style = html`
<style>
::highlight(mdast-heading) {
background-color: yellow;
text-decoration: underline;
}
::highlight(mdast-comment) {
color: gray;
}
</style>
`
viewer.appendChild(style)
const root = viewer.childNodes[0].childNodes
const nodes = []
unistUtilVisitParents.visitParents(mdastTree, "heading", (node) => {
nodes.push(node)
})
const ranges = nodes.slice(0, 100).map(node => {
const range = document.createRange()
range.setStart(root[node.position.start.line - 1], 0)
range.setEnd(root[node.position.end.line - 1], 1)
return range
})
const nodes2 = []
unistUtilVisitParents.visitParents(mdastTree, "html", (node) => {
nodes2.push(node)
})
unistUtilVisitParents.visitParents(mdastTree, "code", (node) => {
nodes2.push(node)
})
const ranges2 = nodes2.slice(0, 100).map(node => {
const range = document.createRange()
range.setStart(root[node.position.start.line - 1], 0)
range.setEnd(root[node.position.end.line - 1], 1)
return range
})
console.log("mdast tree:", mdastTree)
console.log(performanceNow() - startMark)
window.CSS.highlights.clear()
const highlight = new window.Highlight(...ranges)
window.CSS.highlights.set("mdast-heading", highlight);
const highlight2 = new window.Highlight(...ranges2)
window.CSS.highlights.set("mdast-comment", highlight2);
}),
)