From 4d338cec137a30fdc00771235f75d46fed878002 Mon Sep 17 00:00:00 2001 From: Aaron Pham <29749331+aarnphm@users.noreply.github.com> Date: Sun, 21 Jan 2024 14:33:32 -0500 Subject: [PATCH] feat(ofm): add options to parse arrows (#713) * feat(ofm): add options to parse arrows Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> * feat(ofm): add options to parse arrows Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> --------- Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com> --- docs/features/Obsidian compatibility.md | 1 + quartz/plugins/transformers/ofm.ts | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/docs/features/Obsidian compatibility.md b/docs/features/Obsidian compatibility.md index d519e17..1254370 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 8c6f488..e1f7651 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,