import docopt, os, nre, sequtils, strutils, times, timeutils type ParseState = enum BeforeHeading, ReadingPlans, AfterPlans type PlanItem* = tuple[time: TimeInfo, note: string] proc parseDailyPlan(filename: string): seq[PlanItem] = var planItems: seq[PlanItem] = @[] var parseState = BeforeHeading let planItemRe = re"\s*(\d{4})\s+(.*)" let timeFmt = "HHmm" for line in lines filename: case parseState of BeforeHeading: if line.strip.startsWith("# Timeline"): parseState = ReadingPlans of ReadingPlans: let match = line.find(planItemRe) if match.isSome(): planItems.add(( time: parse(match.get().captures[0], timeFmt), note: match.get().captures[1])) else: parseState = AfterPlans of AfterPlans: break else: break return planItems when isMainModule: let doc = """ Usage: daily_notifier [options] Options: -d --plan-directory