using AppScaffolding; using CommandLine; using CommandLine.Text; using LibationFileManager; using System; using System.Collections.Generic; using System.IO; namespace LibationCli; [Verb("help", HelpText = "Display more information on a specific command.")] internal class HelpVerb { /// /// Name of the verb to get help about /// [Value(0, Default = "")] public string? HelpType { get; set; } /// /// Create a base for /// public static HelpText CreateHelpText() => new HelpText { AutoVersion = false, AutoHelp = false, Heading = $"LibationCli v{LibationScaffolding.BuildVersion.ToVersionString()}", AdditionalNewLineAfterOption = true, MaximumDisplayWidth = 80 }; public static HelpText GetGroupHelpText(CliCommandGroup group) { var helpText = CreateHelpText(); helpText.AddPreOptionsLine(group.HelpText); helpText.AddPreOptionsLine($"{group.Name} commands:"); foreach (var subcommand in group.Subcommands) helpText.AddPreOptionsLine($" {group.Name} {subcommand.Name} {subcommand.HelpText}"); return helpText; } /// /// Write the global verb list plus nested command groups (e.g. abs). /// Groups are appended after because CommandLineParser has no post-options slot. /// public static void WriteGlobalVerbList( TextWriter error, Type[] verbTypes, IReadOnlyList groups, string? preOptionsLine = null) { var helpText = CreateHelpText(); if (preOptionsLine is not null) helpText.AddPreOptionsLine(preOptionsLine); helpText.AddVerbs(verbTypes); error.WriteLine(helpText); foreach (var group in groups) error.WriteLine($" {group.Name,-21}{group.HelpText}"); } /// /// Get the 's /// public HelpText GetHelpText() { var helpText = CreateHelpText(); var result = new Parser().ParseArguments([HelpType], Program.VerbTypes); if (result.TypeInfo.Current == typeof(NullInstance)) { //HelpType is not a defined verb so get LibationCli usage helpText.AddVerbs(Program.VerbTypes); } else { helpText.AutoHelp = true; helpText.AddDashesToOption = true; helpText.AddOptions(result); } return helpText; } }