bgneal@124: """ bgneal@211: Smiley classes and functions. bgneal@124: """ bgneal@124: import re bgneal@124: bgneal@124: from django.utils.safestring import SafeData bgneal@124: from django.utils.html import conditional_escape bgneal@124: bgneal@124: from smiley.models import Smiley bgneal@124: bgneal@124: bgneal@211: class SmilifyHtml(object): bgneal@124: """ bgneal@211: A class to "smilify" text by replacing text with HTML img tags for smiley bgneal@211: images. bgneal@124: """ bgneal@124: def __init__(self): bgneal@124: self.map = Smiley.objects.get_smiley_map() bgneal@124: bgneal@211: def convert(self, value, autoescape=False): bgneal@128: """ bgneal@211: Converts and returns the supplied text with the HTML version of the bgneal@211: smileys. bgneal@128: """ bgneal@286: if not value: bgneal@286: return u'' bgneal@286: bgneal@124: if not autoescape or isinstance(value, SafeData): bgneal@124: esc = lambda x: x bgneal@124: else: bgneal@124: esc = conditional_escape bgneal@124: bgneal@124: words = value.split() bgneal@124: for i, word in enumerate(words): bgneal@124: if word in self.map: bgneal@211: words[i] = self.map[word] bgneal@124: else: bgneal@124: words[i] = esc(words[i]) bgneal@124: return u' '.join(words) bgneal@128: bgneal@211: bgneal@211: class SmilifyMarkdown(object): bgneal@211: """ bgneal@211: A class to "smilify" text by replacing text with Markdown image syntax for bgneal@211: smiley images. bgneal@211: """ bgneal@211: def __init__(self): bgneal@211: self.regexes = Smiley.objects.get_smiley_regexes() bgneal@211: bgneal@211: def convert(self, s): bgneal@128: """ bgneal@211: Returns a string copy of the input s that has the smiley codes replaced bgneal@211: with Markdown for smiley images. bgneal@128: """ bgneal@286: if not s: bgneal@286: return u'' bgneal@286: bgneal@211: for regex, repl in self.regexes: bgneal@211: s = regex.sub(repl, s) bgneal@211: return s bgneal@128: bgneal@124: bgneal@128: def smilify_html(value, autoescape=False): bgneal@124: """ bgneal@124: A convenience function to "smilify" text by replacing text with HTML bgneal@124: img tags of smilies. bgneal@124: """ bgneal@211: s = SmilifyHtml() bgneal@211: return s.convert(value, autoescape=autoescape) bgneal@124: