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)
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
def created_at(self):
return self.data.created_at
+ @property
+ def lang(self):
+ return self.data.lang
+
# Published?
@property
"""
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