From 23343440cadfc6ab08b1256c23e3124a9b524a83 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Mon, 23 Nov 2015 18:21:49 +0100 Subject: [PATCH] Upgrade string-cache to 0.2. --- Cargo.toml | 7 +- capi/Cargo.toml | 5 +- capi/src/lib.rs | 5 +- capi/src/tokenizer.rs | 6 +- examples/noop-tree-builder.rs | 5 +- examples/print-rcdom.rs | 5 +- examples/print-tree-actions.rs | 5 +- macros/src/match_token.rs | 16 +- macros/src/pre_expand.rs | 2 +- src/lib.rs | 3 - src/rcdom.rs | 4 +- src/serialize/mod.rs | 34 +- src/tokenizer/mod.rs | 8 +- src/tree_builder/actions.rs | 324 ++++---- src/tree_builder/interface.rs | 2 +- src/tree_builder/mod.rs | 22 +- src/tree_builder/rules.expanded.rs | 1228 +++++++++++++++------------- src/tree_builder/rules.rs | 178 ++-- src/tree_builder/tag_sets.rs | 52 +- tests/serializer.rs | 5 +- tests/tokenizer.rs | 9 +- tests/tree_builder.rs | 19 +- 22 files changed, 1012 insertions(+), 932 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index a3cddec0..f94faec5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "html5ever" -version = "0.2.10" +version = "0.2.11" authors = [ "The html5ever Project Developers" ] license = "MIT / Apache-2.0" repository = "https://github.com/servo/html5ever" @@ -16,7 +16,7 @@ name = "html5ever" doctest = false [features] -unstable = ["tendril/unstable", "string_cache/unstable", "string_cache_plugin", "rc/unstable"] +unstable = ["tendril/unstable", "string_cache/unstable", "rc/unstable"] heap_size = ["heapsize", "heapsize_plugin"] codegen = ["html5ever_macros"] @@ -24,8 +24,7 @@ codegen = ["html5ever_macros"] time = "0" log = "0" phf = "0.7" -string_cache = "0.1.12" -string_cache_plugin = { version = "0.1.10", optional = true } +string_cache = "0.2.0" mac = "0" tendril = "0.1.3" rc = "0.1.1" diff --git a/capi/Cargo.toml b/capi/Cargo.toml index 0b868c67..e73c7544 100644 --- a/capi/Cargo.toml +++ b/capi/Cargo.toml @@ -9,9 +9,8 @@ name = "html5ever_capi" crate-type = ["staticlib"] [dependencies] -libc = "0" -string_cache = "0" -string_cache_plugin = "0" +libc = "0.2" +string_cache = "0.2" tendril = "0.1" [dependencies.html5ever] diff --git a/capi/src/lib.rs b/capi/src/lib.rs index bc436866..8ce1dc49 100644 --- a/capi/src/lib.rs +++ b/capi/src/lib.rs @@ -7,11 +7,8 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(plugin, box_syntax)] -#![plugin(string_cache_plugin)] - extern crate libc; -extern crate string_cache; +#[macro_use] extern crate string_cache; extern crate tendril; extern crate html5ever; diff --git a/capi/src/tokenizer.rs b/capi/src/tokenizer.rs index 90a6c871..6ee8df0b 100644 --- a/capi/src/tokenizer.rs +++ b/capi/src/tokenizer.rs @@ -7,7 +7,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![allow(non_camel_case_types, raw_pointer_derive)] +#![allow(non_camel_case_types)] use c_bool; @@ -78,7 +78,7 @@ impl TokenSink for h5e_token_sink { attrs.len() as size_t); for attr in attrs.into_iter() { // All attribute names from the tokenizer are local. - assert!(attr.name.ns == ns!("")); + assert!(attr.name.ns == ns!()); call!(do_tag_attr, attr.name.local, attr.value); } } @@ -107,7 +107,7 @@ pub type h5e_tokenizer_ptr = *const (); #[no_mangle] pub unsafe extern "C" fn h5e_tokenizer_new(sink: *const h5e_token_sink) -> h5e_tokenizer_ptr { let tok: Box> - = box Tokenizer::new(*sink, Default::default()); + = Box::new(Tokenizer::new(*sink, Default::default())); mem::transmute(tok) } diff --git a/examples/noop-tree-builder.rs b/examples/noop-tree-builder.rs index b2d18a9e..63fd40fd 100644 --- a/examples/noop-tree-builder.rs +++ b/examples/noop-tree-builder.rs @@ -7,9 +7,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![cfg_attr(feature = "unstable", feature(plugin))] -#![cfg_attr(feature = "unstable", plugin(string_cache_plugin))] - #[macro_use] extern crate string_cache; extern crate tendril; @@ -48,7 +45,7 @@ impl TreeSink for Sink { } fn get_template_contents(&self, target: usize) -> usize { - if let Some(&qualname!(HTML, template)) = self.names.get(&target) { + if let Some(&qualname!(html, "template")) = self.names.get(&target) { target + 1 } else { panic!("not a template element") diff --git a/examples/print-rcdom.rs b/examples/print-rcdom.rs index f4106204..edbce485 100644 --- a/examples/print-rcdom.rs +++ b/examples/print-rcdom.rs @@ -7,9 +7,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![cfg_attr(feature = "unstable", feature(plugin))] -#![cfg_attr(feature = "unstable", plugin(string_cache_plugin))] - extern crate html5ever; #[macro_use] @@ -48,7 +45,7 @@ fn walk(indent: usize, handle: Handle) { assert!(name.ns == ns!(html)); print!("<{}", name.local); for attr in attrs.iter() { - assert!(attr.name.ns == ns!("")); + assert!(attr.name.ns == ns!()); print!(" {}=\"{}\"", attr.name.local, attr.value); } println!(">"); diff --git a/examples/print-tree-actions.rs b/examples/print-tree-actions.rs index baf41e49..df7f90f9 100644 --- a/examples/print-tree-actions.rs +++ b/examples/print-tree-actions.rs @@ -7,9 +7,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![cfg_attr(feature = "unstable", feature(plugin))] -#![cfg_attr(feature = "unstable", plugin(string_cache_plugin))] - #[macro_use] extern crate string_cache; extern crate tendril; @@ -52,7 +49,7 @@ impl TreeSink for Sink { } fn get_template_contents(&self, target: usize) -> usize { - if let Some(&qualname!(HTML, template)) = self.names.get(&target) { + if let Some(&qualname!(html, "template")) = self.names.get(&target) { target + 1 } else { panic!("not a template element") diff --git a/macros/src/match_token.rs b/macros/src/match_token.rs index 1ee07bb6..0e9a3237 100644 --- a/macros/src/match_token.rs +++ b/macros/src/match_token.rs @@ -67,8 +67,8 @@ tag @ => ... expands to something like ```rust -TagToken(tag @ Tag { name: atom!(html), kind: StartTag }) -| TagToken(tag @ Tag { name: atom!(head), kind: StartTag }) => ... +TagToken(tag @ Tag { name: atom!("html"), kind: StartTag }) +| TagToken(tag @ Tag { name: atom!("head"), kind: StartTag }) => ... ``` A wildcard tag matches any tag of the appropriate kind, *unless* it was @@ -115,8 +115,6 @@ use self::RHS::{Else, Expr}; type Tokens = Vec; -type TagName = ast::Ident; - // FIXME: duplicated in src/tokenizer/interface.rs #[derive(PartialEq, Eq, Hash, Copy, Clone, Debug)] enum TagKind { @@ -140,7 +138,7 @@ impl TagKind { #[derive(PartialEq, Eq, Hash, Clone)] struct Tag { kind: TagKind, - name: Option, + name: Option, } /// Left-hand side of a pattern-match arm. @@ -189,7 +187,7 @@ fn parse_tag(parser: &mut Parser) -> Result, FatalError> { }; let name = match try!(parser.eat(&token::Underscore)) { true => None, - false => Some(try!(parser.parse_ident())), + false => Some((*try!(parser.parse_ident()).name.as_str()).to_owned()), }; try!(parser.expect(&token::Gt)); @@ -216,7 +214,7 @@ fn parse(cx: &mut ExtCtxt, toks: &[ast::TokenTree]) -> Result let lhs_lo = parser.span.lo; let lhs = match parser.token { - token::Underscore | token::Ident(..) => Pat(try!(parser.parse_pat_nopanic())), + token::Underscore | token::Ident(..) => Pat(try!(parser.parse_pat())), token::Lt => { let mut tags = Vec::new(); while parser.token != token::FatArrow { @@ -412,8 +410,8 @@ pub fn expand_to_tokens(cx: &mut ExtCtxt, span: Span, toks: &[ast::TokenTree]) // // last_arm_token => { // let enable_wildcards = match last_arm_token { - // TagToken(Tag { kind: EndTag, name: atom!(body), .. }) => false, - // TagToken(Tag { kind: EndTag, name: atom!(html), .. }) => false, + // TagToken(Tag { kind: EndTag, name: atom!("body"), .. }) => false, + // TagToken(Tag { kind: EndTag, name: atom!("html"), .. }) => false, // // ... // _ => true, // }; diff --git a/macros/src/pre_expand.rs b/macros/src/pre_expand.rs index 04393320..a63d881b 100644 --- a/macros/src/pre_expand.rs +++ b/macros/src/pre_expand.rs @@ -102,7 +102,7 @@ fn pretty(cx: &mut ext::base::ExtCtxt, tts: Vec) -> Vec) -> Handle { let info = match name { - qualname!(HTML, script) => Script(false), - qualname!(HTML, template) => Template(new_node(Document)), + qualname!(html, "script") => Script(false), + qualname!(html, "template") => Template(new_node(Document)), _ => Normal, }; new_node(Element(name, info, attrs)) diff --git a/src/serialize/mod.rs b/src/serialize/mod.rs index 32913501..7b8ced09 100644 --- a/src/serialize/mod.rs +++ b/src/serialize/mod.rs @@ -65,7 +65,7 @@ pub struct Serializer<'wr, Wr:'wr> { fn tagname(name: &QualName) -> Atom { match name.ns { - ns!(HTML) | ns!(MathML) | ns!(SVG) => (), + ns!(html) | ns!(mathml) | ns!(svg) => (), ref ns => { // FIXME(#122) warn!("node with weird namespace {:?}", &*ns.0); @@ -112,7 +112,7 @@ impl<'wr, Wr: Write> Serializer<'wr, Wr> { attrs: AttrIter) -> io::Result<()> { let html_name = match name.ns { - ns!(HTML) => Some(name.local.clone()), + ns!(html) => Some(name.local.clone()), _ => None, }; @@ -131,14 +131,14 @@ impl<'wr, Wr: Write> Serializer<'wr, Wr> { try!(self.writer.write_all(b" ")); match name.ns { - ns!("") => (), - ns!(XML) => try!(self.writer.write_all(b"xml:")), - ns!(XMLNS) => { - if name.local != atom!(xmlns) { + ns!() => (), + ns!(xml) => try!(self.writer.write_all(b"xml:")), + ns!(xmlns) => { + if name.local != atom!("xmlns") { try!(self.writer.write_all(b"xmlns:")); } } - ns!(XLink) => try!(self.writer.write_all(b"xlink:")), + ns!(xlink) => try!(self.writer.write_all(b"xlink:")), ref ns => { // FIXME(#122) warn!("attr with weird namespace {:?}", &*ns.0); @@ -153,11 +153,11 @@ impl<'wr, Wr: Write> Serializer<'wr, Wr> { } try!(self.writer.write_all(b">")); - let ignore_children = name.ns == ns!(HTML) && match name.local { - atom!(area) | atom!(base) | atom!(basefont) | atom!(bgsound) | atom!(br) - | atom!(col) | atom!(embed) | atom!(frame) | atom!(hr) | atom!(img) - | atom!(input) | atom!(keygen) | atom!(link) | atom!(menuitem) - | atom!(meta) | atom!(param) | atom!(source) | atom!(track) | atom!(wbr) + let ignore_children = name.ns == ns!(html) && match name.local { + atom!("area") | atom!("base") | atom!("basefont") | atom!("bgsound") | atom!("br") + | atom!("col") | atom!("embed") | atom!("frame") | atom!("hr") | atom!("img") + | atom!("input") | atom!("keygen") | atom!("link") | atom!("menuitem") + | atom!("meta") | atom!("param") | atom!("source") | atom!("track") | atom!("wbr") => true, _ => false, }; @@ -188,7 +188,7 @@ impl<'wr, Wr: Write> Serializer<'wr, Wr> { let prepend_lf = text.starts_with("\n") && { let parent = self.parent(); !parent.processed_first_child && match parent.html_name { - Some(atom!(pre)) | Some(atom!(textarea)) | Some(atom!(listing)) => true, + Some(atom!("pre")) | Some(atom!("textarea")) | Some(atom!("listing")) => true, _ => false, } }; @@ -198,11 +198,11 @@ impl<'wr, Wr: Write> Serializer<'wr, Wr> { } let escape = match self.parent().html_name { - Some(atom!(style)) | Some(atom!(script)) | Some(atom!(xmp)) - | Some(atom!(iframe)) | Some(atom!(noembed)) | Some(atom!(noframes)) - | Some(atom!(plaintext)) => false, + Some(atom!("style")) | Some(atom!("script")) | Some(atom!("xmp")) + | Some(atom!("iframe")) | Some(atom!("noembed")) | Some(atom!("noframes")) + | Some(atom!("plaintext")) => false, - Some(atom!(noscript)) => !self.opts.scripting_enabled, + Some(atom!("noscript")) => !self.opts.scripting_enabled, _ => true, }; diff --git a/src/tokenizer/mod.rs b/src/tokenizer/mod.rs index 608a1139..ea23e490 100644 --- a/src/tokenizer/mod.rs +++ b/src/tokenizer/mod.rs @@ -166,7 +166,7 @@ impl Tokenizer { /// Create a new tokenizer which feeds tokens to a particular `TokenSink`. pub fn new(sink: Sink, mut opts: TokenizerOpts) -> Tokenizer { let start_tag_name = opts.last_start_tag_name.take() - .map(|s| Atom::from_slice(&s)); + .map(|s| Atom::from(&*s)); let state = opts.initial_state.unwrap_or(states::Data); let discard_bom = opts.discard_bom; Tokenizer { @@ -367,7 +367,7 @@ impl Tokenizer { fn emit_current_tag(&mut self) { self.finish_attribute(); - let name = Atom::from_slice(&self.current_tag_name); + let name = Atom::from(&*self.current_tag_name); self.current_tag_name.clear(); match self.current_tag_kind { @@ -458,12 +458,12 @@ impl Tokenizer { self.current_attr_name.clear(); self.current_attr_value.clear(); } else { - let name = Atom::from_slice(&self.current_attr_name); + let name = Atom::from(&*self.current_attr_name); self.current_attr_name.clear(); self.current_tag_attrs.push(Attribute { // The tree builder will adjust the namespace if necessary. // This only happens in foreign elements. - name: QualName::new(ns!(""), name), + name: QualName::new(ns!(), name), value: replace(&mut self.current_attr_value, StrTendril::new()), }); } diff --git a/src/tree_builder/actions.rs b/src/tree_builder/actions.rs index 34e7c944..60556a05 100644 --- a/src/tree_builder/actions.rs +++ b/src/tree_builder/actions.rs @@ -203,7 +203,7 @@ impl TreeBuilderActions self.current_node() } - fn current_node_in(&self, set: TagSet) -> bool + fn current_node_in(&self, set: TagSet) -> bool where TagSet: Fn(QualName) -> bool { set(self.sink.elem_name(self.current_node())) @@ -211,10 +211,10 @@ impl TreeBuilderActions // Insert at the "appropriate place for inserting a node". fn insert_appropriately(&mut self, child: NodeOrText, override_target: Option) { - declare_tag_set!(foster_target = table tbody tfoot thead tr); + declare_tag_set!(foster_target = "table" "tbody" "tfoot" "thead" "tr"); let target = override_target.unwrap_or_else(|| self.current_node()); if !(self.foster_parenting && self.elem_in(target.clone(), foster_target)) { - if self.html_elem_named(target.clone(), atom!(template)) { + if self.html_elem_named(target.clone(), atom!("template")) { // No foster parenting (inside template). let contents = self.sink.get_template_contents(target); self.sink.append(contents, child); @@ -228,11 +228,11 @@ impl TreeBuilderActions // Foster parenting let mut iter = self.open_elems.iter().rev().peekable(); while let Some(elem) = iter.next() { - if self.html_elem_named(elem.clone(), atom!(template)) { + if self.html_elem_named(elem.clone(), atom!("template")) { let contents = self.sink.get_template_contents(elem.clone()); self.sink.append(contents, child); return; - } else if self.html_elem_named(elem.clone(), atom!(table)) { + } else if self.html_elem_named(elem.clone(), atom!("table")) { // Try inserting "inside last table's parent node, immediately before last table" if let Err(child) = self.sink.append_before_sibling(elem.clone(), child) { // If last_table has no parent, we regain ownership of the child. @@ -368,7 +368,7 @@ impl TreeBuilderActions // FIXME: Is there a way to avoid cloning the attributes twice here (once on their // own, once as part of t.clone() above)? let new_element = self.sink.create_element( - QualName::new(ns!(HTML), tag.name.clone()), tag.attrs.clone()); + QualName::new(ns!(html), tag.name.clone()), tag.attrs.clone()); self.open_elems[node_index] = new_element.clone(); self.active_formatting[node_formatting_index] = Element(new_element.clone(), tag); node = new_element; @@ -396,7 +396,7 @@ impl TreeBuilderActions // FIXME: Is there a way to avoid cloning the attributes twice here (once on their own, // once as part of t.clone() above)? let new_element = self.sink.create_element( - QualName::new(ns!(HTML), fmt_elem_tag.name.clone()), fmt_elem_tag.attrs.clone()); + QualName::new(ns!(html), fmt_elem_tag.name.clone()), fmt_elem_tag.attrs.clone()); let new_entry = Element(new_element.clone(), fmt_elem_tag); // 16. @@ -489,7 +489,7 @@ impl TreeBuilderActions // FIXME: Is there a way to avoid cloning the attributes twice here (once on their own, // once as part of t.clone() above)? - let new_element = self.insert_element(Push, ns!(HTML), tag.name.clone(), + let new_element = self.insert_element(Push, ns!(html), tag.name.clone(), tag.attrs.clone()); self.active_formatting[entry_index] = Element(new_element, tag); if entry_index == self.active_formatting.len() - 1 { @@ -511,7 +511,7 @@ impl TreeBuilderActions } let node = self.open_elems[1].clone(); - if self.html_elem_named(node.clone(), atom!(body)) { + if self.html_elem_named(node.clone(), atom!("body")) { Some(node) } else { None @@ -522,8 +522,8 @@ impl TreeBuilderActions /// the end of the body. fn check_body_end(&mut self) { declare_tag_set!(body_end_ok = - dd dt li optgroup option p rp rt tbody td tfoot th - thead tr body html); + "dd" "dt" "li" "optgroup" "option" "p" "rp" "rt" "tbody" "td" "tfoot" "th" + "thead" "tr" "body" "html"); for elem in self.open_elems.iter() { let name = self.sink.elem_name(elem.clone()); @@ -538,7 +538,7 @@ impl TreeBuilderActions } } - fn in_scope(&self, scope: TagSet, pred: Pred) -> bool + fn in_scope(&self, scope: TagSet, pred: Pred) -> bool where TagSet: Fn(QualName) -> bool, Pred: Fn(Handle) -> bool { for node in self.open_elems.iter().rev() { @@ -555,14 +555,14 @@ impl TreeBuilderActions false } - fn elem_in(&self, elem: Handle, set: TagSet) -> bool + fn elem_in(&self, elem: Handle, set: TagSet) -> bool where TagSet: Fn(QualName) -> bool { set(self.sink.elem_name(elem)) } fn html_elem_named(&self, elem: Handle, name: Atom) -> bool { - self.sink.elem_name(elem) == QualName::new(ns!(HTML), name) + self.sink.elem_name(elem) == QualName::new(ns!(html), name) } fn in_html_elem_named(&self, name: Atom) -> bool { @@ -573,7 +573,7 @@ impl TreeBuilderActions self.html_elem_named(self.current_node(), name) } - fn in_scope_named(&self, scope: TagSet, name: Atom) -> bool + fn in_scope_named(&self, scope: TagSet, name: Atom) -> bool where TagSet: Fn(QualName) -> bool { self.in_scope(scope, |elem| @@ -581,7 +581,7 @@ impl TreeBuilderActions } //§ closing-elements-that-have-implied-end-tags - fn generate_implied_end(&mut self, set: TagSet) + fn generate_implied_end(&mut self, set: TagSet) where TagSet: Fn(QualName) -> bool { loop { @@ -594,14 +594,14 @@ impl TreeBuilderActions fn generate_implied_end_except(&mut self, except: Atom) { self.generate_implied_end(|p| match p { - QualName { ns: ns!(HTML), ref local } if *local == except => false, + QualName { ns: ns!(html), ref local } if *local == except => false, _ => cursory_implied_end(p), }); } //§ END // Pop elements until the current element is in the set. - fn pop_until_current(&mut self, pred: TagSet) + fn pop_until_current(&mut self, pred: TagSet) where TagSet: Fn(QualName) -> bool { loop { @@ -629,7 +629,7 @@ impl TreeBuilderActions } fn pop_until_named(&mut self, name: Atom) -> usize { - self.pop_until(|p| p == QualName::new(ns!(HTML), name.clone())) + self.pop_until(|p| p == QualName::new(ns!(html), name.clone())) } // Pop elements until one with the specified name has been popped. @@ -643,13 +643,13 @@ impl TreeBuilderActions } fn close_p_element(&mut self) { - declare_tag_set!(implied = cursory_implied_end - p); + declare_tag_set!(implied = [cursory_implied_end] - "p"); self.generate_implied_end(implied); - self.expect_to_close(atom!(p)); + self.expect_to_close(atom!("p")); } fn close_p_element_in_button_scope(&mut self) { - if self.in_scope_named(button_scope, atom!(p)) { + if self.in_scope_named(button_scope, atom!("p")) { self.close_p_element(); } } @@ -672,7 +672,7 @@ impl TreeBuilderActions } fn process_chars_in_table(&mut self, token: Token) -> ProcessResult { - declare_tag_set!(table_outer = table tbody tfoot thead tr); + declare_tag_set!(table_outer = "table" "tbody" "tfoot" "thead" "tr"); if self.current_node_in(table_outer) { assert!(self.pending_table_text.is_empty()); self.orig_mode = Some(self.mode); @@ -693,31 +693,31 @@ impl TreeBuilderActions node = ctx; } let name = match self.sink.elem_name(node.clone()) { - QualName { ns: ns!(HTML), local } => local, + QualName { ns: ns!(html), local } => local, _ => continue, }; match name { - atom!(select) => { + atom!("select") => { for ancestor in self.open_elems[0..i].iter().rev() { - if self.html_elem_named(ancestor.clone(), atom!(template)) { + if self.html_elem_named(ancestor.clone(), atom!("template")) { return InSelect; - } else if self.html_elem_named(ancestor.clone(), atom!(table)) { + } else if self.html_elem_named(ancestor.clone(), atom!("table")) { return InSelectInTable; } } return InSelect; }, - atom!(td) | atom!(th) => if !last { return InCell; }, - atom!(tr) => return InRow, - atom!(tbody) | atom!(thead) | atom!(tfoot) => return InTableBody, - atom!(caption) => return InCaption, - atom!(colgroup) => return InColumnGroup, - atom!(table) => return InTable, - atom!(template) => return *self.template_modes.last().unwrap(), - atom!(head) => if !last { return InHead }, - atom!(body) => return InBody, - atom!(frameset) => return InFrameset, - atom!(html) => match self.head_elem { + atom!("td") | atom!("th") => if !last { return InCell; }, + atom!("tr") => return InRow, + atom!("tbody") | atom!("thead") | atom!("tfoot") => return InTableBody, + atom!("caption") => return InCaption, + atom!("colgroup") => return InColumnGroup, + atom!("table") => return InTable, + atom!("template") => return *self.template_modes.last().unwrap(), + atom!("head") => if !last { return InHead }, + atom!("body") => return InBody, + atom!("frameset") => return InFrameset, + atom!("html") => match self.head_elem { None => return BeforeHead, Some(_) => return AfterHead, }, @@ -763,7 +763,7 @@ impl TreeBuilderActions //§ creating-and-inserting-nodes fn create_root(&mut self, attrs: Vec) { - let elem = self.sink.create_element(qualname!(HTML, html), attrs); + let elem = self.sink.create_element(qualname!(html, "html"), attrs); self.push(&elem); self.sink.append(self.doc_handle.clone(), AppendNode(elem)); // FIXME: application cache selection algorithm @@ -782,15 +782,15 @@ impl TreeBuilderActions } fn insert_element_for(&mut self, tag: Tag) -> Handle { - self.insert_element(Push, ns!(HTML), tag.name, tag.attrs) + self.insert_element(Push, ns!(html), tag.name, tag.attrs) } fn insert_and_pop_element_for(&mut self, tag: Tag) -> Handle { - self.insert_element(NoPush, ns!(HTML), tag.name, tag.attrs) + self.insert_element(NoPush, ns!(html), tag.name, tag.attrs) } fn insert_phantom(&mut self, name: Atom) -> Handle { - self.insert_element(Push, ns!(HTML), name, vec!()) + self.insert_element(Push, ns!(html), name, vec!()) } //§ END @@ -809,7 +809,7 @@ impl TreeBuilderActions self.active_formatting.remove(first_match.expect("matches with no index")); } - let elem = self.insert_element(Push, ns!(HTML), tag.name.clone(), tag.attrs.clone()); + let elem = self.insert_element(Push, ns!(html), tag.name.clone(), tag.attrs.clone()); self.active_formatting.push(Element(elem.clone(), tag)); elem } @@ -861,7 +861,7 @@ impl TreeBuilderActions fn handle_misnested_a_tags(&mut self, tag: &Tag) { let node = unwrap_or_return!( self.active_formatting_end_to_marker() - .filter(|&(_, n, _)| self.html_elem_named(n.clone(), atom!(a))) + .filter(|&(_, n, _)| self.html_elem_named(n.clone(), atom!("a"))) .next() .map(|(_, n, _)| n.clone()), @@ -869,7 +869,7 @@ impl TreeBuilderActions ); self.unexpected(tag); - self.adoption_agency(atom!(a)); + self.adoption_agency(atom!("a")); self.position_in_active_formatting(&node) .map(|index| self.active_formatting.remove(index)); self.remove_from_stack(&node); @@ -886,7 +886,7 @@ impl TreeBuilderActions } let name = self.sink.elem_name(self.adjusted_current_node()); - if let ns!(HTML) = name.ns { + if let ns!(html) = name.ns { return false; } @@ -894,13 +894,13 @@ impl TreeBuilderActions match *token { CharacterTokens(..) | NullCharacterToken => return false, TagToken(Tag { kind: StartTag, ref name, .. }) - if !matches!(*name, atom!(mglyph) | atom!(malignmark)) => return false, + if !matches!(*name, atom!("mglyph") | atom!("malignmark")) => return false, _ => (), } } - if let qualname!(MathML, "annotation-xml") = name { - if let TagToken(Tag { kind: StartTag, name: atom!(svg), .. }) = *token { + if let qualname!(mathml, "annotation-xml") = name { + if let TagToken(Tag { kind: StartTag, name: atom!("svg"), .. }) = *token { return false; } } @@ -919,8 +919,8 @@ impl TreeBuilderActions fn enter_foreign(&mut self, mut tag: Tag, ns: Namespace) -> ProcessResult { match ns { - ns!(MathML) => self.adjust_mathml_attributes(&mut tag), - ns!(SVG) => self.adjust_svg_attributes(&mut tag), + ns!(mathml) => self.adjust_mathml_attributes(&mut tag), + ns!(svg) => self.adjust_svg_attributes(&mut tag), _ => (), } self.adjust_foreign_attributes(&mut tag); @@ -937,43 +937,43 @@ impl TreeBuilderActions fn adjust_svg_tag_name(&mut self, tag: &mut Tag) { let Tag { ref mut name, .. } = *tag; match *name { - atom!(altglyph) => *name = atom!(altGlyph), - atom!(altglyphdef) => *name = atom!(altGlyphDef), - atom!(altglyphitem) => *name = atom!(altGlyphItem), - atom!(animatecolor) => *name = atom!(animateColor), - atom!(animatemotion) => *name = atom!(animateMotion), - atom!(animatetransform) => *name = atom!(animateTransform), - atom!(clippath) => *name = atom!(clipPath), - atom!(feblend) => *name = atom!(feBlend), - atom!(fecolormatrix) => *name = atom!(feColorMatrix), - atom!(fecomponenttransfer) => *name = atom!(feComponentTransfer), - atom!(fecomposite) => *name = atom!(feComposite), - atom!(feconvolvematrix) => *name = atom!(feConvolveMatrix), - atom!(fediffuselighting) => *name = atom!(feDiffuseLighting), - atom!(fedisplacementmap) => *name = atom!(feDisplacementMap), - atom!(fedistantlight) => *name = atom!(feDistantLight), - atom!(fedropshadow) => *name = atom!(feDropShadow), - atom!(feflood) => *name = atom!(feFlood), - atom!(fefunca) => *name = atom!(feFuncA), - atom!(fefuncb) => *name = atom!(feFuncB), - atom!(fefuncg) => *name = atom!(feFuncG), - atom!(fefuncr) => *name = atom!(feFuncR), - atom!(fegaussianblur) => *name = atom!(feGaussianBlur), - atom!(feimage) => *name = atom!(feImage), - atom!(femerge) => *name = atom!(feMerge), - atom!(femergenode) => *name = atom!(feMergeNode), - atom!(femorphology) => *name = atom!(feMorphology), - atom!(feoffset) => *name = atom!(feOffset), - atom!(fepointlight) => *name = atom!(fePointLight), - atom!(fespecularlighting) => *name = atom!(feSpecularLighting), - atom!(fespotlight) => *name = atom!(feSpotLight), - atom!(fetile) => *name = atom!(feTile), - atom!(feturbulence) => *name = atom!(feTurbulence), - atom!(foreignobject) => *name = atom!(foreignObject), - atom!(glyphref) => *name = atom!(glyphRef), - atom!(lineargradient) => *name = atom!(linearGradient), - atom!(radialgradient) => *name = atom!(radialGradient), - atom!(textpath) => *name = atom!(textPath), + atom!("altglyph") => *name = atom!("altGlyph"), + atom!("altglyphdef") => *name = atom!("altGlyphDef"), + atom!("altglyphitem") => *name = atom!("altGlyphItem"), + atom!("animatecolor") => *name = atom!("animateColor"), + atom!("animatemotion") => *name = atom!("animateMotion"), + atom!("animatetransform") => *name = atom!("animateTransform"), + atom!("clippath") => *name = atom!("clipPath"), + atom!("feblend") => *name = atom!("feBlend"), + atom!("fecolormatrix") => *name = atom!("feColorMatrix"), + atom!("fecomponenttransfer") => *name = atom!("feComponentTransfer"), + atom!("fecomposite") => *name = atom!("feComposite"), + atom!("feconvolvematrix") => *name = atom!("feConvolveMatrix"), + atom!("fediffuselighting") => *name = atom!("feDiffuseLighting"), + atom!("fedisplacementmap") => *name = atom!("feDisplacementMap"), + atom!("fedistantlight") => *name = atom!("feDistantLight"), + atom!("fedropshadow") => *name = atom!("feDropShadow"), + atom!("feflood") => *name = atom!("feFlood"), + atom!("fefunca") => *name = atom!("feFuncA"), + atom!("fefuncb") => *name = atom!("feFuncB"), + atom!("fefuncg") => *name = atom!("feFuncG"), + atom!("fefuncr") => *name = atom!("feFuncR"), + atom!("fegaussianblur") => *name = atom!("feGaussianBlur"), + atom!("feimage") => *name = atom!("feImage"), + atom!("femerge") => *name = atom!("feMerge"), + atom!("femergenode") => *name = atom!("feMergeNode"), + atom!("femorphology") => *name = atom!("feMorphology"), + atom!("feoffset") => *name = atom!("feOffset"), + atom!("fepointlight") => *name = atom!("fePointLight"), + atom!("fespecularlighting") => *name = atom!("feSpecularLighting"), + atom!("fespotlight") => *name = atom!("feSpotLight"), + atom!("fetile") => *name = atom!("feTile"), + atom!("feturbulence") => *name = atom!("feTurbulence"), + atom!("foreignobject") => *name = atom!("foreignObject"), + atom!("glyphref") => *name = atom!("glyphRef"), + atom!("lineargradient") => *name = atom!("linearGradient"), + atom!("radialgradient") => *name = atom!("radialGradient"), + atom!("textpath") => *name = atom!("textPath"), _ => (), } } @@ -990,89 +990,89 @@ impl TreeBuilderActions fn adjust_svg_attributes(&mut self, tag: &mut Tag) { self.adjust_attributes(tag, |k| match k { - atom!(attributename) => Some(qualname!("", attributeName)), - atom!(attributetype) => Some(qualname!("", attributeType)), - atom!(basefrequency) => Some(qualname!("", baseFrequency)), - atom!(baseprofile) => Some(qualname!("", baseProfile)), - atom!(calcmode) => Some(qualname!("", calcMode)), - atom!(clippathunits) => Some(qualname!("", clipPathUnits)), - atom!(diffuseconstant) => Some(qualname!("", diffuseConstant)), - atom!(edgemode) => Some(qualname!("", edgeMode)), - atom!(filterunits) => Some(qualname!("", filterUnits)), - atom!(glyphref) => Some(qualname!("", glyphRef)), - atom!(gradienttransform) => Some(qualname!("", gradientTransform)), - atom!(gradientunits) => Some(qualname!("", gradientUnits)), - atom!(kernelmatrix) => Some(qualname!("", kernelMatrix)), - atom!(kernelunitlength) => Some(qualname!("", kernelUnitLength)), - atom!(keypoints) => Some(qualname!("", keyPoints)), - atom!(keysplines) => Some(qualname!("", keySplines)), - atom!(keytimes) => Some(qualname!("", keyTimes)), - atom!(lengthadjust) => Some(qualname!("", lengthAdjust)), - atom!(limitingconeangle) => Some(qualname!("", limitingConeAngle)), - atom!(markerheight) => Some(qualname!("", markerHeight)), - atom!(markerunits) => Some(qualname!("", markerUnits)), - atom!(markerwidth) => Some(qualname!("", markerWidth)), - atom!(maskcontentunits) => Some(qualname!("", maskContentUnits)), - atom!(maskunits) => Some(qualname!("", maskUnits)), - atom!(numoctaves) => Some(qualname!("", numOctaves)), - atom!(pathlength) => Some(qualname!("", pathLength)), - atom!(patterncontentunits) => Some(qualname!("", patternContentUnits)), - atom!(patterntransform) => Some(qualname!("", patternTransform)), - atom!(patternunits) => Some(qualname!("", patternUnits)), - atom!(pointsatx) => Some(qualname!("", pointsAtX)), - atom!(pointsaty) => Some(qualname!("", pointsAtY)), - atom!(pointsatz) => Some(qualname!("", pointsAtZ)), - atom!(preservealpha) => Some(qualname!("", preserveAlpha)), - atom!(preserveaspectratio) => Some(qualname!("", preserveAspectRatio)), - atom!(primitiveunits) => Some(qualname!("", primitiveUnits)), - atom!(refx) => Some(qualname!("", refX)), - atom!(refy) => Some(qualname!("", refY)), - atom!(repeatcount) => Some(qualname!("", repeatCount)), - atom!(repeatdur) => Some(qualname!("", repeatDur)), - atom!(requiredextensions) => Some(qualname!("", requiredExtensions)), - atom!(requiredfeatures) => Some(qualname!("", requiredFeatures)), - atom!(specularconstant) => Some(qualname!("", specularConstant)), - atom!(specularexponent) => Some(qualname!("", specularExponent)), - atom!(spreadmethod) => Some(qualname!("", spreadMethod)), - atom!(startoffset) => Some(qualname!("", startOffset)), - atom!(stddeviation) => Some(qualname!("", stdDeviation)), - atom!(stitchtiles) => Some(qualname!("", stitchTiles)), - atom!(surfacescale) => Some(qualname!("", surfaceScale)), - atom!(systemlanguage) => Some(qualname!("", systemLanguage)), - atom!(tablevalues) => Some(qualname!("", tableValues)), - atom!(targetx) => Some(qualname!("", targetX)), - atom!(targety) => Some(qualname!("", targetY)), - atom!(textlength) => Some(qualname!("", textLength)), - atom!(viewbox) => Some(qualname!("", viewBox)), - atom!(viewtarget) => Some(qualname!("", viewTarget)), - atom!(xchannelselector) => Some(qualname!("", xChannelSelector)), - atom!(ychannelselector) => Some(qualname!("", yChannelSelector)), - atom!(zoomandpan) => Some(qualname!("", zoomAndPan)), + atom!("attributename") => Some(qualname!("", "attributeName")), + atom!("attributetype") => Some(qualname!("", "attributeType")), + atom!("basefrequency") => Some(qualname!("", "baseFrequency")), + atom!("baseprofile") => Some(qualname!("", "baseProfile")), + atom!("calcmode") => Some(qualname!("", "calcMode")), + atom!("clippathunits") => Some(qualname!("", "clipPathUnits")), + atom!("diffuseconstant") => Some(qualname!("", "diffuseConstant")), + atom!("edgemode") => Some(qualname!("", "edgeMode")), + atom!("filterunits") => Some(qualname!("", "filterUnits")), + atom!("glyphref") => Some(qualname!("", "glyphRef")), + atom!("gradienttransform") => Some(qualname!("", "gradientTransform")), + atom!("gradientunits") => Some(qualname!("", "gradientUnits")), + atom!("kernelmatrix") => Some(qualname!("", "kernelMatrix")), + atom!("kernelunitlength") => Some(qualname!("", "kernelUnitLength")), + atom!("keypoints") => Some(qualname!("", "keyPoints")), + atom!("keysplines") => Some(qualname!("", "keySplines")), + atom!("keytimes") => Some(qualname!("", "keyTimes")), + atom!("lengthadjust") => Some(qualname!("", "lengthAdjust")), + atom!("limitingconeangle") => Some(qualname!("", "limitingConeAngle")), + atom!("markerheight") => Some(qualname!("", "markerHeight")), + atom!("markerunits") => Some(qualname!("", "markerUnits")), + atom!("markerwidth") => Some(qualname!("", "markerWidth")), + atom!("maskcontentunits") => Some(qualname!("", "maskContentUnits")), + atom!("maskunits") => Some(qualname!("", "maskUnits")), + atom!("numoctaves") => Some(qualname!("", "numOctaves")), + atom!("pathlength") => Some(qualname!("", "pathLength")), + atom!("patterncontentunits") => Some(qualname!("", "patternContentUnits")), + atom!("patterntransform") => Some(qualname!("", "patternTransform")), + atom!("patternunits") => Some(qualname!("", "patternUnits")), + atom!("pointsatx") => Some(qualname!("", "pointsAtX")), + atom!("pointsaty") => Some(qualname!("", "pointsAtY")), + atom!("pointsatz") => Some(qualname!("", "pointsAtZ")), + atom!("preservealpha") => Some(qualname!("", "preserveAlpha")), + atom!("preserveaspectratio") => Some(qualname!("", "preserveAspectRatio")), + atom!("primitiveunits") => Some(qualname!("", "primitiveUnits")), + atom!("refx") => Some(qualname!("", "refX")), + atom!("refy") => Some(qualname!("", "refY")), + atom!("repeatcount") => Some(qualname!("", "repeatCount")), + atom!("repeatdur") => Some(qualname!("", "repeatDur")), + atom!("requiredextensions") => Some(qualname!("", "requiredExtensions")), + atom!("requiredfeatures") => Some(qualname!("", "requiredFeatures")), + atom!("specularconstant") => Some(qualname!("", "specularConstant")), + atom!("specularexponent") => Some(qualname!("", "specularExponent")), + atom!("spreadmethod") => Some(qualname!("", "spreadMethod")), + atom!("startoffset") => Some(qualname!("", "startOffset")), + atom!("stddeviation") => Some(qualname!("", "stdDeviation")), + atom!("stitchtiles") => Some(qualname!("", "stitchTiles")), + atom!("surfacescale") => Some(qualname!("", "surfaceScale")), + atom!("systemlanguage") => Some(qualname!("", "systemLanguage")), + atom!("tablevalues") => Some(qualname!("", "tableValues")), + atom!("targetx") => Some(qualname!("", "targetX")), + atom!("targety") => Some(qualname!("", "targetY")), + atom!("textlength") => Some(qualname!("", "textLength")), + atom!("viewbox") => Some(qualname!("", "viewBox")), + atom!("viewtarget") => Some(qualname!("", "viewTarget")), + atom!("xchannelselector") => Some(qualname!("", "xChannelSelector")), + atom!("ychannelselector") => Some(qualname!("", "yChannelSelector")), + atom!("zoomandpan") => Some(qualname!("", "zoomAndPan")), _ => None, }); } fn adjust_mathml_attributes(&mut self, tag: &mut Tag) { self.adjust_attributes(tag, |k| match k { - atom!(definitionurl) => Some(qualname!("", definitionURL)), + atom!("definitionurl") => Some(qualname!("", "definitionURL")), _ => None, }); } fn adjust_foreign_attributes(&mut self, tag: &mut Tag) { self.adjust_attributes(tag, |k| match k { - atom!("xlink:actuate") => Some(qualname!(XLink, actuate)), - atom!("xlink:arcrole") => Some(qualname!(XLink, arcrole)), - atom!("xlink:href") => Some(qualname!(XLink, href)), - atom!("xlink:role") => Some(qualname!(XLink, role)), - atom!("xlink:show") => Some(qualname!(XLink, show)), - atom!("xlink:title") => Some(qualname!(XLink, title)), - atom!("xlink:type") => Some(qualname!(XLink, "type")), - atom!("xml:base") => Some(qualname!(XML, base)), - atom!("xml:lang") => Some(qualname!(XML, lang)), - atom!("xml:space") => Some(qualname!(XML, space)), - atom!("xmlns") => Some(qualname!(XMLNS, xmlns)), - atom!("xmlns:xlink") => Some(qualname!(XMLNS, xlink)), + atom!("xlink:actuate") => Some(qualname!(xlink, "actuate")), + atom!("xlink:arcrole") => Some(qualname!(xlink, "arcrole")), + atom!("xlink:href") => Some(qualname!(xlink, "href")), + atom!("xlink:role") => Some(qualname!(xlink, "role")), + atom!("xlink:show") => Some(qualname!(xlink, "show")), + atom!("xlink:title") => Some(qualname!(xlink, "title")), + atom!("xlink:type") => Some(qualname!(xlink, "type")), + atom!("xml:base") => Some(qualname!(xml, "base")), + atom!("xml:lang") => Some(qualname!(xml, "lang")), + atom!("xml:space") => Some(qualname!(xml, "space")), + atom!("xmlns") => Some(qualname!(xmlns, "xmlns")), + atom!("xmlns:xlink") => Some(qualname!(xmlns, "xlink")), _ => None, }); } @@ -1080,8 +1080,8 @@ impl TreeBuilderActions fn foreign_start_tag(&mut self, mut tag: Tag) -> ProcessResult { let cur = self.sink.elem_name(self.adjusted_current_node()); match cur.ns { - ns!(MathML) => self.adjust_mathml_attributes(&mut tag), - ns!(SVG) => { + ns!(mathml) => self.adjust_mathml_attributes(&mut tag), + ns!(svg) => { self.adjust_svg_tag_name(&mut tag); self.adjust_svg_attributes(&mut tag); } @@ -1105,7 +1105,7 @@ impl TreeBuilderActions } else { self.pop(); while !self.current_node_in(|n| { - n.ns == ns!(HTML) || mathml_text_integration_point(n.clone()) + n.ns == ns!(html) || mathml_text_integration_point(n.clone()) || html_integration_point(n) }) { self.pop(); diff --git a/src/tree_builder/interface.rs b/src/tree_builder/interface.rs index d9bfd53a..49a28955 100644 --- a/src/tree_builder/interface.rs +++ b/src/tree_builder/interface.rs @@ -79,7 +79,7 @@ pub trait TreeSink { /// Create an element. /// - /// When creating a template element (`name == qualname!(HTML, template)`), + /// When creating a template element (`name == qualname!(html, "template")`), /// an associated document fragment called the "template contents" should /// also be created. Later calls to self.get_template_contents() with that /// given element return it. diff --git a/src/tree_builder/mod.rs b/src/tree_builder/mod.rs index a6535690..ce3a414b 100644 --- a/src/tree_builder/mod.rs +++ b/src/tree_builder/mod.rs @@ -187,7 +187,7 @@ impl TreeBuilder opts: TreeBuilderOpts) -> TreeBuilder { let doc_handle = sink.get_document(); let context_is_template = - sink.elem_name(context_elem.clone()) == qualname!(HTML, template); + sink.elem_name(context_elem.clone()) == qualname!(html, "template"); let mut tb = TreeBuilder { opts: opts, sink: sink, @@ -224,24 +224,24 @@ impl TreeBuilder pub fn tokenizer_state_for_context_elem(&self) -> tok_state::State { let elem = self.context_elem.clone().expect("no context element"); let name = match self.sink.elem_name(elem) { - QualName { ns: ns!(HTML), local } => local, + QualName { ns: ns!(html), local } => local, _ => return tok_state::Data }; match name { - atom!(title) | atom!(textarea) => tok_state::RawData(tok_state::Rcdata), + atom!("title") | atom!("textarea") => tok_state::RawData(tok_state::Rcdata), - atom!(style) | atom!(xmp) | atom!(iframe) - | atom!(noembed) | atom!(noframes) => tok_state::RawData(tok_state::Rawtext), + atom!("style") | atom!("xmp") | atom!("iframe") + | atom!("noembed") | atom!("noframes") => tok_state::RawData(tok_state::Rawtext), - atom!(script) => tok_state::RawData(tok_state::ScriptData), + atom!("script") => tok_state::RawData(tok_state::ScriptData), - atom!(noscript) => if self.opts.scripting_enabled { + atom!("noscript") => if self.opts.scripting_enabled { tok_state::RawData(tok_state::Rawtext) } else { tok_state::Data }, - atom!(plaintext) => tok_state::Plaintext, + atom!("plaintext") => tok_state::Plaintext, _ => tok_state::Data } @@ -286,7 +286,7 @@ impl TreeBuilder for node in self.open_elems.iter() { let QualName { ns, local } = self.sink.elem_name(node.clone()); match ns { - ns!(HTML) => print!(" {}", &local[..]), + ns!(html) => print!(" {}", &local[..]), _ => panic!(), } } @@ -298,7 +298,7 @@ impl TreeBuilder &Element(ref h, _) => { let QualName { ns, local } = self.sink.elem_name(h.clone()); match ns { - ns!(HTML) => print!(" {}", &local[..]), + ns!(html) => print!(" {}", &local[..]), _ => panic!(), } } @@ -427,7 +427,7 @@ impl TokenSink fn adjusted_current_node_present_but_not_in_html_namespace(&self) -> bool { !self.open_elems.is_empty() && - self.sink.elem_name(self.adjusted_current_node()).ns != ns!(HTML) + self.sink.elem_name(self.adjusted_current_node()).ns != ns!(html) } fn query_state_change(&mut self) -> Option { diff --git a/src/tree_builder/rules.expanded.rs b/src/tree_builder/rules.expanded.rs index b63ec0df..ff792729 100644 --- a/src/tree_builder/rules.expanded.rs +++ b/src/tree_builder/rules.expanded.rs @@ -8,7 +8,7 @@ // except according to those terms. // This file is generated from rules.rs -// source SipHash: 307317075343040988 +// source SipHash: 18376801535389447229 # ! [ doc = @@ -62,7 +62,8 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment_to_doc(text), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => { + name: atom!("html"), .. }) => + { self.create_root(tag.attrs); self.mode = BeforeHead; Done @@ -72,19 +73,19 @@ impl TreeBuilderStep for super::TreeBuilder where match last_arm_token { ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(head), + name: atom!("head"), .. }) => false, ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(body), + name: atom!("body"), .. }) => false, ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(html), + name: atom!("html"), .. }) => false, ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(br), + name: atom!("br"), .. }) => false, _ => true, }; @@ -108,11 +109,12 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment(text), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => + name: atom!("html"), .. }) => self.step(InBody, token), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(head), .. }) => { + name: atom!("head"), .. }) => + { self.head_elem = Some(self.insert_element_for(tag)); self.mode = InHead; Done @@ -122,19 +124,19 @@ impl TreeBuilderStep for super::TreeBuilder where match last_arm_token { ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(head), + name: atom!("head"), .. }) => false, ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(body), + name: atom!("body"), .. }) => false, ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(html), + name: atom!("html"), .. }) => false, ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(br), + name: atom!("br"), .. }) => false, _ => true, }; @@ -146,7 +148,7 @@ impl TreeBuilderStep for super::TreeBuilder where self.unexpected(&tag), (_, token) => { self.head_elem = - Some(self.insert_phantom(atom!(head))); + Some(self.insert_phantom(atom!("head"))); Reprocess(InHead, token) } } @@ -159,44 +161,49 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment(text), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => + name: atom!("html"), .. }) => self.step(InBody, token), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(base), .. }) | + name: atom!("base"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(basefont), .. }) | + name: atom!("basefont"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(bgsound), .. }) | + name: atom!("bgsound"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(link), .. }) | + name: atom!("link"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(meta), .. }) => { + name: atom!("meta"), .. }) => + { self.insert_and_pop_element_for(tag); DoneAckSelfClosing } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(title), .. }) => { + name: atom!("title"), .. }) => + { self.parse_raw_data(tag, Rcdata); Done } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(noframes), .. }) | + name: atom!("noframes"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(style), .. }) | + name: atom!("style"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(noscript), .. }) + name: atom!("noscript"), .. }) => { if (!self.opts.scripting_enabled) && - (tag.name == atom!(noscript)) { + (tag.name == atom!("noscript")) { self.insert_element_for(tag); self.mode = InHeadNoscript; } else { self.parse_raw_data(tag, Rawtext); } @@ -204,10 +211,10 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(script), .. }) => - { + name: atom!("script"), .. }) + => { let elem = - self.sink.create_element(qualname!(HTML , script), + self.sink.create_element(qualname!(html , "script"), tag.attrs); if self.is_fragment() { self.sink.mark_script_already_started(elem.clone()); @@ -219,14 +226,15 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(head), .. }) => { + name: atom!("head"), .. }) => + { self.pop(); self.mode = AfterHead; Done } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(template), .. }) + name: atom!("template"), .. }) => { self.insert_element_for(tag); self.active_formatting.push(Marker); @@ -237,13 +245,13 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(template), .. }) + name: atom!("template"), .. }) => { - if !self.in_html_elem_named(atom!(template)) { + if !self.in_html_elem_named(atom!("template")) { self.unexpected(&tag); } else { self.generate_implied_end(thorough_implied_end); - self.expect_to_close(atom!(template)); + self.expect_to_close(atom!("template")); self.clear_active_formatting_to_marker(); self.template_modes.pop(); self.mode = self.reset_insertion_mode(); @@ -252,22 +260,22 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(head), .. }) => + name: atom!("head"), .. }) => self.unexpected(&token), last_arm_token => { let enable_wildcards = match last_arm_token { ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(body), + name: atom!("body"), .. }) => false, ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(html), + name: atom!("html"), .. }) => false, ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(br), + name: atom!("br"), .. }) => false, _ => true, }; @@ -288,11 +296,11 @@ impl TreeBuilderStep for super::TreeBuilder where match token { ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => + name: atom!("html"), .. }) => self.step(InBody, token), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(noscript), .. }) + name: atom!("noscript"), .. }) => { self.pop(); self.mode = InHead; @@ -303,36 +311,39 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(_) => self.step(InHead, token), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(basefont), .. }) | + name: atom!("basefont"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(bgsound), .. }) | + name: atom!("bgsound"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(link), .. }) | + name: atom!("link"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(meta), .. }) | + name: atom!("meta"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(noframes), .. }) | + name: atom!("noframes"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(style), .. }) => + name: atom!("style"), .. }) => self.step(InHead, token), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(head), .. }) | + name: atom!("head"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(noscript), .. }) + name: atom!("noscript"), .. }) => self.unexpected(&token), last_arm_token => { let enable_wildcards = match last_arm_token { ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(br), + name: atom!("br"), .. }) => false, _ => true, }; @@ -357,11 +368,12 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment(text), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => + name: atom!("html"), .. }) => self.step(InBody, token), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(body), .. }) => { + name: atom!("body"), .. }) => + { self.insert_element_for(tag); self.frameset_ok = false; self.mode = InBody; @@ -369,7 +381,7 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(frameset), .. }) + name: atom!("frameset"), .. }) => { self.insert_element_for(tag); self.mode = InFrameset; @@ -377,34 +389,39 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(base), .. }) | + name: atom!("base"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(basefont), .. }) | + name: atom!("basefont"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(bgsound), .. }) | + name: atom!("bgsound"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(link), .. }) | + name: atom!("link"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(meta), .. }) | + name: atom!("meta"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(noframes), .. }) | + name: atom!("noframes"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(script), .. }) | + name: atom!("script"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(style), .. }) | + name: atom!("style"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(template), .. }) | + name: atom!("template"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(title), .. }) => { + name: atom!("title"), .. }) => + { self.unexpected(&token); let head = self.head_elem.as_ref().expect("no head element").clone(); @@ -415,26 +432,26 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(template), .. }) + name: atom!("template"), .. }) => self.step(InHead, token), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(head), .. }) => + name: atom!("head"), .. }) => self.unexpected(&token), last_arm_token => { let enable_wildcards = match last_arm_token { ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(body), + name: atom!("body"), .. }) => false, ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(html), + name: atom!("html"), .. }) => false, ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(br), + name: atom!("br"), .. }) => false, _ => true, }; @@ -445,7 +462,7 @@ impl TreeBuilderStep for super::TreeBuilder where .. })) => self.unexpected(&tag), (_, token) => { - self.insert_phantom(atom!(body)); + self.insert_phantom(atom!("body")); Reprocess(InBody, token) } } @@ -462,9 +479,10 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment(text), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => { + name: atom!("html"), .. }) => + { self.unexpected(&tag); - if !self.in_html_elem_named(atom!(template)) { + if !self.in_html_elem_named(atom!("template")) { let top = self.html_elem(); self.sink.add_attrs_if_missing(top, tag.attrs); } @@ -472,48 +490,53 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(base), .. }) | + name: atom!("base"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(basefont), .. }) | + name: atom!("basefont"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(bgsound), .. }) | + name: atom!("bgsound"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(link), .. }) | + name: atom!("link"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(meta), .. }) | + name: atom!("meta"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(noframes), .. }) | + name: atom!("noframes"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(script), .. }) | + name: atom!("script"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(style), .. }) | + name: atom!("style"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(template), .. }) | + name: atom!("template"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(title), .. }) | + name: atom!("title"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(template), .. }) + name: atom!("template"), .. }) => { self.step(InHead, token) } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(body), .. }) => { + name: atom!("body"), .. }) => + { self.unexpected(&tag); match self.body_elem() { Some(ref node) if self.open_elems.len() != 1 && - !self.in_html_elem_named(atom!(template)) => { + !self.in_html_elem_named(atom!("template")) => { self.frameset_ok = false; self.sink.add_attrs_if_missing(node.clone(), tag.attrs) @@ -524,7 +547,7 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(frameset), .. }) + name: atom!("frameset"), .. }) => { self.unexpected(&tag); if !self.frameset_ok { return Done; } @@ -546,8 +569,9 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(body), .. }) => { - if self.in_scope_named(default_scope, atom!(body)) { + name: atom!("body"), .. }) => + { + if self.in_scope_named(default_scope, atom!("body")) { self.check_body_end(); self.mode = AfterBody; } else { @@ -557,8 +581,9 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(html), .. }) => { - if self.in_scope_named(default_scope, atom!(body)) { + name: atom!("html"), .. }) => + { + if self.in_scope_named(default_scope, atom!("body")) { self.check_body_end(); Reprocess(AfterBody, token) } else { @@ -568,100 +593,106 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(address), .. }) | + name: atom!("address"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(article), .. }) | + name: atom!("article"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(aside), .. }) | + name: atom!("aside"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(blockquote), .. }) - | + name: atom!("blockquote"), .. + }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(center), .. }) | + name: atom!("center"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(details), .. }) | + name: atom!("details"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(dialog), .. }) | + name: atom!("dialog"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(dir), .. }) | + name: atom!("dir"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(div), .. }) | + name: atom!("div"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(dl), .. }) | + name: atom!("dl"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(fieldset), .. }) | + name: atom!("fieldset"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(figcaption), .. }) - | + name: atom!("figcaption"), .. + }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(figure), .. }) | + name: atom!("figure"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(footer), .. }) | + name: atom!("footer"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(header), .. }) | + name: atom!("header"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(hgroup), .. }) | + name: atom!("hgroup"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(main), .. }) | + name: atom!("main"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(menu), .. }) | + name: atom!("menu"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(nav), .. }) | + name: atom!("nav"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(ol), .. }) | + name: atom!("ol"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(p), .. }) | + name: atom!("p"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(section), .. }) | + name: atom!("section"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(summary), .. }) | + name: atom!("summary"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(ul), .. }) => { + name: atom!("ul"), .. }) => { self.close_p_element_in_button_scope(); self.insert_element_for(tag); Done } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(h1), .. }) | + name: atom!("h1"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(h2), .. }) | + name: atom!("h2"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(h3), .. }) | + name: atom!("h3"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(h4), .. }) | + name: atom!("h4"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(h5), .. }) | + name: atom!("h5"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(h6), .. }) => { + name: atom!("h6"), .. }) => { self.close_p_element_in_button_scope(); if self.current_node_in(heading_tag) { self.sink.parse_error(Borrowed("nested heading tags")); @@ -672,11 +703,11 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(pre), .. }) | + name: atom!("pre"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(listing), .. }) => - { + name: atom!("listing"), .. }) + => { self.close_p_element_in_button_scope(); self.insert_element_for(tag); self.ignore_lf = true; @@ -685,14 +716,15 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(form), .. }) => { + name: atom!("form"), .. }) => + { if self.form_elem.is_some() && - !self.in_html_elem_named(atom!(template)) { + !self.in_html_elem_named(atom!("template")) { self.sink.parse_error(Borrowed("nested forms")); } else { self.close_p_element_in_button_scope(); let elem = self.insert_element_for(tag); - if !self.in_html_elem_named(atom!(template)) { + if !self.in_html_elem_named(atom!("template")) { self.form_elem = Some(elem); } } @@ -700,21 +732,21 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(li), .. }) | + name: atom!("li"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(dd), .. }) | + name: atom!("dd"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(dt), .. }) => { - declare_tag_set!(close_list = li); - declare_tag_set!(close_defn = dd dt); - declare_tag_set!(extra_special = special_tag - address div - p); + name: atom!("dt"), .. }) => { + declare_tag_set!(close_list = "li"); + declare_tag_set!(close_defn = "dd" "dt"); + declare_tag_set!(extra_special = [ special_tag ] - + "address" "div" "p"); let can_close: fn(::string_cache::QualName) -> bool = match tag.name { - atom!(li) => close_list, - atom!(dd) | atom!(dt) => close_defn, + atom!("li") => close_list, + atom!("dd") | atom!("dt") => close_defn, _ => unreachable!(), }; self.frameset_ok = false; @@ -740,8 +772,8 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(plaintext), .. }) - => { + name: atom!("plaintext"), .. + }) => { self.close_p_element_in_button_scope(); self.insert_element_for(tag); self.next_tokenizer_state = Some(Plaintext); @@ -749,12 +781,12 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(button), .. }) => - { - if self.in_scope_named(default_scope, atom!(button)) { + name: atom!("button"), .. }) + => { + if self.in_scope_named(default_scope, atom!("button")) { self.sink.parse_error(Borrowed("nested buttons")); self.generate_implied_end(cursory_implied_end); - self.pop_until_named(atom!(button)); + self.pop_until_named(atom!("button")); } self.reconstruct_formatting(); self.insert_element_for(tag); @@ -763,84 +795,91 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(address), .. }) | + name: atom!("address"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(article), .. }) | + name: atom!("article"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(aside), .. }) | + name: atom!("aside"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(blockquote), .. }) - | + name: atom!("blockquote"), .. + }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(button), .. }) | + name: atom!("button"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(center), .. }) | + name: atom!("center"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(details), .. }) | + name: atom!("details"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(dialog), .. }) | + name: atom!("dialog"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(dir), .. }) | + name: atom!("dir"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(div), .. }) | + name: atom!("div"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(dl), .. }) | + name: atom!("dl"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(fieldset), .. }) | + name: atom!("fieldset"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(figcaption), .. }) - | + name: atom!("figcaption"), .. + }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(figure), .. }) | + name: atom!("figure"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(footer), .. }) | + name: atom!("footer"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(header), .. }) | + name: atom!("header"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(hgroup), .. }) | + name: atom!("hgroup"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(listing), .. }) | + name: atom!("listing"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(main), .. }) | + name: atom!("main"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(menu), .. }) | + name: atom!("menu"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(nav), .. }) | + name: atom!("nav"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(ol), .. }) | + name: atom!("ol"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(pre), .. }) | + name: atom!("pre"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(section), .. }) | + name: atom!("section"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(summary), .. }) | + name: atom!("summary"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(ul), .. }) => { + name: atom!("ul"), .. }) => { if !self.in_scope_named(default_scope, tag.name.clone()) { self.unexpected(&tag); } else { @@ -851,8 +890,9 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(form), .. }) => { - if !self.in_html_elem_named(atom!(template)) { + name: atom!("form"), .. }) => + { + if !self.in_html_elem_named(atom!("template")) { let node = match self.form_elem.take() { None => { @@ -875,40 +915,41 @@ impl TreeBuilderStep for super::TreeBuilder where self.sink.parse_error(Borrowed("Bad open element on ")); } } else { - if !self.in_scope_named(default_scope, atom!(form)) { + if !self.in_scope_named(default_scope, atom!("form")) + { self.sink.parse_error(Borrowed("Form element not in scope on ")); return Done; } self.generate_implied_end(cursory_implied_end); - if !self.current_node_named(atom!(form)) { + if !self.current_node_named(atom!("form")) { self.sink.parse_error(Borrowed("Bad open element on ")); } - self.pop_until_named(atom!(form)); + self.pop_until_named(atom!("form")); } Done } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(p), .. }) => { - if !self.in_scope_named(button_scope, atom!(p)) { + name: atom!("p"), .. }) => { + if !self.in_scope_named(button_scope, atom!("p")) { self.sink.parse_error(Borrowed("No

