Mercurial > public > sg101
view tools/mdx_urlize.py @ 467:b910cc1460c8
Add the ability to conditionally add model instances to the search index on update. This is not perfect, as some instances should be deleted from the index if they are updated such that they should not be in the index anymore. Will think about and address that later.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sun, 24 Jul 2011 18:12:20 +0000 |
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()