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); } } }
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()); }