| | |
| | | const blockReferenceRegex = new RegExp(/\^([-_A-Za-z0-9]+)$/, "g") |
| | | const ytLinkRegex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/ |
| | | const videoExtensionRegex = new RegExp(/\.(mp4|webm|ogg|avi|mov|flv|wmv|mkv|mpg|mpeg|3gp|m4v)$/) |
| | | const wikilinkImageEmbedRegex = new RegExp( |
| | | /^(?<alt>(?!^\d*x?\d*$).*?)?(\|?\s*?(?<width>\d+)(x(?<height>\d+))?)?$/, |
| | | ) |
| | | |
| | | export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options> | undefined> = ( |
| | | userOpts, |
| | |
| | | const ext: string = path.extname(fp).toLowerCase() |
| | | const url = slugifyFilePath(fp as FilePath) |
| | | if ([".png", ".jpg", ".jpeg", ".gif", ".bmp", ".svg", ".webp"].includes(ext)) { |
| | | // either |alt|dims or |dims |
| | | let [alt, dims] = (alias ?? "").split("|") |
| | | |
| | | // |dims case, treat first alt slot as dims |
| | | if (dims === undefined) { |
| | | dims = alt |
| | | alt = "" |
| | | } |
| | | |
| | | let [width, height] = dims.split("x", 2) |
| | | width ||= "auto" |
| | | height ||= "auto" |
| | | const match = wikilinkImageEmbedRegex.exec(alias ?? "") |
| | | const alt = match?.groups?.alt ?? "" |
| | | const width = match?.groups?.width ?? "auto" |
| | | const height = match?.groups?.height ?? "auto" |
| | | return { |
| | | type: "image", |
| | | url, |
| | |
| | | value: `<div |
| | | class="callout-title" |
| | | > |
| | | <div class="callout-icon">${callouts[calloutType] ?? callouts.note}</div> |
| | | <div class="callout-icon">${callouts[calloutType] ?? callouts.note}</div> |
| | | <div class="callout-title-inner">${title}</div> |
| | | ${collapse ? toggleIcon : ""} |
| | | </div>`, |