Aaron Pham
2024-01-21 4d338cec137a30fdc00771235f75d46fed878002
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>
2 files modified
17 ■■■■■ changed files
docs/features/Obsidian compatibility.md 1 ●●●● patch | view | raw | blame | history
quartz/plugins/transformers/ofm.ts 16 ●●●●● patch | view | raw | blame | history
docs/features/Obsidian compatibility.md
@@ -25,6 +25,7 @@
    - `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:
quartz/plugins/transformers/ofm.ts
@@ -23,6 +23,7 @@
  callouts: boolean
  mermaid: boolean
  parseTags: boolean
  parseArrows: boolean
  parseBlockReferences: boolean
  enableInHtmlEmbed: boolean
  enableYouTubeEmbed: boolean
@@ -36,6 +37,7 @@
  callouts: true,
  mermaid: true,
  parseTags: true,
  parseArrows: true,
  parseBlockReferences: true,
  enableInHtmlEmbed: false,
  enableYouTubeEmbed: true,
@@ -111,6 +113,8 @@
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 @@
            ])
          }
          if (opts.parseArrows) {
            replacements.push([
              arrowRegex,
              (_value: string, ..._capture: string[]) => {
                return {
                  type: "html",
                  value: `<span>&rarr;</span>`,
                }
              },
            ])
          }
          if (opts.parseTags) {
            replacements.push([
              tagRegex,