disnake
81 строка · 2.7 Кб
1# SPDX-License-Identifier: MIT
2from __future__ import annotations3
4import functools5import inspect6from typing import TYPE_CHECKING, Any7
8from sphinx.environment.adapters.indexentries import IndexEntries9
10if TYPE_CHECKING:11from docutils import nodes12from sphinx.application import Sphinx13from sphinx.config import Config14from sphinx.writers.html5 import HTML5Translator15
16from ._types import SphinxExtensionMeta17
18if TYPE_CHECKING:19translator_base = HTML5Translator20else:21translator_base = object22
23
24class CustomHTML5TranslatorMixin(translator_base):25def visit_table(self, node: nodes.table) -> None:26self.body.append('<div class="table-wrapper">')27super().visit_table(node)28
29def depart_table(self, node: nodes.table) -> None:30super().depart_table(node)31self.body.append("</div>")32
33
34def set_translator(app: Sphinx) -> None:35if app.builder.format != "html":36return37
38# Insert the `CustomHTML5TranslatorMixin` mixin into all defined39# translator types, as well as the default translator if not registered already40
41translators = app.registry.translators.copy()42translators.setdefault(app.builder.name, app.builder.default_translator_class)43
44for name, cls in translators.items():45translator = type(46"CustomHTML5Translator",47(CustomHTML5TranslatorMixin, cls),48{},49)50app.set_translator(name, translator, override=True)51
52
53def patch_genindex(*args: Any) -> None:54# Instead of overriding `write_genindex` in a custom builder and55# copying the entire method body while only changing one parameter (group_entries),56# we just patch the method we want to change instead.57new_create_index = functools.partialmethod(IndexEntries.create_index, group_entries=False)58IndexEntries.create_index = new_create_index # type: ignore59
60
61def disable_mathjax(app: Sphinx, config: Config) -> None:62# prevent installation of mathjax script, which gets installed due to63# https://github.com/readthedocs/sphinx-hoverxref/commit/7c4655092c482bd414b1816bdb4f393da117062a64#65# inspired by https://github.com/readthedocs/sphinx-hoverxref/blob/003b84fee48262f1a969c8143e63c177bd98aa26/hoverxref/extension.py#L15166
67for listener in app.events.listeners.get("html-page-context", []):68module_name = inspect.getmodule(listener.handler).__name__69if module_name == "sphinx.ext.mathjax":70app.disconnect(listener.id)71
72
73def setup(app: Sphinx) -> SphinxExtensionMeta:74app.connect("config-inited", patch_genindex)75app.connect("config-inited", disable_mathjax)76app.connect("builder-inited", set_translator)77
78return {79"parallel_read_safe": True,80"parallel_write_safe": True,81}82