code: func SVGBasicParse(buf []byte) (sig SVGBasicType, err error) {
  	type pathType struct {
  		D string `xml:"d,attr"`
  	}
  	type srcType struct {
  		Wd    float64    `xml:"width,attr"`
  		Ht    float64    `xml:"height,attr"`
  		Paths []pathType `xml:"path"`
  	}
  	var src srcType
  	err = xml.Unmarshal(buf, &src)
  	if err == nil {
  		if src.Wd > 0 && src.Ht > 0 {
  			sig.Wd, sig.Ht = src.Wd, src.Ht
  			var segs []SVGBasicSegmentType
  			for _, path := range src.Paths {
  				if err == nil {
  					segs, err = pathParse(path.D)
  					if err == nil {
  						sig.Segments = append(sig.Segments, segs)
  					}
  				}
  			}
  		} else {
  			err = fmt.Errorf("unacceptable values for basic SVG extent: %.2f x %.2f",
  				sig.Wd, sig.Ht)
  		}
  	}
  	return
  }
docs: // SVGBasicParse parses a simple scalable vector graphics (SVG) buffer into a
  // descriptor. Only a small subset of the SVG standard, in particular the path
  // information generated by jSignature, is supported. The returned path data
  // includes only the commands 'M' (absolute moveto: x, y), 'L' (absolute
  // lineto: x, y), 'C' (absolute cubic Bézier curve: cx0, cy0, cx1, cy1,
  // x1,y1) and 'Z' (closepath).