in dev/import-beats/images_svg.go [25:80]
func SvgDecodeConfig(r io.Reader) (image.Config, error) {
data, err := ioutil.ReadAll(r)
if err != nil {
return image.Config{}, errors.Wrapf(err, "reading SVG file failed")
}
var svgFile svgFile
err = xml.Unmarshal(data, &svgFile)
if err != nil {
return image.Config{}, errors.Wrapf(err, "unmarshalling SVG file failed")
}
var width, height float64
if svgFile.Width != "" && svgFile.Height != "" {
width, err = svgParseToPixels(svgFile.Width)
if err != nil {
return image.Config{}, errors.Wrapf(err, "parsing width failed (value: %s)", svgFile.Width)
}
height, err = svgParseToPixels(svgFile.Height)
if err != nil {
return image.Config{}, errors.Wrapf(err, "parsing width failed (value: %s)", svgFile.Width)
}
}
if width > 0 && height > 0 {
return image.Config{
Width: int(width),
Height: int(height),
}, nil
}
dims := strings.Split(svgFile.ViewBox, " ")
var dimX, dimY string
if len(dims) == 2 {
dimX = dims[0]
dimY = dims[1]
} else if len(dims) == 4 {
dimX = dims[2]
dimY = dims[3]
}
width, err = strconv.ParseFloat(dimX, 32)
if err != nil {
return image.Config{}, errors.Wrapf(err, "parsing viewBox failed (value: %s)", svgFile.ViewBox)
}
height, err = strconv.ParseFloat(dimY, 32)
if err != nil {
return image.Config{}, errors.Wrapf(err, "parsing viewBox failed (value: %s)", svgFile.ViewBox)
}
return image.Config{
Width: int(width),
Height: int(height),
}, nil
}