WHITESPACE = _{ WHITE_SPACE }
completed = { "x" }
priority = { "(" ~ priority_char ~ ")" }
priority_char = { ASCII_ALPHA }
date = @{ ASCII_DIGIT{4} ~ "-" ~ ASCII_DIGIT{2} ~ "-" ~ ASCII_DIGIT{2} }
word = @{ (!WHITE_SPACE ~ ANY)+ }
context = @{ "@" ~ word+ }
project = @{ "+" ~ word+ }
threshold_date = ${ "t:" ~ date }
due_date = ${ "due:" ~ date }
hidden = ${ "h:" ~ bool_01 }
bool_01 = { "0" | "1" }
token = { context | project | threshold_date | due_date | hidden | word }
todo = { todo_completed_simpletask | todo_txt }
// https://github.com/todotxt/todo.txt#rule-2-the-date-of-completion-appears-directly-after-the-x-separated-by-a-space
// what simpletask does, kind of
// a.k.a. simpletask-style
todo_completed_simpletask = { completed ~ completion_date ~ opt_priority ~ opt_creation_date ~ token* }
completion_date = { date }
opt_creation_date = { creation_date? }
// https://github.com/todotxt/todo.txt#todotxt-format-rules
// what todo-hs does
// a.k.a. todo_txt-style
todo_txt = { opt_completed ~ opt_priority ~ opt_date ~ opt_date ~ token* }
opt_priority = { priority? }
creation_date = { date }
opt_completed = { completed? }
opt_date = { date? }