From: Michael Tremer Date: Sat, 1 Sep 2018 15:48:12 +0000 (+0100) Subject: blog: Render with markdown now X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2de5ad8a8979d8d2a6095f6aa239b191f5dacd12;p=ipfire.org.git blog: Render with markdown now Signed-off-by: Michael Tremer --- diff --git a/src/backend/blog.py b/src/backend/blog.py index a11d4eba..2fe13c24 100644 --- a/src/backend/blog.py +++ b/src/backend/blog.py @@ -2,12 +2,25 @@ import datetime import feedparser +import markdown2 import re import textile import unicodedata from . import misc +# Used to automatically link some things +link_patterns = ( + # Find bug reports + (re.compile(r"(?:#(\d+))", re.I), r"https://bugzilla.ipfire.org/show_bug.cgi?id=\1"), + + # Email Addresses + (re.compile(r"([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)"), r"mailto:\1"), + + # CVE Numbers + (re.compile(r"(?:CVE)[\s\-](\d{4}\-\d+)"), r"http://cve.mitre.org/cgi-bin/cvename.cgi?name=\1"), +) + class Blog(misc.Object): def _get_post(self, query, *args): res = self.db.get(query, *args) @@ -109,6 +122,16 @@ class Blog(misc.Object): return slug + def _render_text(self, text, lang="markdown"): + if lang == "markdown": + return markdown2.markdown(text, link_patterns=link_patterns, + extras=["footnotes", "link-patterns", "wiki-tables"]) + + elif lang == "textile": + return textile.textile(text) + + return text + def refresh(self): """ Needs to be called after a post has been changed @@ -214,6 +237,10 @@ class Post(misc.Object): def created_at(self): return self.data.created_at + @property + def lang(self): + return self.data.lang + # Published? @property @@ -255,7 +282,7 @@ class Post(misc.Object): """ Returns this post as rendered HTML """ - return self.data.html or textile.textile(self.text.decode("utf-8")) + return self.data.html or self.backend.blog._render_text(self.text, lang=self.lang) # Tags