From 4f8db2dc9779066141ea0094ce98c02d0a7dcb12 Mon Sep 17 00:00:00 2001 From: Gergely Polonkai Date: Mon, 21 Oct 2013 02:50:02 +0200 Subject: [PATCH] Add remove_code_chunks template filter It will be needed when generating feeds --- blog/templatetags/code_chunks.py | 33 ++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/blog/templatetags/code_chunks.py b/blog/templatetags/code_chunks.py index 4b66b4a..86d8040 100644 --- a/blog/templatetags/code_chunks.py +++ b/blog/templatetags/code_chunks.py @@ -28,6 +28,39 @@ def hilite(language, code): formatter = CodeFormatter(style = SolarizedDarkStyle, linenos = False, cssclass = language + " code", noclasses = True) return highlight(code, lexer, formatter) +@register.filter(needs_autoescape=True) +@stringfilter +def remove_code_chunks(value, autoescape=None): + p = re.compile('\[\$ code:(?P[^:]+):(?P[^ ]+) \$\]') + i = p.finditer(value) + diff = 0 + + for match in i: + end, start = match.span() + oldlen = start - end + start += diff + end += diff + newstr = "" + newlen = len(newstr) + value = value[:end] + newstr + value[start:] + diff += newlen - oldlen + + p = re.compile('\[\$ code:(?P[^:]+):(?P.+?) \$\]', re.DOTALL) + i = p.finditer(value) + diff = 0 + + for match in i: + end, start = match.span() + oldlen = start - end + start += diff + end += diff + newstr = "" + newlen = len(newstr) + value = value[:end] + newstr + value[start:] + diff += newlen - oldlen + + return mark_safe(value) + @register.filter(needs_autoescape=True) @stringfilter def insert_code_chunks(value, autoescape=None):