tag to close")); - self.insert_phantom(atom!(p)); + self.insert_phantom(atom!("p")); } self.close_p_element(); Done } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(li), .. }) | + name: atom!("li"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(dd), .. }) | + name: atom!("dd"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(dt), .. }) => { + name: atom!("dt"), .. }) => { let scope: fn(::string_cache::QualName) -> bool = match tag.name { - atom!(li) => list_item_scope, + atom!("li") => list_item_scope, _ => default_scope, }; if self.in_scope_named(|x| scope(x), tag.name.clone()) { @@ -921,22 +962,22 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(h1), .. }) | + name: atom!("h1"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(h2), .. }) | + name: atom!("h2"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(h3), .. }) | + name: atom!("h3"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(h4), .. }) | + name: atom!("h4"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(h5), .. }) | + name: atom!("h5"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(h6), .. }) => { + name: atom!("h6"), .. }) => { if self.in_scope(default_scope, |n| self.elem_in(n.clone(), heading_tag)) { @@ -952,7 +993,7 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(a), .. }) => { + name: atom!("a"), .. }) => { self.handle_misnested_a_tags(&tag); self.reconstruct_formatting(); self.create_formatting_element_for(tag); @@ -960,51 +1001,52 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(b), .. }) | + name: atom!("b"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(big), .. }) | + name: atom!("big"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(code), .. }) | + name: atom!("code"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(em), .. }) | + name: atom!("em"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(font), .. }) | + name: atom!("font"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(i), .. }) | + name: atom!("i"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(s), .. }) | + name: atom!("s"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(small), .. }) | + name: atom!("small"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(strike), .. }) | + name: atom!("strike"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(strong), .. }) | + name: atom!("strong"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tt), .. }) | + name: atom!("tt"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(u), .. }) => { + name: atom!("u"), .. }) => { self.reconstruct_formatting(); self.create_formatting_element_for(tag); Done } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(nobr), .. }) => { + name: atom!("nobr"), .. }) => + { self.reconstruct_formatting(); - if self.in_scope_named(default_scope, atom!(nobr)) { + if self.in_scope_named(default_scope, atom!("nobr")) { self.sink.parse_error(Borrowed("Nested ")); - self.adoption_agency(atom!(nobr)); + self.adoption_agency(atom!("nobr")); self.reconstruct_formatting(); } self.create_formatting_element_for(tag); @@ -1012,59 +1054,60 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(a), .. }) | + name: atom!("a"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(b), .. }) | + name: atom!("b"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(big), .. }) | + name: atom!("big"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(code), .. }) | + name: atom!("code"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(em), .. }) | + name: atom!("em"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(font), .. }) | + name: atom!("font"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(i), .. }) | + name: atom!("i"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(nobr), .. }) | + name: atom!("nobr"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(s), .. }) | + name: atom!("s"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(small), .. }) | + name: atom!("small"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(strike), .. }) | + name: atom!("strike"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(strong), .. }) | + name: atom!("strong"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tt), .. }) | + name: atom!("tt"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(u), .. }) => { + name: atom!("u"), .. }) => { self.adoption_agency(tag.name); Done } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(applet), .. }) | + name: atom!("applet"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(marquee), .. }) | + name: atom!("marquee"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(object), .. }) => - { + name: atom!("object"), .. }) + => { self.reconstruct_formatting(); self.insert_element_for(tag); self.active_formatting.push(Marker); @@ -1073,14 +1116,15 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(applet), .. }) | + name: atom!("applet"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(marquee), .. }) | + name: atom!("marquee"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(object), .. }) => - { + name: atom!("object"), .. }) + => { if !self.in_scope_named(default_scope, tag.name.clone()) { self.unexpected(&tag); } else { @@ -1092,7 +1136,8 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(table), .. }) => { + name: atom!("table"), .. }) => + { if self.quirks_mode != Quirks { self.close_p_element_in_button_scope(); } @@ -1103,7 +1148,7 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(br), .. }) => { + name: atom!("br"), .. }) => { self.unexpected(&tag); self.step(InBody, TagToken(Tag{kind: StartTag, @@ -1111,28 +1156,29 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(area), .. }) | + name: atom!("area"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(br), .. }) | + name: atom!("br"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(embed), .. }) | + name: atom!("embed"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(img), .. }) | + name: atom!("img"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(keygen), .. }) | + name: atom!("keygen"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(wbr), .. }) | + name: atom!("wbr"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(input), .. }) => { + name: atom!("input"), .. }) => + { let keep_frameset_ok = match tag.name { - atom!(input) => self.is_type_hidden(&tag), + atom!("input") => self.is_type_hidden(&tag), _ => false, }; self.reconstruct_formatting(); @@ -1142,22 +1188,24 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(menuitem), .. }) | + name: atom!("menuitem"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(param), .. }) | + name: atom!("param"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(source), .. }) | + name: atom!("source"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(track), .. }) => { + name: atom!("track"), .. }) => + { self.insert_and_pop_element_for(tag); DoneAckSelfClosing } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(hr), .. }) => { + name: atom!("hr"), .. }) => { self.close_p_element_in_button_scope(); self.insert_and_pop_element_for(tag); self.frameset_ok = false; @@ -1165,17 +1213,19 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(image), .. }) => { + name: atom!("image"), .. }) => + { self.unexpected(&tag); - self.step(InBody, TagToken(Tag{name: atom!(img), ..tag})) + self.step(InBody, + TagToken(Tag{name: atom!("img"), ..tag})) } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(isindex), .. }) => - { + name: atom!("isindex"), .. }) + => { self.unexpected(&tag); let in_template = - self.in_html_elem_named(atom!(template)); + self.in_html_elem_named(atom!("template")); if !in_template && self.form_elem.is_some() { return Done; } @@ -1186,38 +1236,40 @@ impl TreeBuilderStep for super::TreeBuilder where let mut input_attrs = vec!(); for attr in tag.attrs.into_iter() { match attr.name { - qualname!("" , action) => form_attrs.push(attr), - qualname!("" , prompt) => + qualname!("" , "action") => form_attrs.push(attr), + qualname!("" , "prompt") => prompt = Some(attr.value), - qualname!("" , name) => { } + qualname!("" , "name") => { } _ => input_attrs.push(attr), } } - input_attrs.push(Attribute{name: qualname!("" , name), + input_attrs.push(Attribute{name: qualname!("" , "name"), value: "isindex".to_tendril(),}); let form = - self.insert_element(Push, ns!(HTML), atom!(form), + self.insert_element(Push, ns!(html), atom!("form"), form_attrs); if !in_template { self.form_elem = Some(form.clone()); } - self.insert_element(NoPush, ns!(HTML), atom!(hr), vec!()); + self.insert_element(NoPush, ns!(html), atom!("hr"), + vec!()); self.reconstruct_formatting(); - self.insert_element(Push, ns!(HTML), atom!(label), + self.insert_element(Push, ns!(html), atom!("label"), vec!()); self.append_text(prompt.unwrap_or_else(|| { "This is a searchable index. Enter search keywords: ".to_tendril() })); - self.insert_element(NoPush, ns!(HTML), atom!(input), + self.insert_element(NoPush, ns!(html), atom!("input"), input_attrs); self.pop(); - self.insert_element(NoPush, ns!(HTML), atom!(hr), vec!()); + self.insert_element(NoPush, ns!(html), atom!("hr"), + vec!()); self.pop(); if !in_template { self.form_elem = None; } DoneAckSelfClosing } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(textarea), .. }) + name: atom!("textarea"), .. }) => { self.ignore_lf = true; self.frameset_ok = false; @@ -1226,7 +1278,7 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(xmp), .. }) => { + name: atom!("xmp"), .. }) => { self.close_p_element_in_button_scope(); self.reconstruct_formatting(); self.frameset_ok = false; @@ -1235,23 +1287,23 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(iframe), .. }) => - { + name: atom!("iframe"), .. }) + => { self.frameset_ok = false; self.parse_raw_data(tag, Rawtext); Done } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(noembed), .. }) => - { + name: atom!("noembed"), .. }) + => { self.parse_raw_data(tag, Rawtext); Done } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(select), .. }) => - { + name: atom!("select"), .. }) + => { self.reconstruct_formatting(); self.insert_element_for(tag); self.frameset_ok = false; @@ -1265,26 +1317,29 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(optgroup), .. }) | + name: atom!("optgroup"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(option), .. }) => - { - if self.current_node_named(atom!(option)) { self.pop(); } + name: atom!("option"), .. }) + => { + if self.current_node_named(atom!("option")) { + self.pop(); + } self.reconstruct_formatting(); self.insert_element_for(tag); Done } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(rb), .. }) | + name: atom!("rb"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(rtc), .. }) => { - if self.in_scope_named(default_scope, atom!(ruby)) { + name: atom!("rtc"), .. }) => { + if self.in_scope_named(default_scope, atom!("ruby")) { self.generate_implied_end(cursory_implied_end); } - if !self.current_node_named(atom!(ruby)) { + if !self.current_node_named(atom!("ruby")) { self.unexpected(&tag); } self.insert_element_for(tag); @@ -1292,15 +1347,15 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(rp), .. }) | + name: atom!("rp"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(rt), .. }) => { - if self.in_scope_named(default_scope, atom!(ruby)) { - self.generate_implied_end_except(atom!(rtc)); + name: atom!("rt"), .. }) => { + if self.in_scope_named(default_scope, atom!("ruby")) { + self.generate_implied_end_except(atom!("rtc")); } - if !self.current_node_named(atom!(rtc)) && - !self.current_node_named(atom!(ruby)) { + if !self.current_node_named(atom!("rtc")) && + !self.current_node_named(atom!("ruby")) { self.unexpected(&tag); } self.insert_element_for(tag); @@ -1308,45 +1363,47 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(math), .. }) => - self.enter_foreign(tag, ns!(MathML)), + name: atom!("math"), .. }) => + self.enter_foreign(tag, ns!(mathml)), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(svg), .. }) => - self.enter_foreign(tag, ns!(SVG)), + name: atom!("svg"), .. }) => + self.enter_foreign(tag, ns!(svg)), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(caption), .. }) | + name: atom!("caption"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(col), .. }) | + name: atom!("col"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(colgroup), .. }) | + name: atom!("colgroup"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(frame), .. }) | + name: atom!("frame"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(head), .. }) | + name: atom!("head"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(td), .. }) | + name: atom!("td"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(th), .. }) | + name: atom!("th"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(thead), .. }) | + name: atom!("thead"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tr), .. }) => { + name: atom!("tr"), .. }) => { self.unexpected(&token); Done } @@ -1359,7 +1416,7 @@ impl TreeBuilderStep for super::TreeBuilder where kind: ::tokenizer::StartTag, .. })) => { if self.opts.scripting_enabled && - tag.name == atom!(noscript) { + tag.name == atom!("noscript") { self.parse_raw_data(tag, Rawtext); } else { self.reconstruct_formatting(); @@ -1383,7 +1440,7 @@ impl TreeBuilderStep for super::TreeBuilder where CharacterTokens(_, text) => self.append_text(text), EOFToken => { self.unexpected(&token); - if self.current_node_named(atom!(script)) { + if self.current_node_named(atom!("script")) { let current = self.current_node(); self.sink.mark_script_already_started(current); } @@ -1399,7 +1456,7 @@ impl TreeBuilderStep for super::TreeBuilder where kind: ::tokenizer::EndTag, .. })) => { let node = self.pop(); - if tag.name == atom!(script) { + if tag.name == atom!("script") { warn!("FIXME: not fully implemented"); if self.sink.complete_script(node) == NextParserState::Suspend { @@ -1421,8 +1478,8 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment(text), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(caption), .. }) => - { + name: atom!("caption"), .. }) + => { self.pop_until_current(table_scope); self.active_formatting.push(Marker); self.insert_element_for(tag); @@ -1431,7 +1488,7 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(colgroup), .. }) + name: atom!("colgroup"), .. }) => { self.pop_until_current(table_scope); self.insert_element_for(tag); @@ -1440,20 +1497,21 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(col), .. }) => { + name: atom!("col"), .. }) => { self.pop_until_current(table_scope); - self.insert_phantom(atom!(colgroup)); + self.insert_phantom(atom!("colgroup")); Reprocess(InColumnGroup, token) } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(thead), .. }) => { + name: atom!("thead"), .. }) => + { self.pop_until_current(table_scope); self.insert_element_for(tag); self.mode = InTableBody; @@ -1461,85 +1519,91 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(td), .. }) | + name: atom!("td"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(th), .. }) | + name: atom!("th"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tr), .. }) => { + name: atom!("tr"), .. }) => { self.pop_until_current(table_scope); - self.insert_phantom(atom!(tbody)); + self.insert_phantom(atom!("tbody")); Reprocess(InTableBody, token) } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(table), .. }) => { + name: atom!("table"), .. }) => + { self.unexpected(&token); - if self.in_scope_named(table_scope, atom!(table)) { - self.pop_until_named(atom!(table)); + if self.in_scope_named(table_scope, atom!("table")) { + self.pop_until_named(atom!("table")); Reprocess(self.reset_insertion_mode(), token) } else { Done } } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(table), .. }) => { - if self.in_scope_named(table_scope, atom!(table)) { - self.pop_until_named(atom!(table)); + name: atom!("table"), .. }) => + { + if self.in_scope_named(table_scope, atom!("table")) { + self.pop_until_named(atom!("table")); self.mode = self.reset_insertion_mode(); } else { self.unexpected(&token); } Done } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(body), .. }) | + name: atom!("body"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(caption), .. }) | + name: atom!("caption"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(col), .. }) | + name: atom!("col"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(colgroup), .. }) | + name: atom!("colgroup"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(html), .. }) | + name: atom!("html"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(td), .. }) | + name: atom!("td"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(th), .. }) | + name: atom!("th"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(thead), .. }) | + name: atom!("thead"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tr), .. }) => + name: atom!("tr"), .. }) => self.unexpected(&token), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(style), .. }) | + name: atom!("style"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(script), .. }) | + name: atom!("script"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(template), .. }) | + name: atom!("template"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(template), .. }) + name: atom!("template"), .. }) => self.step(InHead, token), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(input), .. }) => { + name: atom!("input"), .. }) => + { self.unexpected(&tag); if self.is_type_hidden(&tag) { self.insert_and_pop_element_for(tag); @@ -1548,9 +1612,10 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(form), .. }) => { + name: atom!("form"), .. }) => + { self.unexpected(&tag); - if !self.in_html_elem_named(atom!(template)) && + if !self.in_html_elem_named(atom!("template")) && self.form_elem.is_none() { self.form_elem = Some(self.insert_and_pop_element_for(tag)); @@ -1616,45 +1681,47 @@ impl TreeBuilderStep for super::TreeBuilder where match token { ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(caption), .. }) | + name: atom!("caption"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(col), .. }) | + name: atom!("col"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(colgroup), .. }) | + name: atom!("colgroup"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(td), .. }) | + name: atom!("td"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(th), .. }) | + name: atom!("th"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(thead), .. }) | + name: atom!("thead"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tr), .. }) | + name: atom!("tr"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(table), .. }) | + name: atom!("table"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(caption), .. }) => - { - if self.in_scope_named(table_scope, atom!(caption)) { + name: atom!("caption"), .. }) + => { + if self.in_scope_named(table_scope, atom!("caption")) { self.generate_implied_end(cursory_implied_end); - self.expect_to_close(atom!(caption)); + self.expect_to_close(atom!("caption")); self.clear_active_formatting_to_marker(); match tag { - Tag { kind: EndTag, name: atom!(caption), .. } => - { + Tag { kind: EndTag, name: atom!("caption"), .. } + => { self.mode = InTable; Done } @@ -1664,34 +1731,35 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(body), .. }) | + name: atom!("body"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(col), .. }) | + name: atom!("col"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(colgroup), .. }) | + name: atom!("colgroup"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(html), .. }) | + name: atom!("html"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(td), .. }) | + name: atom!("td"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(th), .. }) | + name: atom!("th"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(thead), .. }) | + name: atom!("thead"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tr), .. }) => + name: atom!("tr"), .. }) => self.unexpected(&token), last_arm_token => { let enable_wildcards = @@ -1708,19 +1776,19 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment(text), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => + name: atom!("html"), .. }) => self.step(InBody, token), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(col), .. }) => { + name: atom!("col"), .. }) => { self.insert_and_pop_element_for(tag); DoneAckSelfClosing } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(colgroup), .. }) + name: atom!("colgroup"), .. }) => { - if self.current_node_named(atom!(colgroup)) { + if self.current_node_named(atom!("colgroup")) { self.pop(); self.mode = InTable; } else { self.unexpected(&token); } @@ -1728,14 +1796,15 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(col), .. }) => + name: atom!("col"), .. }) => self.unexpected(&token), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(template), .. }) | + name: atom!("template"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(template), .. }) + name: atom!("template"), .. }) => self.step(InHead, token), EOFToken => self.step(InBody, token), last_arm_token => { @@ -1743,7 +1812,7 @@ impl TreeBuilderStep for super::TreeBuilder where match last_arm_token { _ => true, }; match (enable_wildcards, last_arm_token) { (_, token) => { - if self.current_node_named(atom!(colgroup)) { + if self.current_node_named(atom!("colgroup")) { self.pop(); Reprocess(InTable, token) } else { self.unexpected(&token) } @@ -1755,7 +1824,7 @@ impl TreeBuilderStep for super::TreeBuilder where match token { ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tr), .. }) => { + name: atom!("tr"), .. }) => { self.pop_until_current(table_body_context); self.insert_element_for(tag); self.mode = InRow; @@ -1763,24 +1832,25 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(th), .. }) | + name: atom!("th"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(td), .. }) => { + name: atom!("td"), .. }) => { self.unexpected(&token); self.pop_until_current(table_body_context); - self.insert_phantom(atom!(tr)); + self.insert_phantom(atom!("tr")); Reprocess(InRow, token) } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(thead), .. }) => { + name: atom!("thead"), .. }) => + { if self.in_scope_named(table_scope, tag.name.clone()) { self.pop_until_current(table_body_context); self.pop(); @@ -1790,26 +1860,29 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(caption), .. }) | + name: atom!("caption"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(col), .. }) | + name: atom!("col"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(colgroup), .. }) | + name: atom!("colgroup"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(thead), .. }) | + name: atom!("thead"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(table), .. }) => { - declare_tag_set!(table_outer = table tbody tfoot); + name: atom!("table"), .. }) => + { + declare_tag_set!(table_outer = "table" "tbody" "tfoot"); if self.in_scope(table_scope, |e| self.elem_in(e, table_outer)) { self.pop_until_current(table_body_context); @@ -1819,28 +1892,30 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(body), .. }) | + name: atom!("body"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(caption), .. }) | + name: atom!("caption"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(col), .. }) | + name: atom!("col"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(colgroup), .. }) | + name: atom!("colgroup"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(html), .. }) | + name: atom!("html"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(td), .. }) | + name: atom!("td"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(th), .. }) | + name: atom!("th"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tr), .. }) => + name: atom!("tr"), .. }) => self.unexpected(&token), last_arm_token => { let enable_wildcards = @@ -1854,10 +1929,10 @@ impl TreeBuilderStep for super::TreeBuilder where match token { ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(th), .. }) | + name: atom!("th"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(td), .. }) => { + name: atom!("td"), .. }) => { self.pop_until_current(table_row_context); self.insert_element_for(tag); self.mode = InCell; @@ -1866,85 +1941,91 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tr), .. }) => { - if self.in_scope_named(table_scope, atom!(tr)) { + name: atom!("tr"), .. }) => { + if self.in_scope_named(table_scope, atom!("tr")) { self.pop_until_current(table_row_context); let node = self.pop(); - self.assert_named(node, atom!(tr)); + self.assert_named(node, atom!("tr")); self.mode = InTableBody; } else { self.unexpected(&token); } Done } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(caption), .. }) | + name: atom!("caption"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(col), .. }) | + name: atom!("col"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(colgroup), .. }) | + name: atom!("colgroup"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(thead), .. }) | + name: atom!("thead"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tr), .. }) | + name: atom!("tr"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(table), .. }) => { - if self.in_scope_named(table_scope, atom!(tr)) { + name: atom!("table"), .. }) => + { + if self.in_scope_named(table_scope, atom!("tr")) { self.pop_until_current(table_row_context); let node = self.pop(); - self.assert_named(node, atom!(tr)); + self.assert_named(node, atom!("tr")); Reprocess(InTableBody, token) } else { self.unexpected(&token) } } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(thead), .. }) => { + name: atom!("thead"), .. }) => + { if self.in_scope_named(table_scope, tag.name.clone()) { - if self.in_scope_named(table_scope, atom!(tr)) { + if self.in_scope_named(table_scope, atom!("tr")) { self.pop_until_current(table_row_context); let node = self.pop(); - self.assert_named(node, atom!(tr)); + self.assert_named(node, atom!("tr")); Reprocess(InTableBody, TagToken(tag)) } else { Done } } else { self.unexpected(&tag) } } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(body), .. }) | + name: atom!("body"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(caption), .. }) | + name: atom!("caption"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(col), .. }) | + name: atom!("col"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(colgroup), .. }) | + name: atom!("colgroup"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(html), .. }) | + name: atom!("html"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(td), .. }) | + name: atom!("td"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(th), .. }) => + name: atom!("th"), .. }) => self.unexpected(&token), last_arm_token => { let enable_wildcards = @@ -1958,10 +2039,10 @@ impl TreeBuilderStep for super::TreeBuilder where match token { ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(td), .. }) | + name: atom!("td"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(th), .. }) => { + name: atom!("th"), .. }) => { if self.in_scope_named(table_scope, tag.name.clone()) { self.generate_implied_end(cursory_implied_end); self.expect_to_close(tag.name); @@ -1972,31 +2053,33 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(caption), .. }) | + name: atom!("caption"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(col), .. }) | + name: atom!("col"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(colgroup), .. }) | + name: atom!("colgroup"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(td), .. }) | + name: atom!("td"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(th), .. }) | + name: atom!("th"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(thead), .. }) | + name: atom!("thead"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tr), .. }) => { + name: atom!("tr"), .. }) => { if self.in_scope(table_scope, |n| self.elem_in(n.clone(), td_th)) { self.close_the_cell(); @@ -2005,35 +2088,37 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(body), .. }) | + name: atom!("body"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(caption), .. }) | + name: atom!("caption"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(col), .. }) | + name: atom!("col"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(colgroup), .. }) | + name: atom!("colgroup"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(html), .. }) => + name: atom!("html"), .. }) => self.unexpected(&token), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(table), .. }) | + name: atom!("table"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(thead), .. }) | + name: atom!("thead"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tr), .. }) => { + name: atom!("tr"), .. }) => { if self.in_scope_named(table_scope, tag.name.clone()) { self.close_the_cell(); Reprocess(InRow, TagToken(tag)) @@ -2054,22 +2139,26 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment(text), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => + name: atom!("html"), .. }) => self.step(InBody, token), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(option), .. }) => - { - if self.current_node_named(atom!(option)) { self.pop(); } + name: atom!("option"), .. }) + => { + if self.current_node_named(atom!("option")) { + self.pop(); + } self.insert_element_for(tag); Done } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(optgroup), .. }) + name: atom!("optgroup"), .. }) => { - if self.current_node_named(atom!(option)) { self.pop(); } - if self.current_node_named(atom!(optgroup)) { + if self.current_node_named(atom!("option")) { + self.pop(); + } + if self.current_node_named(atom!("optgroup")) { self.pop(); } self.insert_element_for(tag); @@ -2077,73 +2166,74 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(optgroup), .. }) + name: atom!("optgroup"), .. }) => { if self.open_elems.len() >= 2 && - self.current_node_named(atom!(option)) && + self.current_node_named(atom!("option")) && self.html_elem_named(self.open_elems[self.open_elems.len() - 2].clone(), - atom!(optgroup)) { + atom!("optgroup")) { self.pop(); } - if self.current_node_named(atom!(optgroup)) { + if self.current_node_named(atom!("optgroup")) { self.pop(); } else { self.unexpected(&token); } Done } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(option), .. }) => - { - if self.current_node_named(atom!(option)) { + name: atom!("option"), .. }) + => { + if self.current_node_named(atom!("option")) { self.pop(); } else { self.unexpected(&token); } Done } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(select), .. }) | + name: atom!("select"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(select), .. }) => - { + name: atom!("select"), .. }) + => { let in_scope = - self.in_scope_named(select_scope, atom!(select)); + self.in_scope_named(select_scope, atom!("select")); if !in_scope || tag.kind == StartTag { self.unexpected(&tag); } if in_scope { - self.pop_until_named(atom!(select)); + self.pop_until_named(atom!("select")); self.mode = self.reset_insertion_mode(); } Done } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(input), .. }) | + name: atom!("input"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(keygen), .. }) | + name: atom!("keygen"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(textarea), .. }) + name: atom!("textarea"), .. }) => { self.unexpected(&token); - if self.in_scope_named(select_scope, atom!(select)) { - self.pop_until_named(atom!(select)); + if self.in_scope_named(select_scope, atom!("select")) { + self.pop_until_named(atom!("select")); Reprocess(self.reset_insertion_mode(), token) } else { Done } } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(script), .. }) | + name: atom!("script"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(template), .. }) | + name: atom!("template"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(template), .. }) + name: atom!("template"), .. }) => self.step(InHead, token), EOFToken => self.step(InBody, token), last_arm_token => { @@ -2158,59 +2248,61 @@ impl TreeBuilderStep for super::TreeBuilder where match token { ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(caption), .. }) | + name: atom!("caption"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(table), .. }) | + name: atom!("table"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(thead), .. }) | + name: atom!("thead"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tr), .. }) | + name: atom!("tr"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(td), .. }) | + name: atom!("td"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(th), .. }) => { + name: atom!("th"), .. }) => { self.unexpected(&token); - self.pop_until_named(atom!(select)); + self.pop_until_named(atom!("select")); Reprocess(self.reset_insertion_mode(), token) } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(caption), .. }) | + name: atom!("caption"), .. }) + | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(table), .. }) | + name: atom!("table"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(thead), .. }) | + name: atom!("thead"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(tr), .. }) | + name: atom!("tr"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(td), .. }) | + name: atom!("td"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(th), .. }) => { + name: atom!("th"), .. }) => { self.unexpected(&tag); if self.in_scope_named(table_scope, tag.name.clone()) { - self.pop_until_named(atom!(select)); + self.pop_until_named(atom!("select")); Reprocess(self.reset_insertion_mode(), TagToken(tag)) } else { Done } } @@ -2228,89 +2320,96 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(_) => self.step(InBody, token), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(base), .. }) | + name: atom!("base"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(basefont), .. }) | + name: atom!("basefont"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(bgsound), .. }) | + name: atom!("bgsound"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(link), .. }) | + name: atom!("link"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(meta), .. }) | + name: atom!("meta"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(noframes), .. }) | + name: atom!("noframes"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(script), .. }) | + name: atom!("script"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(style), .. }) | + name: atom!("style"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(template), .. }) | + name: atom!("template"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(title), .. }) | + name: atom!("title"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(template), .. }) + name: atom!("template"), .. }) => { self.step(InHead, token) } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(caption), .. }) | + name: atom!("caption"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(colgroup), .. }) | + name: atom!("colgroup"), .. }) + | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tbody), .. }) | + name: atom!("tbody"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tfoot), .. }) | + name: atom!("tfoot"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(thead), .. }) => { + name: atom!("thead"), .. }) => + { self.template_modes.pop(); self.template_modes.push(InTable); Reprocess(InTable, token) } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(col), .. }) => { + name: atom!("col"), .. }) => { self.template_modes.pop(); self.template_modes.push(InColumnGroup); Reprocess(InColumnGroup, token) } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tr), .. }) => { + name: atom!("tr"), .. }) => { self.template_modes.pop(); self.template_modes.push(InTableBody); Reprocess(InTableBody, token) } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(td), .. }) | + name: atom!("td"), .. }) | ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(th), .. }) => { + name: atom!("th"), .. }) => { self.template_modes.pop(); self.template_modes.push(InRow); Reprocess(InRow, token) } EOFToken => { - if !self.in_html_elem_named(atom!(template)) { + if !self.in_html_elem_named(atom!("template")) { self.stop_parsing() } else { self.unexpected(&token); - self.pop_until_named(atom!(template)); + self.pop_until_named(atom!("template")); self.clear_active_formatting_to_marker(); self.template_modes.pop(); self.mode = self.reset_insertion_mode(); @@ -2340,11 +2439,12 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment_to_html(text), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => + name: atom!("html"), .. }) => self.step(InBody, token), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(html), .. }) => { + name: atom!("html"), .. }) => + { if self.is_fragment() { self.unexpected(&token); } else { self.mode = AfterAfterBody; } @@ -2369,25 +2469,25 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment(text), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => + name: atom!("html"), .. }) => self.step(InBody, token), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(frameset), .. }) + name: atom!("frameset"), .. }) => { self.insert_element_for(tag); Done } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(frameset), .. }) + name: atom!("frameset"), .. }) => { if self.open_elems.len() == 1 { self.unexpected(&token); } else { self.pop(); if !self.is_fragment() && - !self.current_node_named(atom!(frameset)) { + !self.current_node_named(atom!("frameset")) { self.mode = AfterFrameset; } } @@ -2395,13 +2495,14 @@ impl TreeBuilderStep for super::TreeBuilder where } ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(frame), .. }) => { + name: atom!("frame"), .. }) => + { self.insert_and_pop_element_for(tag); DoneAckSelfClosing } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(noframes), .. }) + name: atom!("noframes"), .. }) => self.step(InHead, token), EOFToken => { if self.open_elems.len() != 1 { self.unexpected(&token); } @@ -2422,17 +2523,18 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment(text), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => + name: atom!("html"), .. }) => self.step(InBody, token), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::EndTag, - name: atom!(html), .. }) => { + name: atom!("html"), .. }) => + { self.mode = AfterAfterFrameset; Done } ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(noframes), .. }) + name: atom!("noframes"), .. }) => self.step(InHead, token), EOFToken => self.stop_parsing(), last_arm_token => { @@ -2450,7 +2552,7 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment_to_doc(text), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => + name: atom!("html"), .. }) => self.step(InBody, token), EOFToken => self.stop_parsing(), last_arm_token => { @@ -2471,12 +2573,12 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment_to_doc(text), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(html), .. }) => + name: atom!("html"), .. }) => self.step(InBody, token), EOFToken => self.stop_parsing(), ::tree_builder::types::TagToken(::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(noframes), .. }) + name: atom!("noframes"), .. }) => self.step(InHead, token), last_arm_token => { let enable_wildcards = @@ -2501,146 +2603,146 @@ impl TreeBuilderStep for super::TreeBuilder where CommentToken(text) => self.append_comment(text), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(b), .. }) | + name: atom!("b"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(big), .. }) | + name: atom!("big"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(blockquote), .. }) | + name: atom!("blockquote"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(body), .. }) | + name: atom!("body"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(br), .. }) | + name: atom!("br"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(center), .. }) | + name: atom!("center"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(code), .. }) | + name: atom!("code"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(dd), .. }) | + name: atom!("dd"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(div), .. }) | + name: atom!("div"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(dl), .. }) | + name: atom!("dl"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(dt), .. }) | + name: atom!("dt"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(em), .. }) | + name: atom!("em"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(embed), .. }) | + name: atom!("embed"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(h1), .. }) | + name: atom!("h1"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(h2), .. }) | + name: atom!("h2"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(h3), .. }) | + name: atom!("h3"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(h4), .. }) | + name: atom!("h4"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(h5), .. }) | + name: atom!("h5"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(h6), .. }) | + name: atom!("h6"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(head), .. }) | + name: atom!("head"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(hr), .. }) | + name: atom!("hr"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(i), .. }) | + name: atom!("i"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(img), .. }) | + name: atom!("img"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(li), .. }) | + name: atom!("li"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(listing), .. }) | + name: atom!("listing"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(menu), .. }) | + name: atom!("menu"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(meta), .. }) | + name: atom!("meta"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(nobr), .. }) | + name: atom!("nobr"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(ol), .. }) | + name: atom!("ol"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(p), .. }) | + name: atom!("p"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(pre), .. }) | + name: atom!("pre"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(ruby), .. }) | + name: atom!("ruby"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(s), .. }) | + name: atom!("s"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(small), .. }) | + name: atom!("small"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(span), .. }) | + name: atom!("span"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(strong), .. }) | + name: atom!("strong"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(strike), .. }) | + name: atom!("strike"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(sub), .. }) | + name: atom!("sub"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(sup), .. }) | + name: atom!("sup"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(table), .. }) | + name: atom!("table"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(tt), .. }) | + name: atom!("tt"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(u), .. }) | + name: atom!("u"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(ul), .. }) | + name: atom!("ul"), .. }) | ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(var), .. }) => + name: atom!("var"), .. }) => self.unexpected_start_tag_in_foreign_content(tag), ::tree_builder::types::TagToken(tag@::tokenizer::Tag { kind: ::tokenizer::StartTag, - name: atom!(font), .. }) => { + name: atom!("font"), .. }) => { let unexpected = tag.attrs.iter().any(|attr| { matches!(attr . name , qualname ! ( - "" , color ) | qualname ! ( - "" , face ) | qualname ! ( - "" , size )) }); + "" , "color" ) | qualname ! + ( "" , "face" ) | qualname ! + ( "" , "size" )) }); if unexpected { self.unexpected_start_tag_in_foreign_content(tag) } else { self.foreign_start_tag(tag) } @@ -2663,7 +2765,7 @@ impl TreeBuilderStep for super::TreeBuilder where if stack_idx == 0 { return Done; } let node = self.open_elems[stack_idx].clone(); let node_name = self.sink.elem_name(node); - if !first && node_name.ns == ns!(HTML) { + if !first && node_name.ns == ns!(html) { let mode = self.mode; return self.step(mode, TagToken(tag)); } diff --git a/src/tree_builder/rules.rs b/src/tree_builder/rules.rs index 2a6a0aca..c5c12108 100644 --- a/src/tree_builder/rules.rs +++ b/src/tree_builder/rules.rs @@ -102,7 +102,7 @@ impl TreeBuilderStep tag @ => self.unexpected(&tag), token => { - self.head_elem = Some(self.insert_phantom(atom!(head))); + self.head_elem = Some(self.insert_phantom(atom!("head"))); Reprocess(InHead, token) } }), @@ -127,7 +127,7 @@ impl TreeBuilderStep } tag @ <style> <noscript> => { - if (!self.opts.scripting_enabled) && (tag.name == atom!(noscript)) { + if (!self.opts.scripting_enabled) && (tag.name == atom!("noscript")) { self.insert_element_for(tag); self.mode = InHeadNoscript; } else { @@ -137,7 +137,7 @@ impl<Handle, Sink> TreeBuilderStep } tag @ <script> => { - let elem = self.sink.create_element(qualname!(HTML, script), tag.attrs); + let elem = self.sink.create_element(qualname!(html, "script"), tag.attrs); if self.is_fragment() { self.sink.mark_script_already_started(elem.clone()); } @@ -165,11 +165,11 @@ impl<Handle, Sink> TreeBuilderStep } tag @ </template> => { - if !self.in_html_elem_named(atom!(template)) { + if !self.in_html_elem_named(atom!("template")) { self.unexpected(&tag); } else { self.generate_implied_end(thorough_implied_end); - self.expect_to_close(atom!(template)); + self.expect_to_close(atom!("template")); self.clear_active_formatting_to_marker(); self.template_modes.pop(); self.mode = self.reset_insertion_mode(); @@ -255,7 +255,7 @@ impl<Handle, Sink> TreeBuilderStep tag @ </_> => self.unexpected(&tag), token => { - self.insert_phantom(atom!(body)); + self.insert_phantom(atom!("body")); Reprocess(InBody, token) } }), @@ -276,7 +276,7 @@ impl<Handle, Sink> TreeBuilderStep tag @ <html> => { self.unexpected(&tag); - if !self.in_html_elem_named(atom!(template)) { + if !self.in_html_elem_named(atom!("template")) { let top = self.html_elem(); self.sink.add_attrs_if_missing(top, tag.attrs); } @@ -292,7 +292,7 @@ impl<Handle, Sink> TreeBuilderStep self.unexpected(&tag); match self.body_elem() { Some(ref node) if self.open_elems.len() != 1 && - !self.in_html_elem_named(atom!(template)) => { + !self.in_html_elem_named(atom!("template")) => { self.frameset_ok = false; self.sink.add_attrs_if_missing(node.clone(), tag.attrs) }, @@ -330,7 +330,7 @@ impl<Handle, Sink> TreeBuilderStep } </body> => { - if self.in_scope_named(default_scope, atom!(body)) { + if self.in_scope_named(default_scope, atom!("body")) { self.check_body_end(); self.mode = AfterBody; } else { @@ -340,7 +340,7 @@ impl<Handle, Sink> TreeBuilderStep } </html> => { - if self.in_scope_named(default_scope, atom!(body)) { + if self.in_scope_named(default_scope, atom!("body")) { self.check_body_end(); Reprocess(AfterBody, token) } else { @@ -377,12 +377,12 @@ impl<Handle, Sink> TreeBuilderStep tag @ <form> => { if self.form_elem.is_some() && - !self.in_html_elem_named(atom!(template)) { + !self.in_html_elem_named(atom!("template")) { self.sink.parse_error(Borrowed("nested forms")); } else { self.close_p_element_in_button_scope(); let elem = self.insert_element_for(tag); - if !self.in_html_elem_named(atom!(template)) { + if !self.in_html_elem_named(atom!("template")) { self.form_elem = Some(elem); } } @@ -390,12 +390,12 @@ impl<Handle, Sink> TreeBuilderStep } tag @ <li> <dd> <dt> => { - declare_tag_set!(close_list = li); - declare_tag_set!(close_defn = dd dt); - declare_tag_set!(extra_special = special_tag - address div p); + declare_tag_set!(close_list = "li"); + declare_tag_set!(close_defn = "dd" "dt"); + declare_tag_set!(extra_special = [special_tag] - "address" "div" "p"); let can_close: fn(::string_cache::QualName) -> bool = match tag.name { - atom!(li) => close_list, - atom!(dd) | atom!(dt) => close_defn, + atom!("li") => close_list, + atom!("dd") | atom!("dt") => close_defn, _ => unreachable!(), }; @@ -434,10 +434,10 @@ impl<Handle, Sink> TreeBuilderStep } tag @ <button> => { - if self.in_scope_named(default_scope, atom!(button)) { + if self.in_scope_named(default_scope, atom!("button")) { self.sink.parse_error(Borrowed("nested buttons")); self.generate_implied_end(cursory_implied_end); - self.pop_until_named(atom!(button)); + self.pop_until_named(atom!("button")); } self.reconstruct_formatting(); self.insert_element_for(tag); @@ -459,7 +459,7 @@ impl<Handle, Sink> TreeBuilderStep } </form> => { - if !self.in_html_elem_named(atom!(template)) { + if !self.in_html_elem_named(atom!("template")) { // Can't use unwrap_or_return!() due to rust-lang/rust#16617. let node = match self.form_elem.take() { None => { @@ -479,23 +479,23 @@ impl<Handle, Sink> TreeBuilderStep self.sink.parse_error(Borrowed("Bad open element on </form>")); } } else { - if !self.in_scope_named(default_scope, atom!(form)) { + if !self.in_scope_named(default_scope, atom!("form")) { self.sink.parse_error(Borrowed("Form element not in scope on </form>")); return Done; } self.generate_implied_end(cursory_implied_end); - if !self.current_node_named(atom!(form)) { + if !self.current_node_named(atom!("form")) { self.sink.parse_error(Borrowed("Bad open element on </form>")); } - self.pop_until_named(atom!(form)); + self.pop_until_named(atom!("form")); } Done } </p> => { - if !self.in_scope_named(button_scope, atom!(p)) { + if !self.in_scope_named(button_scope, atom!("p")) { self.sink.parse_error(Borrowed("No <p> tag to close")); - self.insert_phantom(atom!(p)); + self.insert_phantom(atom!("p")); } self.close_p_element(); Done @@ -503,7 +503,7 @@ impl<Handle, Sink> TreeBuilderStep tag @ </li> </dd> </dt> => { let scope: fn(::string_cache::QualName) -> bool = match tag.name { - atom!(li) => list_item_scope, + atom!("li") => list_item_scope, _ => default_scope, }; if self.in_scope_named(|x| scope(x), tag.name.clone()) { @@ -543,9 +543,9 @@ impl<Handle, Sink> TreeBuilderStep tag @ <nobr> => { self.reconstruct_formatting(); - if self.in_scope_named(default_scope, atom!(nobr)) { + if self.in_scope_named(default_scope, atom!("nobr")) { self.sink.parse_error(Borrowed("Nested <nobr>")); - self.adoption_agency(atom!(nobr)); + self.adoption_agency(atom!("nobr")); self.reconstruct_formatting(); } self.create_formatting_element_for(tag); @@ -598,7 +598,7 @@ impl<Handle, Sink> TreeBuilderStep tag @ <area> <br> <embed> <img> <keygen> <wbr> <input> => { let keep_frameset_ok = match tag.name { - atom!(input) => self.is_type_hidden(&tag), + atom!("input") => self.is_type_hidden(&tag), _ => false, }; self.reconstruct_formatting(); @@ -624,14 +624,14 @@ impl<Handle, Sink> TreeBuilderStep tag @ <image> => { self.unexpected(&tag); self.step(InBody, TagToken(Tag { - name: atom!(img), + name: atom!("img"), ..tag })) } tag @ <isindex> => { self.unexpected(&tag); - let in_template = self.in_html_elem_named(atom!(template)); + let in_template = self.in_html_elem_named(atom!("template")); if !in_template && self.form_elem.is_some() { return Done; } @@ -642,29 +642,29 @@ impl<Handle, Sink> TreeBuilderStep let mut input_attrs = vec![]; for attr in tag.attrs.into_iter() { match attr.name { - qualname!("", action) => form_attrs.push(attr), - qualname!("", prompt) => prompt = Some(attr.value), - qualname!("", name) => {}, + qualname!("", "action") => form_attrs.push(attr), + qualname!("", "prompt") => prompt = Some(attr.value), + qualname!("", "name") => {}, _ => input_attrs.push(attr), } } input_attrs.push(Attribute { - name: qualname!("", name), + name: qualname!("", "name"), value: "isindex".to_tendril(), }); - let form = self.insert_element(Push, ns!(HTML), atom!(form), form_attrs); + let form = self.insert_element(Push, ns!(html), atom!("form"), form_attrs); if !in_template { self.form_elem = Some(form.clone()); } - self.insert_element(NoPush, ns!(HTML), atom!(hr), vec![]); + self.insert_element(NoPush, ns!(html), atom!("hr"), vec![]); self.reconstruct_formatting(); - self.insert_element(Push, ns!(HTML), atom!(label), vec![]); + self.insert_element(Push, ns!(html), atom!("label"), vec![]); self.append_text(prompt.unwrap_or_else(|| { "This is a searchable index. Enter search keywords: ".to_tendril() })); - self.insert_element(NoPush, ns!(HTML), atom!(input), input_attrs); + self.insert_element(NoPush, ns!(html), atom!("input"), input_attrs); self.pop(); - self.insert_element(NoPush, ns!(HTML), atom!(hr), vec![]); + self.insert_element(NoPush, ns!(html), atom!("hr"), vec![]); self.pop(); if !in_template { self.form_elem = None; @@ -715,7 +715,7 @@ impl<Handle, Sink> TreeBuilderStep } tag @ <optgroup> <option> => { - if self.current_node_named(atom!(option)) { + if self.current_node_named(atom!("option")) { self.pop(); } self.reconstruct_formatting(); @@ -724,10 +724,10 @@ impl<Handle, Sink> TreeBuilderStep } tag @ <rb> <rtc> => { - if self.in_scope_named(default_scope, atom!(ruby)) { + if self.in_scope_named(default_scope, atom!("ruby")) { self.generate_implied_end(cursory_implied_end); } - if !self.current_node_named(atom!(ruby)) { + if !self.current_node_named(atom!("ruby")) { self.unexpected(&tag); } self.insert_element_for(tag); @@ -735,19 +735,19 @@ impl<Handle, Sink> TreeBuilderStep } tag @ <rp> <rt> => { - if self.in_scope_named(default_scope, atom!(ruby)) { - self.generate_implied_end_except(atom!(rtc)); + if self.in_scope_named(default_scope, atom!("ruby")) { + self.generate_implied_end_except(atom!("rtc")); } - if !self.current_node_named(atom!(rtc)) && !self.current_node_named(atom!(ruby)) { + if !self.current_node_named(atom!("rtc")) && !self.current_node_named(atom!("ruby")) { self.unexpected(&tag); } self.insert_element_for(tag); Done } - tag @ <math> => self.enter_foreign(tag, ns!(MathML)), + tag @ <math> => self.enter_foreign(tag, ns!(mathml)), - tag @ <svg> => self.enter_foreign(tag, ns!(SVG)), + tag @ <svg> => self.enter_foreign(tag, ns!(svg)), <caption> <col> <colgroup> <frame> <head> <tbody> <td> <tfoot> <th> <thead> <tr> => { @@ -756,7 +756,7 @@ impl<Handle, Sink> TreeBuilderStep } tag @ <_> => { - if self.opts.scripting_enabled && tag.name == atom!(noscript) { + if self.opts.scripting_enabled && tag.name == atom!("noscript") { self.parse_raw_data(tag, Rawtext); } else { self.reconstruct_formatting(); @@ -781,7 +781,7 @@ impl<Handle, Sink> TreeBuilderStep EOFToken => { self.unexpected(&token); - if self.current_node_named(atom!(script)) { + if self.current_node_named(atom!("script")) { let current = self.current_node(); self.sink.mark_script_already_started(current); } @@ -791,7 +791,7 @@ impl<Handle, Sink> TreeBuilderStep tag @ </_> => { let node = self.pop(); - if tag.name == atom!(script) { + if tag.name == atom!("script") { warn!("FIXME: </script> not fully implemented"); if self.sink.complete_script(node) == NextParserState::Suspend { self.next_tokenizer_state = Some(Quiescent); @@ -832,7 +832,7 @@ impl<Handle, Sink> TreeBuilderStep <col> => { self.pop_until_current(table_scope); - self.insert_phantom(atom!(colgroup)); + self.insert_phantom(atom!("colgroup")); Reprocess(InColumnGroup, token) } @@ -845,14 +845,14 @@ impl<Handle, Sink> TreeBuilderStep <td> <th> <tr> => { self.pop_until_current(table_scope); - self.insert_phantom(atom!(tbody)); + self.insert_phantom(atom!("tbody")); Reprocess(InTableBody, token) } <table> => { self.unexpected(&token); - if self.in_scope_named(table_scope, atom!(table)) { - self.pop_until_named(atom!(table)); + if self.in_scope_named(table_scope, atom!("table")) { + self.pop_until_named(atom!("table")); Reprocess(self.reset_insertion_mode(), token) } else { Done @@ -860,8 +860,8 @@ impl<Handle, Sink> TreeBuilderStep } </table> => { - if self.in_scope_named(table_scope, atom!(table)) { - self.pop_until_named(atom!(table)); + if self.in_scope_named(table_scope, atom!("table")) { + self.pop_until_named(atom!("table")); self.mode = self.reset_insertion_mode(); } else { self.unexpected(&token); @@ -888,7 +888,7 @@ impl<Handle, Sink> TreeBuilderStep tag @ <form> => { self.unexpected(&tag); - if !self.in_html_elem_named(atom!(template)) && self.form_elem.is_none() { + if !self.in_html_elem_named(atom!("template")) && self.form_elem.is_none() { self.form_elem = Some(self.insert_and_pop_element_for(tag)); } Done @@ -943,12 +943,12 @@ impl<Handle, Sink> TreeBuilderStep InCaption => match_token!(token { tag @ <caption> <col> <colgroup> <tbody> <td> <tfoot> <th> <thead> <tr> </table> </caption> => { - if self.in_scope_named(table_scope, atom!(caption)) { + if self.in_scope_named(table_scope, atom!("caption")) { self.generate_implied_end(cursory_implied_end); - self.expect_to_close(atom!(caption)); + self.expect_to_close(atom!("caption")); self.clear_active_formatting_to_marker(); match tag { - Tag { kind: EndTag, name: atom!(caption), .. } => { + Tag { kind: EndTag, name: atom!("caption"), .. } => { self.mode = InTable; Done } @@ -980,7 +980,7 @@ impl<Handle, Sink> TreeBuilderStep } </colgroup> => { - if self.current_node_named(atom!(colgroup)) { + if self.current_node_named(atom!("colgroup")) { self.pop(); self.mode = InTable; } else { @@ -996,7 +996,7 @@ impl<Handle, Sink> TreeBuilderStep EOFToken => self.step(InBody, token), token => { - if self.current_node_named(atom!(colgroup)) { + if self.current_node_named(atom!("colgroup")) { self.pop(); Reprocess(InTable, token) } else { @@ -1017,7 +1017,7 @@ impl<Handle, Sink> TreeBuilderStep <th> <td> => { self.unexpected(&token); self.pop_until_current(table_body_context); - self.insert_phantom(atom!(tr)); + self.insert_phantom(atom!("tr")); Reprocess(InRow, token) } @@ -1033,7 +1033,7 @@ impl<Handle, Sink> TreeBuilderStep } <caption> <col> <colgroup> <tbody> <tfoot> <thead> </table> => { - declare_tag_set!(table_outer = table tbody tfoot); + declare_tag_set!(table_outer = "table" "tbody" "tfoot"); if self.in_scope(table_scope, |e| self.elem_in(e, table_outer)) { self.pop_until_current(table_body_context); self.pop(); @@ -1060,10 +1060,10 @@ impl<Handle, Sink> TreeBuilderStep } </tr> => { - if self.in_scope_named(table_scope, atom!(tr)) { + if self.in_scope_named(table_scope, atom!("tr")) { self.pop_until_current(table_row_context); let node = self.pop(); - self.assert_named(node, atom!(tr)); + self.assert_named(node, atom!("tr")); self.mode = InTableBody; } else { self.unexpected(&token); @@ -1072,10 +1072,10 @@ impl<Handle, Sink> TreeBuilderStep } <caption> <col> <colgroup> <tbody> <tfoot> <thead> <tr> </table> => { - if self.in_scope_named(table_scope, atom!(tr)) { + if self.in_scope_named(table_scope, atom!("tr")) { self.pop_until_current(table_row_context); let node = self.pop(); - self.assert_named(node, atom!(tr)); + self.assert_named(node, atom!("tr")); Reprocess(InTableBody, token) } else { self.unexpected(&token) @@ -1084,10 +1084,10 @@ impl<Handle, Sink> TreeBuilderStep tag @ </tbody> </tfoot> </thead> => { if self.in_scope_named(table_scope, tag.name.clone()) { - if self.in_scope_named(table_scope, atom!(tr)) { + if self.in_scope_named(table_scope, atom!("tr")) { self.pop_until_current(table_row_context); let node = self.pop(); - self.assert_named(node, atom!(tr)); + self.assert_named(node, atom!("tr")); Reprocess(InTableBody, TagToken(tag)) } else { Done @@ -1150,7 +1150,7 @@ impl<Handle, Sink> TreeBuilderStep <html> => self.step(InBody, token), tag @ <option> => { - if self.current_node_named(atom!(option)) { + if self.current_node_named(atom!("option")) { self.pop(); } self.insert_element_for(tag); @@ -1158,10 +1158,10 @@ impl<Handle, Sink> TreeBuilderStep } tag @ <optgroup> => { - if self.current_node_named(atom!(option)) { + if self.current_node_named(atom!("option")) { self.pop(); } - if self.current_node_named(atom!(optgroup)) { + if self.current_node_named(atom!("optgroup")) { self.pop(); } self.insert_element_for(tag); @@ -1170,12 +1170,12 @@ impl<Handle, Sink> TreeBuilderStep </optgroup> => { if self.open_elems.len() >= 2 - && self.current_node_named(atom!(option)) + && self.current_node_named(atom!("option")) && self.html_elem_named(self.open_elems[self.open_elems.len() - 2].clone(), - atom!(optgroup)) { + atom!("optgroup")) { self.pop(); } - if self.current_node_named(atom!(optgroup)) { + if self.current_node_named(atom!("optgroup")) { self.pop(); } else { self.unexpected(&token); @@ -1184,7 +1184,7 @@ impl<Handle, Sink> TreeBuilderStep } </option> => { - if self.current_node_named(atom!(option)) { + if self.current_node_named(atom!("option")) { self.pop(); } else { self.unexpected(&token); @@ -1193,14 +1193,14 @@ impl<Handle, Sink> TreeBuilderStep } tag @ <select> </select> => { - let in_scope = self.in_scope_named(select_scope, atom!(select)); + let in_scope = self.in_scope_named(select_scope, atom!("select")); if !in_scope || tag.kind == StartTag { self.unexpected(&tag); } if in_scope { - self.pop_until_named(atom!(select)); + self.pop_until_named(atom!("select")); self.mode = self.reset_insertion_mode(); } Done @@ -1208,8 +1208,8 @@ impl<Handle, Sink> TreeBuilderStep <input> <keygen> <textarea> => { self.unexpected(&token); - if self.in_scope_named(select_scope, atom!(select)) { - self.pop_until_named(atom!(select)); + if self.in_scope_named(select_scope, atom!("select")) { + self.pop_until_named(atom!("select")); Reprocess(self.reset_insertion_mode(), token) } else { Done @@ -1227,14 +1227,14 @@ impl<Handle, Sink> TreeBuilderStep InSelectInTable => match_token!(token { <caption> <table> <tbody> <tfoot> <thead> <tr> <td> <th> => { self.unexpected(&token); - self.pop_until_named(atom!(select)); + self.pop_until_named(atom!("select")); Reprocess(self.reset_insertion_mode(), token) } tag @ </caption> </table> </tbody> </tfoot> </thead> </tr> </td> </th> => { self.unexpected(&tag); if self.in_scope_named(table_scope, tag.name.clone()) { - self.pop_until_named(atom!(select)); + self.pop_until_named(atom!("select")); Reprocess(self.reset_insertion_mode(), TagToken(tag)) } else { Done @@ -1279,11 +1279,11 @@ impl<Handle, Sink> TreeBuilderStep } EOFToken => { - if !self.in_html_elem_named(atom!(template)) { + if !self.in_html_elem_named(atom!("template")) { self.stop_parsing() } else { self.unexpected(&token); - self.pop_until_named(atom!(template)); + self.pop_until_named(atom!("template")); self.clear_active_formatting_to_marker(); self.template_modes.pop(); self.mode = self.reset_insertion_mode(); @@ -1343,7 +1343,7 @@ impl<Handle, Sink> TreeBuilderStep self.unexpected(&token); } else { self.pop(); - if !self.is_fragment() && !self.current_node_named(atom!(frameset)) { + if !self.is_fragment() && !self.current_node_named(atom!("frameset")) { self.mode = AfterFrameset; } } @@ -1446,7 +1446,7 @@ impl<Handle, Sink> TreeBuilderStep tag @ <font> => { let unexpected = tag.attrs.iter().any(|attr| { matches!(attr.name, - qualname!("", color) | qualname!("", face) | qualname!("", size)) + qualname!("", "color") | qualname!("", "face") | qualname!("", "size")) }); if unexpected { self.unexpected_start_tag_in_foreign_content(tag) @@ -1469,7 +1469,7 @@ impl<Handle, Sink> TreeBuilderStep let node = self.open_elems[stack_idx].clone(); let node_name = self.sink.elem_name(node); - if !first && node_name.ns == ns!(HTML) { + if !first && node_name.ns == ns!(html) { let mode = self.mode; return self.step(mode, TagToken(tag)); } diff --git a/src/tree_builder/tag_sets.rs b/src/tree_builder/tag_sets.rs index 17409c05..37e6be95 100644 --- a/src/tree_builder/tag_sets.rs +++ b/src/tree_builder/tag_sets.rs @@ -13,16 +13,16 @@ use string_cache::QualName; macro_rules! declare_tag_set_impl ( ($param:ident, $b:ident, $supr:ident, $($tag:tt)+) => ( match $param { - $( qualname!(HTML, $tag) => $b, )+ + $( qualname!(html, $tag) => $b, )+ p => $supr(p), } )); macro_rules! declare_tag_set_body ( - ($param:ident = $supr:ident - $($tag:tt)+) + ($param:ident = [$supr:ident] - $($tag:tt)+) => ( declare_tag_set_impl!($param, false, $supr, $($tag)+) ); - ($param:ident = $supr:ident + $($tag:tt)+) + ($param:ident = [$supr:ident] + $($tag:tt)+) => ( declare_tag_set_impl!($param, true, $supr, $($tag)+) ); ($param:ident = $($tag:tt)+) @@ -47,7 +47,7 @@ macro_rules! declare_tag_set ( #[inline(always)] pub fn full_set(_: QualName) -> bool { true } declare_tag_set!(pub html_default_scope = - applet caption html table td th marquee object template); + "applet" "caption" "html" "table" "td" "th" "marquee" "object" "template"); #[inline(always)] pub fn default_scope(name: QualName) -> bool { html_default_scope(name.clone()) || @@ -55,38 +55,40 @@ declare_tag_set!(pub html_default_scope = html_integration_point(name) } -declare_tag_set!(pub list_item_scope = default_scope + ol ul); -declare_tag_set!(pub button_scope = default_scope + button); -declare_tag_set!(pub table_scope = html table template); -declare_tag_set!(pub select_scope = full_set - optgroup option); +declare_tag_set!(pub list_item_scope = [default_scope] + "ol" "ul"); +declare_tag_set!(pub button_scope = [default_scope] + "button"); +declare_tag_set!(pub table_scope = "html" "table" "template"); +declare_tag_set!(pub select_scope = [full_set] - "optgroup" "option"); -declare_tag_set!(pub table_body_context = tbody tfoot thead template html); -declare_tag_set!(pub table_row_context = tr template html); -declare_tag_set!(pub td_th = td th); +declare_tag_set!(pub table_body_context = "tbody" "tfoot" "thead" "template" "html"); +declare_tag_set!(pub table_row_context = "tr" "template" "html"); +declare_tag_set!(pub td_th = "td" "th"); -declare_tag_set!(pub cursory_implied_end = dd dt li option optgroup p rb rp rt rtc); +declare_tag_set!(pub cursory_implied_end = "dd" "dt" "li" "option" "optgroup" "p" "rb" "rp" "rt" "rtc"); -declare_tag_set!(pub thorough_implied_end = cursory_implied_end - + caption colgroup tbody td tfoot th thead tr); +declare_tag_set!(pub thorough_implied_end = [cursory_implied_end] + + "caption" "colgroup" "tbody" "td" "tfoot" "th" "thead" "tr"); -declare_tag_set!(pub heading_tag = h1 h2 h3 h4 h5 h6); +declare_tag_set!(pub heading_tag = "h1" "h2" "h3" "h4" "h5" "h6"); declare_tag_set!(pub special_tag = - address applet area article aside base basefont bgsound blockquote body br button caption - center col colgroup dd details dir div dl dt embed fieldset figcaption figure footer form - frame frameset h1 h2 h3 h4 h5 h6 head header hgroup hr html iframe img input isindex li - link listing main marquee menu menuitem meta nav noembed noframes noscript object ol p - param plaintext pre script section select source style summary table tbody td template - textarea tfoot th thead title tr track ul wbr xmp); + "address" "applet" "area" "article" "aside" "base" "basefont" "bgsound" "blockquote" "body" + "br" "button" "caption" "center" "col" "colgroup" "dd" "details" "dir" "div" "dl" "dt" "embed" + "fieldset" "figcaption" "figure" "footer" "form" "frame" "frameset" "h1" "h2" "h3" "h4" "h5" + "h6" "head" "header" "hgroup" "hr" "html" "iframe" "img" "input" "isindex" "li" "link" + "listing" "main" "marquee" "menu" "menuitem" "meta" "nav" "noembed" "noframes" "noscript" + "object" "ol" "p" "param" "plaintext" "pre" "script" "section" "select" "source" "style" + "summary" "table" "tbody" "td" "template" "textarea" "tfoot" "th" "thead" "title" "tr" "track" + "ul" "wbr" "xmp"); //§ END pub fn mathml_text_integration_point(p: QualName) -> bool { - matches!(p, qualname!(MathML, mi) | qualname!(MathML, mo) | qualname!(MathML, mn) - | qualname!(MathML, ms) | qualname!(MathML, mtext)) + matches!(p, qualname!(mathml, "mi") | qualname!(mathml, "mo") | qualname!(mathml, "mn") + | qualname!(mathml, "ms") | qualname!(mathml, "mtext")) } pub fn html_integration_point(p: QualName) -> bool { // FIXME(#119): HTML integration points in MathML - matches!(p, qualname!(SVG, foreignObject) | qualname!(SVG, desc) - | qualname!(SVG, title)) + matches!(p, qualname!(svg, "foreignObject") | qualname!(svg, "desc") + | qualname!(svg, "title")) } diff --git a/tests/serializer.rs b/tests/serializer.rs index a4570e99..57bd8824 100644 --- a/tests/serializer.rs +++ b/tests/serializer.rs @@ -7,9 +7,6 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![cfg_attr(feature = "unstable", feature(plugin))] -#![cfg_attr(feature = "unstable", plugin(string_cache_plugin))] - #[macro_use] extern crate string_cache; extern crate tendril; extern crate html5ever; @@ -24,7 +21,7 @@ use html5ever::rcdom::RcDom; fn parse_and_serialize(input: StrTendril) -> StrTendril { let dom: RcDom = parse_fragment(one_input(input), - qualname!(HTML, body), + qualname!(html, "body"), vec![], ParseOpts::default()); let inner = &dom.document.borrow().children[0]; diff --git a/tests/tokenizer.rs b/tests/tokenizer.rs index 40d0513c..38875e3f 100644 --- a/tests/tokenizer.rs +++ b/tests/tokenizer.rs @@ -7,8 +7,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![cfg_attr(feature = "unstable", feature(test, plugin))] -#![cfg_attr(feature = "unstable", plugin(string_cache_plugin))] +#![cfg_attr(feature = "unstable", feature(test))] #[cfg(feature = "unstable")] extern crate test; extern crate rustc_serialize; @@ -218,10 +217,10 @@ fn json_to_token(js: &Json) -> Token { "StartTag" => TagToken(Tag { kind: StartTag, - name: Atom::from_slice(&args[0].get_str()), + name: Atom::from(&*args[0].get_str()), attrs: args[1].get_obj().iter().map(|(k,v)| { Attribute { - name: QualName::new(ns!(""), Atom::from_slice(&k)), + name: QualName::new(ns!(), Atom::from(&**k)), value: v.get_tendril() } }).collect(), @@ -233,7 +232,7 @@ fn json_to_token(js: &Json) -> Token { "EndTag" => TagToken(Tag { kind: EndTag, - name: Atom::from_slice(&args[0].get_str()), + name: Atom::from(&*args[0].get_str()), attrs: vec!(), self_closing: false }), diff --git a/tests/tree_builder.rs b/tests/tree_builder.rs index f09486aa..f021ef8b 100644 --- a/tests/tree_builder.rs +++ b/tests/tree_builder.rs @@ -7,8 +7,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![cfg_attr(feature = "unstable", feature(test, plugin))] -#![cfg_attr(feature = "unstable", plugin(string_cache_plugin))] +#![cfg_attr(feature = "unstable", feature(test))] #[cfg(feature = "unstable")] extern crate test; #[macro_use] extern crate string_cache; @@ -113,8 +112,8 @@ fn serialize(buf: &mut String, indent: usize, handle: Handle) { Element(ref name, _, ref attrs) => { buf.push_str("<"); match name.ns { - ns!(SVG) => buf.push_str("svg "), - ns!(MathML) => buf.push_str("math "), + ns!(svg) => buf.push_str("svg "), + ns!(mathml) => buf.push_str("math "), _ => (), } buf.push_str(&*name.local); @@ -128,9 +127,9 @@ fn serialize(buf: &mut String, indent: usize, handle: Handle) { buf.push_str("|"); buf.push_str(&repeat(" ").take(indent+2).collect::<String>()); match attr.name.ns { - ns!(XLink) => buf.push_str("xlink "), - ns!(XML) => buf.push_str("xml "), - ns!(XMLNS) => buf.push_str("xmlns "), + ns!(xlink) => buf.push_str("xlink "), + ns!(xml) => buf.push_str("xml "), + ns!(xmlns) => buf.push_str("xmlns "), _ => (), } buf.push_str(&format!("{}=\"{}\"\n", @@ -249,11 +248,11 @@ fn make_test_desc_with_scripting_flag( #[cfg(feature = "unstable")] fn context_name(context: &str) -> QualName { if context.starts_with("svg ") { - QualName::new(ns!(SVG), Atom::from_slice(&context[4..])) + QualName::new(ns!(svg), Atom::from(&context[4..])) } else if context.starts_with("math ") { - QualName::new(ns!(MathML), Atom::from_slice(&context[5..])) + QualName::new(ns!(mathml), Atom::from(&context[5..])) } else { - QualName::new(ns!(HTML), Atom::from_slice(context)) + QualName::new(ns!(html), Atom::from(context)) } }