diff --git a/src/compiler/parse/state/tag.ts b/src/compiler/parse/state/tag.ts index 7d7a3384be..efeb9433bc 100644 --- a/src/compiler/parse/state/tag.ts +++ b/src/compiler/parse/state/tag.ts @@ -223,21 +223,14 @@ export default function tag(parser: Parser) { ); parser.read(/<\/textarea>/); element.end = parser.index; - } else if (name === 'script') { + } else if (name === 'script' || name === 'style') { // special case const start = parser.index; - const data = parser.read_until(/<\/script>/); + const data = parser.read_until(new RegExp(``)); const end = parser.index; element.children.push({ start, end, type: 'Text', data }); - parser.eat('', true); + parser.eat(``, true); element.end = parser.index; - } else if (name === 'style') { - // special case - const start = parser.index; - const data = parser.read_until(/<\/style>/); - const end = parser.index; - element.children.push({ start, end, type: 'Text', data }); - parser.eat('', true); } else { parser.stack.push(element); } diff --git a/test/parser/samples/style-inside-head/input.svelte b/test/parser/samples/style-inside-head/input.svelte new file mode 100644 index 0000000000..512e5b2fb4 --- /dev/null +++ b/test/parser/samples/style-inside-head/input.svelte @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/parser/samples/style-inside-head/output.json b/test/parser/samples/style-inside-head/output.json new file mode 100644 index 0000000000..ae972c5fa8 --- /dev/null +++ b/test/parser/samples/style-inside-head/output.json @@ -0,0 +1,33 @@ +{ + "html": { + "start": 0, + "end": 42, + "type": "Fragment", + "children": [ + { + "start": 0, + "end": 42, + "type": "Head", + "name": "svelte:head", + "attributes": [], + "children": [ + { + "start": 13, + "end": 28, + "type": "Element", + "name": "style", + "attributes": [], + "children": [ + { + "start": 20, + "end": 20, + "type": "Text", + "data": "" + } + ] + } + ] + } + ] + } +} \ No newline at end of file