diff --git a/core/markdown.py b/core/markdown.py new file mode 100644 index 00000000..da3432b9 --- /dev/null +++ b/core/markdown.py @@ -0,0 +1,37 @@ +import re +from mistune import Renderer, InlineGrammar, InlineLexer, Markdown +from django.core.urlresolvers import reverse_lazy, reverse + + +class SithRenderer(Renderer): + def file_link(self, id, suffix): + return reverse('core:file_detail', kwargs={'file_id': id}) + suffix + +class SithInlineLexer(InlineLexer): + def enable_file_link(self): + # add file_link rules + self.rules.file_link = re.compile( + r'dfile://(\d*)/?(\S*)?' # dfile://4000/download + ) + # Add file_link parser to default rules + # you can insert it some place you like + # but place matters, maybe 2 is not good + self.default_rules.insert(0, 'file_link') + + def output_file_link(self, m): + id = m.group(1) + suffix = m.group(2) or "" + # you can create an custom render + # you can also return the html if you like + # return directly html like this: + # return reverse('core:file_detail', kwargs={'file_id': id}) + suffix + return self.renderer.file_link(id, suffix) + +renderer = SithRenderer() +inline = SithInlineLexer(renderer) + +# enable the features +inline.enable_file_link() +markdown = Markdown(renderer, inline=inline) + + diff --git a/core/templatetags/renderer.py b/core/templatetags/renderer.py index ba2a4e1f..7fe51098 100644 --- a/core/templatetags/renderer.py +++ b/core/templatetags/renderer.py @@ -1,16 +1,15 @@ -import mistune from django import template from django.template.defaultfilters import stringfilter from django.utils.safestring import mark_safe from django.utils.html import escape +from core.markdown import markdown as md register = template.Library() @register.filter(is_safe=False) @stringfilter def markdown(text): - md = mistune.Markdown() return mark_safe(md(escape(text))) @register.filter()