You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1001 B
Python
42 lines
1001 B
Python
|
|
import functools
|
|
import re
|
|
|
|
import docutils.nodes
|
|
import docutils.utils
|
|
|
|
|
|
CUSTOM_RE = re.compile('(.*) <(.*)>')
|
|
|
|
|
|
def role(config, role, rawtext, text, lineno, inliner, options={}, content=[]):
|
|
template = 'https://docs.ansible.com/ansible/latest/modules/%s_module.html'
|
|
|
|
match = CUSTOM_RE.match(text)
|
|
if match: # "custom text <real link>"
|
|
title = match.group(1)
|
|
text = match.group(2)
|
|
elif text.startswith('~'): # brief
|
|
text = text[1:]
|
|
title = config.get('brief', '%s') % (
|
|
docutils.utils.unescape(text),
|
|
)
|
|
else:
|
|
title = config.get('text', '%s') % (
|
|
docutils.utils.unescape(text),
|
|
)
|
|
|
|
node = docutils.nodes.reference(
|
|
rawsource=rawtext,
|
|
text=title,
|
|
refuri=config['url'] % (text,),
|
|
**options
|
|
)
|
|
|
|
return [node], []
|
|
|
|
|
|
def setup(app):
|
|
for name, info in app.config._raw_config['domainrefs'].items():
|
|
app.add_role(name, functools.partial(role, info))
|