func SvgDecodeConfig()

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
}