diff --git a/zephyr/lib/bugdown/__init__.py b/zephyr/lib/bugdown/__init__.py index baa8213d08..a8f4aba4a7 100644 --- a/zephyr/lib/bugdown/__init__.py +++ b/zephyr/lib/bugdown/__init__.py @@ -12,6 +12,14 @@ class Gravatar(markdown.inlinepatterns.Pattern): % (gravatar_hash(match.group('email')),)) return img +class AutoLink(markdown.inlinepatterns.Pattern): + def handleMatch(self, match): + url = match.group('url') + a = markdown.util.etree.Element('a') + a.set('href', url) + a.text = url + return a + class Bugdown(markdown.Extension): def extendMarkdown(self, md, md_globals): del md.inlinePatterns['image_link'] @@ -21,6 +29,10 @@ class Bugdown(markdown.Extension): md.inlinePatterns.add('gravatar', Gravatar(r'!gravatar\((?P[^)]*)\)'), '_begin') + # A link starts after whitespace and continues to the next whitespace. + link_regex = r'(\s|\A)(?Phttps?://[^\s]+)' + md.inlinePatterns.add('autolink', AutoLink(link_regex), '_begin') + # We need to re-initialize the markdown engine every 30 messages # due to some sort of performance leak in the markdown library. MAX_MD_ENGINE_USES = 30 @@ -28,11 +40,6 @@ MAX_MD_ENGINE_USES = 30 _md_engine = None _use_count = 0 -# A link starts after whitespace, and cannot contain spaces, -# end parentheses, or end brackets (which would confuse Markdown). -# FIXME: Use one of the actual linkification extensions. -_link_regex = re.compile(r'(\s|\A)(?Phttps?://[^\s\])]+)') - def _linkify(match): url = match.group('url') return ' [%s](%s) ' % (url, url) @@ -49,8 +56,6 @@ def convert(md): codehilite.makeExtension(configs=[('force_linenos', False)]), Bugdown()]) - md = _link_regex.sub(_linkify, md) - try: html = _md_engine.convert(md) except: