diff --git a/utils/cobrautil/templates/help_flags_printer.go b/utils/cobrautil/templates/help_flags_printer.go index 7dae1d34..a819e138 100644 --- a/utils/cobrautil/templates/help_flags_printer.go +++ b/utils/cobrautil/templates/help_flags_printer.go @@ -59,25 +59,33 @@ func (p *HelpFlagPrinter) PrintHelpFlag(flag *flag.Flag) { // It always has at least 2 elements. flagStr, usage := flagAndUsage[0], strings.Join(flagAndUsage[1:], " ") - - usage = strings.ReplaceAll(usage, "
", "\n") - usage = strings.ReplaceAll(usage, "", "\n\n") - usage = strings.ReplaceAll(usage, "", "") - usage = strings.ReplaceAll(usage, "", "") - usage = strings.ReplaceAll(usage, "", "\"") - usage = strings.ReplaceAll(usage, "", "\"") + usage = p.replaceHTML(usage) usage = withLinks(usage) - usage = strings.TrimSpace(usage) - usage = wordwrap.WrapString(usage, p.wrapLimit-offset) + wrappedStr = flagStr + "\n" + usage appendTabStr := strings.ReplaceAll(wrappedStr, "\n", "\n\t") fmt.Fprintf(p.out, appendTabStr+"\n\n") } +func (p *HelpFlagPrinter) replaceHTML(s string) string { + r := strings.NewReplacer( + "
", "\n", + "", "\n\n", + "", "", + "", "", + "", "\"", + "", "\"", + ) + + s = r.Replace(s) + s = strings.TrimSpace(s) + return s +} + // writeFlag will output the help flag based // on the format provided by getFlagFormat to i/o writer func writeFlag(out io.Writer, f *flag.Flag, envPrefix string) { diff --git a/utils/cobrautil/templates/markdown_flag_printer.go b/utils/cobrautil/templates/markdown_flag_printer.go index 31b198f9..1a71a907 100644 --- a/utils/cobrautil/templates/markdown_flag_printer.go +++ b/utils/cobrautil/templates/markdown_flag_printer.go @@ -33,22 +33,31 @@ func (p *MarkdownFlagPrinter) PrintHelpFlag(f *pflag.Flag) { fmt.Fprint(p.out, "\n\n") body := p.body(f) - body = strings.ReplaceAll(body, ". ", ".\n") - body = strings.ReplaceAll(body, "
", "\n") - body = strings.ReplaceAll(body, "", "\n\n") - body = strings.ReplaceAll(body, "", "`") - body = strings.ReplaceAll(body, "", "`") - body = strings.ReplaceAll(body, "", "\n```\n") - body = strings.ReplaceAll(body, "", "\n```\n") + body = p.replaceHTML(body) body = withMarkdownLinks(body) - body = strings.TrimSpace(body) fmt.Fprintf(p.out, body) fmt.Fprintf(p.out, "\n\n") } +func (p *MarkdownFlagPrinter) replaceHTML(s string) string { + r := strings.NewReplacer( + ". ", ".\n", + "
", "\n", + "", "\n\n", + "", "`", + "", "`", + "", "\n```\n", + "", "\n```\n", + ) + + s = r.Replace(s) + s = strings.TrimSpace(s) + return s +} + func withMarkdownLinks(s string) string { re := regexp.MustCompile(linkPattern) diff --git a/utils/cobrautil/templates/yaml_flag_printer.go b/utils/cobrautil/templates/yaml_flag_printer.go index 5222ad2b..c2ca9043 100644 --- a/utils/cobrautil/templates/yaml_flag_printer.go +++ b/utils/cobrautil/templates/yaml_flag_printer.go @@ -30,16 +30,8 @@ func NewYamlFlagPrinter(out io.Writer, wrapLimit uint) *YamlFlagPrinter { func (p *YamlFlagPrinter) PrintHelpFlag(f *pflag.Flag) { name, usage := flagNameAndUsage(f) - usage = strings.ReplaceAll(usage, "
", "\n") - usage = strings.ReplaceAll(usage, "", "\n\n") - usage = strings.ReplaceAll(usage, "", "") - usage = strings.ReplaceAll(usage, "", "") - usage = strings.ReplaceAll(usage, "", "\"") - usage = strings.ReplaceAll(usage, "", "\"") + usage = p.replaceHTML(usage) usage = withLinks(usage) - usage = strings.TrimSpace(usage) fmt.Fprintf(p.out, "# %s%s\n#\n", f.Name, name) for _, l := range strings.Split(wordwrap.WrapString(usage, p.wrapLimit-2), "\n") { @@ -51,6 +43,23 @@ func (p *YamlFlagPrinter) PrintHelpFlag(f *pflag.Flag) { fmt.Fprintf(p.out, "#%s: %s\n\n", f.Name, p.defaultValue(f)) } +func (p *YamlFlagPrinter) replaceHTML(s string) string { + r := strings.NewReplacer( + "
", "\n", + "", "\n\n", + "", "", + "", "", + "", "\"", + "", "\"", + ) + + s = r.Replace(s) + s = strings.TrimSpace(s) + return s +} + func (p *YamlFlagPrinter) defaultValue(f *pflag.Flag) string { def := f.DefValue if def == "[]" {