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:
390
390
node ['classes' ].append (node .parent ['domain' ])
391
391
392
392
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
+
393
411
def setup (app : Sphinx ) -> ExtensionMetadata :
394
412
app .add_post_transform (ReferencesResolver )
395
413
app .add_post_transform (OnlyNodeTransform )
396
414
app .add_post_transform (SigElementFallbackTransform )
397
415
app .add_post_transform (PropagateDescDomain )
416
+ app .add_post_transform (PrefixIdsWithDocname )
398
417
399
418
return {
400
419
'version' : 'builtin' ,
You can’t perform that action at this time.
0 commit comments