use std::collections::HashMap;
use lazy_static::lazy_static;
use crate::dom::LocalName;
lazy_static! {
pub static ref TAG_META: HashMap<LocalName, TagMeta> = init_tag_metadata();
}
pub struct TagMeta {
is_empty: bool,
is_deprecated: bool,
is_inline: bool,
is_meta: bool,
is_banned: bool,
basic_attrs: Vec<LocalName>,
}
impl TagMeta {
pub fn is_empty(&self) -> bool {
self.is_empty
}
pub fn is_deprecated(&self) -> bool {
self.is_deprecated
}
pub fn is_inline(&self) -> bool {
self.is_inline
}
pub fn is_meta(&self) -> bool {
self.is_meta
}
pub fn is_banned(&self) -> bool {
self.is_banned
}
pub fn has_basic_attr(&self, name: &LocalName) -> bool {
self.basic_attrs.binary_search(name).is_ok()
}
}
impl Default for TagMeta {
fn default() -> TagMeta {
TagMeta {
is_empty: false,
is_deprecated: false,
is_inline: false,
is_meta: false,
is_banned: false,
basic_attrs: vec![],
}
}
}
pub mod ns {
use html5ever::ns;
use crate::dom::Namespace;
pub const HTML: Namespace = ns!(html);
}
pub mod t {
use html5ever::local_name as lname;
use crate::dom::LocalName;
pub const A: LocalName = lname!("a");
pub const ABBR: LocalName = lname!("abbr");
pub const ACRONYM: LocalName = lname!("acronym");
pub const ADDRESS: LocalName = lname!("address");
pub const APPLET: LocalName = lname!("applet");
pub const AREA: LocalName = lname!("area");
pub const ARTICLE: LocalName = lname!("article");
pub const ASIDE: LocalName = lname!("aside");
pub const AUDIO: LocalName = lname!("audio");
pub const B: LocalName = lname!("b");
pub const BASE: LocalName = lname!("base");
pub const BASEFONT: LocalName = lname!("basefont");
pub const BDI: LocalName = lname!("bdi");
pub const BDO: LocalName = lname!("bdo");
pub const BIG: LocalName = lname!("big");
pub const BLINK: LocalName = lname!("blink");
pub const BLOCKQUOTE: LocalName = lname!("blockquote");
pub const BODY: LocalName = lname!("body");
pub const BR: LocalName = lname!("br");
pub const BUTTON: LocalName = lname!("button");
pub const CANVAS: LocalName = lname!("canvas");
pub const CAPTION: LocalName = lname!("caption");
pub const CENTER: LocalName = lname!("center");
pub const CITE: LocalName = lname!("cite");
pub const CODE: LocalName = lname!("code");
pub const COL: LocalName = lname!("col");
pub const COLGROUP: LocalName = lname!("colgroup");
pub const CONTENT: LocalName = lname!("content");
pub const DATA: LocalName = lname!("data");
pub const DATALIST: LocalName = lname!("datalist");
pub const DD: LocalName = lname!("dd");
pub const DEL: LocalName = lname!("del");
pub const DETAILS: LocalName = lname!("details");
pub const DFN: LocalName = lname!("dfn");
pub const DIALOG: LocalName = lname!("dialog");
pub const DIR: LocalName = lname!("dir");
pub const DIV: LocalName = lname!("div");
pub const DL: LocalName = lname!("dl");
pub const DT: LocalName = lname!("dt");
pub const EM: LocalName = lname!("em");
pub const EMBED: LocalName = lname!("embed");
pub const FIELDSET: LocalName = lname!("fieldset");
pub const FIGCAPTION: LocalName = lname!("figcaption");
pub const FIGURE: LocalName = lname!("figure");
pub const FONT: LocalName = lname!("font");
pub const FOOTER: LocalName = lname!("footer");
pub const FORM: LocalName = lname!("form");
pub const FRAME: LocalName = lname!("frame");
pub const FRAMESET: LocalName = lname!("frameset");
pub const H1: LocalName = lname!("h1");
pub const H2: LocalName = lname!("h2");
pub const H3: LocalName = lname!("h3");
pub const H4: LocalName = lname!("h4");
pub const H5: LocalName = lname!("h5");
pub const H6: LocalName = lname!("h6");
pub const HEAD: LocalName = lname!("head");
pub const HEADER: LocalName = lname!("header");
pub const HGROUP: LocalName = lname!("hgroup");
pub const HR: LocalName = lname!("hr");
pub const HTML: LocalName = lname!("html");
pub const I: LocalName = lname!("i");
pub const IFRAME: LocalName = lname!("iframe");
pub const IMG: LocalName = lname!("img");
pub const INPUT: LocalName = lname!("input");
pub const INS: LocalName = lname!("ins");
pub const ISINDEX: LocalName = lname!("isindex");
pub const KBD: LocalName = lname!("kbd");
pub const LABEL: LocalName = lname!("label");
pub const LEGEND: LocalName = lname!("legend");
pub const LI: LocalName = lname!("li");
pub const LINK: LocalName = lname!("link");
pub const LISTING: LocalName = lname!("listing");
pub const MAIN: LocalName = lname!("main");
pub const MAP: LocalName = lname!("map");
pub const MARK: LocalName = lname!("mark");
pub const MENU: LocalName = lname!("menu");
pub const MENUITEM: LocalName = lname!("menuitem");
pub const META: LocalName = lname!("meta");
pub const METER: LocalName = lname!("meter");
pub const NAV: LocalName = lname!("nav");
pub const NOBR: LocalName = lname!("nobr");
pub const NOFRAMES: LocalName = lname!("noframes");
pub const NOSCRIPT: LocalName = lname!("noscript");
pub const OBJECT: LocalName = lname!("object");
pub const OL: LocalName = lname!("ol");
pub const OPTGROUP: LocalName = lname!("optgroup");
pub const OPTION: LocalName = lname!("option");
pub const OUTPUT: LocalName = lname!("output");
pub const P: LocalName = lname!("p");
pub const PARAM: LocalName = lname!("param");
pub const PICTURE: LocalName = lname!("picture");
pub const PLAINTEXT: LocalName = lname!("plaintext");
pub const PRE: LocalName = lname!("pre");
pub const PROGRESS: LocalName = lname!("progress");
pub const Q: LocalName = lname!("q");
pub const RB: LocalName = lname!("rb");
lazy_static::lazy_static! {
pub static ref RBC: LocalName = "rbc".into();
}
pub const RP: LocalName = lname!("rp");
pub const RT: LocalName = lname!("rt");
pub const RTC: LocalName = lname!("rtc");
pub const RUBY: LocalName = lname!("ruby");
pub const S: LocalName = lname!("s");
pub const SAMP: LocalName = lname!("samp");
pub const SCRIPT: LocalName = lname!("script");
pub const SECTION: LocalName = lname!("section");
pub const SELECT: LocalName = lname!("select");
pub const SLOT: LocalName = lname!("slot");
pub const SMALL: LocalName = lname!("small");
pub const SOURCE: LocalName = lname!("source");
pub const SPAN: LocalName = lname!("span");
pub const STRIKE: LocalName = lname!("strike");
pub const STRONG: LocalName = lname!("strong");
pub const STYLE: LocalName = lname!("style");
pub const SUB: LocalName = lname!("sub");
pub const SUMMARY: LocalName = lname!("summary");
pub const SUP: LocalName = lname!("sup");
pub const SVG: LocalName = lname!("svg");
pub const TABLE: LocalName = lname!("table");
pub const TBODY: LocalName = lname!("tbody");
pub const TD: LocalName = lname!("td");
pub const TEMPLATE: LocalName = lname!("template");
pub const TEXTAREA: LocalName = lname!("textarea");
pub const TFOOT: LocalName = lname!("tfoot");
pub const TH: LocalName = lname!("th");
pub const THEAD: LocalName = lname!("thead");
pub const TIME: LocalName = lname!("time");
pub const TITLE: LocalName = lname!("title");
pub const TR: LocalName = lname!("tr");
pub const TT: LocalName = lname!("tt");
pub const U: LocalName = lname!("u");
pub const UL: LocalName = lname!("ul");
pub const VAR: LocalName = lname!("var");
pub const VIDEO: LocalName = lname!("video");
pub const WBR: LocalName = lname!("wbr");
pub const XMP: LocalName = lname!("xmp");
}
pub mod a {
use html5ever::local_name as lname;
use crate::dom::LocalName;
pub const ABBR: LocalName = lname!("abbr");
pub const ACCEPT: LocalName = lname!("accept");
pub const ACCEPT_CHARSET: LocalName = lname!("accept-charset");
pub const ALIGN: LocalName = lname!("align");
pub const ALT: LocalName = lname!("alt");
pub const AXIS: LocalName = lname!("axis");
pub const BASE: LocalName = lname!("base");
pub const BGCOLOR: LocalName = lname!("bgcolor");
pub const BORDER: LocalName = lname!("border");
pub const CELLPADDING: LocalName = lname!("cellpadding");
pub const CELLSPACING: LocalName = lname!("cellspacing");
pub const CHAR: LocalName = lname!("char");
pub const CHAROFF: LocalName = lname!("charoff");
pub const CHARSET: LocalName = lname!("charset");
pub const CITE: LocalName = lname!("cite");
pub const CLASS: LocalName = lname!("class");
pub const COLOR: LocalName = lname!("color");
pub const COLSPAN: LocalName = lname!("colspan");
pub const CONTENT: LocalName = lname!("content");
pub const CONTROLS: LocalName = lname!("controls");
pub const COORDS: LocalName = lname!("coords");
pub const DATA: LocalName = lname!("data");
pub const DATETIME: LocalName = lname!("datetime");
lazy_static::lazy_static! {
pub static ref DECODING: LocalName = "decoding".into();
}
pub const DIR: LocalName = lname!("dir");
pub const FRAME: LocalName = lname!("frame");
pub const HEADERS: LocalName = lname!("headers");
pub const HEIGHT: LocalName = lname!("height");
pub const HIDDEN: LocalName = lname!("hidden");
pub const HREF: LocalName = lname!("href");
pub const HREFLANG: LocalName = lname!("hreflang");
pub const HTTP_EQUIV: LocalName = lname!("http-equiv");
pub const ID: LocalName = lname!("id");
pub const LABEL: LocalName = lname!("label");
pub const LANG: LocalName = lname!("lang");
pub const MEDIA: LocalName = lname!("media");
pub const NAME: LocalName = lname!("name");
pub const NOWRAP: LocalName = lname!("nowrap");
pub const REL: LocalName = lname!("rel");
pub const REV: LocalName = lname!("rev");
pub const ROWSPAN: LocalName = lname!("rowspan");
pub const RULES: LocalName = lname!("rules");
pub const SCHEME: LocalName = lname!("scheme");
pub const SCOPE: LocalName = lname!("scope");
pub const SHAPE: LocalName = lname!("shape");
pub const SPAN: LocalName = lname!("span");
pub const SRC: LocalName = lname!("src");
pub const STYLE: LocalName = lname!("style");
pub const SUMMARY: LocalName = lname!("summary");
pub const TARGET: LocalName = lname!("target");
pub const TITLE: LocalName = lname!("title");
pub const TYPE: LocalName = lname!("type");
pub const VALIGN: LocalName = lname!("valign");
pub const VALUE: LocalName = lname!("value");
pub const WIDTH: LocalName = lname!("width");
}
fn init_tag_metadata() -> HashMap<LocalName, TagMeta> {
let mut tag_meta = HashMap::with_capacity(135);
tag_meta.insert(t::A, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::CHARSET, a::DIR, a::HREF, a::HREFLANG, a::ID, a::LANG, a::MEDIA, a::NAME, a::REL, a::REV, a::TITLE, a::TYPE
],
.. TagMeta::default()
});
tag_meta.insert(t::ABBR, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::ACRONYM, TagMeta {
is_deprecated: true,
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::ADDRESS, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::APPLET, TagMeta {
is_deprecated: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::AREA, TagMeta {
is_empty: true,
basic_attrs: vec![
a::ALT, a::BASE, a::DIR, a::LANG, a::MEDIA, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::ARTICLE, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::ASIDE, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::AUDIO, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::SRC, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::B, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::BASE, TagMeta {
is_empty: true,
is_meta: true,
basic_attrs: vec![
a::BASE, a::HREF
],
.. TagMeta::default()
});
tag_meta.insert(t::BASEFONT, TagMeta {
is_empty: true,
is_deprecated: true,
is_inline: true,
is_meta: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::BDI, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::BDO, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::BIG, TagMeta {
is_deprecated: true,
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::BLINK, TagMeta {
is_deprecated: true,
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::BLOCKQUOTE, TagMeta {
basic_attrs: vec![
a::BASE, a::CITE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::BODY, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::BR, TagMeta {
is_empty: true,
basic_attrs: vec![
a::BASE, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::BUTTON, TagMeta {
is_inline: true,
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::CANVAS, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::CAPTION, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::CENTER, TagMeta {
is_deprecated: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::CITE, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::CODE, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::COL, TagMeta {
is_empty: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::SPAN, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::COLGROUP, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::SPAN, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::CONTENT, TagMeta {
is_deprecated: true,
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::DATA, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE, a::VALUE
],
.. TagMeta::default()
});
tag_meta.insert(t::DATALIST, TagMeta {
is_inline: true,
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::DD, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::DEL, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::CITE, a::DATETIME, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::DETAILS, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::DFN, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::DIALOG, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::DIR, TagMeta {
is_deprecated: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::DIV, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::DL, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::DT, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::EM, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::EMBED, TagMeta {
is_empty: true,
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::HEIGHT, a::LANG, a::SRC, a::TITLE, a::TYPE, a::WIDTH
],
.. TagMeta::default()
});
tag_meta.insert(t::FIELDSET, TagMeta {
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::FIGCAPTION, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::FIGURE, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::FONT, TagMeta {
is_deprecated: true,
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::FOOTER, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::FORM, TagMeta {
basic_attrs: vec![
a::ACCEPT, a::ACCEPT_CHARSET, a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::FRAME, TagMeta {
is_empty: true,
is_deprecated: true,
is_banned: true,
basic_attrs: vec![
a::BASE, a::SRC, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::FRAMESET, TagMeta {
is_deprecated: true,
is_banned: true,
basic_attrs: vec![
a::BASE, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::H1, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::H2, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::H3, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::H4, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::H5, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::H6, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::HEAD, TagMeta {
is_meta: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG
],
.. TagMeta::default()
});
tag_meta.insert(t::HEADER, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::HGROUP, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::HR, TagMeta {
is_empty: true,
basic_attrs: vec![
a::BASE, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::HTML, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG
],
.. TagMeta::default()
});
tag_meta.insert(t::I, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::IFRAME, TagMeta {
is_inline: true,
basic_attrs: vec![
a::ALIGN, a::BASE, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::IMG, TagMeta {
is_empty: true,
is_inline: true,
basic_attrs: vec![
a::ALT, a::BASE, a::DECODING.clone(), a::DIR, a::HEIGHT, a::LANG, a::SRC, a::TITLE, a::WIDTH
],
.. TagMeta::default()
});
tag_meta.insert(t::INPUT, TagMeta {
is_empty: true,
is_inline: true,
is_banned: true,
basic_attrs: vec![
a::ACCEPT, a::ALT, a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::INS, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::CITE, a::DATETIME, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::ISINDEX, TagMeta {
is_deprecated: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::KBD, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::LABEL, TagMeta {
is_inline: true,
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::LEGEND, TagMeta {
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::LI, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::LINK, TagMeta {
is_empty: true,
is_meta: true,
basic_attrs: vec![
a::BASE, a::CHARSET, a::DIR, a::HREF, a::HREFLANG, a::LANG, a::MEDIA, a::REL, a::REV, a::TITLE, a::TYPE
],
.. TagMeta::default()
});
tag_meta.insert(t::LISTING, TagMeta {
is_deprecated: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::MAIN, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::MAP, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::MARK, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::MENU, TagMeta {
is_deprecated: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::MENUITEM, TagMeta {
is_empty: true,
is_deprecated: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::META, TagMeta {
is_empty: true,
is_meta: true,
basic_attrs: vec![
a::BASE, a::CHARSET, a::CONTENT, a::DIR, a::HTTP_EQUIV, a::LANG, a::SCHEME
],
.. TagMeta::default()
});
tag_meta.insert(t::METER, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::NAV, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::NOBR, TagMeta {
is_deprecated: true,
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::NOFRAMES, TagMeta {
is_deprecated: true,
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::NOSCRIPT, TagMeta {
is_inline: true,
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::OBJECT, TagMeta {
is_inline: true,
is_banned: true,
basic_attrs: vec![
a::ALIGN, a::BASE, a::DATA, a::DIR, a::LANG, a::TITLE, a::TYPE
],
.. TagMeta::default()
});
tag_meta.insert(t::OL, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::OPTGROUP, TagMeta {
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LABEL, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::OPTION, TagMeta {
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LABEL, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::OUTPUT, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::P, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::PARAM, TagMeta {
is_empty: true,
basic_attrs: vec![
a::BASE, a::NAME, a::VALUE
],
.. TagMeta::default()
});
tag_meta.insert(t::PICTURE, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::HEIGHT, a::LANG, a::TITLE, a::WIDTH
],
.. TagMeta::default()
});
tag_meta.insert(t::PLAINTEXT, TagMeta {
is_deprecated: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::PRE, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::PROGRESS, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::Q, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::CITE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::RB, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::RBC.clone(), TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::RP, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::RT, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::RTC, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::RUBY, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::S, TagMeta {
is_deprecated: true,
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::SAMP, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::SCRIPT, TagMeta {
is_inline: true,
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG
],
.. TagMeta::default()
});
tag_meta.insert(t::SECTION, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::SELECT, TagMeta {
is_inline: true,
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::SLOT, TagMeta {
is_inline: true,
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::SMALL, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::SOURCE, TagMeta {
is_empty: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::SRC, a::TITLE, a::TYPE
],
.. TagMeta::default()
});
tag_meta.insert(t::SPAN, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::STRIKE, TagMeta {
is_deprecated: true,
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::STRONG, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::STYLE, TagMeta {
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG
],
.. TagMeta::default()
});
tag_meta.insert(t::SUB, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::SUMMARY, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::SUP, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::SVG, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::HEIGHT, a::LANG, a::TITLE, a::WIDTH
],
.. TagMeta::default()
});
tag_meta.insert(t::TABLE, TagMeta {
basic_attrs: vec![
a::ALIGN, a::BASE, a::DIR, a::LANG, a::SUMMARY, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::TBODY, TagMeta {
basic_attrs: vec![
a::ALIGN, a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::TD, TagMeta {
basic_attrs: vec![
a::ALIGN, a::BASE, a::COLSPAN, a::DIR, a::HEADERS, a::LANG, a::ROWSPAN, a::SCOPE, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::TEMPLATE, TagMeta {
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::TEXTAREA, TagMeta {
is_inline: true,
is_banned: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::TFOOT, TagMeta {
basic_attrs: vec![
a::ALIGN, a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::TH, TagMeta {
basic_attrs: vec![
a::ABBR, a::ALIGN, a::AXIS, a::BASE, a::COLSPAN, a::DIR, a::LANG, a::ROWSPAN, a::SCOPE, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::THEAD, TagMeta {
basic_attrs: vec![
a::ALIGN, a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::TIME, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DATETIME, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::TITLE, TagMeta {
is_meta: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG
],
.. TagMeta::default()
});
tag_meta.insert(t::TR, TagMeta {
basic_attrs: vec![
a::ABBR, a::ALIGN, a::AXIS, a::BASE, a::COLSPAN, a::DIR, a::HEADERS, a::LANG, a::ROWSPAN, a::SCOPE, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::TT, TagMeta {
is_deprecated: true,
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::U, TagMeta {
is_deprecated: true,
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::UL, TagMeta {
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::VAR, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::VIDEO, TagMeta {
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::HEIGHT, a::LANG, a::TITLE, a::WIDTH
],
.. TagMeta::default()
});
tag_meta.insert(t::WBR, TagMeta {
is_empty: true,
is_inline: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta.insert(t::XMP, TagMeta {
is_deprecated: true,
basic_attrs: vec![
a::BASE, a::DIR, a::LANG, a::TITLE
],
.. TagMeta::default()
});
tag_meta
}