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