Merge db327e596f9ab2987e0f07f2a7d9aaebcf069f5f into 7be47742a6dc86f22d148ca9d304f7a9eea318cf

This commit is contained in:
Aaron Pham 2025-02-01 00:27:47 -05:00 committed by GitHub
commit fe141cc795
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -669,6 +669,64 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options>>
}) })
} }
if (opts.highlight) {
plugins.push(() => {
return (tree: HtmlRoot) => {
visit(tree, "element", (node) => {
if (node.tagName === "p") {
const stack: number[] = []
const highlights: [number, number][] = []
const children = [...node.children]
for (let i = 0; i < children.length; i++) {
const child = children[i]
if (child.type === "text" && child.value.includes("==")) {
// Split text node if it contains == marker
const parts = child.value.split("==")
if (parts.length > 1) {
// Replace original node with split parts
const newNodes: (typeof child)[] = []
parts.forEach((part, idx) => {
if (part) {
newNodes.push({ type: "text", value: part })
}
// Add marker position except for last part
if (idx < parts.length - 1) {
if (stack.length === 0) {
stack.push(i + newNodes.length)
} else {
const start = stack.pop()!
highlights.push([start, i + newNodes.length])
}
}
})
children.splice(i, 1, ...newNodes)
i += newNodes.length - 1
}
}
}
// Apply highlights in reverse to maintain indices
for (const [start, end] of highlights.reverse()) {
const highlightSpan: Element = {
type: "element",
tagName: "span",
properties: { className: ["text-highlight"] },
children: children.slice(start, end + 1),
}
children.splice(start, end - start + 1, highlightSpan)
}
node.children = children
}
})
}
})
}
if (opts.mermaid) { if (opts.mermaid) {
plugins.push(() => { plugins.push(() => {
return (tree: HtmlRoot, _file) => { return (tree: HtmlRoot, _file) => {