gitee.com/ks-custle/core-gm@v0.0.0-20230922171213-b83bdd97b62c/net/html/foreign.go (about)

     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  }