MCPcopy
hub / github.com/tdewolff/canvas / parseTransform

Method parseTransform

svg.go:297–356  ·  view source on GitHub ↗
(v string)

Source from the content-addressed store, hash-verified

295}
296
297func (svg *svgParser) parseTransform(v string) Matrix {
298 i, j := 0, 0
299 m := Identity
300 var fun string
301 for i < len(v) {
302 if v[i] == '(' {
303 fun = strings.ToLower(strings.TrimSpace(v[j:i]))
304 j = i + 1
305 } else if v[i] == ')' {
306 d := svg.parsePoints(v[j:i])
307 switch fun {
308 case "matrix":
309 if len(d) != 6 {
310 svg.err = parse.NewErrorLexer(svg.z, "bad transform matrix")
311 } else {
312 m = m.Mul(Matrix{{d[0], d[2], d[4]}, {d[1], d[3], d[5]}})
313 }
314 case "translate":
315 if len(d) != 1 && len(d) != 2 {
316 svg.err = parse.NewErrorLexer(svg.z, "bad transform translate")
317 } else if len(d) == 1 {
318 m = m.Translate(d[0], 0.0)
319 } else {
320 m = m.Translate(d[0], d[1])
321 }
322 case "scale":
323 if len(d) != 1 && len(d) != 2 {
324 svg.err = parse.NewErrorLexer(svg.z, "bad transform scale")
325 } else if len(d) == 1 {
326 m = m.Scale(d[0], d[0])
327 } else {
328 m = m.Scale(d[0], d[1])
329 }
330 case "rotate":
331 if len(d) != 1 && len(d) != 3 {
332 svg.err = parse.NewErrorLexer(svg.z, "bad transform rotate")
333 } else if len(d) == 1 {
334 m = m.Rotate(d[0])
335 } else {
336 m = m.RotateAbout(d[0], d[1], d[2])
337 }
338 case "skewx":
339 if len(d) != 1 {
340 svg.err = parse.NewErrorLexer(svg.z, "bad transform skewX")
341 } else {
342 m = m.Shear(math.Tan(d[0]*math.Pi/180), 0)
343 }
344 case "skewy":
345 if len(d) != 1 {
346 svg.err = parse.NewErrorLexer(svg.z, "bad transform skewY")
347 } else {
348 m = m.Shear(0, math.Tan(d[0]*math.Pi/180))
349 }
350 }
351 j = i + 1
352 }
353 i++
354 }

Callers 2

parseDefsMethod · 0.95
setAttributeMethod · 0.95

Calls 7

parsePointsMethod · 0.95
MulMethod · 0.45
TranslateMethod · 0.45
ScaleMethod · 0.45
RotateMethod · 0.45
RotateAboutMethod · 0.45
ShearMethod · 0.45

Tested by

no test coverage detected