示例#1
0
        /// <summary>
        /// Writes formatted usage information.
        /// </summary>
        /// <param name="options">
        /// The <see cref="OptionSet"/> to write usage information for.
        /// </param>
        /// <exception cref="NotSupportedException">
        /// An option has an unsupported <see cref="OptionValueType"/>.
        /// </exception>
        private void WriteUsage(OptionSet options)
        {
            using (var indentedTextWriter = new IndentedTextWriter(OutWriter, "  "))
            {
                indentedTextWriter.WriteLine();
                indentedTextWriter.WriteLine($"Usage: {EntryAssemblyFileName} [options]");
                indentedTextWriter.WriteLine();

                indentedTextWriter.WriteLine("options:");
                indentedTextWriter.Indent++;

                var maxPrototypeLength = options.Max(option =>
                {
                    switch (option.OptionValueType)
                    {
                    case OptionValueType.None:
                        return(option.Prototype.Length);

                    case OptionValueType.Optional:
                        return(option.Prototype.Length - 1 + "[=VALUE]".Length);

                    case OptionValueType.Required:
                        return(option.Prototype.Length + "VALUE".Length);

                    default:
                        throw new NotSupportedException($"Unknown {nameof(OptionValueType)}: '{option.OptionValueType}'.");
                    }
                });
                foreach (var option in options)
                {
                    switch (option.OptionValueType)
                    {
                    case OptionValueType.None:
                        indentedTextWriter.WriteLine($"--{{0,-{maxPrototypeLength}}}  {option.Description}", option.Prototype);
                        break;

                    case OptionValueType.Optional:
                        indentedTextWriter.WriteLine($"--{{0,-{maxPrototypeLength}}}  {option.Description}", option.Prototype.TrimEnd(':') + "[=VALUE]");
                        break;

                    case OptionValueType.Required:
                        indentedTextWriter.WriteLine($"--{{0,-{maxPrototypeLength}}}  {option.Description}", option.Prototype + "VALUE");
                        break;
                    }
                }

                indentedTextWriter.Indent--;
            }
        }