disnake

Форк
0
/
builder.py 
81 строка · 2.7 Кб
1
# SPDX-License-Identifier: MIT
2
from __future__ import annotations
3

4
import functools
5
import inspect
6
from typing import TYPE_CHECKING, Any
7

8
from sphinx.environment.adapters.indexentries import IndexEntries
9

10
if TYPE_CHECKING:
11
    from docutils import nodes
12
    from sphinx.application import Sphinx
13
    from sphinx.config import Config
14
    from sphinx.writers.html5 import HTML5Translator
15

16
    from ._types import SphinxExtensionMeta
17

18
if TYPE_CHECKING:
19
    translator_base = HTML5Translator
20
else:
21
    translator_base = object
22

23

24
class CustomHTML5TranslatorMixin(translator_base):
25
    def visit_table(self, node: nodes.table) -> None:
26
        self.body.append('<div class="table-wrapper">')
27
        super().visit_table(node)
28

29
    def depart_table(self, node: nodes.table) -> None:
30
        super().depart_table(node)
31
        self.body.append("</div>")
32

33

34
def set_translator(app: Sphinx) -> None:
35
    if app.builder.format != "html":
36
        return
37

38
    # Insert the `CustomHTML5TranslatorMixin` mixin into all defined
39
    # translator types, as well as the default translator if not registered already
40

41
    translators = app.registry.translators.copy()
42
    translators.setdefault(app.builder.name, app.builder.default_translator_class)
43

44
    for name, cls in translators.items():
45
        translator = type(
46
            "CustomHTML5Translator",
47
            (CustomHTML5TranslatorMixin, cls),
48
            {},
49
        )
50
        app.set_translator(name, translator, override=True)
51

52

53
def patch_genindex(*args: Any) -> None:
54
    # Instead of overriding `write_genindex` in a custom builder and
55
    # copying the entire method body while only changing one parameter (group_entries),
56
    # we just patch the method we want to change instead.
57
    new_create_index = functools.partialmethod(IndexEntries.create_index, group_entries=False)
58
    IndexEntries.create_index = new_create_index  # type: ignore
59

60

61
def disable_mathjax(app: Sphinx, config: Config) -> None:
62
    # prevent installation of mathjax script, which gets installed due to
63
    # https://github.com/readthedocs/sphinx-hoverxref/commit/7c4655092c482bd414b1816bdb4f393da117062a
64
    #
65
    # inspired by https://github.com/readthedocs/sphinx-hoverxref/blob/003b84fee48262f1a969c8143e63c177bd98aa26/hoverxref/extension.py#L151
66

67
    for listener in app.events.listeners.get("html-page-context", []):
68
        module_name = inspect.getmodule(listener.handler).__name__
69
        if module_name == "sphinx.ext.mathjax":
70
            app.disconnect(listener.id)
71

72

73
def setup(app: Sphinx) -> SphinxExtensionMeta:
74
    app.connect("config-inited", patch_genindex)
75
    app.connect("config-inited", disable_mathjax)
76
    app.connect("builder-inited", set_translator)
77

78
    return {
79
        "parallel_read_safe": True,
80
        "parallel_write_safe": True,
81
    }
82

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.