tmp
/
pip-install-ghxuqwgs
/numpy_78e94bf2b6094bf9a1f3d92042f9bf46
/doc
/sphinxext
/numpydoc
/linkcode.py
| # -*- coding: utf-8 -*- | |
| """ | |
| linkcode | |
| ~~~~~~~~ | |
| Add external links to module code in Python object descriptions. | |
| :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. | |
| :license: BSD, see LICENSE for details. | |
| """ | |
| from __future__ import division, absolute_import, print_function | |
| import warnings | |
| import collections | |
| warnings.warn("This extension has been accepted to Sphinx upstream. " | |
| "Use the version from there (Sphinx >= 1.2) " | |
| "https://bitbucket.org/birkenfeld/sphinx/pull-request/47/sphinxextlinkcode", | |
| FutureWarning, stacklevel=1) | |
| from docutils import nodes | |
| from sphinx import addnodes | |
| from sphinx.locale import _ | |
| from sphinx.errors import SphinxError | |
| class LinkcodeError(SphinxError): | |
| category = "linkcode error" | |
| def doctree_read(app, doctree): | |
| env = app.builder.env | |
| resolve_target = getattr(env.config, 'linkcode_resolve', None) | |
| if not isinstance(env.config.linkcode_resolve, collections.Callable): | |
| raise LinkcodeError( | |
| "Function `linkcode_resolve` is not given in conf.py") | |
| domain_keys = dict( | |
| py=['module', 'fullname'], | |
| c=['names'], | |
| cpp=['names'], | |
| js=['object', 'fullname'], | |
| ) | |
| for objnode in doctree.traverse(addnodes.desc): | |
| domain = objnode.get('domain') | |
| uris = set() | |
| for signode in objnode: | |
| if not isinstance(signode, addnodes.desc_signature): | |
| continue | |
| # Convert signode to a specified format | |
| info = {} | |
| for key in domain_keys.get(domain, []): | |
| value = signode.get(key) | |
| if not value: | |
| value = '' | |
| info[key] = value | |
| if not info: | |
| continue | |
| # Call user code to resolve the link | |
| uri = resolve_target(domain, info) | |
| if not uri: | |
| # no source | |
| continue | |
| if uri in uris or not uri: | |
| # only one link per name, please | |
| continue | |
| uris.add(uri) | |
| onlynode = addnodes.only(expr='html') | |
| onlynode += nodes.reference('', '', internal=False, refuri=uri) | |
| onlynode[0] += nodes.inline('', _('[source]'), | |
| classes=['viewcode-link']) | |
| signode += onlynode | |
| def setup(app): | |
| app.connect('doctree-read', doctree_read) | |
| app.add_config_value('linkcode_resolve', None, '') | |