From 47ea285be3dcb66a83a593346995b5900d6c5478 Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 28 Nov 2023 18:37:17 +0800 Subject: [PATCH] fix(parser): properly set initial inXML state based on root ns --- packages/compiler-core/src/parser.ts | 4 ++++ packages/compiler-dom/__tests__/parse.spec.ts | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/packages/compiler-core/src/parser.ts b/packages/compiler-core/src/parser.ts index 4e3c21480a..46d9c6f094 100644 --- a/packages/compiler-core/src/parser.ts +++ b/packages/compiler-core/src/parser.ts @@ -978,6 +978,10 @@ export function baseParse(input: string, options?: ParserOptions): RootNode { ? ParseMode.SFC : ParseMode.BASE + tokenizer.inXML = + currentOptions.ns === Namespaces.SVG || + currentOptions.ns === Namespaces.MATH_ML + const delimiters = options?.delimiters if (delimiters) { tokenizer.delimiterOpen = toCharCodes(delimiters[0]) diff --git a/packages/compiler-dom/__tests__/parse.spec.ts b/packages/compiler-dom/__tests__/parse.spec.ts index 62c21f40db..23b0970e1b 100644 --- a/packages/compiler-dom/__tests__/parse.spec.ts +++ b/packages/compiler-dom/__tests__/parse.spec.ts @@ -481,5 +481,20 @@ describe('DOM parser', () => { expect(elementForieng.ns).toBe(Namespaces.SVG) expect(element.ns).toBe(Namespaces.HTML) }) + + test('correct XML handling with root ns', () => { + // when root ns is an XML namespace, there should be no special content + // treatment for ', { + ...parserOptions, + ns: Namespaces.SVG + }) + const elementSvg = ast.children[0] as ElementNode + // should parse as nodes instead of text + expect(elementSvg.children).toMatchObject([ + { type: NodeTypes.ELEMENT, tag: 'g' }, + { type: NodeTypes.ELEMENT, tag: 'g' } + ]) + }) }) }) -- 2.47.3