Skip to content

Commit

Permalink
feat(ofm): add options to parse arrows (#713)
Browse files Browse the repository at this point in the history
* feat(ofm): add options to parse arrows

Signed-off-by: Aaron <[email protected]>

* feat(ofm): add options to parse arrows

Signed-off-by: Aaron <[email protected]>

---------

Signed-off-by: Aaron <[email protected]>
  • Loading branch information
aarnphm authored Jan 21, 2024
1 parent c11395e commit 4d338ce
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/features/Obsidian compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
16 changes: 16 additions & 0 deletions quartz/plugins/transformers/ofm.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export interface Options {
callouts: boolean
mermaid: boolean
parseTags: boolean
parseArrows: boolean
parseBlockReferences: boolean
enableInHtmlEmbed: boolean
enableYouTubeEmbed: boolean
Expand All @@ -36,6 +37,7 @@ const defaultOptions: Options = {
callouts: true,
mermaid: true,
parseTags: true,
parseArrows: true,
parseBlockReferences: true,
enableInHtmlEmbed: false,
enableYouTubeEmbed: true,
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -294,6 +298,18 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options>
])
}

if (opts.parseArrows) {
replacements.push([
arrowRegex,
(_value: string, ..._capture: string[]) => {
return {
type: "html",
value: `<span>&rarr;</span>`,
}
},
])
}

if (opts.parseTags) {
replacements.push([
tagRegex,
Expand Down

0 comments on commit 4d338ce

Please sign in to comment.