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")