1.1 --- a/EventAggregatorSupport.py Fri Apr 08 00:42:20 2011 +0200
1.2 +++ b/EventAggregatorSupport.py Sun Apr 10 00:07:27 2011 +0200
1.3 @@ -16,7 +16,6 @@
1.4 import time
1.5 import re
1.6 import bisect
1.7 -import operator
1.8
1.9 try:
1.10 set
1.11 @@ -235,7 +234,7 @@
1.12 else:
1.13 return request.form
1.14
1.15 -class send_headers:
1.16 +class send_headers_cls:
1.17
1.18 """
1.19 A wrapper to preserve MoinMoin 1.8.x (and earlier) request behaviour in a
1.20 @@ -2016,4 +2015,48 @@
1.21 new_event_page.setCategoryMembership(category_pagenames)
1.22 new_event_page.saveChanges()
1.23
1.24 +# Formatting-related functions.
1.25 +
1.26 +def getParserClass(request, format):
1.27 +
1.28 + """
1.29 + Return a parser class using the 'request' for the given 'format', returning
1.30 + a plain text parser if no parser can be found for the specified 'format'.
1.31 + """
1.32 +
1.33 + try:
1.34 + return wikiutil.searchAndImportPlugin(request.cfg, "parser", format or "plain")
1.35 + except wikiutil.PluginMissingError:
1.36 + return wikiutil.searchAndImportPlugin(request.cfg, "parser", "plain")
1.37 +
1.38 +def getFormatter(request, mimetype, page):
1.39 +
1.40 + """
1.41 + Return a formatter using the given 'request' for the given 'mimetype' for
1.42 + use on the indicated 'page'.
1.43 + """
1.44 +
1.45 + try:
1.46 + cls = wikiutil.searchAndImportPlugin(request.cfg, "formatter", mimetype)
1.47 + except wikiutil.PluginMissingError:
1.48 + cls = wikiutil.searchAndImportPlugin(request.cfg, "formatter", "text/plain")
1.49 + fmt = request.formatter = page.formatter = cls(request)
1.50 + fmt.setPage(page)
1.51 + return fmt
1.52 +
1.53 +def formatText(text, request, fmt, parser_cls):
1.54 +
1.55 + """
1.56 + Format the given 'text' using the specified 'request', formatter 'fmt' and
1.57 + parser class 'parser_cls'.
1.58 + """
1.59 +
1.60 + # Suppress line anchors.
1.61 +
1.62 + parser = parser_cls(text, request, line_anchors=False)
1.63 +
1.64 + # Fix lists by indicating that a paragraph is already started.
1.65 +
1.66 + return request.redirectedOutput(parser.format, fmt, inhibit_p=True)
1.67 +
1.68 # vim: tabstop=4 expandtab shiftwidth=4
2.1 --- a/README.txt Fri Apr 08 00:42:20 2011 +0200
2.2 +++ b/README.txt Sun Apr 10 00:07:27 2011 +0200
2.3 @@ -220,12 +220,26 @@
2.4 time zone information for the correct interpretation of time information in
2.5 those summaries. Thus, it is highly recommended that pytz be installed.
2.6
2.7 -New in EventAggregator 0.7 (Changes since EventAggregator 0.6.2)
2.8 +New in EventAggregator 0.7 (Changes since EventAggregator 0.6.4)
2.9 ----------------------------------------------------------------
2.10
2.11 * Added a day view which shows events ordered according to their timespans
2.12 within each day.
2.13 * Switched to using moinsetup for the installation procedure.
2.14 + * Introduced formatting of description, location and topic information in
2.15 + the list and table views and in RSS format summaries.
2.16 +
2.17 +New in EventAggregator 0.6.4 (Changes since EventAggregator 0.6.3)
2.18 +------------------------------------------------------------------
2.19 +
2.20 + * Fixed pop-up element labels where one limit of a calendar has not been
2.21 + specified.
2.22 +
2.23 +New in EventAggregator 0.6.3 (Changes since EventAggregator 0.6.2)
2.24 +------------------------------------------------------------------
2.25 +
2.26 + * Fixed category membership parsing.
2.27 + * Fixed open-ended calendars and their pop-up summaries.
2.28
2.29 New in EventAggregator 0.6.2 (Changes since EventAggregator 0.6.1)
2.30 ------------------------------------------------------------------
3.1 --- a/actions/EventAggregatorSummary.py Fri Apr 08 00:42:20 2011 +0200
3.2 +++ b/actions/EventAggregatorSummary.py Sun Apr 10 00:07:27 2011 +0200
3.3 @@ -280,7 +280,7 @@
3.4 elif hasattr(request, "emit_http_headers"):
3.5 send_headers = request.emit_http_headers
3.6 else:
3.7 - send_headers = send_headers(request)
3.8 + send_headers = send_headers_cls(request)
3.9
3.10 # Define headers.
3.11
3.12 @@ -307,6 +307,9 @@
3.13 event_page = event.getPage()
3.14 event_details = event.getDetails()
3.15
3.16 + # NOTE: A custom formatter making attributes for links and plain
3.17 + # NOTE: text for values could be employed here.
3.18 +
3.19 # Get the summary details.
3.20
3.21 event_summary = event.getSummary(parent)
3.22 @@ -342,7 +345,8 @@
3.23
3.24 if event_details.get("topics") or event_details.get("categories"):
3.25 request.write("CATEGORIES:%s\r\n" % ",".join(
3.26 - [getQuotedText(topic) for topic in event_details.get("topics") or event_details.get("categories")]
3.27 + [getQuotedText(topic)
3.28 + for topic in event_details.get("topics") or event_details.get("categories")]
3.29 ))
3.30 if event_details.has_key("location"):
3.31 request.write("LOCATION:%s\r\n" % getQuotedText(event_details["location"]))
3.32 @@ -381,6 +385,11 @@
3.33 event_page = event.getPage()
3.34 event_details = event.getDetails()
3.35
3.36 + # Get a parser and formatter for the formatting of some attributes.
3.37 +
3.38 + parser_cls = getParserClass(request, event_page.getFormat())
3.39 + fmt = getFormatter(request, "text/html", event_page.page)
3.40 +
3.41 # Get the summary details.
3.42
3.43 event_summary = event.getSummary(parent)
3.44 @@ -398,10 +407,12 @@
3.45 else:
3.46 description = event_details["last-comment"]
3.47
3.48 - request.write('<description>%s</description>\r\n' % wikiutil.escape(description))
3.49 + request.write('<description>%s</description>\r\n' %
3.50 + formatText(description, request, fmt, parser_cls))
3.51
3.52 for topic in event_details.get("topics") or event_details.get("categories") or []:
3.53 - request.write('<category>%s</category>\r\n' % topic)
3.54 + request.write('<category>%s</category>\r\n' %
3.55 + formatText(topic, request, fmt, parser_cls))
3.56
3.57 request.write('<pubDate>%s</pubDate>\r\n' % getHTTPTimeString(event_details["created"]))
3.58 request.write('<guid>%s#%s</guid>\r\n' % (link, event_details["sequence"]))
4.1 --- a/macros/EventAggregator.py Fri Apr 08 00:42:20 2011 +0200
4.2 +++ b/macros/EventAggregator.py Sun Apr 10 00:07:27 2011 +0200
4.3 @@ -1106,6 +1106,8 @@
4.4 page = fmt.page
4.5 _ = request.getText
4.6
4.7 + parser_cls = getParserClass(request, page.pi["format"])
4.8 +
4.9 # Interpret the arguments.
4.10
4.11 try:
4.12 @@ -1264,7 +1266,7 @@
4.13 output.append(fmt.table_cell(on=1, attrs=attrs))
4.14
4.15 if event_details.has_key("location"):
4.16 - output.append(fmt.text(event_details["location"]))
4.17 + output.append(formatText(event_details["location"], request, fmt, parser_cls))
4.18
4.19 output.append(fmt.table_cell(on=0))
4.20
4.21 @@ -1405,7 +1407,7 @@
4.22
4.23 if event_details.has_key("location"):
4.24 output.append(fmt.paragraph(on=1))
4.25 - output.append(fmt.text(event_details["location"]))
4.26 + output.append(formatText(event_details["location"], request, fmt, parser_cls))
4.27 output.append(fmt.paragraph(on=1))
4.28
4.29 # Topics.
4.30 @@ -1415,7 +1417,7 @@
4.31
4.32 for topic in event_details.get("topics") or event_details.get("categories") or []:
4.33 output.append(fmt.listitem(on=1))
4.34 - output.append(fmt.text(topic))
4.35 + output.append(formatText(topic, request, fmt, parser_cls))
4.36 output.append(fmt.listitem(on=0))
4.37
4.38 output.append(fmt.bullet_list(on=0))