| | |
| | | import { QuartzTransformerPlugin } from "../types" |
| | | import { Root, Html, Image, BlockContent, DefinitionContent, Paragraph, Code } from "mdast" |
| | | import { Root, Html, BlockContent, DefinitionContent, Paragraph, Code } from "mdast" |
| | | import { Element, Literal, Root as HtmlRoot } from "hast" |
| | | import { ReplaceFunction, findAndReplace as mdastFindReplace } from "mdast-util-find-and-replace" |
| | | import { slug as slugAnchor } from "github-slugger" |
| | |
| | | |
| | | function canonicalizeCallout(calloutName: string): keyof typeof callouts { |
| | | let callout = calloutName.toLowerCase() as keyof typeof calloutMapping |
| | | return calloutMapping[callout] ?? "note" |
| | | // if callout is not recognized, make it a custom one |
| | | return calloutMapping[callout] ?? calloutName |
| | | } |
| | | |
| | | export const externalLinkRegex = /^https?:\/\//i |
| | |
| | | "g", |
| | | ) |
| | | const highlightRegex = new RegExp(/==([^=]+)==/, "g") |
| | | const commentRegex = new RegExp(/%%(.+)%%/, "g") |
| | | const commentRegex = new RegExp(/%%[\s\S]*?%%/, "g") |
| | | // from https://github.com/escwxyz/remark-obsidian-callout/blob/main/src/index.ts |
| | | const calloutRegex = new RegExp(/^\[\!(\w+)\]([+-]?)/) |
| | | const calloutLineRegex = new RegExp(/^> *\[\!\w+\][+-]?.*$/, "gm") |
| | |
| | | return { |
| | | name: "ObsidianFlavoredMarkdown", |
| | | textTransform(_ctx, src) { |
| | | // do comments at text level |
| | | if (opts.comments) { |
| | | if (src instanceof Buffer) { |
| | | src = src.toString() |
| | | } |
| | | |
| | | src = src.replace(commentRegex, "") |
| | | } |
| | | |
| | | // pre-transform blockquotes |
| | | if (opts.callouts) { |
| | | if (src instanceof Buffer) { |
| | |
| | | }) |
| | | } |
| | | |
| | | // do comments at text level |
| | | if (opts.comments) { |
| | | if (src instanceof Buffer) { |
| | | src = src.toString() |
| | | } |
| | | src.replace(commentRegex, "") |
| | | } |
| | | |
| | | // pre-transform wikilinks (fix anchors to things that may contain illegal syntax e.g. codeblocks, latex) |
| | | if (opts.wikilinks) { |
| | | if (src instanceof Buffer) { |
| | |
| | | value: `<div |
| | | class="callout-title" |
| | | > |
| | | <div class="callout-icon">${callouts[calloutType]}</div> |
| | | <div class="callout-icon">${callouts[calloutType] ?? callouts.note}</div> |
| | | <div class="callout-title-inner">${title}</div> |
| | | ${collapse ? toggleIcon : ""} |
| | | </div>`, |
| | |
| | | node.data = { |
| | | hProperties: { |
| | | ...(node.data?.hProperties ?? {}), |
| | | className: `callout ${collapse ? "is-collapsible" : ""} ${ |
| | | className: `callout ${calloutType} ${collapse ? "is-collapsible" : ""} ${ |
| | | defaultState === "collapsed" ? "is-collapsed" : "" |
| | | }`, |
| | | "data-callout": calloutType, |