diff options
Diffstat (limited to 'sphinx/util/index_entries.py')
-rw-r--r-- | sphinx/util/index_entries.py | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/sphinx/util/index_entries.py b/sphinx/util/index_entries.py new file mode 100644 index 0000000..1004684 --- /dev/null +++ b/sphinx/util/index_entries.py @@ -0,0 +1,27 @@ +from __future__ import annotations + + +def split_index_msg(entry_type: str, value: str) -> list[str]: + # new entry types must be listed in util/nodes.py! + if entry_type == 'single': + try: + return _split_into(2, 'single', value) + except ValueError: + return _split_into(1, 'single', value) + if entry_type == 'pair': + return _split_into(2, 'pair', value) + if entry_type == 'triple': + return _split_into(3, 'triple', value) + if entry_type in {'see', 'seealso'}: + return _split_into(2, 'see', value) + msg = f'invalid {entry_type} index entry {value!r}' + raise ValueError(msg) + + +def _split_into(n: int, type: str, value: str) -> list[str]: + """Split an index entry into a given number of parts at semicolons.""" + parts = [x.strip() for x in value.split(';', n - 1)] + if len(list(filter(None, parts))) < n: + msg = f'invalid {type} index entry {value!r}' + raise ValueError(msg) + return parts |