From 26a4b848cd83ed5fea3fb2b420d1295b784f449b Mon Sep 17 00:00:00 2001 From: Martin Fischer Date: Mon, 29 Nov 2021 15:54:13 +0100 Subject: set tokenization state depending on tag name --- src/tokenizer/mod.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/tokenizer/mod.rs b/src/tokenizer/mod.rs index fa01be8..f5968b2 100644 --- a/src/tokenizer/mod.rs +++ b/src/tokenizer/mod.rs @@ -418,6 +418,17 @@ impl Tokenizer { } } + // https://html.spec.whatwg.org/multipage/#concept-frag-parse-context + let next_state = match name.as_str() { + "title" | "textarea" => states::RawData(RawKind::Rcdata), + "style" | "xmp" | "iframe" | "noembed" | "noframes" => { + states::RawData(RawKind::Rawtext) + } + "script" => states::RawData(RawKind::ScriptData), + "plaintext" => states::Plaintext, + _other => states::Data, + }; + let token = TagToken(Tag { kind: self.current_tag_kind, name, @@ -426,7 +437,10 @@ impl Tokenizer { }); match self.process_token(token) { - TokenSinkResult::Continue => ControlFlow::Continue(()), + TokenSinkResult::Continue => { + self.state = next_state; + ControlFlow::Continue(()) + } TokenSinkResult::Plaintext => { self.state = states::Plaintext; ControlFlow::Continue(()) -- cgit v1.2.3