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