| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #
- # This is a Sphinx documentation tool extension which allows to
- # exclude some Python modules from the generated indexes. Modules
- # are excluded both from "modindex" and "genindex" index tables
- # (in the latter case, all members of a module are excluded).
- # To control exclusion, set "modindex_exclude" variable in Sphinx
- # conf.py to the list of modules to exclude. Note: these should be
- # modules (as defined by py:module directive, not just raw filenames).
- # This extension works by monkey-patching Sphinx core, so potentially
- # may not work with untested Sphinx versions. It tested to work with
- # 1.2.2 and 1.4.2
- #
- # Copyright (c) 2016 Paul Sokolovsky
- # Licensed under the terms of BSD license, see LICENSE file.
- #
- import sphinx
- #org_PythonModuleIndex_generate = None
- org_PyObject_add_target_and_index = None
- org_PyModule_run = None
- EXCLUDES = {}
- # No longer used, PyModule_run() monkey-patch does all the job
- def PythonModuleIndex_generate(self, docnames=None):
- docnames = []
- excludes = self.domain.env.config['modindex_exclude']
- for modname, (docname, synopsis, platforms, deprecated) in self.domain.data['modules'].items():
- #print(docname)
- if modname not in excludes:
- docnames.append(docname)
- return org_PythonModuleIndex_generate(self, docnames)
- def PyObject_add_target_and_index(self, name_cls, sig, signode):
- if hasattr(self.env, "ref_context"):
- # Sphinx 1.4
- ref_context = self.env.ref_context
- else:
- # Sphinx 1.2
- ref_context = self.env.temp_data
- modname = self.options.get(
- 'module', ref_context.get('py:module'))
- #print("*", modname, name_cls)
- if modname in self.env.config['modindex_exclude']:
- return None
- return org_PyObject_add_target_and_index(self, name_cls, sig, signode)
- def PyModule_run(self):
- env = self.state.document.settings.env
- modname = self.arguments[0].strip()
- excl = env.config['modindex_exclude']
- if modname in excl:
- self.options['noindex'] = True
- EXCLUDES.setdefault(modname, []).append(env.docname)
- return org_PyModule_run(self)
- def setup(app):
- app.add_config_value('modindex_exclude', [], 'html')
- # global org_PythonModuleIndex_generate
- # org_PythonModuleIndex_generate = sphinx.domains.python.PythonModuleIndex.generate
- # sphinx.domains.python.PythonModuleIndex.generate = PythonModuleIndex_generate
- global org_PyObject_add_target_and_index
- org_PyObject_add_target_and_index = sphinx.domains.python.PyObject.add_target_and_index
- sphinx.domains.python.PyObject.add_target_and_index = PyObject_add_target_and_index
- global org_PyModule_run
- org_PyModule_run = sphinx.domains.python.PyModule.run
- sphinx.domains.python.PyModule.run = PyModule_run
|