diff --git a/src/runtime/markdown-parser/handler/code.ts b/src/runtime/markdown-parser/handler/code.ts index df480060b..d6390a2ad 100644 --- a/src/runtime/markdown-parser/handler/code.ts +++ b/src/runtime/markdown-parser/handler/code.ts @@ -12,7 +12,7 @@ type Node = MdastContent & { export default (h: H, node: Node) => { const lang = (node.lang || '') + ' ' + (node.meta || '') - const { language, highlights, filename } = parseThematicBlock(lang) + const { language, highlights, filename, meta } = parseThematicBlock(lang) const code = node.value ? detab(node.value + '\n') : '' return h( @@ -22,7 +22,7 @@ export default (h: H, node: Node) => { language, filename, highlights, - meta: node.meta, + meta, code, className: [`language-${language}`] }, diff --git a/src/runtime/markdown-parser/handler/utils.ts b/src/runtime/markdown-parser/handler/utils.ts index 806831071..454025c30 100644 --- a/src/runtime/markdown-parser/handler/utils.ts +++ b/src/runtime/markdown-parser/handler/utils.ts @@ -20,11 +20,13 @@ export function parseThematicBlock (lang: string) { const language = lang.replace(/[{|[](.+)/, '').match(/^[^ \t]+(?=[ \t]|$)/) const highlightTokens = lang.match(/{([^}]+)}/) const filenameTokens = lang.match(/\[(.+)\]/) + const meta = lang.replace(/^\w+\s+(\[[^\]]+\])?\s*(\{[^}]+\})?\s*/g, '') return { language: language ? language[0] : undefined, highlights: parseHighlightedLines(highlightTokens && highlightTokens[1]), - filename: Array.isArray(filenameTokens) ? filenameTokens[1] : undefined + filename: Array.isArray(filenameTokens) ? filenameTokens[1] : undefined, + meta } } diff --git a/test/features/parser-markdown.ts b/test/features/parser-markdown.ts index 6fab783d0..3549d5653 100644 --- a/test/features/parser-markdown.ts +++ b/test/features/parser-markdown.ts @@ -58,7 +58,7 @@ export const testMarkdownParser = () => { expect(parsed.body).toHaveProperty('children[0].props') const props = parsed.body.children[0].props expect(props).toHaveProperty('meta') - expect(props.meta).toBe('[file.ts]{4-6,7} other code block info') + expect(props.meta).toBe('other code block info') expect(props.language).toBe('ts') expect(props.filename).toBe('file.ts') expect(props.highlights).toEqual([4, 5, 6, 7])