mirror of
https://git.rtems.org/rtems-source-builder
synced 2024-10-09 07:15:10 +08:00

The RSB documentation is now in ReST format and part of the RTEMS Documentation project. See https://docs.rtems.org/. Remove support for the GPL based asciidoc tool and remove the asciidoc package from the RSB. Add the Python Markdown package and update the reporter to use Markdown for HTML generation. The resuling HTML report is a single self contained file. Closes #3047.
90 lines
2.8 KiB
Python
90 lines
2.8 KiB
Python
'''
|
|
WikiLinks Extension for Python-Markdown
|
|
======================================
|
|
|
|
Converts [[WikiLinks]] to relative links.
|
|
|
|
See <https://pythonhosted.org/Markdown/extensions/wikilinks.html>
|
|
for documentation.
|
|
|
|
Original code Copyright [Waylan Limberg](http://achinghead.com/).
|
|
|
|
All changes Copyright The Python Markdown Project
|
|
|
|
License: [BSD](http://www.opensource.org/licenses/bsd-license.php)
|
|
|
|
'''
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import unicode_literals
|
|
from . import Extension
|
|
from ..inlinepatterns import Pattern
|
|
from ..util import etree
|
|
import re
|
|
|
|
|
|
def build_url(label, base, end):
|
|
""" Build a url from the label, a base, and an end. """
|
|
clean_label = re.sub(r'([ ]+_)|(_[ ]+)|([ ]+)', '_', label)
|
|
return '%s%s%s' % (base, clean_label, end)
|
|
|
|
|
|
class WikiLinkExtension(Extension):
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.config = {
|
|
'base_url': ['/', 'String to append to beginning or URL.'],
|
|
'end_url': ['/', 'String to append to end of URL.'],
|
|
'html_class': ['wikilink', 'CSS hook. Leave blank for none.'],
|
|
'build_url': [build_url, 'Callable formats URL from label.'],
|
|
}
|
|
|
|
super(WikiLinkExtension, self).__init__(*args, **kwargs)
|
|
|
|
def extendMarkdown(self, md, md_globals):
|
|
self.md = md
|
|
|
|
# append to end of inline patterns
|
|
WIKILINK_RE = r'\[\[([\w0-9_ -]+)\]\]'
|
|
wikilinkPattern = WikiLinks(WIKILINK_RE, self.getConfigs())
|
|
wikilinkPattern.md = md
|
|
md.inlinePatterns.add('wikilink', wikilinkPattern, "<not_strong")
|
|
|
|
|
|
class WikiLinks(Pattern):
|
|
def __init__(self, pattern, config):
|
|
super(WikiLinks, self).__init__(pattern)
|
|
self.config = config
|
|
|
|
def handleMatch(self, m):
|
|
if m.group(2).strip():
|
|
base_url, end_url, html_class = self._getMeta()
|
|
label = m.group(2).strip()
|
|
url = self.config['build_url'](label, base_url, end_url)
|
|
a = etree.Element('a')
|
|
a.text = label
|
|
a.set('href', url)
|
|
if html_class:
|
|
a.set('class', html_class)
|
|
else:
|
|
a = ''
|
|
return a
|
|
|
|
def _getMeta(self):
|
|
""" Return meta data or config data. """
|
|
base_url = self.config['base_url']
|
|
end_url = self.config['end_url']
|
|
html_class = self.config['html_class']
|
|
if hasattr(self.md, 'Meta'):
|
|
if 'wiki_base_url' in self.md.Meta:
|
|
base_url = self.md.Meta['wiki_base_url'][0]
|
|
if 'wiki_end_url' in self.md.Meta:
|
|
end_url = self.md.Meta['wiki_end_url'][0]
|
|
if 'wiki_html_class' in self.md.Meta:
|
|
html_class = self.md.Meta['wiki_html_class'][0]
|
|
return base_url, end_url, html_class
|
|
|
|
|
|
def makeExtension(*args, **kwargs):
|
|
return WikiLinkExtension(*args, **kwargs)
|