3 changed files with 49 additions and 1 deletions
@ -0,0 +1,46 @@ |
|||
from sphinx.builders.html import StandaloneHTMLBuilder |
|||
from sphinx.environment.adapters.indexentries import IndexEntries |
|||
|
|||
class DPYStandaloneHTMLBuilder(StandaloneHTMLBuilder): |
|||
# This is mostly copy pasted from Sphinx. |
|||
def write_genindex(self) -> None: |
|||
# the total count of lines for each index letter, used to distribute |
|||
# the entries into two columns |
|||
genindex = IndexEntries(self.env).create_index(self, group_entries=False) |
|||
indexcounts = [] |
|||
for _k, entries in genindex: |
|||
indexcounts.append(sum(1 + len(subitems) |
|||
for _, (_, subitems, _) in entries)) |
|||
|
|||
genindexcontext = { |
|||
'genindexentries': genindex, |
|||
'genindexcounts': indexcounts, |
|||
'split_index': self.config.html_split_index, |
|||
} |
|||
|
|||
if self.config.html_split_index: |
|||
self.handle_page('genindex', genindexcontext, |
|||
'genindex-split.html') |
|||
self.handle_page('genindex-all', genindexcontext, |
|||
'genindex.html') |
|||
for (key, entries), count in zip(genindex, indexcounts): |
|||
ctx = {'key': key, 'entries': entries, 'count': count, |
|||
'genindexentries': genindex} |
|||
self.handle_page('genindex-' + key, ctx, |
|||
'genindex-single.html') |
|||
else: |
|||
self.handle_page('genindex', genindexcontext, 'genindex.html') |
|||
|
|||
def get_builder(app): |
|||
"""This is necessary because RTD injects their own for some reason.""" |
|||
try: |
|||
original = app.registry.builders['readthedocs'] |
|||
except KeyError: |
|||
return DPYStandaloneHTMLBuilder |
|||
else: |
|||
injected_mro = tuple(base if base is not StandaloneHTMLBuilder else DPYStandaloneHTMLBuilder |
|||
for base in original.mro()[1:]) |
|||
return type(original.__name__, injected_mro, {'name': 'readthedocs'}) |
|||
|
|||
def setup(app): |
|||
app.add_builder(get_builder(app), override=True) |
Loading…
Reference in new issue