You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			112 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
		
		
			
		
	
	
			112 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
| 
											2 years ago
										 | // 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 | ||
|  | } |