From cc3d95d34be8595a7bd588b594fb7051cb239bf2 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 27 Apr 2019 14:41:20 +0100 Subject: [PATCH] wiki: Handle external links and email addresses Signed-off-by: Michael Tremer --- src/backend/wiki.py | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/backend/wiki.py b/src/backend/wiki.py index 2761f38e..d6f9db9c 100644 --- a/src/backend/wiki.py +++ b/src/backend/wiki.py @@ -289,23 +289,32 @@ class Page(misc.Object): # Add wiki links patterns = ( - (r"\[\[([\w\d\/\-\.]+)(?:\|([\w\d\s]+))\]\]", r"\1", r"\2", None), - (r"\[\[([\w\d\/\-\.]+)\]\]", r"\1", r"\1", self.backend.wiki.get_page_title), + (r"\[\[([\w\d\/\-\.]+)(?:\|(.+?))\]\]", r"\1", r"\2", None, True), + (r"\[\[([\w\d\/\-\.]+)\]\]", r"\1", r"\1", self.backend.wiki.get_page_title, True), + + # External links + (r"\[\[((?:ftp|git|https?|rsync|sftp|ssh|webcal)\:\/\/.+?)(?:\|(.+?))\]\]", + r"\1", r"\2", None, False), + + # Mail + (r"\[\[([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)\]\]", + r"\1", r"\1", None, False), ) - for pattern, link, title, repl in patterns: + for pattern, link, title, repl, internal in patterns: replacements = [] for match in re.finditer(pattern, text): l = match.expand(link) t = match.expand(title) - # Allow relative links - if not l.startswith("/"): - l = os.path.join(self.page, l) + if internal: + # Allow relative links + if not l.startswith("/"): + l = os.path.join(self.page, l) - # Normalise links - l = os.path.normpath(l) + # Normalise links + l = os.path.normpath(l) if callable(repl): t = repl(l) or t -- 2.39.2