| // 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, |
| "isindex": true, // The 'isindex' element has been removed, but keep it for backwards compatibility. |
| "keygen": true, |
| "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 |
| } |