"""HTML constants.""" # See https://html.spec.whatwg.org/#elements-3. ELEMENTS = { "a", "abbr", "address", "area", "article", "aside", "audio", "b", "base", "bdi", "bdo", "blockquote", "body", "br", "button", "canvas", "caption", "cite", "code", "col", "colgroup", "data", "datalist", "dd", "del", "details", "dfn", "dialog", "div", "dl", "dt", "em", "embed", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hr", "html", "i", "iframe", "img", "input", "ins", "kbd", "label", "legend", "li", "link", "main", "map", "mark", "math", "menu", "meta", "meter", "nav", "noscript", "object", "ol", "optgroup", "option", "output", "p", "picture", "portal", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "script", "section", "select", "slot", "small", "source", "span", "strong", "style", "sub", "summary", "sup", "svg", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "title", "tr", "track", "u", "ul", "var", "video", "wbr", } # See https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes. ATTR_TO_ELEMENTS = { "accept": {"form", "input"}, "accept-charset": {"form"}, "accesskey": ELEMENTS, "action": {"form"}, "align": { "applet", "caption", "col", "colgroup", "hr", "iframe", "img", "table", "tbody", "td", "tfoot", "th", "thead", "tr", }, "allow": {"iframe"}, "alt": {"applet", "area", "img", "input"}, "async": {"script"}, "autocapitalize": ELEMENTS, "autocomplete": {"form", "input", "select", "textarea"}, "autofocus": {"button", "input", "keygen", "select", "textarea"}, "autoplay": {"audio", "video"}, "background": {"body", "table", "td", "th"}, "bgcolor": { "body", "col", "colgroup", "marquee", "table", "tbody", "tfoot", "td", "th", "tr", }, "border": {"img", "object", "table"}, "buffered": {"audio", "video"}, "capture": {"input"}, "challenge": {"keygen"}, "charset": {"meta", "script"}, "checked": {"input"}, "cite": {"blockquote", "del", "ins", "q"}, "class": ELEMENTS, "code": {"applet"}, "codebase": {"applet"}, "color": {"font", "hr"}, "cols": {"textarea"}, "colspan": {"td", "th"}, "content": {"meta"}, "contenteditable": ELEMENTS, "contextmenu": ELEMENTS, "controls": {"audio", "video"}, "coords": {"area"}, "crossorigin": {"audio", "img", "link", "script", "video"}, "csp": {"iframe"}, "data": {"object"}, "datetime": {"del", "ins", "time"}, "decoding": {"img"}, "default": {"track"}, "defer": {"script"}, "dir": ELEMENTS, "dirname": {"input", "textarea"}, "disabled": { "button", "fieldset", "input", "keygen", "optgroup", "option", "select", "textarea", }, "download": {"a", "area"}, "draggable": ELEMENTS, "enctype": {"form"}, "enterkeyhint": ELEMENTS, "for": {"label", "output"}, "form": { "button", "fieldset", "input", "keygen", "label", "meter", "object", "output", "progress", "select", "textarea", }, "formaction": {"button", "input"}, "formenctype": {"button", "input"}, "formmethod": {"button", "input"}, "formnovalidate": {"button", "input"}, "formtarget": {"button", "input"}, "headers": {"td", "th"}, "height": {"canvas", "embed", "iframe", "img", "input", "object", "video"}, "hidden": ELEMENTS, "high": {"meter"}, "href": {"a", "area", "base", "link"}, "hreflang": {"a", "area", "link"}, "http-equiv": {"meta"}, "icon": {"command"}, "id": ELEMENTS, "integrity": {"link", "script"}, "intrinsicsize": {"img"}, "inputmode": ELEMENTS, "ismap": {"img"}, "itemprop": ELEMENTS, "keytype": {"keygen"}, "kind": {"track"}, "label": {"optgroup", "option", "track"}, "lang": ELEMENTS, "language": {"script"}, "loading": {"img", "iframe"}, "list": {"input"}, "loop": {"audio", "bgsound", "marquee", "video"}, "low": {"meter"}, "manifest": {"html"}, "max": {"input", "meter", "progress"}, "maxlength": {"input", "textarea"}, "minlength": {"input", "textarea"}, "media": {"a", "area", "link", "source", "style"}, "method": {"form"}, "min": {"input", "meter"}, "multiple": {"input", "select"}, "muted": {"audio", "video"}, "name": { "button", "form", "fieldset", "iframe", "input", "keygen", "object", "output", "select", "textarea", "map", "meta", "param", }, "novalidate": {"form"}, "open": {"details", "dialog"}, "optimum": {"meter"}, "pattern": {"input"}, "ping": {"a", "area"}, "placeholder": {"input", "textarea"}, "playsinline": {"video"}, "poster": {"video"}, "preload": {"audio", "video"}, "readonly": {"input", "textarea"}, "referrerpolicy": {"a", "area", "iframe", "img", "link", "script"}, "rel": {"a", "area", "link"}, "required": {"input", "select", "textarea"}, "reversed": {"ol"}, "role": ELEMENTS, "rows": {"textarea"}, "rowspan": {"td", "th"}, "sandbox": {"iframe"}, "scope": {"th"}, "scoped": {"style"}, "selected": {"option"}, "shape": {"a", "area"}, "size": {"input", "select"}, "sizes": {"link", "img", "source"}, "slot": ELEMENTS, "span": {"col", "colgroup"}, "spellcheck": ELEMENTS, "src": { "audio", "embed", "iframe", "img", "input", "script", "source", "track", "video", }, "srcdoc": {"iframe"}, "srclang": {"track"}, "srcset": {"img", "source"}, "start": {"ol"}, "step": {"input"}, "style": ELEMENTS, "summary": {"table"}, "tabindex": ELEMENTS, "target": {"a", "area", "base", "form"}, "title": ELEMENTS, "translate": ELEMENTS, "type": { "button", "input", "embed", "object", "ol", "script", "source", "style", "menu", "link", }, "usemap": {"img", "input", "object"}, "value": { "button", "data", "input", "li", "meter", "option", "progress", "param", }, "width": {"canvas", "embed", "iframe", "img", "input", "object", "video"}, "wrap": {"textarea"}, }