# HG changeset patch # User Paul Boddie # Date 1329770280 -3600 # Node ID fd46a82a317dc7edf80eb3299ad66569c7bd3916 # Parent b8931fcf1482bce75940d084d6657fd10d4546bb Attempted to make the formatting of plain text work in Moin 1.9 without breaking support for Moin 1.8 or support for formatting HTML. Moin 1.9 appears to use a modified API and fails to invoke the appropriate flushing mechanism in the plain text formatter. diff -r b8931fcf1482 -r fd46a82a317d ImprovedTableParser.py --- a/ImprovedTableParser.py Sun Feb 19 23:22:47 2012 +0100 +++ b/ImprovedTableParser.py Mon Feb 20 21:38:00 2012 +0100 @@ -3,6 +3,7 @@ MoinMoin - ImprovedTableParser library @copyright: 2012 by Paul Boddie + @copyright: 2008 MoinMoin:FlorianKrupicka (redirectedOutput code) @license: GNU GPL (v2 or later), see COPYING.txt for details. """ @@ -265,9 +266,9 @@ """ try: - return wikiutil.searchAndImportPlugin(request.cfg, "formatter", format or "text_plain") + return wikiutil.searchAndImportPlugin(request.cfg, "formatter", format or "plain") except wikiutil.PluginMissingError: - return wikiutil.searchAndImportPlugin(request.cfg, "formatter", "text_plain") + return wikiutil.searchAndImportPlugin(request.cfg, "formatter", "plain") def formatText(text, request, fmt): @@ -275,7 +276,28 @@ parser_cls = getParserClass(request, request.page.pi["format"]) parser = parser_cls(text, request, line_anchors=False) - return request.redirectedOutput(parser.format, fmt, inhibit_p=True) + old_fmt = request.formatter + request.formatter = fmt + try: + return redirectedOutput(request, parser, fmt, inhibit_p=True) + finally: + request.formatter = old_fmt + +def redirectedOutput(request, parser, fmt, **kw): + + "A fixed version of the request method of the same name." + + buf = StringIO() + request.redirect(buf) + try: + parser.format(fmt, **kw) + if hasattr(fmt, "flush"): + buf.write(fmt.flush(True)) + finally: + request.redirect() + text = buf.getvalue() + buf.close() + return text # Sorting utilities. @@ -347,8 +369,8 @@ "Convert 's' to plain text." - fmt = getFormatterClass(request, "text_plain")(request) - fmt.page = request.page + fmt = getFormatterClass(request, "plain")(request) + fmt.setPage(request.page) return formatText(s, request, fmt) converters = {