diff gpp/smiley/__init__.py @ 124:9c18250972d5

Refactored the markdown/smiley logic. Created classes for Markdown and Smilify. No longer call render_to_string() in models.py for various models.
author Brian Neal <bgneal@gmail.com>
date Sat, 14 Nov 2009 04:32:32 +0000
parents dbd703f7d63a
children 48621ba5c385
line wrap: on
line diff
--- a/gpp/smiley/__init__.py	Sun Nov 08 21:15:31 2009 +0000
+++ b/gpp/smiley/__init__.py	Sat Nov 14 04:32:32 2009 +0000
@@ -0,0 +1,41 @@
+"""
+Smiley class and function.
+"""
+import re
+
+from django.utils.safestring import SafeData
+from django.utils.html import conditional_escape
+
+from smiley.models import Smiley
+
+
+class Smilify(object):
+    """
+    A class to "smilify" text by replacing text with HTML img tags of smilies.
+    """
+    def __init__(self):
+        self.map = Smiley.objects.get_smiley_map()
+
+    def convert(self, value, autoescape=False):
+        if not autoescape or isinstance(value, SafeData):
+            esc = lambda x: x
+        else:
+            esc = conditional_escape
+
+        words = value.split()
+        for i, word in enumerate(words):
+            if word in self.map:
+                words[i] = self.map[word]
+            else:
+                words[i] = esc(words[i])
+        return u' '.join(words)
+        
+
+def smilify(value, autoescape=False):
+    """
+    A convenience function to "smilify" text by replacing text with HTML
+    img tags of smilies.
+    """
+    s = Smilify()
+    return s.convert(value, autoescape)
+