From 67c17ff5368786cae38b33af00beed684701c397 Mon Sep 17 00:00:00 2001 From: erjemin Date: Thu, 26 Feb 2026 18:27:54 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0,=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B3=D0=B4=D0=B0=20=D1=82=D0=B8=D1=80=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D1=85=D0=BE=D0=B4=D0=B8=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=83=20?= =?UTF-8?q?=D1=82=D0=B5=D0=B3=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etpgrf/layout.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/etpgrf/layout.py b/etpgrf/layout.py index 4d37d09..f587a22 100644 --- a/etpgrf/layout.py +++ b/etpgrf/layout.py @@ -5,7 +5,7 @@ import regex import logging from etpgrf.config import (LANG_RU, LANG_EN, CHAR_NBSP, CHAR_THIN_SP, CHAR_NDASH, CHAR_MDASH, CHAR_HELLIP, CHAR_UNIT_SEPARATOR, DEFAULT_POST_UNITS, DEFAULT_PRE_UNITS, UNIT_MATH_OPERATORS, - ABBR_COMMON_FINAL, ABBR_COMMON_PREPOSITION) + ABBR_COMMON_FINAL, ABBR_COMMON_PREPOSITION, CHAR_NODE_SEPARATOR) from etpgrf.comutil import parse_and_validate_langs @@ -35,14 +35,17 @@ class LayoutProcessor: self.main_lang = self.langs[0] if self.langs else LANG_RU self.process_initials_and_acronyms = process_initials_and_acronyms self.process_units = process_units + # Экранируем разделитель для использования в regex + sep = regex.escape(CHAR_NODE_SEPARATOR) + # 1. Паттерн для длинного (—) или среднего (–) тире, окруженного пробелами. - # (?<=[\p{L}\p{Po}\p{Pf}"\']) - просмотр назад на букву, пунктуацию или кавычку. - self._dash_pattern = regex.compile(rf'(?<=[\p{{L}}\p{{Po}}\p{{Pf}}"\'])\s+([{CHAR_MDASH}{CHAR_NDASH}])\s+(?=\S)') + # (?<=[\p{L}\p{Po}\p{Pf}"\']|sep) - просмотр назад на букву, пунктуацию, кавычку ИЛИ разделитель узлов. + self._dash_pattern = regex.compile(rf'(?<=[\p{{L}}\p{{Po}}\p{{Pf}}"\']|{sep})\s+([{CHAR_MDASH}{CHAR_NDASH}])\s+(?=\S)') # 2. Паттерн для многоточия, за которым следует пробел и слово. # Ставит неразрывный пробел после многоточия, чтобы не отрывать его от следующего слова. - # (?=[\p{L}\p{N}]) - просмотр вперед на букву или цифру. - self._ellipsis_pattern = regex.compile(rf'({CHAR_HELLIP})\s+(?=[\p{{L}}\p{{N}}])') + # (?=[\p{L}\p{N}]|sep) - просмотр вперед на букву или цифру ИЛИ разделитель узлов. + self._ellipsis_pattern = regex.compile(rf'({CHAR_HELLIP})\s+(?=[\p{{L}}\p{{N}}]|{sep})') # 3. Паттерн для отрицательных чисел. # Ставит неразрывный пробел перед знаком минус, если за минусом идет цифра (неразрывный пробел