Skip to content

Commit 91eb05d

Browse files
committed
DOC: Format role and directive cross-references in ReST format
1 parent 886bb94 commit 91eb05d

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

sphinx/domains/rst.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,8 @@ class ReSTDomain(Domain):
230230
'role': ReSTRole,
231231
}
232232
roles = {
233-
'dir': XRefRole(),
234-
'role': XRefRole(),
233+
'dir': XRefRole(title_fmt=".. {title}::"),
234+
'role': XRefRole(title_fmt=":{title}:"),
235235
}
236236
initial_data: dict[str, dict[tuple[str, str], str]] = {
237237
'objects': {}, # fullname -> docname, objtype

sphinx/roles.py

+7
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ class XRefRole(ReferenceRole):
6161
* `lowercase` to lowercase the target
6262
* `nodeclass` and `innernodeclass` select the node classes for
6363
the reference and the content node
64+
* `title_fmt`: an optional format string using one ``{title}`` variable
65+
that can be used to customize the rendered text, e.g.
66+
``title_fmt=":{title}:"`
6467
6568
* Subclassing and overwriting `process_link()` and/or `result_nodes()`.
6669
"""
@@ -75,6 +78,7 @@ def __init__(
7578
nodeclass: type[Element] | None = None,
7679
innernodeclass: type[TextElement] | None = None,
7780
warn_dangling: bool = False,
81+
title_fmt: str | None = None
7882
) -> None:
7983
self.fix_parens = fix_parens
8084
self.lowercase = lowercase
@@ -83,6 +87,7 @@ def __init__(
8387
self.nodeclass = nodeclass
8488
if innernodeclass is not None:
8589
self.innernodeclass = innernodeclass
90+
self.title_fmt = title_fmt
8691

8792
super().__init__()
8893

@@ -145,6 +150,8 @@ def create_xref_node(self) -> tuple[list[Node], list[system_message]]:
145150
self.env, refnode, self.has_explicit_title, title, target
146151
)
147152
refnode['reftarget'] = target
153+
if self.title_fmt is not None:
154+
title = self.title_fmt.format(title=title)
148155
refnode += self.innernodeclass(self.rawtext, title, classes=self.classes)
149156

150157
return self.result_nodes(self.inliner.document, self.env, refnode, is_ref=True)

0 commit comments

Comments
 (0)