| | |
| | | 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 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 # |
| | |
| | | /^(?<alt>(?!^\d*x?\d*$).*?)?(\|?\s*?(?<width>\d+)(x(?<height>\d+))?)?$/, |
| | | ) |
| | | |
| | | export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options> | undefined> = ( |
| | | userOpts, |
| | | ) => { |
| | | export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options>> = (userOpts) => { |
| | | const opts = { ...defaultOptions, ...userOpts } |
| | | |
| | | const mdastToHtml = (ast: PhrasingContent | Paragraph) => { |
| | |
| | | } else if ([".pdf"].includes(ext)) { |
| | | return { |
| | | type: "html", |
| | | value: `<iframe src="${url}"></iframe>`, |
| | | value: `<iframe src="${url}" class="pdf"></iframe>`, |
| | | } |
| | | } else { |
| | | const block = anchor |
| | |
| | | replacements.push([ |
| | | tagRegex, |
| | | (_value: string, tag: string) => { |
| | | // Check if the tag only includes numbers |
| | | if (/^\d+$/.test(tag)) { |
| | | // Check if the tag only includes numbers and slashes |
| | | if (/^[\/\d]+$/.test(tag)) { |
| | | return false |
| | | } |
| | | |
| | |
| | | children: [ |
| | | { |
| | | type: "text", |
| | | value: useDefaultTitle ? capitalize(typeString) : titleContent + " ", |
| | | value: useDefaultTitle |
| | | ? capitalize(typeString).replace(/-/g, " ") |
| | | : titleContent + " ", |
| | | }, |
| | | ...restOfTitle, |
| | | ], |
| | |
| | | // YouTube video (with optional playlist) |
| | | node.tagName = "iframe" |
| | | node.properties = { |
| | | class: "external-embed", |
| | | class: "external-embed youtube", |
| | | allow: "fullscreen", |
| | | frameborder: 0, |
| | | width: "600px", |
| | | height: "350px", |
| | | src: playlistId |
| | | ? `https://www.youtube.com/embed/${videoId}?list=${playlistId}` |
| | | : `https://www.youtube.com/embed/${videoId}`, |
| | |
| | | // YouTube playlist only. |
| | | node.tagName = "iframe" |
| | | node.properties = { |
| | | class: "external-embed", |
| | | class: "external-embed youtube", |
| | | allow: "fullscreen", |
| | | frameborder: 0, |
| | | width: "600px", |
| | | height: "350px", |
| | | src: `https://www.youtube.com/embed/videoseries?list=${playlistId}`, |
| | | } |
| | | } |