diff --git a/docs/features/Obsidian compatibility.md b/docs/features/Obsidian compatibility.md index d519e1779b101..1254370e0765a 100644 --- a/docs/features/Obsidian compatibility.md +++ b/docs/features/Obsidian compatibility.md @@ -25,6 +25,7 @@ Finally, Quartz also provides `Plugin.CrawlLinks` which allows you to customize - `callouts`: whether to enable [[callouts]]. Defaults to `true` - `mermaid`: whether to enable [[Mermaid diagrams]]. Defaults to `true` - `parseTags`: whether to try and parse tags in the content body. Defaults to `true` + - `parseArrows`: whether to try and parse arrows in the content body. Defaults to `true`. - `enableInHtmlEmbed`: whether to try and parse Obsidian flavoured markdown in raw HTML. Defaults to `false` - `enableYouTubeEmbed`: whether to enable embedded YouTube videos using external image Markdown syntax. Defaults to `false` - Link resolution behaviour: diff --git a/quartz/plugins/transformers/ofm.ts b/quartz/plugins/transformers/ofm.ts index 8c6f488901f40..e1f7651bd5b45 100644 --- a/quartz/plugins/transformers/ofm.ts +++ b/quartz/plugins/transformers/ofm.ts @@ -23,6 +23,7 @@ export interface Options { callouts: boolean mermaid: boolean parseTags: boolean + parseArrows: boolean parseBlockReferences: boolean enableInHtmlEmbed: boolean enableYouTubeEmbed: boolean @@ -36,6 +37,7 @@ const defaultOptions: Options = { callouts: true, mermaid: true, parseTags: true, + parseArrows: true, parseBlockReferences: true, enableInHtmlEmbed: false, enableYouTubeEmbed: true, @@ -111,6 +113,8 @@ function canonicalizeCallout(calloutName: string): keyof typeof callouts { export const externalLinkRegex = /^https?:\/\//i +export const arrowRegex = new RegExp(/-{1,2}>/, "g") + // !? -> optional embedding // \[\[ -> open brace // ([^\[\]\|\#]+) -> one or more non-special characters ([,],|, or #) (name) @@ -294,6 +298,18 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin ]) } + if (opts.parseArrows) { + replacements.push([ + arrowRegex, + (_value: string, ..._capture: string[]) => { + return { + type: "html", + value: ``, + } + }, + ]) + } + if (opts.parseTags) { replacements.push([ tagRegex,