mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-05-18 22:44:14 +02:00
Merge 7e04bb4e6e42d4d7ac8c021b3a63c37e322a7300 into dd6bd498db25344b2cccf56abfb656576a496d38
This commit is contained in:
commit
36eee3b139
@ -23,6 +23,7 @@ This plugin accepts the following configuration options:
|
|||||||
- `enableYouTubeEmbed`: If `true` (default), enables the embedding of YouTube videos and playlists using external image Markdown syntax.
|
- `enableYouTubeEmbed`: If `true` (default), enables the embedding of YouTube videos and playlists using external image Markdown syntax.
|
||||||
- `enableVideoEmbed`: If `true` (default), enables the embedding of video files.
|
- `enableVideoEmbed`: If `true` (default), enables the embedding of video files.
|
||||||
- `enableCheckbox`: If `true`, adds support for interactive checkboxes in content. Defaults to `false`.
|
- `enableCheckbox`: If `true`, adds support for interactive checkboxes in content. Defaults to `false`.
|
||||||
|
- `inlineFootnotes`: If `true` (default), enables parsing of inline footnotes.
|
||||||
|
|
||||||
> [!warning]
|
> [!warning]
|
||||||
> Don't remove this plugin if you're using [[Obsidian compatibility|Obsidian]] to author the content!
|
> Don't remove this plugin if you're using [[Obsidian compatibility|Obsidian]] to author the content!
|
||||||
|
@ -38,6 +38,7 @@ export interface Options {
|
|||||||
enableYouTubeEmbed: boolean
|
enableYouTubeEmbed: boolean
|
||||||
enableVideoEmbed: boolean
|
enableVideoEmbed: boolean
|
||||||
enableCheckbox: boolean
|
enableCheckbox: boolean
|
||||||
|
inlineFootnotes: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultOptions: Options = {
|
const defaultOptions: Options = {
|
||||||
@ -53,6 +54,7 @@ const defaultOptions: Options = {
|
|||||||
enableYouTubeEmbed: true,
|
enableYouTubeEmbed: true,
|
||||||
enableVideoEmbed: true,
|
enableVideoEmbed: true,
|
||||||
enableCheckbox: false,
|
enableCheckbox: false,
|
||||||
|
inlineFootnotes: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
const calloutMapping = {
|
const calloutMapping = {
|
||||||
@ -143,6 +145,8 @@ const wikilinkImageEmbedRegex = new RegExp(
|
|||||||
/^(?<alt>(?!^\d*x?\d*$).*?)?(\|?\s*?(?<width>\d+)(x(?<height>\d+))?)?$/,
|
/^(?<alt>(?!^\d*x?\d*$).*?)?(\|?\s*?(?<width>\d+)(x(?<height>\d+))?)?$/,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const inlineFootnoteRegex = /\^\[((?:[^\[\]]|\[(?:[^\[\]]|\[[^\[\]]*\])*\])*)\]/g
|
||||||
|
|
||||||
export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options>> = (userOpts) => {
|
export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options>> = (userOpts) => {
|
||||||
const opts = { ...defaultOptions, ...userOpts }
|
const opts = { ...defaultOptions, ...userOpts }
|
||||||
|
|
||||||
@ -213,6 +217,35 @@ export const ObsidianFlavoredMarkdown: QuartzTransformerPlugin<Partial<Options>>
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (opts.inlineFootnotes) {
|
||||||
|
// Replaces ^[inline] footnotes with regular footnotes [^1]:
|
||||||
|
const footnotes: Record<string, string> = {}
|
||||||
|
|
||||||
|
// Replace inline footnotes with references and collect definitions
|
||||||
|
const result = (src as string).replace(
|
||||||
|
inlineFootnoteRegex,
|
||||||
|
(_match: string, content: string) => {
|
||||||
|
const id = `inline-${Object.keys(footnotes).length + 1}`
|
||||||
|
footnotes[id] = content.trim()
|
||||||
|
return `[^${id}]`
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
// Append footnote definitions if any are found
|
||||||
|
if (Object.keys(footnotes).length > 0) {
|
||||||
|
return (
|
||||||
|
result +
|
||||||
|
"\n\n" +
|
||||||
|
Object.entries(footnotes)
|
||||||
|
.map(([id, content]) => `[^${id}]: ${content}`)
|
||||||
|
.join("\n") +
|
||||||
|
"\n"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
return src
|
return src
|
||||||
},
|
},
|
||||||
markdownPlugins(_ctx) {
|
markdownPlugins(_ctx) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user