diff options
Diffstat (limited to 'command.go')
| -rw-r--r-- | command.go | 79 |
1 files changed, 76 insertions, 3 deletions
@@ -73,6 +73,14 @@ func ParseCommand(line string) (*Command, error) { } } + case 'i': + if strings.HasPrefix("identity", cmd) { + args, err := parseIdentityArgs(rest) + if err != nil { + return nil, err + } + return &Command{Name: "identity", Args: args}, nil + } case 'n': if strings.HasPrefix("next", cmd) { return &Command{Name: "next"}, nil @@ -157,11 +165,11 @@ func ParseCommand(line string) (*Command, error) { } func parseMarkArgs(line string) ([]string, error) { - if line == "" { - return nil, ErrInvalidArgs + fields := strings.Fields(line) + if len(fields) == 0 { + return []string{"list"}, nil } - fields := strings.Fields(line) switch fields[0][0] { case 'a': if strings.HasPrefix("add", fields[0]) { @@ -291,6 +299,69 @@ func parseTourArgs(line string) ([]string, error) { return append([]string{"add"}, fields...), nil } +func parseIdentityArgs(line string) ([]string, error) { + fields := strings.Fields(line) + if len(fields) == 0 { + return []string{"list"}, nil + } + + switch fields[0][0] { + case 'c': + if strings.HasPrefix("create", fields[0]) { + fields[0] = "create" + if len(fields) != 2 { + return nil, ErrInvalidArgs + } + return fields, nil + } + case 'l': + if strings.HasPrefix("list", fields[0]) { + if len(fields) != 1 { + return nil, ErrInvalidArgs + } + return []string{"list"}, nil + } + case 'd': + if strings.HasPrefix("delete", fields[0]) { + fields[0] = "delete" + if len(fields) != 2 { + return nil, ErrInvalidArgs + } + return fields, nil + } + case 'u': + if strings.HasPrefix("use", fields[0]) { + fields[0] = "use" + if len(fields) != 4 { + return nil, ErrInvalidArgs + } + switch fields[2][0] { + case 'd': + if !strings.HasPrefix("domain", fields[2]) { + return nil, ErrInvalidArgs + } + fields[2] = "domain" + case 'f': + if !strings.HasPrefix("folder", fields[2]) { + return nil, ErrInvalidArgs + } + fields[2] = "folder" + case 'p': + if !strings.HasPrefix("page", fields[2]) { + return nil, ErrInvalidArgs + } + fields[2] = "page" + default: + return nil, ErrInvalidArgs + } + + return fields, nil + } + } + + return nil, ErrInvalidArgs +} + func RunCommand(conf *Config, cmd *Command, state *BrowserState) error { switch cmd.Name { case "about": @@ -337,6 +408,8 @@ func RunCommand(conf *Config, cmd *Command, state *BrowserState) error { return Mark(state, cmd.Args, conf) case "tour": return TourCmd(state, cmd.Args, conf) + case "identity": + return IdentityCmd(state, cmd.Args) case "quit": os.Exit(0) } |
