mirror of https://github.com/gogits/gogs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
226 lines
6.8 KiB
226 lines
6.8 KiB
// 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", |
|
}
|
|
|