diff --git a/shared/utils/templatetags/text_tags.py b/shared/utils/templatetags/text_tags.py index 2bf878b..891a324 100644 --- a/shared/utils/templatetags/text_tags.py +++ b/shared/utils/templatetags/text_tags.py @@ -48,3 +48,8 @@ def nbsp(text, autoescape=True): @stringfilter def html_entities_to_unicode(text): return mark_safe(text_utils.html_entities_to_unicode(text)) + + +@register.filter(needs_autoescape=False) +def slimdown(text): + return mark_safe(text_utils.slimdown(text)) diff --git a/shared/utils/text.py b/shared/utils/text.py index 5e1ecff..1efe2fe 100644 --- a/shared/utils/text.py +++ b/shared/utils/text.py @@ -3,15 +3,17 @@ from __future__ import unicode_literals # Erik Stein , 2015-2017 import html +import re from django.utils import six -from django.utils.encoding import force_text, smart_text +from django.utils.encoding import force_text from django.utils.functional import allow_lazy, keep_lazy_text from django.utils.safestring import SafeText +from django.utils.html import mark_safe from django.utils.text import slugify -from django.utils.translation import ugettext as _, ugettext_lazy +from django.utils.translation import ugettext_lazy -from bs4 import BeautifulStoneSoup +# from bs4 import BeautifulStoneSoup import translitcodec # provides 'translit/long', used by codecs.encode() import codecs @@ -59,3 +61,18 @@ def get_text_joined(list_, separator=DEFAULT_SEPARATOR, last_word=ugettext_lazy( return '%s%s%s' % ( separator.join(force_text(i) for i in list_[:-1]), force_text(last_word), force_text(list_[-1])) + + +def slimdown(text): + """ + Converts simplified markdown (*, **, _) to , und tags. + """ + i_pattern = re.compile(r"(\*)(.*?)\1") + b_pattern = re.compile(r"(\*\*)(.*?)\1") + u_pattern = re.compile(r"(_)(.*?)\1") + + text, n = re.subn(i_pattern, "\\2", text) + text, n = re.subn(b_pattern, "\\2", text) + text, n = re.subn(u_pattern, "\\2", text) + return mark_safe(text) +