227 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			227 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | // 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 | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"strings" | ||
|  | ) | ||
|  | 
 | ||
|  | func adjustAttributeNames(aa []Attribute, nameMap map[string]string) { | ||
|  | 	for i := range aa { | ||
|  | 		if newName, ok := nameMap[aa[i].Key]; ok { | ||
|  | 			aa[i].Key = newName | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func adjustForeignAttributes(aa []Attribute) { | ||
|  | 	for i, a := range aa { | ||
|  | 		if a.Key == "" || a.Key[0] != 'x' { | ||
|  | 			continue | ||
|  | 		} | ||
|  | 		switch a.Key { | ||
|  | 		case "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", | ||
|  | 			"xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "xmlns:xlink": | ||
|  | 			j := strings.Index(a.Key, ":") | ||
|  | 			aa[i].Namespace = a.Key[:j] | ||
|  | 			aa[i].Key = a.Key[j+1:] | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | func htmlIntegrationPoint(n *Node) bool { | ||
|  | 	if n.Type != ElementNode { | ||
|  | 		return false | ||
|  | 	} | ||
|  | 	switch n.Namespace { | ||
|  | 	case "math": | ||
|  | 		if n.Data == "annotation-xml" { | ||
|  | 			for _, a := range n.Attr { | ||
|  | 				if a.Key == "encoding" { | ||
|  | 					val := strings.ToLower(a.Val) | ||
|  | 					if val == "text/html" || val == "application/xhtml+xml" { | ||
|  | 						return true | ||
|  | 					} | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 	case "svg": | ||
|  | 		switch n.Data { | ||
|  | 		case "desc", "foreignObject", "title": | ||
|  | 			return true | ||
|  | 		} | ||
|  | 	} | ||
|  | 	return false | ||
|  | } | ||
|  | 
 | ||
|  | func mathMLTextIntegrationPoint(n *Node) bool { | ||
|  | 	if n.Namespace != "math" { | ||
|  | 		return false | ||
|  | 	} | ||
|  | 	switch n.Data { | ||
|  | 	case "mi", "mo", "mn", "ms", "mtext": | ||
|  | 		return true | ||
|  | 	} | ||
|  | 	return false | ||
|  | } | ||
|  | 
 | ||
|  | // Section 12.2.5.5. | ||
|  | var breakout = map[string]bool{ | ||
|  | 	"b":          true, | ||
|  | 	"big":        true, | ||
|  | 	"blockquote": true, | ||
|  | 	"body":       true, | ||
|  | 	"br":         true, | ||
|  | 	"center":     true, | ||
|  | 	"code":       true, | ||
|  | 	"dd":         true, | ||
|  | 	"div":        true, | ||
|  | 	"dl":         true, | ||
|  | 	"dt":         true, | ||
|  | 	"em":         true, | ||
|  | 	"embed":      true, | ||
|  | 	"h1":         true, | ||
|  | 	"h2":         true, | ||
|  | 	"h3":         true, | ||
|  | 	"h4":         true, | ||
|  | 	"h5":         true, | ||
|  | 	"h6":         true, | ||
|  | 	"head":       true, | ||
|  | 	"hr":         true, | ||
|  | 	"i":          true, | ||
|  | 	"img":        true, | ||
|  | 	"li":         true, | ||
|  | 	"listing":    true, | ||
|  | 	"menu":       true, | ||
|  | 	"meta":       true, | ||
|  | 	"nobr":       true, | ||
|  | 	"ol":         true, | ||
|  | 	"p":          true, | ||
|  | 	"pre":        true, | ||
|  | 	"ruby":       true, | ||
|  | 	"s":          true, | ||
|  | 	"small":      true, | ||
|  | 	"span":       true, | ||
|  | 	"strong":     true, | ||
|  | 	"strike":     true, | ||
|  | 	"sub":        true, | ||
|  | 	"sup":        true, | ||
|  | 	"table":      true, | ||
|  | 	"tt":         true, | ||
|  | 	"u":          true, | ||
|  | 	"ul":         true, | ||
|  | 	"var":        true, | ||
|  | } | ||
|  | 
 | ||
|  | // Section 12.2.5.5. | ||
|  | var svgTagNameAdjustments = map[string]string{ | ||
|  | 	"altglyph":            "altGlyph", | ||
|  | 	"altglyphdef":         "altGlyphDef", | ||
|  | 	"altglyphitem":        "altGlyphItem", | ||
|  | 	"animatecolor":        "animateColor", | ||
|  | 	"animatemotion":       "animateMotion", | ||
|  | 	"animatetransform":    "animateTransform", | ||
|  | 	"clippath":            "clipPath", | ||
|  | 	"feblend":             "feBlend", | ||
|  | 	"fecolormatrix":       "feColorMatrix", | ||
|  | 	"fecomponenttransfer": "feComponentTransfer", | ||
|  | 	"fecomposite":         "feComposite", | ||
|  | 	"feconvolvematrix":    "feConvolveMatrix", | ||
|  | 	"fediffuselighting":   "feDiffuseLighting", | ||
|  | 	"fedisplacementmap":   "feDisplacementMap", | ||
|  | 	"fedistantlight":      "feDistantLight", | ||
|  | 	"feflood":             "feFlood", | ||
|  | 	"fefunca":             "feFuncA", | ||
|  | 	"fefuncb":             "feFuncB", | ||
|  | 	"fefuncg":             "feFuncG", | ||
|  | 	"fefuncr":             "feFuncR", | ||
|  | 	"fegaussianblur":      "feGaussianBlur", | ||
|  | 	"feimage":             "feImage", | ||
|  | 	"femerge":             "feMerge", | ||
|  | 	"femergenode":         "feMergeNode", | ||
|  | 	"femorphology":        "feMorphology", | ||
|  | 	"feoffset":            "feOffset", | ||
|  | 	"fepointlight":        "fePointLight", | ||
|  | 	"fespecularlighting":  "feSpecularLighting", | ||
|  | 	"fespotlight":         "feSpotLight", | ||
|  | 	"fetile":              "feTile", | ||
|  | 	"feturbulence":        "feTurbulence", | ||
|  | 	"foreignobject":       "foreignObject", | ||
|  | 	"glyphref":            "glyphRef", | ||
|  | 	"lineargradient":      "linearGradient", | ||
|  | 	"radialgradient":      "radialGradient", | ||
|  | 	"textpath":            "textPath", | ||
|  | } | ||
|  | 
 | ||
|  | // Section 12.2.5.1 | ||
|  | var mathMLAttributeAdjustments = map[string]string{ | ||
|  | 	"definitionurl": "definitionURL", | ||
|  | } | ||
|  | 
 | ||
|  | var svgAttributeAdjustments = map[string]string{ | ||
|  | 	"attributename":             "attributeName", | ||
|  | 	"attributetype":             "attributeType", | ||
|  | 	"basefrequency":             "baseFrequency", | ||
|  | 	"baseprofile":               "baseProfile", | ||
|  | 	"calcmode":                  "calcMode", | ||
|  | 	"clippathunits":             "clipPathUnits", | ||
|  | 	"contentscripttype":         "contentScriptType", | ||
|  | 	"contentstyletype":          "contentStyleType", | ||
|  | 	"diffuseconstant":           "diffuseConstant", | ||
|  | 	"edgemode":                  "edgeMode", | ||
|  | 	"externalresourcesrequired": "externalResourcesRequired", | ||
|  | 	"filterres":                 "filterRes", | ||
|  | 	"filterunits":               "filterUnits", | ||
|  | 	"glyphref":                  "glyphRef", | ||
|  | 	"gradienttransform":         "gradientTransform", | ||
|  | 	"gradientunits":             "gradientUnits", | ||
|  | 	"kernelmatrix":              "kernelMatrix", | ||
|  | 	"kernelunitlength":          "kernelUnitLength", | ||
|  | 	"keypoints":                 "keyPoints", | ||
|  | 	"keysplines":                "keySplines", | ||
|  | 	"keytimes":                  "keyTimes", | ||
|  | 	"lengthadjust":              "lengthAdjust", | ||
|  | 	"limitingconeangle":         "limitingConeAngle", | ||
|  | 	"markerheight":              "markerHeight", | ||
|  | 	"markerunits":               "markerUnits", | ||
|  | 	"markerwidth":               "markerWidth", | ||
|  | 	"maskcontentunits":          "maskContentUnits", | ||
|  | 	"maskunits":                 "maskUnits", | ||
|  | 	"numoctaves":                "numOctaves", | ||
|  | 	"pathlength":                "pathLength", | ||
|  | 	"patterncontentunits":       "patternContentUnits", | ||
|  | 	"patterntransform":          "patternTransform", | ||
|  | 	"patternunits":              "patternUnits", | ||
|  | 	"pointsatx":                 "pointsAtX", | ||
|  | 	"pointsaty":                 "pointsAtY", | ||
|  | 	"pointsatz":                 "pointsAtZ", | ||
|  | 	"preservealpha":             "preserveAlpha", | ||
|  | 	"preserveaspectratio":       "preserveAspectRatio", | ||
|  | 	"primitiveunits":            "primitiveUnits", | ||
|  | 	"refx":                      "refX", | ||
|  | 	"refy":                      "refY", | ||
|  | 	"repeatcount":               "repeatCount", | ||
|  | 	"repeatdur":                 "repeatDur", | ||
|  | 	"requiredextensions":        "requiredExtensions", | ||
|  | 	"requiredfeatures":          "requiredFeatures", | ||
|  | 	"specularconstant":          "specularConstant", | ||
|  | 	"specularexponent":          "specularExponent", | ||
|  | 	"spreadmethod":              "spreadMethod", | ||
|  | 	"startoffset":               "startOffset", | ||
|  | 	"stddeviation":              "stdDeviation", | ||
|  | 	"stitchtiles":               "stitchTiles", | ||
|  | 	"surfacescale":              "surfaceScale", | ||
|  | 	"systemlanguage":            "systemLanguage", | ||
|  | 	"tablevalues":               "tableValues", | ||
|  | 	"targetx":                   "targetX", | ||
|  | 	"targety":                   "targetY", | ||
|  | 	"textlength":                "textLength", | ||
|  | 	"viewbox":                   "viewBox", | ||
|  | 	"viewtarget":                "viewTarget", | ||
|  | 	"xchannelselector":          "xChannelSelector", | ||
|  | 	"ychannelselector":          "yChannelSelector", | ||
|  | 	"zoomandpan":                "zoomAndPan", | ||
|  | } |