]> git.ipfire.org Git - ipfire.org.git/commitdiff
blog: Render with markdown now
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 1 Sep 2018 15:48:12 +0000 (16:48 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 1 Sep 2018 15:49:59 +0000 (16:49 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/blog.py

index a11d4eba015b0722b71f0eba1c59e5c098e7f807..2fe13c248c52ae96f79fb2f4f0a2c8b32a085de1 100644 (file)
@@ -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