diff --git a/packages/compiler-core/src/parser/Tokenizer.ts b/packages/compiler-core/src/parser/Tokenizer.ts index 2c128a670..fdbc84a10 100644 --- a/packages/compiler-core/src/parser/Tokenizer.ts +++ b/packages/compiler-core/src/parser/Tokenizer.ts @@ -178,7 +178,7 @@ export enum QuoteType { export interface Callbacks { ontext(start: number, endIndex: number): void - ontextentity(char: string, endIndex: number): void + ontextentity(char: string, start: number, endIndex: number): void oninterpolation(start: number, endIndex: number): void @@ -188,7 +188,7 @@ export interface Callbacks { onclosetag(start: number, endIndex: number): void onattribdata(start: number, endIndex: number): void - onattribentity(char: string): void + onattribentity(char: string, start: number, end: number): void onattribend(quote: QuoteType, endIndex: number): void onattribname(start: number, endIndex: number): void onattribnameend(endIndex: number): void @@ -325,6 +325,9 @@ export default class Tokenizer { } else { this.delimiterIndex++ } + } else if (this.inRCDATA) { + this.state = State.InSpecialTag + this.stateInSpecialTag(c) } else { this.state = State.Text this.stateText(c) @@ -343,7 +346,11 @@ export default class Tokenizer { if (c === this.delimiterClose[this.delimiterIndex]) { if (this.delimiterIndex === this.delimiterClose.length - 1) { this.cbs.oninterpolation(this.sectionStart, this.index + 1) - this.state = State.Text + if (this.inRCDATA) { + this.state = State.InSpecialTag + } else { + this.state = State.Text + } this.sectionStart = this.index + 1 } else { this.delimiterIndex++ @@ -410,6 +417,11 @@ export default class Tokenizer { // We have to parse entities in