diff options
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/context.go | 4 | ||||
| -rw-r--r-- | cli/handler.go | 52 | 
2 files changed, 13 insertions, 43 deletions
| diff --git a/cli/context.go b/cli/context.go index c109281..ce82b17 100644 --- a/cli/context.go +++ b/cli/context.go @@ -14,10 +14,6 @@ func (self Context) Handlers() []*Handler {      return self.handlers  } -func (self Context) FilterHandlers(prefix string) []*Handler { -    return filterHandlers(self.handlers, prefix) -} -  type Arguments map[string]interface{}  func (self Arguments) String(key string) string { 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 -} | 
