Aaron Pham
2024-02-04 5b90fbd0d0ac93a6ef5921f7693d36574224531c
feat(ofm): parsing all type of arrow (#797)

* feat(ofm): parsing all type of arrow

Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com>

* fix: use html value instead of decimal

Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com>

* fix: skip parsing arrow if it is not a valid supported mapping

Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com>

---------

Signed-off-by: Aaron <29749331+aarnphm@users.noreply.github.com>
1 files modified
19 ■■■■ changed files
quartz/plugins/transformers/ofm.ts 19 ●●●● patch | view | raw | blame | history
quartz/plugins/transformers/ofm.ts
@@ -74,6 +74,17 @@
  cite: "quote",
} as const
const arrowMapping: Record<string, string> = {
  "->": "&rarr;",
  "-->": "&rArr;",
  "=>": "&rArr;",
  "==>": "&rArr;",
  "<-": "&larr;",
  "<--": "&lArr;",
  "<=": "&lArr;",
  "<==": "&lArr;",
}
function canonicalizeCallout(calloutName: string): keyof typeof calloutMapping {
  const normalizedCallout = calloutName.toLowerCase() as keyof typeof calloutMapping
  // if callout is not recognized, make it a custom one
@@ -82,7 +93,7 @@
export const externalLinkRegex = /^https?:\/\//i
export const arrowRegex = new RegExp(/-{1,2}>/, "g")
export const arrowRegex = new RegExp(/(-{1,2}>|={1,2}>|<-{1,2}|<={1,2})/, "g")
// !?                -> optional embedding
// \[\[              -> open brace
@@ -271,10 +282,12 @@
          if (opts.parseArrows) {
            replacements.push([
              arrowRegex,
              (_value: string, ..._capture: string[]) => {
              (value: string, ..._capture: string[]) => {
                const maybeArrow = arrowMapping[value]
                if (maybeArrow === undefined) return SKIP
                return {
                  type: "html",
                  value: `<span>&rarr;</span>`,
                  value: `<span>${maybeArrow}</span>`,
                }
              },
            ])