aboutsummaryrefslogtreecommitdiffstats
path: root/parser.go
diff options
context:
space:
mode:
authorGrant Ammons <gammons@gmail.com>2016-04-24 08:22:24 -0400
committerGrant Ammons <gammons@gmail.com>2016-04-24 08:22:24 -0400
commit44dd550fdd7e71c1f0edfe3f77a8b9fafab967e8 (patch)
tree8222cbbd0accad5f55cfa9de9d0408036e2b3e3a /parser.go
parent8138ffaf380fb646b6877dd20f874735eddd2d6d (diff)
Beginning on working on due date stuff
Diffstat (limited to 'parser.go')
-rw-r--r--parser.go56
1 files changed, 53 insertions, 3 deletions
diff --git a/parser.go b/parser.go
index bb54b97..a9a2d24 100644
--- a/parser.go
+++ b/parser.go
@@ -4,6 +4,9 @@ import (
"fmt"
"regexp"
"strings"
+ "time"
+
+ "github.com/jinzhu/now"
)
type Parser struct{}
@@ -12,6 +15,10 @@ func (p *Parser) Parse(input string) *Todo {
todo := NewTodo()
todo.Subject = p.Subject(input)
todo.Projects = p.Projects(input)
+ todo.Contexts = p.Contexts(input)
+ if p.hasDue(input) {
+ todo.Due = p.Due(input)
+ }
return todo
}
@@ -25,15 +32,58 @@ func (p *Parser) Subject(input string) string {
}
func (p *Parser) Projects(input string) []string {
- r, err := regexp.Compile(`\+\w+`)
+ r, _ := regexp.Compile(`\+\w+`)
+ return p.matchWords(input, r)
+}
+
+func (p *Parser) Contexts(input string) []string {
+ r, err := regexp.Compile(`\@\w+`)
if err != nil {
- fmt.Printf("There was a problem with the regexp", err)
+ fmt.Println("regex error", err)
+ }
+ return p.matchWords(input, r)
+}
+
+func (p *Parser) hasDue(input string) bool {
+ r, _ := regexp.Compile(`due \w+$`)
+ return r.MatchString(input)
+}
+
+func (p *Parser) Due(input string) time.Time {
+ r, _ := regexp.Compile(`due .*$`)
+
+ res := r.FindString(input)
+ res = res[4:len(res)]
+ switch {
+ case res == "today":
+ return now.BeginningOfDay()
+ case res == "tomorrow" || res == "tom":
+ return now.BeginningOfDay().AddDate(0, 0, 1)
+ case res == "monday" || res == "mon":
+ n := now.BeginningOfDay()
+ return now.New(n).Monday().AddDate(0, 0, 7)
+ case res == "tuesday" || res == "tue":
+ n := now.BeginningOfDay()
+ return now.New(n).Tuesday().AddDate(0, 0, 7)
+ case res == "wednesday" || res == "wed":
+ n := now.BeginningOfDay()
+ return now.New(n).Wednesday().AddDate(0, 0, 7)
+ case res == "wednesday" || res == "wed":
+ n := now.BeginningOfDay()
+ return now.New(n).Wednesday().AddDate(0, 0, 7)
+ case res == "next week":
+ n := now.BeginningOfDay()
+ return now.New(n).Monday().AddDate(0, 0, 7)
}
+ //return now.Parse(input)
+ return time.Now()
+}
+
+func (p *Parser) matchWords(input string, r *regexp.Regexp) []string {
results := r.FindAllString(input, -1)
ret := []string{}
for _, val := range results {
- fmt.Println("Result is ", val)
ret = append(ret, val[1:len(val)])
}
return ret