# HG changeset patch # User Paul Boddie # Date 1341960415 -7200 # Node ID fb12a408f28b6fde88a1be69a652a482ff1dbc5b # Parent 721a3ef14d202dcd4bc7bdd50408a33d2b0c3446 Added a parser and elementary event region/section support. Made use of the MoinSupport library's formatText function. diff -r 721a3ef14d20 -r fb12a408f28b EventAggregatorSupport.py --- a/EventAggregatorSupport.py Tue Jul 10 23:55:53 2012 +0200 +++ b/EventAggregatorSupport.py Wed Jul 11 00:46:55 2012 +0200 @@ -772,14 +772,8 @@ fmt.page = page = self.page request = page.request - # Suppress line anchors. - parser_cls = self.getParserClass(self.getFormat()) - parser = parser_cls(text, request, line_anchors=False) - - # Fix lists by indicating that a paragraph is already started. - - return redirectedOutput(request, parser, fmt, inhibit_p=True) + return formatText(text, request, fmt, parser_cls) # Event details. @@ -3419,6 +3413,30 @@ # Event-only formatting. +def formatEvent(event, request, fmt): + + "Format the given 'event' using the 'request' and formatter 'fmt'." + + event_details = event.getDetails() + write = request.write + + write(fmt.definition_list(on=1)) + + for term in ("title", "summary", "start", "end", "description", "link", + "location", "geo", "topics", "categories"): + + if event_details.has_key(term): + value = event_details[term] + if value: + write(fmt.definition_term(on=1)) + write(fmt.text(term)) + write(fmt.definition_term(on=0)) + write(fmt.definition_desc(on=1)) + write(formatText(str(value), request, fmt)) + write(fmt.definition_desc(on=0)) + + write(fmt.definition_list(on=0)) + def formatEventsForOutputType(events, request, mimetype, parent=None, descriptions=None, latest_timestamp=None): """ diff -r 721a3ef14d20 -r fb12a408f28b parsers/event.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/parsers/event.py Wed Jul 11 00:46:55 2012 +0200 @@ -0,0 +1,62 @@ +# -*- coding: iso-8859-1 -*- +""" + MoinMoin - event (EventAggregator) + + @copyright: 2012 by Paul Boddie + @license: GNU GPL (v2 or later), see COPYING.txt for details. +""" + +from EventAggregatorSupport import * + +Dependencies = ["pages"] + +# Parser support. + +class Parser: + + "Interpret and show event information in different ways." + + Dependencies = Dependencies + extensions = [] + + # Output content types preferred by this parser. + + output_mimetypes = ["text/html", "text/calendar"] + + def __init__(self, raw, request, **kw): + + """ + Initialise the parser with the given 'raw' data, 'request' and any + keyword arguments that may have been supplied. + """ + + self.raw = raw + self.request = request + #self.attrs = parseAttributes(kw.get("format_args", ""), False) + + def format(self, fmt): + + "Format an event using the given formatter 'fmt'." + + events = parseEvents(self.raw, self.request.page) + + for event in events: + formatEvent(event, self.request, fmt) + + # Extra API methods. + + def formatText(self, text, mimetype): + + "Format the event 'text' for the given 'mimetype'." + + events = parseEvents(text) + formatEventsForOutputType(events, self.request, mimetype) + + # Class methods. + + def getOutputTypes(self): + return self.output_mimetypes + + getOutputTypes = classmethod(getOutputTypes) + +# vim: tabstop=4 expandtab shiftwidth=4