7070 from docutils .nodes import Node
7171
7272 from sphinx .application import Sphinx
73+ from sphinx .builders .html ._ctx import _GlobalContextHTML , _PageContext
7374 from sphinx .config import Config
7475 from sphinx .environment import BuildEnvironment
7576 from sphinx .util .typing import ExtensionMetadata
@@ -137,6 +138,8 @@ class StandaloneHTMLBuilder(Builder):
137138 imgpath : str = ''
138139 domain_indices : list [DOMAIN_INDEX_TYPE ] = []
139140
141+ globalcontext : _GlobalContextHTML
142+
140143 def __init__ (self , app : Sphinx , env : BuildEnvironment ) -> None :
141144 super ().__init__ (app , env )
142145
@@ -565,7 +568,7 @@ def prepare_writing(self, docnames: Set[str]) -> None:
565568 'html5_doctype' : True ,
566569 }
567570 if self .theme :
568- self .globalcontext |= {
571+ self .globalcontext |= { # type: ignore[typeddict-item]
569572 f'theme_{ key } ' : val
570573 for key , val in self .theme .get_options (self .theme_options ).items ()
571574 }
@@ -580,7 +583,7 @@ def get_doc_context(self, docname: str, body: str, metatags: str) -> dict[str, A
580583 # find out relations
581584 prev = next = None
582585 parents = []
583- rellinks = self .globalcontext ['rellinks' ][:]
586+ rellinks = list ( self .globalcontext ['rellinks' ])
584587 related = self .relations .get (docname )
585588 titles = self .env .titles
586589 if related and related [2 ]:
@@ -921,7 +924,7 @@ def copy_static_files(self) -> None:
921924 self ._static_dir .mkdir (parents = True , exist_ok = True )
922925
923926 # prepare context for templates
924- context = self .globalcontext .copy ()
927+ context : dict [ str , Any ] = self .globalcontext .copy () # type: ignore[assignment]
925928 if self .indexer is not None :
926929 context .update (self .indexer .context_for_searchtool ())
927930
@@ -1040,7 +1043,7 @@ def get_output_path(self, page_name: str, /) -> Path:
10401043 def get_outfilename (self , pagename : str ) -> _StrPath :
10411044 return _StrPath (self .get_output_path (pagename ))
10421045
1043- def add_sidebars (self , pagename : str , ctx : dict [ str , Any ] ) -> None :
1046+ def add_sidebars (self , pagename : str , ctx : _PageContext ) -> None :
10441047 def has_wildcard (pattern : str ) -> bool :
10451048 return any (char in pattern for char in '*?[' )
10461049
@@ -1080,7 +1083,7 @@ def handle_page(
10801083 outfilename : Path | None = None ,
10811084 event_arg : Any = None ,
10821085 ) -> None :
1083- ctx = self .globalcontext .copy ()
1086+ ctx : _PageContext = self .globalcontext .copy () # type: ignore[assignment]
10841087 # current_page_name is backwards compatibility
10851088 ctx ['pagename' ] = ctx ['current_page_name' ] = pagename
10861089 ctx ['encoding' ] = self .config .html_output_encoding
@@ -1124,7 +1127,7 @@ def hasdoc(name: str) -> bool:
11241127
11251128 ctx ['toctree' ] = lambda ** kwargs : self ._get_local_toctree (pagename , ** kwargs )
11261129 self .add_sidebars (pagename , ctx )
1127- ctx .update (addctx )
1130+ ctx .update (addctx ) # type: ignore[typeddict-item]
11281131
11291132 # 'blah.html' should have content_root = './' not ''.
11301133 ctx ['content_root' ] = (f'..{ SEP } ' * default_baseuri .count (SEP )) or f'.{ SEP } '
@@ -1261,7 +1264,7 @@ def js_tag(js: _JavaScript | str) -> str:
12611264 copyfile (self .env .doc2path (pagename ), source_file_path , force = True )
12621265
12631266 def update_page_context (
1264- self , pagename : str , templatename : str , ctx : dict [ str , Any ] , event_arg : Any
1267+ self , pagename : str , templatename : str , ctx : _PageContext , event_arg : Any
12651268 ) -> None :
12661269 pass
12671270
0 commit comments