diff options
| author | Petter Rasmussen | 2016-01-23 15:16:53 +0100 | 
|---|---|---|
| committer | Petter Rasmussen | 2016-01-23 15:16:53 +0100 | 
| commit | 6b3da5bcd3891cb6f084a755aea966d7c23f811a (patch) | |
| tree | 75ac52d08f51fc8d3794fcb4b6e3f8e04fa29a21 /cli/handler.go | |
| parent | ef9d5e6b127e055cac1fd733d49304dd28780ccd (diff) | |
| download | gdrive-6b3da5bcd3891cb6f084a755aea966d7c23f811a.tar.bz2 | |
Move things around, support subcommand help
Diffstat (limited to 'cli/handler.go')
| -rw-r--r-- | cli/handler.go | 52 | 
1 files changed, 13 insertions, 39 deletions
| diff --git a/cli/handler.go b/cli/handler.go index 5cd13f8..a4aafef 100644 --- a/cli/handler.go +++ b/cli/handler.go @@ -20,7 +20,7 @@ type Handler struct {  func (self *Handler) getParser() Parser {      var parsers []Parser -    for _, pattern := range splitPattern(self.Pattern) { +    for _, pattern := range self.SplitPattern() {          if isOptional(pattern) {              name := optionalName(pattern)              parser := getFlagParser(self.Flags[name]) @@ -35,6 +35,18 @@ func (self *Handler) getParser() Parser {      return CompleteParser{parsers}  } +// Split on spaces but ignore spaces inside <...> and [...] +func (self *Handler) SplitPattern() []string { +    re := regexp.MustCompile(`(<[^>]+>|\[[^\]]+]|\S+)`) +    matches := []string{} + +    for _, value := range re.FindAllStringSubmatch(self.Pattern, -1) { +        matches = append(matches, value[1]) +    } + +    return matches +} +  func SetHandlers(h []*Handler) {      handlers = h  } @@ -74,32 +86,6 @@ func Handle(args []string) bool {      return true  } -func filterHandlers(handlers []*Handler, prefix string) []*Handler { -    matches := []*Handler{} - -    for _, h := range handlers { -        pattern := strings.Join(stripOptionals(splitPattern(h.Pattern)), " ") -        if strings.HasPrefix(pattern, prefix) { -            matches = append(matches, h) -        } -    } - -    return matches -} - - -// Split on spaces but ignore spaces inside <...> and [...] -func splitPattern(pattern string) []string { -    re := regexp.MustCompile(`(<[^>]+>|\[[^\]]+]|\S+)`) -    matches := []string{} - -    for _, value := range re.FindAllStringSubmatch(pattern, -1) { -        matches = append(matches, value[1])  -    } - -    return matches -} -  func isCaptureGroup(arg string) bool {      return strings.HasPrefix(arg, "<") && strings.HasSuffix(arg, ">")  } @@ -111,15 +97,3 @@ func isOptional(arg string) bool {  func optionalName(s string) string {      return s[1:len(s) - 1]  } - -// Strip optional groups from pattern -func stripOptionals(pattern []string) []string { -    newArgs := []string{} - -    for _, arg := range pattern { -        if !isOptional(arg) { -            newArgs = append(newArgs, arg) -        } -    } -    return newArgs -} | 
