5
5
from typing import TYPE_CHECKING
6
6
7
7
from docutils .writers .html5_polyglot import HTMLTranslator
8
+ from jinja2 .environment import Template
8
9
from sphinx import environment
9
10
10
11
from pep_sphinx_extensions .pep_processor .html import pep_html_builder
@@ -22,17 +23,32 @@ def _depart_maths():
22
23
pass # No-op callable for the type checker
23
24
24
25
25
- def _update_config_for_builder (app : Sphinx ):
26
+ def _update_config_for_builder (app : Sphinx ) -> None :
26
27
app .env .document_ids = {} # For PEPReferenceRoleTitleText
27
28
if app .builder .name == "dirhtml" :
28
29
app .env .settings ["pep_url" ] = "../pep-{:0>4}"
29
30
31
+ # internal_builder exists if Sphinx is run by build.py
32
+ if "internal_builder" not in app .tags :
33
+ app .connect ("build-finished" , _post_build ) # Post-build tasks
34
+
35
+
36
+ def _post_build (app : Sphinx , exception : Exception | None ) -> None :
37
+ from pathlib import Path
38
+
39
+ from build import create_index_file
40
+
41
+ if exception is not None :
42
+ return
43
+ create_index_file (Path (app .outdir ), app .builder .name )
44
+
30
45
31
46
def setup (app : Sphinx ) -> dict [str , bool ]:
32
47
"""Initialize Sphinx extension."""
33
48
34
49
environment .default_settings ["pep_url" ] = "pep-{:0>4}.html"
35
50
environment .default_settings ["halt_level" ] = 2 # Fail on Docutils warning
51
+ Template .render ._patched = True # don't modify rendered HTML
36
52
37
53
# Register plugin logic
38
54
app .add_builder (pep_html_builder .FileBuilder , override = True )
0 commit comments