Example #1
0
        /// <summary>
        /// Creates a message for the parse result.
        /// </summary>
        /// <remarks>Displays where the parsing succeeded or failed, as well as any named failures if the parsing failed.</remarks>
        public static string ToMessage(this IParseResult result)
        {
            if (result.Success)
            {
                return(string.Format(CultureInfo.InvariantCulture, "success at {0}", result.NextPosition.GetLineColumn()));
            }
            else
            {
                StringBuilder stringBuilder = new StringBuilder();

                stringBuilder.AppendFormat(CultureInfo.InvariantCulture, "failure at {0}", result.NextPosition.GetLineColumn());

                foreach (var namedFailureGroup in result.GetNamedFailures().Distinct()
                         .GroupBy(x => x.Position.GetLineColumn())
                         .OrderByDescending(x => x.Key.LineNumber).ThenByDescending(x => x.Key.ColumnNumber)
                         .Select(x => new { Position = x.Key, Names = x.Select(y => y.Name).Distinct().ToArray() }))
                {
                    stringBuilder.AppendFormat(CultureInfo.InvariantCulture,
                                               "; expected {0} at {1}", string.Join(" or ", namedFailureGroup.Names), namedFailureGroup.Position);
                }

                return(stringBuilder.ToString());
            }
        }