Skip to content

Commit e21552f

Browse files
committed
:external+inv:**: instead of :external:inv+**:
1 parent 0f2be81 commit e21552f

File tree

2 files changed

+18
-13
lines changed

2 files changed

+18
-13
lines changed

sphinx/ext/intersphinx.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -473,12 +473,12 @@ def missing_reference(app: Sphinx, env: BuildEnvironment, node: pending_xref,
473473
class IntersphinxDispatcher(CustomReSTDispatcher):
474474
"""Custom dispatcher for external role.
475475
476-
This enables :external:***: roles on parsing reST document.
476+
This enables :external:***:/:external+***: roles on parsing reST document.
477477
"""
478478

479479
def role(self, role_name: str, language_module: ModuleType, lineno: int, reporter: Reporter
480480
) -> Tuple[RoleFunction, List[system_message]]:
481-
if role_name.split(':')[0] == 'external':
481+
if len(role_name) > 9 and role_name.startswith('external') and role_name[8] in ':+':
482482
return IntersphinxRole(role_name), []
483483
else:
484484
return super().role(role_name, language_module, lineno, reporter)
@@ -511,16 +511,21 @@ def run(self) -> Tuple[List[Node], List[system_message]]:
511511
return result, messages
512512

513513
def get_inventory_and_name_suffix(self, name: str) -> Tuple[Optional[str], Optional[str]]:
514-
assert name.startswith('external:'), name
514+
assert name.startswith('external'), name
515+
assert name[8] in ':+', name
516+
typ = name[8]
515517
name = name[9:]
516-
inv_names = name.split('+')
517-
inventory = None
518-
if len(inv_names) > 1:
519-
# inv+role
520-
# inv+domain:role
521-
inventory = inv_names[0]
522-
name = name[len(inventory) + 1:]
523-
return inventory, name
518+
if typ == '+':
519+
# we have an explicit inventory name, i.e,
520+
# :external+inv:role: or
521+
# :external+inv:domain:role:
522+
return name.split(':', 1)
523+
else:
524+
assert typ == ':'
525+
# we look in all inventories, i.e.,
526+
# :external:role: or
527+
# :external:domain:role:
528+
return None, name
524529

525530
def get_role_name(self, name: str) -> Optional[Tuple[str, str]]:
526531
names = name.split(':')

tests/roots/test-ext-intersphinx-role/index.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@
3535

3636

3737
- a function with explicit inventory:
38-
:external:inv+c:func:`CFunc`
38+
:external+inv:c:func:`CFunc`
3939
- a class with explicit non-existing inventory, which also has upper-case in name:
40-
:external:invNope+cpp:class:`foo::Bar`
40+
:external+invNope:cpp:class:`foo::Bar`
4141

4242

4343
- explicit title:

0 commit comments

Comments
 (0)