Parse parses SVG XML data into a reusable [Document].
The Document can be rendered multiple times at different sizes.
Only the SVG subset needed for icon rendering is supported.
Unsupported elements are silently skipped.
func Parse(data []byte) (*Document, error) { decoder := xml.NewDecoder(bytes.NewReader(data)) doc := &Document{ ViewBox: ViewBox{Width: 16, Height: 16}, // sensible default } // Find the root element. for { tok, err := decoder.Token() if err != nil { return nil, fmt.Errorf("svg: failed to find root element: %w", err) } if se, ok := tok.(xml.StartElement); ok && se.Name.Local == "svg" { if err := parseSVGRoot(doc, se); err != nil { return nil, err } // Parse children. children, err := parseChildren(decoder) if err != nil { return nil, err } doc.Elements = children return doc, nil } } }
Parse parses SVG XML data into a reusable [Document].
The Document can be rendered multiple times at different sizes.
Only the SVG subset needed for icon rendering is supported.
Unsupported elements are silently skipped.