foreign.go (6362B)
1 // Copyright 2011 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package html 6 7 import ( 8 "strings" 9 ) 10 11 func adjustAttributeNames(aa []Attribute, nameMap map[string]string) { 12 for i := range aa { 13 if newName, ok := nameMap[aa[i].Key]; ok { 14 aa[i].Key = newName 15 } 16 } 17 } 18 19 func adjustForeignAttributes(aa []Attribute) { 20 for i, a := range aa { 21 if a.Key == "" || a.Key[0] != 'x' { 22 continue 23 } 24 switch a.Key { 25 case "xlink:actuate", "xlink:arcrole", "xlink:href", "xlink:role", "xlink:show", 26 "xlink:title", "xlink:type", "xml:base", "xml:lang", "xml:space", "xmlns:xlink": 27 j := strings.Index(a.Key, ":") 28 aa[i].Namespace = a.Key[:j] 29 aa[i].Key = a.Key[j+1:] 30 } 31 } 32 } 33 34 func htmlIntegrationPoint(n *Node) bool { 35 if n.Type != ElementNode { 36 return false 37 } 38 switch n.Namespace { 39 case "math": 40 if n.Data == "annotation-xml" { 41 for _, a := range n.Attr { 42 if a.Key == "encoding" { 43 val := strings.ToLower(a.Val) 44 if val == "text/html" || val == "application/xhtml+xml" { 45 return true 46 } 47 } 48 } 49 } 50 case "svg": 51 switch n.Data { 52 case "desc", "foreignObject", "title": 53 return true 54 } 55 } 56 return false 57 } 58 59 func mathMLTextIntegrationPoint(n *Node) bool { 60 if n.Namespace != "math" { 61 return false 62 } 63 switch n.Data { 64 case "mi", "mo", "mn", "ms", "mtext": 65 return true 66 } 67 return false 68 } 69 70 // Section 12.2.6.5. 71 var breakout = map[string]bool{ 72 "b": true, 73 "big": true, 74 "blockquote": true, 75 "body": true, 76 "br": true, 77 "center": true, 78 "code": true, 79 "dd": true, 80 "div": true, 81 "dl": true, 82 "dt": true, 83 "em": true, 84 "embed": true, 85 "h1": true, 86 "h2": true, 87 "h3": true, 88 "h4": true, 89 "h5": true, 90 "h6": true, 91 "head": true, 92 "hr": true, 93 "i": true, 94 "img": true, 95 "li": true, 96 "listing": true, 97 "menu": true, 98 "meta": true, 99 "nobr": true, 100 "ol": true, 101 "p": true, 102 "pre": true, 103 "ruby": true, 104 "s": true, 105 "small": true, 106 "span": true, 107 "strong": true, 108 "strike": true, 109 "sub": true, 110 "sup": true, 111 "table": true, 112 "tt": true, 113 "u": true, 114 "ul": true, 115 "var": true, 116 } 117 118 // Section 12.2.6.5. 119 var svgTagNameAdjustments = map[string]string{ 120 "altglyph": "altGlyph", 121 "altglyphdef": "altGlyphDef", 122 "altglyphitem": "altGlyphItem", 123 "animatecolor": "animateColor", 124 "animatemotion": "animateMotion", 125 "animatetransform": "animateTransform", 126 "clippath": "clipPath", 127 "feblend": "feBlend", 128 "fecolormatrix": "feColorMatrix", 129 "fecomponenttransfer": "feComponentTransfer", 130 "fecomposite": "feComposite", 131 "feconvolvematrix": "feConvolveMatrix", 132 "fediffuselighting": "feDiffuseLighting", 133 "fedisplacementmap": "feDisplacementMap", 134 "fedistantlight": "feDistantLight", 135 "feflood": "feFlood", 136 "fefunca": "feFuncA", 137 "fefuncb": "feFuncB", 138 "fefuncg": "feFuncG", 139 "fefuncr": "feFuncR", 140 "fegaussianblur": "feGaussianBlur", 141 "feimage": "feImage", 142 "femerge": "feMerge", 143 "femergenode": "feMergeNode", 144 "femorphology": "feMorphology", 145 "feoffset": "feOffset", 146 "fepointlight": "fePointLight", 147 "fespecularlighting": "feSpecularLighting", 148 "fespotlight": "feSpotLight", 149 "fetile": "feTile", 150 "feturbulence": "feTurbulence", 151 "foreignobject": "foreignObject", 152 "glyphref": "glyphRef", 153 "lineargradient": "linearGradient", 154 "radialgradient": "radialGradient", 155 "textpath": "textPath", 156 } 157 158 // Section 12.2.6.1 159 var mathMLAttributeAdjustments = map[string]string{ 160 "definitionurl": "definitionURL", 161 } 162 163 var svgAttributeAdjustments = map[string]string{ 164 "attributename": "attributeName", 165 "attributetype": "attributeType", 166 "basefrequency": "baseFrequency", 167 "baseprofile": "baseProfile", 168 "calcmode": "calcMode", 169 "clippathunits": "clipPathUnits", 170 "diffuseconstant": "diffuseConstant", 171 "edgemode": "edgeMode", 172 "filterunits": "filterUnits", 173 "glyphref": "glyphRef", 174 "gradienttransform": "gradientTransform", 175 "gradientunits": "gradientUnits", 176 "kernelmatrix": "kernelMatrix", 177 "kernelunitlength": "kernelUnitLength", 178 "keypoints": "keyPoints", 179 "keysplines": "keySplines", 180 "keytimes": "keyTimes", 181 "lengthadjust": "lengthAdjust", 182 "limitingconeangle": "limitingConeAngle", 183 "markerheight": "markerHeight", 184 "markerunits": "markerUnits", 185 "markerwidth": "markerWidth", 186 "maskcontentunits": "maskContentUnits", 187 "maskunits": "maskUnits", 188 "numoctaves": "numOctaves", 189 "pathlength": "pathLength", 190 "patterncontentunits": "patternContentUnits", 191 "patterntransform": "patternTransform", 192 "patternunits": "patternUnits", 193 "pointsatx": "pointsAtX", 194 "pointsaty": "pointsAtY", 195 "pointsatz": "pointsAtZ", 196 "preservealpha": "preserveAlpha", 197 "preserveaspectratio": "preserveAspectRatio", 198 "primitiveunits": "primitiveUnits", 199 "refx": "refX", 200 "refy": "refY", 201 "repeatcount": "repeatCount", 202 "repeatdur": "repeatDur", 203 "requiredextensions": "requiredExtensions", 204 "requiredfeatures": "requiredFeatures", 205 "specularconstant": "specularConstant", 206 "specularexponent": "specularExponent", 207 "spreadmethod": "spreadMethod", 208 "startoffset": "startOffset", 209 "stddeviation": "stdDeviation", 210 "stitchtiles": "stitchTiles", 211 "surfacescale": "surfaceScale", 212 "systemlanguage": "systemLanguage", 213 "tablevalues": "tableValues", 214 "targetx": "targetX", 215 "targety": "targetY", 216 "textlength": "textLength", 217 "viewbox": "viewBox", 218 "viewtarget": "viewTarget", 219 "xchannelselector": "xChannelSelector", 220 "ychannelselector": "yChannelSelector", 221 "zoomandpan": "zoomAndPan", 222 }