diff options
Diffstat (limited to 'examples/mozillaCalendarParser.py')
-rw-r--r-- | examples/mozillaCalendarParser.py | 92 |
1 files changed, 53 insertions, 39 deletions
diff --git a/examples/mozillaCalendarParser.py b/examples/mozillaCalendarParser.py index 2633eb8..5000cfe 100644 --- a/examples/mozillaCalendarParser.py +++ b/examples/mozillaCalendarParser.py @@ -1,4 +1,13 @@ -from pyparsing import Optional, oneOf, Literal, Word, printables, Group, OneOrMore, ZeroOrMore +from pyparsing import ( + Optional, + oneOf, + Literal, + Word, + printables, + Group, + OneOrMore, + ZeroOrMore, +) """ A simple parser for calendar (*.ics) files, @@ -14,68 +23,73 @@ License: Free for any use # TERMINALS -BEGIN = Literal("BEGIN:").suppress() -END = Literal("END:").suppress() -valstr = printables + "\xe4\xf6\xe5\xd6\xc4\xc5 " +BEGIN = Literal("BEGIN:").suppress() +END = Literal("END:").suppress() +valstr = printables + "\xe4\xf6\xe5\xd6\xc4\xc5 " -EQ = Literal("=").suppress() -SEMI = Literal(";").suppress() -COLON = Literal(":").suppress() +EQ = Literal("=").suppress() +SEMI = Literal(";").suppress() +COLON = Literal(":").suppress() -EVENT = Literal("VEVENT").suppress() -CALENDAR = Literal("VCALENDAR").suppress() -ALARM = Literal("VALARM").suppress() +EVENT = Literal("VEVENT").suppress() +CALENDAR = Literal("VCALENDAR").suppress() +ALARM = Literal("VALARM").suppress() # TOKENS -CALPROP = oneOf("VERSION PRODID METHOD") -ALMPROP = oneOf("TRIGGER") -EVTPROP = oneOf("X-MOZILLA-RECUR-DEFAULT-INTERVAL \ +CALPROP = oneOf("VERSION PRODID METHOD") +ALMPROP = oneOf("TRIGGER") +EVTPROP = oneOf( + "X-MOZILLA-RECUR-DEFAULT-INTERVAL \ X-MOZILLA-RECUR-DEFAULT-UNITS \ - UID DTSTAMP LAST-MODIFIED X RRULE EXDATE") + UID DTSTAMP LAST-MODIFIED X RRULE EXDATE" +) -propval = Word(valstr) -typeval = Word(valstr) -typename = oneOf("VALUE MEMBER FREQ UNTIL INTERVAL") +propval = Word(valstr) +typeval = Word(valstr) +typename = oneOf("VALUE MEMBER FREQ UNTIL INTERVAL") proptype = Group(SEMI + typename + EQ + typeval).suppress() calprop = Group(CALPROP + ZeroOrMore(proptype) + COLON + propval) almprop = Group(ALMPROP + ZeroOrMore(proptype) + COLON + propval) -evtprop = Group(EVTPROP + ZeroOrMore(proptype) + COLON + propval).suppress() \ - | "CATEGORIES" + COLON + propval.setResultsName("categories") \ - | "CLASS" + COLON + propval.setResultsName("class") \ - | "DESCRIPTION" + COLON + propval.setResultsName("description") \ - | "DTSTART" + proptype + COLON + propval.setResultsName("begin") \ - | "DTEND" + proptype + COLON + propval.setResultsName("end") \ - | "LOCATION" + COLON + propval.setResultsName("location") \ - | "PRIORITY" + COLON + propval.setResultsName("priority") \ - | "STATUS" + COLON + propval.setResultsName("status") \ - | "SUMMARY" + COLON + propval.setResultsName("summary") \ - | "URL" + COLON + propval.setResultsName("url") \ - +evtprop = ( + Group(EVTPROP + ZeroOrMore(proptype) + COLON + propval).suppress() + | "CATEGORIES" + COLON + propval.setResultsName("categories") + | "CLASS" + COLON + propval.setResultsName("class") + | "DESCRIPTION" + COLON + propval.setResultsName("description") + | "DTSTART" + proptype + COLON + propval.setResultsName("begin") + | "DTEND" + proptype + COLON + propval.setResultsName("end") + | "LOCATION" + COLON + propval.setResultsName("location") + | "PRIORITY" + COLON + propval.setResultsName("priority") + | "STATUS" + COLON + propval.setResultsName("status") + | "SUMMARY" + COLON + propval.setResultsName("summary") + | "URL" + COLON + propval.setResultsName("url") +) calprops = Group(OneOrMore(calprop)).suppress() evtprops = Group(OneOrMore(evtprop)) almprops = Group(OneOrMore(almprop)).suppress() -alarm = BEGIN + ALARM + almprops + END + ALARM -event = BEGIN + EVENT + evtprops + Optional(alarm) + END + EVENT -events = Group(OneOrMore(event)) -calendar = BEGIN + CALENDAR + calprops + ZeroOrMore(event) + END + CALENDAR -calendars = OneOrMore(calendar) +alarm = BEGIN + ALARM + almprops + END + ALARM +event = BEGIN + EVENT + evtprops + Optional(alarm) + END + EVENT +events = Group(OneOrMore(event)) +calendar = BEGIN + CALENDAR + calprops + ZeroOrMore(event) + END + CALENDAR +calendars = OneOrMore(calendar) # PARSE ACTIONS -def gotEvent(s,loc,toks): - for event in toks: - print(event.dump()) + +def gotEvent(s, loc, toks): + for event in toks: + print(event.dump()) + event.setParseAction(gotEvent) # MAIN PROGRAM -if __name__=="__main__": +if __name__ == "__main__": - calendars.parseFile("mozilla.ics") + calendars.parseFile("mozilla.ics") |