Mercurial > public > sg101
view tools/mdx_urlize.py @ 631:f36d1a168be7
For issue 27, disable login dialog button during POST.
This seems to prevent multiple logins most of the time. You can
still bang on the enter key and sometimes get more through.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Wed, 14 Nov 2012 20:57:05 -0600 |
parents | f54bf3b3bece |
children | 2adf01661ac5 |
line wrap: on
line source
""" Taken from: https://github.com/r0wb0t/markdown-urlize A more liberal autolinker Inspired by Django's urlize function. Positive examples: >>> import markdown >>> md = markdown.Markdown(extensions=['urlize']) >>> md.convert('http://example.com/') u'<p><a href="http://example.com/">http://example.com/</a></p>' >>> md.convert('go to http://example.com') u'<p>go to <a href="http://example.com">http://example.com</a></p>' >>> md.convert('example.com') u'<p><a href="http://example.com">example.com</a></p>' >>> md.convert('example.net') u'<p><a href="http://example.net">example.net</a></p>' >>> md.convert('www.example.us') u'<p><a href="http://www.example.us">www.example.us</a></p>' >>> md.convert('(www.example.us/path/?name=val)') u'<p>(<a href="http://www.example.us/path/?name=val">www.example.us/path/?name=val</a>)</p>' >>> md.convert('go to <http://example.com> now!') u'<p>go to <a href="http://example.com">http://example.com</a> now!</p>' Negative examples: >>> md.convert('del.icio.us') u'<p>del.icio.us</p>' """ import markdown # Global Vars URLIZE_RE = '(%s)' % '|'.join([ r'<(?:f|ht)tps?://[^>]*>', r'\b(?:f|ht)tps?://[^)<>\s]+[^.,)<>\s]', r'\bwww\.[^)<>\s]+[^.,)<>\s]', r'[^(<\s]+\.(?:com|net|org)\b', ]) class UrlizePattern(markdown.inlinepatterns.Pattern): """ Return a link Element given an autolink (`http://example/com`). """ def handleMatch(self, m): url = m.group(2) if url.startswith('<'): url = url[1:-1] text = url if not url.split('://')[0] in ('http','https','ftp'): if '@' in url and not '/' in url: url = 'mailto:' + url else: url = 'http://' + url el = markdown.etree.Element("a") el.set('href', url) el.text = markdown.AtomicString(text) return el class UrlizeExtension(markdown.Extension): """ Urlize Extension for Python-Markdown. """ def extendMarkdown(self, md, md_globals): """ Replace autolink with UrlizePattern """ md.inlinePatterns['autolink'] = UrlizePattern(URLIZE_RE, md) def makeExtension(configs=None): return UrlizeExtension(configs=configs) if __name__ == "__main__": import doctest doctest.testmod()