diff --git a/quartz/plugins/parsers/obsidian/highlights.ts b/quartz/plugins/parsers/obsidian/highlights.ts index e69de29bb..03d2b02f1 100644 --- a/quartz/plugins/parsers/obsidian/highlights.ts +++ b/quartz/plugins/parsers/obsidian/highlights.ts @@ -0,0 +1,40 @@ +import { QuartzTransformerPlugin } from "../../types" +import { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace" +import { Root } from "mdast" + +interface Options { + enabled: Boolean +} + +const defaultOptions: Options = { + enabled: true, +} + +const highlightRegex = new RegExp(/==([^=]+)==/g) + +export const ObsidianMarkdownHighlights: QuartzTransformerPlugin> = (userOpts) => { + const opts: Options = { ...defaultOptions, ...userOpts } + return { + name: "ObsidianMarkdownHighlights", + markdownPlugins() { + return [ + (tree: Root) => { + if (opts.enabled) { + const replacements: [RegExp, string | ReplaceFunction][] = [] + replacements.push([ + highlightRegex, + (_value: string, ...capture: string[]) => { + const [inner] = capture + return { + type: "html", + value: `${inner}`, + } + }, + ]) + mdastFindReplace(tree, replacements) + } + }, + ] + }, + } +} diff --git a/quartz/plugins/parsers/obsidian/index.ts b/quartz/plugins/parsers/obsidian/index.ts index 100d6069b..638823766 100644 --- a/quartz/plugins/parsers/obsidian/index.ts +++ b/quartz/plugins/parsers/obsidian/index.ts @@ -1 +1,2 @@ export { ObsidianMarkdownArrow } from "./arrows" +export { ObsidianMarkdownHighlights } from "./highlights" diff --git a/quartz/plugins/transformers/markdown.ts b/quartz/plugins/transformers/markdown.ts index 3d23f77c2..dda268314 100644 --- a/quartz/plugins/transformers/markdown.ts +++ b/quartz/plugins/transformers/markdown.ts @@ -35,7 +35,7 @@ import smartypants from "remark-smartypants" import rehypeSlug from "rehype-slug" import rehypeAutolinkHeadings from "rehype-autolink-headings" -import { ObsidianMarkdownArrow } from "../parsers/obsidian" +import { ObsidianMarkdownArrow, ObsidianMarkdownHighlights } from "../parsers/obsidian" export interface CommonMarkOptions { option1: Boolean @@ -183,6 +183,8 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin