1// +build !windows forceposix 2 3package flags 4 5import ( 6 "strings" 7) 8 9const ( 10 defaultShortOptDelimiter = '-' 11 defaultLongOptDelimiter = "--" 12 defaultNameArgDelimiter = '=' 13) 14 15func argumentStartsOption(arg string) bool { 16 return len(arg) > 0 && arg[0] == '-' 17} 18 19func argumentIsOption(arg string) bool { 20 if len(arg) > 1 && arg[0] == '-' && arg[1] != '-' { 21 return true 22 } 23 24 if len(arg) > 2 && arg[0] == '-' && arg[1] == '-' && arg[2] != '-' { 25 return true 26 } 27 28 return false 29} 30 31// stripOptionPrefix returns the option without the prefix and whether or 32// not the option is a long option or not. 33func stripOptionPrefix(optname string) (prefix string, name string, islong bool) { 34 if strings.HasPrefix(optname, "--") { 35 return "--", optname[2:], true 36 } else if strings.HasPrefix(optname, "-") { 37 return "-", optname[1:], false 38 } 39 40 return "", optname, false 41} 42 43// splitOption attempts to split the passed option into a name and an argument. 44// When there is no argument specified, nil will be returned for it. 45func splitOption(prefix string, option string, islong bool) (string, string, *string) { 46 pos := strings.Index(option, "=") 47 48 if (islong && pos >= 0) || (!islong && pos == 1) { 49 rest := option[pos+1:] 50 return option[:pos], "=", &rest 51 } 52 53 return option, "", nil 54} 55 56// addHelpGroup adds a new group that contains default help parameters. 57func (c *Command) addHelpGroup(showHelp func() error) *Group { 58 var help struct { 59 ShowHelp func() error `short:"h" long:"help" description:"Show this help message"` 60 } 61 62 help.ShowHelp = showHelp 63 ret, _ := c.AddGroup("Help Options", "", &help) 64 ret.isBuiltinHelp = true 65 66 return ret 67} 68