From 1498e565797c32d45f200c0a7a62f3b78f414761 Mon Sep 17 00:00:00 2001 From: DokoGen Date: Mon, 3 Aug 2026 17:40:04 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B8=D0=BD=D0=B8=D1=86=D0=B8=D0=B0?= =?UTF-8?q?=D0=BB=D1=8B=20=D0=A4=D0=98=D0=9E=20=D0=BD=D0=B5=20=D1=82=D0=B5?= =?UTF-8?q?=D1=80=D1=8F=D0=BB=D0=B8=20=D0=BE=D1=82=D1=87=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B2=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - get_short_fio/get_initials: 'Черник В.Н.' превращалось в 'Черник В.' (терялся инициал отчества) — добавлена функция _initial, которая сохраняет уже сокращённые инициалы ('В.Н.') как есть --- dokogen/declension.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) 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