aboutsummaryrefslogtreecommitdiff
path: root/places.peg
blob: dbde5e7dad2c849a18d350a0ebf86eab84dcf826 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
file <- {| (place / ws? comment? %nl)* |} {.+}?
place <- {|
    {:name: {word (ws word)*} :}
    ws? ("(" ws? {:tags: {| {tag} (ws? "," ws? {tag})* ws? |} :} ")")? ws? ":"
    ({:times: {|
        ((ws? comment? %nl)+ (%tab / " "^+2) ws? {| days ws? ("closed" / {:open: time :} "-" {:close: time :}) |})+
    |} :})
|}

comment <- "#" [^%nl]*

days <-
    ({:from: {word} :} "-" {:to: {word} :} ":")
   /({:from: {word} :} ":")
   /({:from:''->'sun':} {:to:''->'sat':})

time <- {|
    {:hour: {[0-9]+} :} (":" {:minute: {[0-9]+} :})? {:ampm: { "am" / "pm"} :}
    / ("noon" {:hour: {~''->'12'~} :} {:ampm: {~''->'pm'~} :})
    / ("midnight" {:hour: {~''->'12'~} :} {:ampm: {~''->'am'~} :})
|}
tag <- word (" "+ word)*
word <- [^%nl%tab (),:#0-9-]+
ws <- [ %tab]+