diff options
Diffstat (limited to 'todolist/parser.go')
| -rw-r--r-- | todolist/parser.go | 91 |
1 files changed, 50 insertions, 41 deletions
diff --git a/todolist/parser.go b/todolist/parser.go index 8f5e180..6ad8007 100644 --- a/todolist/parser.go +++ b/todolist/parser.go @@ -83,57 +83,66 @@ func (p *Parser) Contexts(input string) []string { return p.matchWords(input, r) } -func (p *Parser) ParseNotes(todo *Todo, input string) string { - r, _ := regexp.Compile(`(\w+) \d+\s*(.*)?`) +func (p *Parser) ParseAddNote(todo *Todo, input string) bool { + r, _ := regexp.Compile(`^an\s+\d+\s+(.*)`) matches := r.FindStringSubmatch(input) - switch matches[1] { - case "an": - todo.Notes = append(todo.Notes, matches[2]) - return "add" + if len(matches) != 2 { + return false + } - case "n": - groups := map[string][]*Todo{} - groups[""] = append(groups[""], todo) - formatter := NewFormatter(&GroupedTodos{Groups: groups}) - formatter.Print(true) - return "list" + todo.Notes = append(todo.Notes, matches[1]) + return true +} - case "dn": - rmid, err := p.getNoteID(matches[2]) - if err != nil { - return "" - } +func (p *Parser) ParseDeleteNote(todo *Todo, input string) bool { + r, _ := regexp.Compile(`^dn\s+\d+\s+(\d+)`) + matches := r.FindStringSubmatch(input) + if len(matches) != 2 { + return false + } - for id, _ := range todo.Notes { - if id == rmid { - todo.Notes = append(todo.Notes[:rmid], todo.Notes[rmid+1:]...) - return "delete" - } - } - fmt.Println("Could not found note id") - return "" + rmid, err := p.getNoteID(matches[1]) + if err != nil { + return false + } - case "en": - r1, _ := regexp.Compile(`(\d)+\s+(.*)?`) - tail := r1.FindStringSubmatch(matches[2]) - edid, err := p.getNoteID(tail[1]) - if err != nil { - return "" + for id, _ := range todo.Notes { + if id == rmid { + todo.Notes = append(todo.Notes[:rmid], todo.Notes[rmid+1:]...) + return true } + } + return false +} - for id, _ := range todo.Notes { - if id == edid { - todo.Notes[id] = tail[2] - return "edit" - } - } +func (p *Parser) ParseEditNote(todo *Todo, input string) bool { + r, _ := regexp.Compile(`^en\s+\d+\s+(\d+)\s+(.*)`) + matches := r.FindStringSubmatch(input) + if len(matches) != 3 { + return false + } - fmt.Println("Could not found note id") - return "" + edid, err := p.getNoteID(matches[1]) + if err != nil { + return false } - fmt.Println("Could not match command or id") - return "" + for id, _ := range todo.Notes { + if id == edid { + todo.Notes[id] = matches[2] + return true + } + } + return false +} + +func (p *Parser) ParseShowNote(todo *Todo, input string) bool { + r, _ := regexp.Compile(`^n\s+\d+`) + matches := r.FindStringSubmatch(input) + if len(matches) != 1 { + return false + } + return true } func (p *Parser) getNoteID(input string) (int, error) { |
