| | |
| | | const highlightRegex = 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") |
| | | const calloutRegex = new RegExp(/^\[\!(\w+)\|?(.+?)?\]([+-]?)/) |
| | | const calloutLineRegex = new RegExp(/^> *\[\!\w+\|?.*?\][+-]?.*$/, "gm") |
| | | // (?:^| ) -> non-capturing group, tag should start be separated by a space or be the start of the line |
| | | // #(...) -> capturing group, tag itself must start with # |
| | | // (?:[-_\p{L}\d\p{Z}])+ -> non-capturing group, non-empty string of (Unicode-aware) alpha-numeric characters and symbols, hyphens and/or underscores |
| | |
| | | return |
| | | } |
| | | |
| | | // find first line |
| | | const firstChild = node.children[0] |
| | | // find first line and callout content |
| | | const [firstChild, ...calloutContent] = node.children |
| | | if (firstChild.type !== "paragraph" || firstChild.children[0]?.type !== "text") { |
| | | return |
| | | } |
| | |
| | | |
| | | const match = firstLine.match(calloutRegex) |
| | | if (match && match.input) { |
| | | const [calloutDirective, typeString, collapseChar] = match |
| | | const [calloutDirective, typeString, calloutMetaData, collapseChar] = match |
| | | const calloutType = canonicalizeCallout(typeString.toLowerCase()) |
| | | const collapse = collapseChar === "+" || collapseChar === "-" |
| | | const defaultState = collapseChar === "-" ? "collapsed" : "expanded" |
| | |
| | | className: classNames.join(" "), |
| | | "data-callout": calloutType, |
| | | "data-callout-fold": collapse, |
| | | "data-callout-metadata": calloutMetaData, |
| | | }, |
| | | } |
| | | |
| | | // Add callout-content class to callout body if it has one. |
| | | if (calloutContent.length > 0) { |
| | | const contentData: BlockContent | DefinitionContent = { |
| | | data: { |
| | | hProperties: { |
| | | className: "callout-content", |
| | | }, |
| | | hName: "div", |
| | | }, |
| | | type: "blockquote", |
| | | children: [...calloutContent], |
| | | } |
| | | node.children = [node.children[0], contentData] |
| | | } |
| | | } |
| | | }) |
| | | } |