// HTML mode
// - <script>, <style> RAWTEXT
// - <title>, <textarea> RCDATA
- const lower = c | 0x20
- if (lower === 116 /* t */) {
+ if (c === 116 /* t */) {
this.state = State.BeforeSpecialT
} else {
this.state =
- lower === 115 /* s */ ? State.BeforeSpecialS : State.InTagName
+ c === 115 /* s */ ? State.BeforeSpecialS : State.InTagName
}
} else {
this.state = State.InTagName
}
}
private stateBeforeSpecialS(c: number): void {
- const lower = c | 0x20
- if (lower === Sequences.ScriptEnd[3]) {
+ if (c === Sequences.ScriptEnd[3]) {
this.startSpecial(Sequences.ScriptEnd, 4)
- } else if (lower === Sequences.StyleEnd[3]) {
+ } else if (c === Sequences.StyleEnd[3]) {
this.startSpecial(Sequences.StyleEnd, 4)
} else {
this.state = State.InTagName
}
}
private stateBeforeSpecialT(c: number): void {
- const lower = c | 0x20
- if (lower === Sequences.TitleEnd[3]) {
+ if (c === Sequences.TitleEnd[3]) {
this.startSpecial(Sequences.TitleEnd, 4)
- } else if (lower === Sequences.TextareaEnd[3]) {
+ } else if (c === Sequences.TextareaEnd[3]) {
this.startSpecial(Sequences.TextareaEnd, 4)
} else {
this.state = State.InTagName
)
const element = ast.children[0] as ElementNode
const text = element.children[0] as TextNode
-
+ expect(element.children.length).toBe(1)
expect(text).toStrictEqual({
type: NodeTypes.TEXT,
content: 'some<div>text</div>and<!--comment-->',
})
})
+ test('should not treat Uppercase component as special tag', () => {
+ const ast = parse(
+ '<TextArea>some<div>text</div>and<!--comment--></TextArea>',
+ parserOptions,
+ )
+ const element = ast.children[0] as ElementNode
+ expect(element.children.map(n => n.type)).toMatchObject([
+ NodeTypes.TEXT,
+ NodeTypes.ELEMENT,
+ NodeTypes.TEXT,
+ NodeTypes.COMMENT,
+ ])
+ })
+
test('textarea handles entities', () => {
const ast = parse('<textarea>&</textarea>', parserOptions)
const element = ast.children[0] as ElementNode