import bleach from markdown import Markdown from unidecode import unidecode from django.core.urlresolvers import reverse from django.template.defaultfilters import slugify as django_slugify def slugify(string): string = unicode(string) string = unidecode(string) return django_slugify(string.replace('_', ' ')) """ Utils for resolving requests destination """ def _is_request_path_under_misago(request): # We are assuming that forum_index link is root of all Misago links forum_index = reverse('misago:index') path_info = request.path_info if len(forum_index) > len(path_info): return False return path_info[:len(forum_index)] == forum_index def is_request_to_misago(request): try: return request._request_to_misago except AttributeError: request._request_to_misago = _is_request_path_under_misago(request) return request._request_to_misago """ MD subset for use for enchancing items descriptions """ MD_SUBSET_FORBID_SYNTAX = ( # References are evil 'reference', 'reference', 'image_reference', 'short_reference', # Blocks are evil too 'hashheader', 'setextheader', 'code', 'quote', 'hr', 'olist', 'ulist', ) def subset_markdown(text): if not text: return '' md = Markdown(safe_mode='escape', extensions=['nl2br']) for key in md.preprocessors.keys(): if key in MD_SUBSET_FORBID_SYNTAX: del md.preprocessors[key] for key in md.inlinePatterns.keys(): if key in MD_SUBSET_FORBID_SYNTAX: del md.inlinePatterns[key] for key in md.parser.blockprocessors.keys(): if key in MD_SUBSET_FORBID_SYNTAX: del md.parser.blockprocessors[key] for key in md.treeprocessors.keys(): if key in MD_SUBSET_FORBID_SYNTAX: del md.treeprocessors[key] for key in md.postprocessors.keys(): if key in MD_SUBSET_FORBID_SYNTAX: del md.postprocessors[key] return bleach.linkify(md.convert(text))