1 # -*- coding: iso-8859-1 -*- 2 """ 3 MoinMoin - calendar (EventAggregator) 4 5 @copyright: 2012, 2013, 2014 by Paul Boddie <paul@boddie.org.uk> 6 @license: GNU GPL (v2 or later), see COPYING.txt for details. 7 """ 8 9 from MoinSupport import parseAttributes, RawParser 10 from EventAggregatorSupport.Formatting import formatEventsForOutputType, \ 11 formatEvent 12 from EventAggregatorSupport.Types import parseEventsInPage, EventPage, \ 13 parseEventsInCalendar 14 15 Dependencies = ["pages"] 16 17 # Parser support. 18 19 class Parser: 20 21 "Interpret and show calendar information in different ways." 22 23 Dependencies = Dependencies 24 extensions = [".ics"] 25 26 # Input content types understood by this parser. 27 28 input_mimetypes = ["text/calendar"] 29 30 # Output content types preferred by this parser. 31 32 output_mimetypes = ["text/html", "text/calendar"] 33 34 def __init__(self, raw, request, **kw): 35 36 """ 37 Initialise the parser with the given 'raw' data, 'request' and any 38 keyword arguments that may have been supplied. 39 """ 40 41 self.raw = raw 42 self.request = request 43 attrs = parseAttributes(kw.get("format_args", ""), False) 44 45 self.fragment = attrs.get("fragment") 46 47 def format(self, fmt, write=None): 48 49 """ 50 Format a calendar using the given formatter 'fmt'. If the 'write' 51 parameter is specified, use it to write output; otherwise, write output 52 using the request. 53 """ 54 55 for event in parseEventsInCalendar(self.raw): 56 formatEvent(event, self.request, fmt, write=write, parser_cls=RawParser) 57 58 # Extra API methods. 59 60 def formatForOutputType(self, mimetype, write=None): 61 62 """ 63 Format a calendar for the given 'mimetype'. If the 'write' parameter is 64 specified, use it to write output; otherwise, write output using the 65 request. 66 """ 67 68 # Write raw calendar information unchanged. 69 70 if mimetype == "text/calendar": 71 (write or request.write)(self.raw) 72 else: 73 events = parseEventsInCalendar(self.raw) 74 formatEventsForOutputType(events, self.request, mimetype, write=write) 75 76 # Class methods. 77 78 def getOutputTypes(self): 79 return self.output_mimetypes 80 81 getOutputTypes = classmethod(getOutputTypes) 82 83 # vim: tabstop=4 expandtab shiftwidth=4