diff --git a/zephyr/lib/bugdown/__init__.py b/zephyr/lib/bugdown/__init__.py index 7e646fafe3..49dc6c1270 100644 --- a/zephyr/lib/bugdown/__init__.py +++ b/zephyr/lib/bugdown/__init__.py @@ -414,7 +414,10 @@ class Bugdown(markdown.Extension): # # This rule must come after the built-in 'link' markdown linkifier to # avoid errors. - http_link_regex = r'\b(?Phttps?://[^\s]+?)(?=[^\w/]*(\s|\Z))' + # + # We support up to 1 nested pair of paranthesis in a url + http_link_regex = r'\b(?Phttps?://(?:(?:[^\s]+\([^\s)]+?\)[^\s]*?)|[^\s]+?))(?=[^\w/]*(\s|\Z))' + md.inlinePatterns.add('http_autolink', HttpLink(http_link_regex), '>link') # A link starts at a word boundary, and ends at space, punctuation, or end-of-input. diff --git a/zephyr/tests.py b/zephyr/tests.py index 2435baeb2e..254257774d 100644 --- a/zephyr/tests.py +++ b/zephyr/tests.py @@ -1999,6 +1999,12 @@ int x = 3 ('http://j.mp/14Hwm3X', "

%s

", 'http://j.mp/14Hwm3X'), ('http://localhost:9991/?show_debug=1', "

%s

", 'http://localhost:9991/?show_debug=1'), ('anyone before? (http://d.pr/i/FMXO)', "

anyone before? (%s)

", 'http://d.pr/i/FMXO'), + ('(http://en.wikipedia.org/wiki/Each-way_(bet))', + '

(%s)

', 'http://en.wikipedia.org/wiki/Each-way_(bet)'), + ('(http://en.wikipedia.org/wiki/Each-way_(bet)_(more_parens))', + '

(%s)

', 'http://en.wikipedia.org/wiki/Each-way_(bet)_(more_parens)'), + ('http://en.wikipedia.org/wiki/Qt_(framework)', '

%s

', 'http://en.wikipedia.org/wiki/Qt_(framework)'), + ('http://fr.wikipedia.org/wiki/Fichier:SMirC-facepalm.svg', '

%s

', 'http://fr.wikipedia.org/wiki/Fichier:SMirC-facepalm.svg'), # Changed to .mov from .png to avoid inline preview @@ -2068,8 +2074,9 @@ NY-Haskell/events/108707682/?a=co1.1_grp&rv=co1.1\">Haskell NYC Meetuplink

'), - # ('[YOLO](http://en.wikipedia.org/wiki/YOLO_(motto)', - # '') + ('[YOLO](http://en.wikipedia.org/wiki/YOLO_(motto))', + '

YOLO

') ) for input, output in urls: