2018-09-11 14:11:24 +03:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from sphinx import addnodes
|
|
|
|
|
|
|
|
"""
|
|
|
|
``local_toctree``: A callable yielding the global TOC tree that contains
|
|
|
|
list of all the content below the specified page. ``local_toctree`` need
|
2018-10-04 17:30:01 +03:00
|
|
|
pagename specifying as like as ``{{ local_toctree(pagename) }}`` and
|
2018-09-11 14:11:24 +03:00
|
|
|
optional keyword arguments are available:
|
|
|
|
|
|
|
|
* maxdepth (defaults to the max depth selected in the toctree directive):
|
|
|
|
the maximum depth of the tree; set it to -1 to allow unlimited depth
|
|
|
|
"""
|
|
|
|
|
|
|
|
def init_local_toctree(app):
|
|
|
|
|
|
|
|
def _get_local_toctree(docname, **kwds):
|
|
|
|
doctree = app.env.get_doctree(docname)
|
|
|
|
if 'maxdepth' not in kwds:
|
|
|
|
kwds['maxdepth'] = 0
|
|
|
|
toctrees = []
|
|
|
|
for toctreenode in doctree.traverse(addnodes.toctree):
|
|
|
|
toctree = app.env.resolve_toctree(
|
|
|
|
docname, app.builder, toctreenode, **kwds)
|
|
|
|
toctrees.append(toctree)
|
|
|
|
if not toctrees:
|
|
|
|
return None
|
|
|
|
result = toctrees[0]
|
|
|
|
for toctree in toctrees[1:]:
|
|
|
|
result.extend(toctree.children)
|
|
|
|
return app.builder.render_partial(result)['fragment']
|
|
|
|
|
|
|
|
ctx = app.env.config['html_context']
|
|
|
|
if 'local_toctree' not in ctx:
|
|
|
|
ctx['local_toctree'] = _get_local_toctree
|
|
|
|
|
|
|
|
|
|
|
|
def setup(app):
|
|
|
|
app.connect('builder-inited', init_local_toctree)
|