/// <summary>
        /// Calculates the matrix to transform the content by to fit into the specified viewport dimensions
        /// </summary>
        public static SvgMatrix CalculateViewboxFit(this ISvgFitToViewbox fitToViewbox, float viewportWidth, float viewportHeight)
        {
            CalculateViewboxFit(fitToViewbox, viewportWidth, viewportHeight, out var scaleX, out var scaleY, out var offsetX, out var offsetY);
            var translateMatrix = SvgMatrix.CreateTranslate(offsetX, offsetY);
            var scaleMatrix     = SvgMatrix.CreateScale(scaleX, scaleY);

            return(SvgMatrix.Multiply(translateMatrix, scaleMatrix));
        }
        private static SvgTransform CreateScaleTransformationFromArgs(string args)
        {
            // scale(<sx> [<sy>]), which specifies a scale operation by sx and sy. If <sy> is not provided, it is assumed to be equal to <sx>.
            var split = SplitStringOfNumbers(args);

            if (split.Length < 1 || split.Length > 2)
            {
                throw new Exception($"Invalid scale transformation arguments '{args}'");
            }
            var x = float.Parse(split[0], CultureInfo.InvariantCulture);
            var y = split.Length == 2 ? float.Parse(split[1], CultureInfo.InvariantCulture) : x;

            return(new SvgTransform(SvgTransformType.Scale, SvgMatrix.CreateScale(x, y)));
        }