Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/sphinx-doc/sphinx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Lykke Andersen <Jakob@caput.dk>2022-01-15 16:02:21 +0300
committerJakob Lykke Andersen <Jakob@caput.dk>2022-01-16 11:48:11 +0300
commitc11b109d591a74f87de071ec4782ac3ab782ea38 (patch)
treea8222bb2a7540303cd9d0f745a73d795c103a015
parent9589a2bc0531598cdd69f260f2f2c2dbc5852d6e (diff)
intersphinx role: :external+inv:**: instead of :external:inv+**:
-rw-r--r--sphinx/ext/intersphinx.py30
-rw-r--r--tests/roots/test-ext-intersphinx-role/index.rst4
2 files changed, 20 insertions, 14 deletions
diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py
index 5cbc59a96..d35a9d9b9 100644
--- a/sphinx/ext/intersphinx.py
+++ b/sphinx/ext/intersphinx.py
@@ -473,12 +473,12 @@ def missing_reference(app: Sphinx, env: BuildEnvironment, node: pending_xref,
class IntersphinxDispatcher(CustomReSTDispatcher):
"""Custom dispatcher for external role.
- This enables :external:***: roles on parsing reST document.
+ This enables :external:***:/:external+***: roles on parsing reST document.
"""
def role(self, role_name: str, language_module: ModuleType, lineno: int, reporter: Reporter
) -> Tuple[RoleFunction, List[system_message]]:
- if role_name.split(':')[0] == 'external':
+ if len(role_name) > 9 and role_name.startswith('external') and role_name[8] in ':+':
return IntersphinxRole(role_name), []
else:
return super().role(role_name, language_module, lineno, reporter)
@@ -510,17 +510,23 @@ class IntersphinxRole(SphinxRole):
return result, messages
- def get_inventory_and_name_suffix(self, name: str) -> Tuple[Optional[str], Optional[str]]:
- assert name.startswith('external:'), name
+ def get_inventory_and_name_suffix(self, name: str) -> Tuple[Optional[str], str]:
+ assert name.startswith('external'), name
+ assert name[8] in ':+', name
+ typ = name[8]
name = name[9:]
- inv_names = name.split('+')
- inventory = None
- if len(inv_names) > 1:
- # inv+role
- # inv+domain:role
- inventory = inv_names[0]
- name = name[len(inventory) + 1:]
- return inventory, name
+ if typ == '+':
+ # we have an explicit inventory name, i.e,
+ # :external+inv:role: or
+ # :external+inv:domain:role:
+ inv, name = name.split(':', 1)
+ return inv, name
+ else:
+ assert typ == ':'
+ # we look in all inventories, i.e.,
+ # :external:role: or
+ # :external:domain:role:
+ return None, name
def get_role_name(self, name: str) -> Optional[Tuple[str, str]]:
names = name.split(':')
diff --git a/tests/roots/test-ext-intersphinx-role/index.rst b/tests/roots/test-ext-intersphinx-role/index.rst
index 5c2cdbd00..58edb7a1a 100644
--- a/tests/roots/test-ext-intersphinx-role/index.rst
+++ b/tests/roots/test-ext-intersphinx-role/index.rst
@@ -35,9 +35,9 @@
- a function with explicit inventory:
- :external:inv+c:func:`CFunc`
+ :external+inv:c:func:`CFunc`
- a class with explicit non-existing inventory, which also has upper-case in name:
- :external:invNope+cpp:class:`foo::Bar`
+ :external+invNope:cpp:class:`foo::Bar`
- explicit title: