from markdown import Markdown, Pattern class WikiLinkPattern(Pattern): """A pattern to turn wiki links into Markdown_ links. Examples: [[SomePage]] -> [SomePage](/wiki/view/SomePage) [[SomePage|some page]] -> [some page](/wiki/view/SomePage) Must be applied before link patterns. .. _Markdown: http://daringfireball.net/projects/markdown/ """ _pattern = r'\[\[([A-Z].+)\]\]' def __init__(self, pattern=None): Pattern.__init__(self, pattern or self._pattern) def handleMatch(self, m, doc): parts = m.group(2).split('|', 1) if len(parts) == 2: href, text = parts else: href = text = m.group(2) el = doc.createElement('a') el.setAttribute('href', '/wiki/view/%s' % href) el.appendChild(doc.createTextNode(text)) return el # Usage md = Markdown() md.inlinePatterns.insert(0, WikiLinkPattern()) text = '...' text = md.toString(text)