Merge remote branch 'refs/remotes/gullydwarf-cfdv/is315'
[mediagoblin.git] / mediagoblin / util.py
index 349bc02788be4861b1bcaaf7969f84eb48c77734..91fbee0a10a60d4ddd7d98465c46de3f34abac13 100644 (file)
@@ -29,11 +29,11 @@ import jinja2
 import translitcodec
 from webob import Response, exc
 from lxml.html.clean import Cleaner
+import markdown
 
 from mediagoblin import mg_globals
 from mediagoblin.db.util import ObjectId
 
-
 TESTS_ENABLED = False
 def _activate_testing():
     """
@@ -98,7 +98,7 @@ def get_jinja_env(template_loader, locale):
 
     template_env = jinja2.Environment(
         loader=template_loader, autoescape=True,
-        extensions=['jinja2.ext.i18n'])
+        extensions=['jinja2.ext.i18n', 'jinja2.ext.autoescape'])
 
     template_env.install_gettext_callables(
         mg_globals.translations.gettext,
@@ -373,9 +373,28 @@ HTML_CLEANER = Cleaner(
 
 
 def clean_html(html):
+    # clean_html barfs on an empty string
+    if not html:
+        return u''
+
     return HTML_CLEANER.clean_html(html)
 
 
+MARKDOWN_INSTANCE = markdown.Markdown(safe_mode='escape')
+
+
+def cleaned_markdown_conversion(text):
+    """
+    Take a block of text, run it through MarkDown, and clean its HTML.
+    """
+    # Markdown will do nothing with and clean_html can do nothing with
+    # an empty string :)
+    if not text:
+        return u''
+
+    return clean_html(MARKDOWN_INSTANCE.convert(text))
+
+
 SETUP_GETTEXTS = {}
 
 def setup_gettext(locale):