123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package flagsets
- import (
- "bytes"
- "fmt"
- "github.com/spf13/pflag"
- "io"
- "strings"
- )
- // NamedFlagSets 自定义的选项集合
- type NamedFlagSets struct {
- Order []string
- FlagSets map[string]*pflag.FlagSet
- }
- func (nfs *NamedFlagSets) FlagSet(name string) *pflag.FlagSet {
- if nfs.FlagSets == nil {
- nfs.FlagSets = make(map[string]*pflag.FlagSet)
- }
- if nfs.Order == nil {
- nfs.Order = make([]string, 0)
- }
- if _, ok := nfs.FlagSets[name]; !ok {
- nfs.FlagSets[name] = pflag.NewFlagSet(name, pflag.ExitOnError)
- nfs.Order = append(nfs.Order, name)
- }
- return nfs.FlagSets[name]
- }
- func PrintSections(w io.Writer, fss NamedFlagSets, cols int) {
- for _, name := range fss.Order {
- fs := fss.FlagSets[name]
- if !fs.HasFlags() {
- continue
- }
- wideFS := pflag.NewFlagSet("", pflag.ExitOnError)
- wideFS.AddFlagSet(fs)
- var zzz string
- if cols > 24 {
- zzz = strings.Repeat("z", cols-24)
- wideFS.Int(zzz, 0, strings.Repeat("z", cols-24))
- }
- var buf bytes.Buffer
- fmt.Fprintf(&buf, "\n%s flags:\n\n%s", strings.ToUpper(name[:1])+name[1:], wideFS.FlagUsagesWrapped(cols))
- if cols > 24 {
- i := strings.Index(buf.String(), zzz)
- lines := strings.Split(buf.String()[:i], "\n")
- fmt.Fprint(w, strings.Join(lines[:len(lines)-1], "\n"))
- fmt.Fprintln(w)
- } else {
- fmt.Fprint(w, buf.String())
- }
- }
- }
|