1.1 --- a/MoinShare.py Fri May 17 23:08:31 2013 +0200
1.2 +++ b/MoinShare.py Fri Jun 14 01:19:43 2013 +0200
1.3 @@ -11,9 +11,10 @@
1.4 from ContentTypeSupport import getContentPreferences
1.5 from DateSupport import getCurrentTime, getDateTimeFromRFC2822
1.6 from MoinSupport import *
1.7 -from MoinMoin.support.htmlmarkup import HTMLSanitizer, Markup
1.8 +from MoinMoin.support.htmlmarkup import HTMLParseError, HTMLSanitizer, Markup
1.9 from MoinMoin import wikiutil
1.10 from email.parser import Parser
1.11 +from codecs import getwriter
1.12
1.13 try:
1.14 from cStringIO import StringIO
1.15 @@ -46,21 +47,6 @@
1.16 fragments.append((format, attributes, body))
1.17 return fragments
1.18
1.19 -def getOutputTypes(request, format):
1.20 -
1.21 - """
1.22 - Using the 'request' and the 'format' of a fragment, return the media types
1.23 - available for the fragment.
1.24 - """
1.25 -
1.26 - # This uses an extended parser API method if available.
1.27 -
1.28 - parser = getParserClass(request, format)
1.29 - if hasattr(parser, "getOutputTypes"):
1.30 - return parser.getOutputTypes()
1.31 - else:
1.32 - return ["text/html"]
1.33 -
1.34 def getPreferredOutputTypes(request, mimetypes):
1.35
1.36 """
1.37 @@ -194,7 +180,11 @@
1.38 update.content_type = "text/html"
1.39
1.40 update.page = page
1.41 - update.link = page.url(request)
1.42 +
1.43 + # NOTE: The anchor would be supported in the page, but this requires
1.44 + # NOTE: formatter modifications for the regions providing updates.
1.45 +
1.46 + update.link = page.url(request, anchor=update.fragment)
1.47 update.updated = updated
1.48
1.49 updates.append(update)
1.50 @@ -235,7 +225,9 @@
1.51 # For a single part, use it as the update content.
1.52
1.53 if not message.is_multipart():
1.54 - update.content = message.get_payload()
1.55 + charset = message.get_content_charset()
1.56 + payload = message.get_payload(decode=True)
1.57 + update.content = charset and unicode(payload, charset) or payload
1.58 update.content_type = message.get_content_type()
1.59
1.60 # For a collection of related parts, use the first as the update content
1.61 @@ -243,7 +235,9 @@
1.62
1.63 elif message.get_content_subtype() == "related":
1.64 main_part = message.get_payload()[0]
1.65 - update.content = main_part.get_payload()
1.66 + charset = main_part.get_content_charset()
1.67 + payload = main_part.get_payload(decode=True)
1.68 + update.content = charset and unicode(payload, charset) or payload
1.69 update.content_type = main_part.get_content_type()
1.70
1.71 # Otherwise, just obtain the parts for separate display.
1.72 @@ -337,10 +331,10 @@
1.73 "A special markup processor for incoming HTML."
1.74
1.75 def sanitize(self, request, page, message_number):
1.76 - out = StringIO()
1.77 + out = getwriter("utf-8")(StringIO())
1.78 sanitizer = IncomingHTMLSanitizer(out, request, page, message_number)
1.79 sanitizer.feed(self.stripentities(keepxmlentities=True))
1.80 - return IncomingMarkup(out.getvalue())
1.81 + return IncomingMarkup(unicode(out.getvalue(), "utf-8"))
1.82
1.83 class IncomingHTMLParser:
1.84