Jacky Zhao
2023-07-10 08f8e3b4a4879dd7c91c16fbce80c4f2bc5e357f
quartz/plugins/transformers/ofm.ts
@@ -12,6 +12,7 @@
import calloutScript from "../../components/scripts/callout.inline.ts"
export interface Options {
  comments: boolean
  highlight: boolean
  wikilinks: boolean
  callouts: boolean
@@ -19,6 +20,7 @@
}
const defaultOptions: Options = {
  comments: true,
  highlight: true,
  wikilinks: true,
  callouts: true,
@@ -101,11 +103,14 @@
// ([^\[\]\|\#]+)   -> one or more non-special characters ([,],|, or #) (name)
// (#[^\[\]\|\#]+)? -> # then one or more non-special characters (heading link)
// (|[^\[\]\|\#]+)? -> | then one or more non-special characters (alias)
const backlinkRegex = new RegExp(/!?\[\[([^\[\]\|\#]+)(#[^\[\]\|\#]+)?(\|[^\[\]\|\#]+)?\]\]/, "g")
const wikilinkRegex = new RegExp(/!?\[\[([^\[\]\|\#]+)(#[^\[\]\|\#]+)?(\|[^\[\]\|\#]+)?\]\]/, "g")
// Match highlights 
const highlightRegex = new RegExp(/==(.+)==/, "g")
// Match comments
const commentRegex = new RegExp(/%%(.+)%%/, "g")
// from https://github.com/escwxyz/remark-obsidian-callout/blob/main/src/index.ts
const calloutRegex = new RegExp(/^\[\!(\w+)\]([+-]?)/)
@@ -117,7 +122,7 @@
      // pre-transform wikilinks (fix anchors to things that may contain illegal syntax e.g. codeblocks, latex)
      if (opts.wikilinks) {
        src = src.toString()
        return src.replaceAll(backlinkRegex, (value, ...capture) => {
        return src.replaceAll(wikilinkRegex, (value, ...capture) => {
          const [fp, rawHeader, rawAlias] = capture
          const anchor = rawHeader?.trim().slice(1)
          const displayAnchor = anchor ? `#${slugAnchor(anchor)}` : ""
@@ -133,7 +138,7 @@
      if (opts.wikilinks) {
        plugins.push(() => {
          return (tree: Root, _file) => {
            findAndReplace(tree, backlinkRegex, (value: string, ...capture: string[]) => {
            findAndReplace(tree, wikilinkRegex, (value: string, ...capture: string[]) => {
              const [fp, rawHeader, rawAlias] = capture
              const anchor = rawHeader?.trim() ?? ""
              const alias = rawAlias?.slice(1).trim()
@@ -204,6 +209,19 @@
          }
        })
      }
      if (opts.comments) {
        plugins.push(() => {
          return (tree: Root, _file) => {
            findAndReplace(tree, commentRegex, (_value: string, ..._capture: string[]) => {
              return {
                type: 'text',
                value: ''
              }
            })
          }
        })
      }
      if (opts.callouts) {
        plugins.push(() => {