diff --git a/src/index.ts b/src/index.ts index ab1b1d9..5eeada6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,5 @@ import type MarkdownIt from 'markdown-it' +import type { MdcInlineSpanOptions } from './syntax/inline-span' import { MarkdownItMdcBlock } from './syntax/block' import { MarkdownItInlineComponent } from './syntax/inline-component' import { MarkdownItInlineProps } from './syntax/inline-props' @@ -26,10 +27,12 @@ export interface MarkdownItMdcOptions { /** * Enable inline span syntax. * + * Pass `true` to enable with defaults, or pass an object to configure. + * * @see https://content.nuxtjs.org/guide/writing/mdc#inline-span * @default true */ - inlineSpan?: boolean + inlineSpan?: boolean | MdcInlineSpanOptions /** * Enable inline component syntax. * @@ -54,8 +57,12 @@ const MarkdownItMdc: MarkdownIt.PluginWithOptions = (md, o if (inlineProps) md.use(MarkdownItInlineProps) - if (inlineSpan) - md.use(MarkdownItInlineSpan) + if (inlineSpan) { + const spanOptions = typeof inlineSpan === 'object' + ? inlineSpan + : {} + md.use(MarkdownItInlineSpan, spanOptions) + } if (inlineComponent) md.use(MarkdownItInlineComponent) diff --git a/src/syntax/inline-span.ts b/src/syntax/inline-span.ts index ee48289..2f4c647 100644 --- a/src/syntax/inline-span.ts +++ b/src/syntax/inline-span.ts @@ -1,10 +1,17 @@ import type MarkdownIt from 'markdown-it' export interface MdcInlineSpanOptions { - + /** + * Skip footnote-like syntax `[^...]` to avoid conflicts with footnote plugins. + * + * @default true + */ + skipFootnoteLike?: boolean } -export const MarkdownItInlineSpan: MarkdownIt.PluginWithOptions = (md) => { +export const MarkdownItInlineSpan: MarkdownIt.PluginWithOptions = (md, options = {}) => { + const { skipFootnoteLike = true } = options + md.inline.ruler.before('link', 'mdc_inline_span', (state, silent) => { const start = state.pos const char = state.src[start] @@ -12,6 +19,9 @@ export const MarkdownItInlineSpan: MarkdownIt.PluginWithOptionsHello World!

Hello World] Yes!

Hello World!

+

Test[^note]