private static IEnumerable <string> SplitPathData(string pathData)
        {
            foreach (var split in PathDataSplitter.SplitByCommands(pathData))
            {
                yield return(split[0].ToString());

                var parameters = PathDataSplitter.SplitParameters(split.Substring(1));
                foreach (var x in parameters)
                {
                    yield return(x);
                }
            }
        }
Exemplo n.º 2
0
        public static string Fix([CanBeNull] string pathData)
        {
            const char moveToUpper = 'M';

            pathData = pathData?.Trim();
            if (string.IsNullOrEmpty(pathData))
            {
                return(pathData);
            }
            if (char.ToUpper(pathData[0]) != moveToUpper)
            {
                throw new UnsupportedFormatException("Path data must begin with a moveto command.");
            }

            var result = new StringBuilder();

            foreach (var split in PathDataSplitter.SplitByCommands(pathData))
            {
                var command    = split[0];
                var parameters = PathDataSplitter.SplitParameters(split.Substring(1)).Select(ReformatParameter).ToArray();
                Func <IEnumerable <string>, string> join = x => string.Join(" ", x);

                result.Append(command);
                if (char.ToUpper(command) == moveToUpper && parameters.Length > 2)
                {
                    var lineTo = char.IsUpper(command) ? 'L' : 'l';
                    result.Append(join(parameters.Take(2)));
                    result.Append(lineTo);
                    result.Append(join(parameters.Skip(2)));
                }
                else
                {
                    result.Append(join(parameters));
                }
            }

            result[0] = moveToUpper;
            return(result.ToString());
        }