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