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 parseEventsInPage, 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 for event in parseEventsInPage(self.raw, EventPage(self.request.page), self.fragment).getEvents(): 50 formatEvent(event, self.request, fmt, write=write) 51 52 # Extra API methods. 53 54 def formatForOutputType(self, mimetype, write=None): 55 56 """ 57 Format an event for the given 'mimetype'. If the 'write' parameter is 58 specified, use it to write output; otherwise, write output using the 59 request. 60 """ 61 62 events = parseEventsInPage(self.raw, EventPage(self.request.page), self.fragment).getEvents() 63 formatEventsForOutputType(events, self.request, mimetype, write=write) 64 65 # Class methods. 66 67 def getOutputTypes(self): 68 return self.output_mimetypes 69 70 getOutputTypes = classmethod(getOutputTypes) 71 72 # vim: tabstop=4 expandtab shiftwidth=4