1 # -*- coding: iso-8859-1 -*- 2 """ 3 MoinMoin - event (EventAggregator) 4 5 @copyright: 2012, 2013 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 10 from EventAggregatorSupport.Formatting import formatEvent, formatEventsForOutputType 11 from EventAggregatorSupport.Types import parseEvents, EventPage 12 13 Dependencies = ["pages"] 14 15 # Parser support. 16 17 class Parser: 18 19 "Interpret and show event information in different ways." 20 21 Dependencies = Dependencies 22 extensions = [] 23 24 # Output content types preferred by this parser. 25 26 output_mimetypes = ["text/html", "text/calendar"] 27 28 def __init__(self, raw, request, **kw): 29 30 """ 31 Initialise the parser with the given 'raw' data, 'request' and any 32 keyword arguments that may have been supplied. 33 """ 34 35 self.raw = raw 36 self.request = request 37 attrs = parseAttributes(kw.get("format_args", ""), False) 38 39 self.fragment = attrs.get("fragment") 40 41 def format(self, fmt, write=None): 42 43 """ 44 Format an event using the given formatter 'fmt'. If the 'write' 45 parameter is specified, use it to write output; otherwise, write output 46 using the request. 47 """ 48 49 events = parseEvents(self.raw, EventPage(self.request.page), self.fragment) 50 51 for event in events: 52 formatEvent(event, self.request, fmt, write=write) 53 54 # Extra API methods. 55 56 def formatForOutputType(self, mimetype, write=None): 57 58 """ 59 Format an event for the given 'mimetype'. If the 'write' parameter is 60 specified, use it to write output; otherwise, write output using the 61 request. 62 """ 63 64 events = parseEvents(self.raw, EventPage(self.request.page), self.fragment) 65 formatEventsForOutputType(events, self.request, mimetype, write=write) 66 67 # Class methods. 68 69 def getOutputTypes(self): 70 return self.output_mimetypes 71 72 getOutputTypes = classmethod(getOutputTypes) 73 74 # vim: tabstop=4 expandtab shiftwidth=4