File tree Expand file tree Collapse file tree 1 file changed +19
-0
lines changed
sphinx/transforms/post_transforms Expand file tree Collapse file tree 1 file changed +19
-0
lines changed Original file line number Diff line number Diff line change @@ -390,11 +390,30 @@ def run(self, **kwargs: Any) -> None:
390390 node ['classes' ].append (node .parent ['domain' ])
391391
392392
393+ class PrefixIdsWithDocname (SphinxPostTransform ):
394+ """Prefix all ids with the docname, to ensure unique refid in singlehtml."""
395+
396+ default_priority = 300
397+
398+ def run (self , ** kwargs : Any ) -> None :
399+ builder = self .env ._app .builder
400+ if builder .name != 'singlehtml' :
401+ return
402+ for node in self .document .findall ():
403+ if 'refid' in node or 'ids' in node :
404+ docname = node .document .settings .env .path2doc (node .document ['source' ])
405+ if 'refid' in node :
406+ node ['refid' ] = 'document-' + docname + '#' + node ['refid' ]
407+ if 'ids' in node :
408+ node ['ids' ] = ['document-' + docname + '#' + id for id in node ['ids' ]]
409+
410+
393411def setup (app : Sphinx ) -> ExtensionMetadata :
394412 app .add_post_transform (ReferencesResolver )
395413 app .add_post_transform (OnlyNodeTransform )
396414 app .add_post_transform (SigElementFallbackTransform )
397415 app .add_post_transform (PropagateDescDomain )
416+ app .add_post_transform (PrefixIdsWithDocname )
398417
399418 return {
400419 'version' : 'builtin' ,
You can’t perform that action at this time.
0 commit comments