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

Method parseTag

svg.go:388–448  ·  view source on GitHub ↗
(l *xml.Lexer)

Source from the content-addressed store, hash-verified

386}
387
388func (svg *svgParser) parseTag(l *xml.Lexer) *svgTag {
389 var root, parent *svgTag
390 for {
391 tt, data := l.Next()
392 if tt == xml.ErrorToken {
393 if l.Err() != io.EOF {
394 svg.err = l.Err()
395 } else {
396 svg.err = parse.NewErrorLexer(svg.z, "unexpected end-of-file")
397 }
398 break
399 } else if tt == xml.StartTagToken {
400 var attrNames []string
401 var attrs map[string]string
402 name := string(data[1:])
403 tt, attrNames, attrs = svg.parseAttributes(l)
404 tag := &svgTag{
405 parent: parent,
406 name: name,
407 attrNames: attrNames,
408 attrs: attrs,
409 }
410
411 if parent == nil {
412 root = tag
413 } else {
414 parent.content = append(parent.content, tag)
415 }
416
417 if tt == xml.StartTagCloseVoidToken {
418 if parent == nil {
419 break
420 }
421 } else {
422 parent = tag
423 }
424
425 // Handle <style> being nested in <defs>. Adobe Illustrator
426 // does this, for example.
427 if name == "style" {
428 tt, data = l.Next()
429 if tt == xml.TextToken {
430 svg.parseStyle(data)
431 tt, data = l.Next()
432 } else {
433 svg.err = parse.NewErrorLexer(svg.z, "Bad style tag")
434 }
435 break
436 }
437 } else if tt == xml.EndTagToken {
438 if parent == nil {
439 break // when starting on an end tag
440 }
441 parent = parent.parent
442 if parent == nil {
443 break
444 }
445 }

Callers 1

parseDefsMethod · 0.95

Calls 3

parseAttributesMethod · 0.95
parseStyleMethod · 0.95
NextMethod · 0.45

Tested by

no test coverage detected