aboutsummaryrefslogtreecommitdiffstats
path: root/cli
diff options
context:
space:
mode:
authorPetter Rasmussen2016-01-23 15:16:53 +0100
committerPetter Rasmussen2016-01-23 15:16:53 +0100
commit6b3da5bcd3891cb6f084a755aea966d7c23f811a (patch)
tree75ac52d08f51fc8d3794fcb4b6e3f8e04fa29a21 /cli
parentef9d5e6b127e055cac1fd733d49304dd28780ccd (diff)
downloadgdrive-6b3da5bcd3891cb6f084a755aea966d7c23f811a.tar.bz2
Move things around, support subcommand help
Diffstat (limited to 'cli')
-rw-r--r--cli/context.go4
-rw-r--r--cli/handler.go52
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
-}