]> git.ipfire.org Git - ipfire.org.git/commitdiff
wiki: Add support for [[wiki]] links
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 12 Nov 2018 23:40:36 +0000 (23:40 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 12 Nov 2018 23:40:36 +0000 (23:40 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/wiki.py

index 4d1e8f82e648f487e42e0abd23ad2595776d3c07..46b27b771e496e1c7fa3c55c2d2a3e64f280f239 100644 (file)
@@ -134,6 +134,27 @@ class Page(misc.Object):
        def _render(self, text):
                logging.debug("Rendering %s" % self)
 
+               patterns = (
+                       (r"\[\[([\w\d\/]+)(?:\|([\w\d\s]+))\]\]", r"/\1", r"\2", None, None),
+                       (r"\[\[([\w\d\/\-]+)\]\]", r"/\1", r"\1", self.backend.wiki.get_page_title, r"\1"),
+               )
+
+               for pattern, link, title, repl, args in patterns:
+                       replacements = []
+
+                       for match in re.finditer(pattern, text):
+                               l = match.expand(link)
+                               t = match.expand(title)
+
+                               if callable(repl):
+                                       t = repl(match.expand(args)) or t
+
+                               replacements.append((match.span(), t or l, l))
+
+                       # Apply all replacements
+                       for (start, end), t, l in reversed(replacements):
+                               text = text[:start] + "[%s](%s)" % (t, l) + text[end:]
+
                # Borrow this from the blog
                return self.backend.blog._render_text(text, lang="markdown")