diff options
-rw-r--r-- | docs/_ext/autosectionlabel.py | 63 |
1 files changed, 30 insertions, 33 deletions
diff --git a/docs/_ext/autosectionlabel.py b/docs/_ext/autosectionlabel.py index aea59fac..a6777b27 100644 --- a/docs/_ext/autosectionlabel.py +++ b/docs/_ext/autosectionlabel.py @@ -1,71 +1,68 @@ +# -*- coding: utf-8 -*- """ sphinx.ext.autosectionlabel ~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Allow reference sections by :ref: role using its title. - :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + + :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. -""" -from typing import Any, Dict, cast + from sphinx version 1.8.4 to get readthedocs working +""" from docutils import nodes -from docutils.nodes import Node -from sphinx.application import Sphinx -from sphinx.domains.std import StandardDomain from sphinx.locale import __ from sphinx.util import logging from sphinx.util.nodes import clean_astext -logger = logging.getLogger(__name__) +if False: + # For type annotation + from typing import Any, Dict # NOQA + from sphinx.application import Sphinx # NOQA -def get_node_depth(node: Node) -> int: - i = 0 - cur_node = node - while cur_node.parent != node.document: - cur_node = cur_node.parent - i += 1 - return i +logger = logging.getLogger(__name__) + +if False: + # For type annotation + from typing import Any, Dict # NOQA + from sphinx.application import Sphinx # NOQA -def register_sections_as_label(app: Sphinx, document: Node) -> None: - domain = cast(StandardDomain, app.env.get_domain('std')) +def register_sections_as_label(app, document): + # type: (Sphinx, nodes.Node) -> None + labels = app.env.domaindata['std']['labels'] + anonlabels = app.env.domaindata['std']['anonlabels'] for node in document.traverse(nodes.section): - if (app.config.autosectionlabel_maxdepth and - get_node_depth(node) >= app.config.autosectionlabel_maxdepth): - continue labelid = node['ids'][0] docname = app.env.docname - title = cast(nodes.title, node[0]) - ref_name = getattr(title, 'rawsource', title.astext()) + ref_name = getattr(node[0], 'rawsource', node[0].astext()) if app.config.autosectionlabel_prefix_document: name = nodes.fully_normalize_name(docname + ':' + ref_name) else: name = nodes.fully_normalize_name(ref_name) - sectname = clean_astext(title) + sectname = clean_astext(node[0]) - if name in domain.labels: - # a ref befor a headline create 2 ids in the node object + if name in labels: if len(node['ids']) > 1: continue logger.warning(__('duplicate label %s, other instance in %s'), - name, app.env.doc2path(domain.labels[name][0]), - location=node, type='autosectionlabel', subtype=docname) - - + name, app.env.doc2path(labels[name][0]), + location=node) - domain.anonlabels[name] = docname, labelid - domain.labels[name] = docname, labelid, sectname + anonlabels[name] = docname, labelid + labels[name] = docname, labelid, sectname -def setup(app: Sphinx) -> Dict[str, Any]: +def setup(app): + # type: (Sphinx) -> Dict[unicode, Any] app.add_config_value('autosectionlabel_prefix_document', False, 'env') - app.add_config_value('autosectionlabel_maxdepth', None, 'env') app.connect('doctree-read', register_sections_as_label) return { 'version': 'builtin', 'parallel_read_safe': True, 'parallel_write_safe': True, - }
\ No newline at end of file + } |