15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# markdown is released under the BSD license 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Copyright 2007, 2008 The Python Markdown Project (v. 1.7 and later) 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b) 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Copyright 2004 Manfred Stienstra (the original version) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# All rights reserved. 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# Redistribution and use in source and binary forms, with or without 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# modification, are permitted provided that the following conditions are met: 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# 115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# * Redistributions of source code must retain the above copyright 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# notice, this list of conditions and the following disclaimer. 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# * Redistributions in binary form must reproduce the above copyright 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# notice, this list of conditions and the following disclaimer in the 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# documentation and/or other materials provided with the distribution. 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# * Neither the name of the <organization> nor the 175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# names of its contributors may be used to endorse or promote products 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# derived from this software without specific prior written permission. 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# THIS SOFTWARE IS PROVIDED BY THE PYTHON MARKDOWN PROJECT ''AS IS'' AND ANY 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# DISCLAIMED. IN NO EVENT SHALL ANY CONTRIBUTORS TO THE PYTHON MARKDOWN PROJECT 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)# POSSIBILITY OF SUCH DAMAGE. 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)''' 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)WikiLinks Extension for Python-Markdown 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)====================================== 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Converts [[WikiLinks]] to relative links. Requires Python-Markdown 2.0+ 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Basic usage: 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> import markdown 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> text = "Some text with a [[WikiLink]]." 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> html = markdown.markdown(text, ['wikilinks']) 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> print html 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) <p>Some text with a <a class="wikilink" href="/WikiLink/">WikiLink</a>.</p> 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Whitespace behavior: 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> print markdown.markdown('[[ foo bar_baz ]]', ['wikilinks']) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) <p><a class="wikilink" href="/foo_bar_baz/">foo bar_baz</a></p> 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> print markdown.markdown('foo [[ ]] bar', ['wikilinks']) 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) <p>foo bar</p> 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)To define custom settings the simple way: 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> print markdown.markdown(text, 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... ['wikilinks(base_url=/wiki/,end_url=.html,html_class=foo)'] 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... ) 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) <p>Some text with a <a class="foo" href="/wiki/WikiLink.html">WikiLink</a>.</p> 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Custom settings the complex way: 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> md = markdown.Markdown( 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... extensions = ['wikilinks'], 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... extension_configs = {'wikilinks': [ 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... ('base_url', 'http://example.com/'), 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... ('end_url', '.html'), 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... ('html_class', '') ]}, 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... safe_mode = True) 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> print md.convert(text) 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) <p>Some text with a <a href="http://example.com/WikiLink.html">WikiLink</a>.</p> 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Use MetaData with mdx_meta.py (Note the blank html_class in MetaData): 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> text = """wiki_base_url: http://example.com/ 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... wiki_end_url: .html 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... wiki_html_class: 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... Some text with a [[WikiLink]].""" 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> md = markdown.Markdown(extensions=['meta', 'wikilinks']) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> print md.convert(text) 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) <p>Some text with a <a href="http://example.com/WikiLink.html">WikiLink</a>.</p> 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MetaData should not carry over to next document: 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> print md.convert("No [[MetaData]] here.") 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) <p>No <a class="wikilink" href="/MetaData/">MetaData</a> here.</p> 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Define a custom URL builder: 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> def my_url_builder(label, base, end): 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... return '/bar/' 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> md = markdown.Markdown(extensions=['wikilinks'], 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ... extension_configs={'wikilinks' : [('build_url', my_url_builder)]}) 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) >>> print md.convert('[[foo]]') 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) <p><a class="wikilink" href="/bar/">foo</a></p> 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)From the command line: 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) python markdown.py -x wikilinks(base_url=http://example.com/,end_url=.html,html_class=foo) src.txt 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)By [Waylan Limberg](http://achinghead.com/). 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)License: [BSD](http://www.opensource.org/licenses/bsd-license.php) 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)Dependencies: 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)* [Python 2.3+](http://python.org) 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)* [Markdown 2.0+](http://packages.python.org/Markdown/) 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)''' 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from __future__ import absolute_import 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from __future__ import unicode_literals 1135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from . import Extension 1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from ..inlinepatterns import Pattern 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from ..util import etree 1165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)import re 1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def build_url(label, base, end): 1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) """ Build a url from the label, a base, and an end. """ 1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) clean_label = re.sub(r'([ ]+_)|(_[ ]+)|([ ]+)', '_', label) 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return '%s%s%s'% (base, clean_label, end) 1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class WikiLinkExtension(Extension): 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def __init__(self, configs): 1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) # set extension defaults 1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.config = { 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'base_url' : ['/', 'String to append to beginning or URL.'], 1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'end_url' : ['/', 'String to append to end of URL.'], 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'html_class' : ['wikilink', 'CSS hook. Leave blank for none.'], 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 'build_url' : [build_url, 'Callable formats URL from label.'], 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) # Override defaults with user settings 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for key, value in configs : 1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.setConfig(key, value) 1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def extendMarkdown(self, md, md_globals): 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.md = md 1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) # append to end of inline patterns 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) WIKILINK_RE = r'\[\[([\w0-9_ -]+)\]\]' 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) wikilinkPattern = WikiLinks(WIKILINK_RE, self.getConfigs()) 1445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) wikilinkPattern.md = md 1455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) md.inlinePatterns.add('wikilink', wikilinkPattern, "<not_strong") 1465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class WikiLinks(Pattern): 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def __init__(self, pattern, config): 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) super(WikiLinks, self).__init__(pattern) 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.config = config 1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def handleMatch(self, m): 1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if m.group(2).strip(): 1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base_url, end_url, html_class = self._getMeta() 1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) label = m.group(2).strip() 1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) url = self.config['build_url'](label, base_url, end_url) 1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) a = etree.Element('a') 1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) a.text = label 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) a.set('href', url) 1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if html_class: 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) a.set('class', html_class) 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) else: 1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) a = '' 1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return a 1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) def _getMeta(self): 1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) """ Return meta data or config data. """ 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base_url = self.config['base_url'] 1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) end_url = self.config['end_url'] 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) html_class = self.config['html_class'] 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if hasattr(self.md, 'Meta'): 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if 'wiki_base_url' in self.md.Meta: 1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base_url = self.md.Meta['wiki_base_url'][0] 1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if 'wiki_end_url' in self.md.Meta: 1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) end_url = self.md.Meta['wiki_end_url'][0] 1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if 'wiki_html_class' in self.md.Meta: 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) html_class = self.md.Meta['wiki_html_class'][0] 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return base_url, end_url, html_class 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)def makeExtension(configs=None) : 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return WikiLinkExtension(configs=configs) 184