| | |
| | | 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" |
| | |
| | | callouts: boolean |
| | | mermaid: boolean |
| | | parseTags: boolean |
| | | parseArrows: boolean |
| | | parseBlockReferences: boolean |
| | | enableInHtmlEmbed: boolean |
| | | enableYouTubeEmbed: boolean |
| | |
| | | callouts: true, |
| | | mermaid: true, |
| | | parseTags: true, |
| | | parseArrows: true, |
| | | parseBlockReferences: true, |
| | | enableInHtmlEmbed: false, |
| | | enableYouTubeEmbed: true, |
| | |
| | | |
| | | 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) |
| | |
| | | "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) { |
| | |
| | | ]) |
| | | } |
| | | |
| | | if (opts.comments) { |
| | | if (opts.parseArrows) { |
| | | replacements.push([ |
| | | commentRegex, |
| | | arrowRegex, |
| | | (_value: string, ..._capture: string[]) => { |
| | | return { |
| | | type: "text", |
| | | value: "", |
| | | type: "html", |
| | | value: `<span>→</span>`, |
| | | } |
| | | }, |
| | | ]) |