summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Lykke Andersen <Jakob@caput.dk>2022-01-16 09:40:23 +0100
committerJakob Lykke Andersen <Jakob@caput.dk>2022-01-16 09:48:29 +0100
commit6ee0ecbe40ab8a3251538409cf35ffcc04765bfa (patch)
treee94d6c33e527a3b5afc1b3bee33338bad6a7cd07
parent3bf8bcd6e151a78b0dd003a3e76ff4c65566b6e6 (diff)
downloadsphinx-git-6ee0ecbe40ab8a3251538409cf35ffcc04765bfa.tar.gz
intersphinx role, simplify role name matching
-rw-r--r--sphinx/ext/intersphinx.py27
1 files changed, 13 insertions, 14 deletions
diff --git a/sphinx/ext/intersphinx.py b/sphinx/ext/intersphinx.py
index d35a9d9b9..f19f5fa15 100644
--- a/sphinx/ext/intersphinx.py
+++ b/sphinx/ext/intersphinx.py
@@ -26,6 +26,7 @@
import concurrent.futures
import functools
import posixpath
+import re
import sys
import time
from os import path
@@ -485,6 +486,11 @@ class IntersphinxDispatcher(CustomReSTDispatcher):
class IntersphinxRole(SphinxRole):
+ # group 1: just for the optionality of the inventory name
+ # group 2: the inventory name (optional)
+ # group 3: the domain:role or role part
+ _re_inv_ref = re.compile(r"(\+([^:]+))?:(.*)")
+
def __init__(self, orig_name: str) -> None:
self.orig_name = orig_name
@@ -513,20 +519,13 @@ class IntersphinxRole(SphinxRole):
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:]
- 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
+ # either we have an explicit inventory name, i.e,
+ # :external+inv:role: or
+ # :external+inv:domain:role:
+ # or we look in all inventories, i.e.,
+ # :external:role: or
+ # :external:domain:role:
+ return IntersphinxRole._re_inv_ref.fullmatch(name, 8).group(2, 3)
def get_role_name(self, name: str) -> Optional[Tuple[str, str]]:
names = name.split(':')