Skip to content

Commit 9be97b7

Browse files
committed
[singlehtml]: append docname to section id
Use doc path to make ids unique.
1 parent 18ca1b6 commit 9be97b7

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

sphinx/transforms/post_transforms/__init__.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
393411
def 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',

0 commit comments

Comments
 (0)