rss-tools/vendor/golang.org/x/net/html/foreign.go (view raw)
| 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 | if strings.EqualFold(a.Val, "text/html") || strings.EqualFold(a.Val, "application/xhtml+xml") { |
| 44 | return true |
| 45 | } |
| 46 | } |
| 47 | } |
| 48 | } |
| 49 | case "svg": |
| 50 | switch n.Data { |
| 51 | case "desc", "foreignObject", "title": |
| 52 | return true |
| 53 | } |
| 54 | } |
| 55 | return false |
| 56 | } |
| 57 | |
| 58 | func mathMLTextIntegrationPoint(n *Node) bool { |
| 59 | if n.Namespace != "math" { |
| 60 | return false |
| 61 | } |
| 62 | switch n.Data { |
| 63 | case "mi", "mo", "mn", "ms", "mtext": |
| 64 | return true |
| 65 | } |
| 66 | return false |
| 67 | } |
| 68 | |
| 69 | // Section 12.2.6.5. |
| 70 | var breakout = map[string]bool{ |
| 71 | "b": true, |
| 72 | "big": true, |
| 73 | "blockquote": true, |
| 74 | "body": true, |
| 75 | "br": true, |
| 76 | "center": true, |
| 77 | "code": true, |
| 78 | "dd": true, |
| 79 | "div": true, |
| 80 | "dl": true, |
| 81 | "dt": true, |
| 82 | "em": true, |
| 83 | "embed": true, |
| 84 | "h1": true, |
| 85 | "h2": true, |
| 86 | "h3": true, |
| 87 | "h4": true, |
| 88 | "h5": true, |
| 89 | "h6": true, |
| 90 | "head": true, |
| 91 | "hr": true, |
| 92 | "i": true, |
| 93 | "img": true, |
| 94 | "li": true, |
| 95 | "listing": true, |
| 96 | "menu": true, |
| 97 | "meta": true, |
| 98 | "nobr": true, |
| 99 | "ol": true, |
| 100 | "p": true, |
| 101 | "pre": true, |
| 102 | "ruby": true, |
| 103 | "s": true, |
| 104 | "small": true, |
| 105 | "span": true, |
| 106 | "strong": true, |
| 107 | "strike": true, |
| 108 | "sub": true, |
| 109 | "sup": true, |
| 110 | "table": true, |
| 111 | "tt": true, |
| 112 | "u": true, |
| 113 | "ul": true, |
| 114 | "var": true, |
| 115 | } |
| 116 | |
| 117 | // Section 12.2.6.5. |
| 118 | var svgTagNameAdjustments = map[string]string{ |
| 119 | "altglyph": "altGlyph", |
| 120 | "altglyphdef": "altGlyphDef", |
| 121 | "altglyphitem": "altGlyphItem", |
| 122 | "animatecolor": "animateColor", |
| 123 | "animatemotion": "animateMotion", |
| 124 | "animatetransform": "animateTransform", |
| 125 | "clippath": "clipPath", |
| 126 | "feblend": "feBlend", |
| 127 | "fecolormatrix": "feColorMatrix", |
| 128 | "fecomponenttransfer": "feComponentTransfer", |
| 129 | "fecomposite": "feComposite", |
| 130 | "feconvolvematrix": "feConvolveMatrix", |
| 131 | "fediffuselighting": "feDiffuseLighting", |
| 132 | "fedisplacementmap": "feDisplacementMap", |
| 133 | "fedistantlight": "feDistantLight", |
| 134 | "feflood": "feFlood", |
| 135 | "fefunca": "feFuncA", |
| 136 | "fefuncb": "feFuncB", |
| 137 | "fefuncg": "feFuncG", |
| 138 | "fefuncr": "feFuncR", |
| 139 | "fegaussianblur": "feGaussianBlur", |
| 140 | "feimage": "feImage", |
| 141 | "femerge": "feMerge", |
| 142 | "femergenode": "feMergeNode", |
| 143 | "femorphology": "feMorphology", |
| 144 | "feoffset": "feOffset", |
| 145 | "fepointlight": "fePointLight", |
| 146 | "fespecularlighting": "feSpecularLighting", |
| 147 | "fespotlight": "feSpotLight", |
| 148 | "fetile": "feTile", |
| 149 | "feturbulence": "feTurbulence", |
| 150 | "foreignobject": "foreignObject", |
| 151 | "glyphref": "glyphRef", |
| 152 | "lineargradient": "linearGradient", |
| 153 | "radialgradient": "radialGradient", |
| 154 | "textpath": "textPath", |
| 155 | } |
| 156 | |
| 157 | // Section 12.2.6.1 |
| 158 | var mathMLAttributeAdjustments = map[string]string{ |
| 159 | "definitionurl": "definitionURL", |
| 160 | } |
| 161 | |
| 162 | var svgAttributeAdjustments = map[string]string{ |
| 163 | "attributename": "attributeName", |
| 164 | "attributetype": "attributeType", |
| 165 | "basefrequency": "baseFrequency", |
| 166 | "baseprofile": "baseProfile", |
| 167 | "calcmode": "calcMode", |
| 168 | "clippathunits": "clipPathUnits", |
| 169 | "diffuseconstant": "diffuseConstant", |
| 170 | "edgemode": "edgeMode", |
| 171 | "filterunits": "filterUnits", |
| 172 | "glyphref": "glyphRef", |
| 173 | "gradienttransform": "gradientTransform", |
| 174 | "gradientunits": "gradientUnits", |
| 175 | "kernelmatrix": "kernelMatrix", |
| 176 | "kernelunitlength": "kernelUnitLength", |
| 177 | "keypoints": "keyPoints", |
| 178 | "keysplines": "keySplines", |
| 179 | "keytimes": "keyTimes", |
| 180 | "lengthadjust": "lengthAdjust", |
| 181 | "limitingconeangle": "limitingConeAngle", |
| 182 | "markerheight": "markerHeight", |
| 183 | "markerunits": "markerUnits", |
| 184 | "markerwidth": "markerWidth", |
| 185 | "maskcontentunits": "maskContentUnits", |
| 186 | "maskunits": "maskUnits", |
| 187 | "numoctaves": "numOctaves", |
| 188 | "pathlength": "pathLength", |
| 189 | "patterncontentunits": "patternContentUnits", |
| 190 | "patterntransform": "patternTransform", |
| 191 | "patternunits": "patternUnits", |
| 192 | "pointsatx": "pointsAtX", |
| 193 | "pointsaty": "pointsAtY", |
| 194 | "pointsatz": "pointsAtZ", |
| 195 | "preservealpha": "preserveAlpha", |
| 196 | "preserveaspectratio": "preserveAspectRatio", |
| 197 | "primitiveunits": "primitiveUnits", |
| 198 | "refx": "refX", |
| 199 | "refy": "refY", |
| 200 | "repeatcount": "repeatCount", |
| 201 | "repeatdur": "repeatDur", |
| 202 | "requiredextensions": "requiredExtensions", |
| 203 | "requiredfeatures": "requiredFeatures", |
| 204 | "specularconstant": "specularConstant", |
| 205 | "specularexponent": "specularExponent", |
| 206 | "spreadmethod": "spreadMethod", |
| 207 | "startoffset": "startOffset", |
| 208 | "stddeviation": "stdDeviation", |
| 209 | "stitchtiles": "stitchTiles", |
| 210 | "surfacescale": "surfaceScale", |
| 211 | "systemlanguage": "systemLanguage", |
| 212 | "tablevalues": "tableValues", |
| 213 | "targetx": "targetX", |
| 214 | "targety": "targetY", |
| 215 | "textlength": "textLength", |
| 216 | "viewbox": "viewBox", |
| 217 | "viewtarget": "viewTarget", |
| 218 | "xchannelselector": "xChannelSelector", |
| 219 | "ychannelselector": "yChannelSelector", |
| 220 | "zoomandpan": "zoomAndPan", |
| 221 | } |