1# encoding: utf-8
2
3#
4# Copyright (c) 2013 Dariusz Dwornikowski.  All rights reserved.
5#
6# Adapted from https://github.com/tdi/sphinxcontrib-manpage
7# License: Apache 2
8#
9
10
11import re
12
13from docutils import nodes, utils
14from docutils.parsers.rst.roles import set_classes
15from string import Template
16
17
18def make_link_node(rawtext, app, name, manpage_num, options):
19    ref = app.config.man_url_regex
20    if not ref:
21        ref = "https://man7.org/linux/man-pages/man%s/%s.%s.html" %(manpage_num, name, manpage_num)
22    else:
23        s = Template(ref)
24        ref = s.substitute(num=manpage_num, topic=name)
25    set_classes(options)
26    node = nodes.reference(rawtext, "%s(%s)" % (name, manpage_num), refuri=ref, **options)
27    return node
28
29
30def man_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
31    app = inliner.document.settings.env.app
32    p = re.compile("([a-zA-Z0-9_\.-_]+)\((\d)\)")
33    m = p.match(text)
34
35    manpage_num = m.group(2)
36    name = m.group(1)
37    node = make_link_node(rawtext, app, name, manpage_num, options)
38    return [node], []
39
40
41def setup(app):
42    app.add_role('man', man_role)
43    app.add_config_value('man_url_regex', None, 'env')
44    return
45
46