Skip to content

Commit eecf707

Browse files
committed
Refactor plan parser
1 parent 4857413 commit eecf707

1 file changed

Lines changed: 36 additions & 26 deletions

File tree

src/plan/parser.janet

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,42 @@
1515
,plan/build-plan)
1616
:title (* "# " :text-line "\n")
1717
:text-line (capture (some (if-not "\n" 1)))
18-
:inbox (* :inbox-title (? "\n") :tasks (? "\n"))
19-
:inbox-title (* "## Inbox" (? "\n"))
20-
:days (group (any :day))
21-
:day (replace (* :day-title (? "\n") :events :tasks (? "\n")) ,day/build-day)
22-
:day-title (* "## " :date ", " :week-day (? "\n"))
23-
:date (replace (capture (* :d :d :d :d "-" :d :d "-" :d :d)) ,d/parse)
24-
:week-day (+ "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" "Sunday")
25-
:events (group (any :event))
26-
:event (replace (* :event-begin :text-line (? "\n")) ,event/build-event)
27-
:event-begin (* "- " (if-not "[" 0))
28-
:tasks (group (any :task))
29-
:task (replace (* (constant :done) :task-begin
30-
" "
31-
(constant :title) (capture (some (if-not (+ "\n" " (missed on") 1)))
32-
(? :task-missed-on-date)
33-
(? "\n")
34-
(constant :body) :task-body
35-
(? "\n"))
36-
,struct)
37-
:task-begin (* "- " :checkbox)
38-
:checkbox (+ :checkbox-done :checkbox-pending)
39-
:checkbox-done (* (+ "[x]" "[X]") (constant true))
40-
:checkbox-pending (* "[ ]" (constant false))
41-
:task-body (group (any :task-body-line))
42-
:task-body-line (* " " :text-line (? "\n"))
43-
:task-missed-on-date (* " (missed on " (constant :missed-on) :date ")")})
18+
:inbox
19+
{:main (* :inbox-title (? "\n") :tasks (? "\n"))
20+
:inbox-title (* "## Inbox" (? "\n"))}
21+
:days
22+
{:main (group (any :day))
23+
:day
24+
{:main (replace (* :day-title (? "\n") :events :tasks (? "\n")) ,day/build-day)
25+
:day-title (* "## " :date ", " :week-day (? "\n"))
26+
:week-day (+ "Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" "Sunday")
27+
:events
28+
{:main (group (any :event))
29+
:event
30+
{:main (replace (* :event-begin :text-line (? "\n")) ,event/build-event)
31+
:event-begin (* "- " (if-not "[" 0))}}}}
32+
:tasks
33+
{:main (group (any :task))
34+
:task
35+
{:main (replace (* (constant :done) :task-begin
36+
" "
37+
(constant :title) (capture (some (if-not (+ "\n" " (missed on") 1)))
38+
(? :task-missed-on-date)
39+
(? "\n")
40+
(constant :body) :task-body
41+
(? "\n"))
42+
,struct)
43+
:task-begin
44+
{:main (* "- " :checkbox)
45+
:checkbox
46+
{:main (+ :checkbox-done :checkbox-pending)
47+
:checkbox-done (* (+ "[x]" "[X]") (constant true))
48+
:checkbox-pending (* "[ ]" (constant false))}}
49+
:task-missed-on-date (* " (missed on " (constant :missed-on) :date ")")
50+
:task-body
51+
{:main (group (any :task-body-line))
52+
:task-body-line (* " " :text-line (? "\n"))}}}
53+
:date (replace (capture (* :d :d :d :d "-" :d :d "-" :d :d)) ,d/parse)})
4454

4555
(defn- lines-count [plan-string &opt options]
4656
(default options {:ignore-whitespace true})

0 commit comments

Comments
 (0)