| // 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.6.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.6.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.6.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", |
| "diffuseconstant": "diffuseConstant", |
| "edgemode": "edgeMode", |
| "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", |
| } |