| // Copyright 2011 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package html | |
| // Section 12.2.4.2 of the HTML5 specification says "The following elements | |
| // have varying levels of special parsing rules". | |
| // https://html.spec.whatwg.org/multipage/syntax.html#the-stack-of-open-elements | |
| var isSpecialElementMap = map[string]bool{ | |
| "address": true, | |
| "applet": true, | |
| "area": true, | |
| "article": true, | |
| "aside": true, | |
| "base": true, | |
| "basefont": true, | |
| "bgsound": true, | |
| "blockquote": true, | |
| "body": true, | |
| "br": true, | |
| "button": true, | |
| "caption": true, | |
| "center": true, | |
| "col": true, | |
| "colgroup": true, | |
| "dd": true, | |
| "details": true, | |
| "dir": true, | |
| "div": true, | |
| "dl": true, | |
| "dt": true, | |
| "embed": true, | |
| "fieldset": true, | |
| "figcaption": true, | |
| "figure": true, | |
| "footer": true, | |
| "form": true, | |
| "frame": true, | |
| "frameset": true, | |
| "h1": true, | |
| "h2": true, | |
| "h3": true, | |
| "h4": true, | |
| "h5": true, | |
| "h6": true, | |
| "head": true, | |
| "header": true, | |
| "hgroup": true, | |
| "hr": true, | |
| "html": true, | |
| "iframe": true, | |
| "img": true, | |
| "input": true, | |
| "keygen": true, // "keygen" has been removed from the spec, but are kept here for backwards compatibility. | |
| "li": true, | |
| "link": true, | |
| "listing": true, | |
| "main": true, | |
| "marquee": true, | |
| "menu": true, | |
| "meta": true, | |
| "nav": true, | |
| "noembed": true, | |
| "noframes": true, | |
| "noscript": true, | |
| "object": true, | |
| "ol": true, | |
| "p": true, | |
| "param": true, | |
| "plaintext": true, | |
| "pre": true, | |
| "script": true, | |
| "section": true, | |
| "select": true, | |
| "source": true, | |
| "style": true, | |
| "summary": true, | |
| "table": true, | |
| "tbody": true, | |
| "td": true, | |
| "template": true, | |
| "textarea": true, | |
| "tfoot": true, | |
| "th": true, | |
| "thead": true, | |
| "title": true, | |
| "tr": true, | |
| "track": true, | |
| "ul": true, | |
| "wbr": true, | |
| "xmp": true, | |
| } | |
| func isSpecialElement(element *Node) bool { | |
| switch element.Namespace { | |
| case "", "html": | |
| return isSpecialElementMap[element.Data] | |
| case "math": | |
| switch element.Data { | |
| case "mi", "mo", "mn", "ms", "mtext", "annotation-xml": | |
| return true | |
| } | |
| case "svg": | |
| switch element.Data { | |
| case "foreignObject", "desc", "title": | |
| return true | |
| } | |
| } | |
| return false | |
| } |