4 from os.path
import abspath, dirname, join
6 from docutils
import nodes
7 from sphinx.ext
import intersphinx
9 import catkin_pkg.package
11 catkin_dir = dirname(dirname(abspath(__file__)))
12 catkin_package = catkin_pkg.package.parse_package(join(catkin_dir, catkin_pkg.package.PACKAGE_MANIFEST_FILENAME))
14 project = catkin_package.name
15 copyright = time.strftime(
"%Y") +
', Czech Technical University in Prague'
16 author =
", ".join([a.name
for a
in catkin_package.authors])
17 version = catkin_package.version
18 release = catkin_package.version
21 html_theme_path = [catkin_sphinx.get_theme_path()]
24 html_theme =
'ros-theme'
28 extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.intersphinx',
'sphinx.ext.extlinks',
29 'sphinx.ext.viewcode']
32 templates_path = [
'_templates']
35 source_suffix =
'.rst'
41 ros_distro = os.getenv(
'ROS_DISTRO',
'latest')
42 ros_api_base =
'https://docs.ros.org/en/%s/api/'
43 ros_api = ros_api_base % ros_distro
46 python_version =
'{}.{}'.format(sys.version_info.major, sys.version_info.minor)
47 intersphinx_mapping = {
48 'python': (
'https://docs.python.org/{}/'.format(python_version),
None),
49 'genpy': (ros_api +
'genpy/html',
None),
53 'diagnostic_msgs': (ros_api +
'diagnostic_msgs/html/msg/%s.html',
'diagnostic_msgs/'),
57 autoclass_content =
'both'
61 text_node = next(iter(contnode.traverse(
lambda n: n.tagname ==
'#text')))
62 parts = text_node.astext().split(
'.')
65 pkg, obj_type, obj = parts
68 pkg, obj_type, module, obj = parts
69 if "_" + obj != module:
70 return intersphinx.missing_reference(app, env, node, contnode)
72 return intersphinx.missing_reference(app, env, node, contnode)
73 if obj_type
not in (
"msg",
"srv"):
74 return intersphinx.missing_reference(app, env, node, contnode)
75 target = ros_api +
'{}/html/{}/{}.html'.format(pkg, obj_type, obj)
76 ref_node = nodes.reference()
77 ref_node[
'refuri'] = target
78 title =
'{}/{}'.format(pkg, obj)
79 text_node = nodes.literal(title, title)
80 text_node[
'classes'] = [
'xref',
'ros',
'ros-' + obj_type]
86 from sphinx.domains.python
import PyObject
87 PyObject.doc_field_types[list(map(
lambda f: f.name ==
'variable', PyObject.doc_field_types)).index(
True)].rolename =
None
91 app.connect(
"missing-reference", ros_msg_reference)