diff --git a/dokogen/declension.py b/dokogen/declension.py index 8e052b5..2ba8fe6 100644 --- a/dokogen/declension.py +++ b/dokogen/declension.py @@ -196,15 +196,26 @@ def _is_quoted(word: str) -> bool: # ==================== ФОРМАТИРОВАНИЕ ФИО ==================== +def _initial(word: str) -> str: + """Инициал из слова: если уже с точкой — вернуть как есть, + иначе первая буква + точка. «В.Н.» → «В.Н.», «Владимир» → «В.»""" + w = word.strip() + if not w: + return '' + if w.endswith('.'): + return w + return w[0] + '.' + + def get_short_fio(fio: str) -> str: """Фамилия И.О.""" if not fio: return "" parts = fio.split() if len(parts) >= 2: - initials = parts[1][0] + "." + initials = _initial(parts[1]) if len(parts) >= 3: - initials += parts[2][0] + "." + initials += _initial(parts[2]) return parts[0] + " " + initials return fio @@ -215,8 +226,8 @@ def get_initials(fio: str) -> str: return "" parts = fio.split() if len(parts) >= 2: - initials = parts[1][0] + "." + initials = _initial(parts[1]) if len(parts) >= 3: - initials += parts[2][0] + "." + initials += _initial(parts[2]) return initials + " " + parts[0] return fio