]> git.openstreetmap.org Git - osqa.git/blob - forum/markdownext/mdx_urlize.py
#OSQA-574, a bit of backwards compatibility, importing the with_statements from the...
[osqa.git] / forum / markdownext / mdx_urlize.py
1 import markdown
2
3 # Global Vars
4 URLIZE_RE = '(%s)' % '|'.join([
5     r'<(?:f|ht)tps?://[^>]*>',
6     r'\b(?:f|ht)tps?://[^)<>\s]+[^.,)<>\s]',
7     r'\bwww\.[^)<>\s]+[^.,)<>\s]',
8     r'[^*(<\s]+\.(?:com|net|org)\b',
9 ])
10
11 class UrlizePattern(markdown.inlinepatterns.Pattern):
12     """ Return a link Element given an autolink (`http://example/com`). """
13     def handleMatch(self, m):
14         url = m.group(2)
15         
16         if url.startswith('<'):
17             url = url[1:-1]
18             
19         text = url
20         
21         if not url.split('://')[0] in ('http','https','ftp'):
22             if '@' in url and not '/' in url:
23                 url = 'mailto:' + url
24             else:
25                 url = 'http://' + url
26     
27         el = markdown.etree.Element("a")
28         el.set('href', url)
29         el.text = markdown.AtomicString(text)
30         return el
31
32 class UrlizeExtension(markdown.Extension):
33     """ Urlize Extension for Python-Markdown. """
34
35     def extendMarkdown(self, md, md_globals):
36         """ Replace autolink with UrlizePattern """
37         md.inlinePatterns['autolink'] = UrlizePattern(URLIZE_RE, md)
38
39 def makeExtension(configs=None):
40     return UrlizeExtension(configs=configs)
41
42 if __name__ == "__main__":
43     import doctest
44     doctest.testmod()