add: правило для ×
This commit is contained in:
@@ -797,6 +797,7 @@ HANGING_PUNCTUATION_SYMBOLS_CLASSES = {
|
||||
# Левая пунктуация: все классы начинаются с 'etp-l'
|
||||
CHAR_RU_QUOT1_OPEN: 'etp-laquo', # ` «` -- левая открывающая кавычка-ёлочка
|
||||
CHAR_EN_QUOT1_OPEN: 'etp-ldquo', # ` “` -- левая открывающая кавычка-лапка
|
||||
CHAR_EN_QUOT2_OPEN: 'etp-lsquo', # ` ‘` -- левая открывающая кавычка-апостроф (одинарная)
|
||||
CHAR_LPAR: 'etp-lpar', # ` (` -- левая открывающая скобка
|
||||
CHAR_LSQB: 'etp-lsqb', # ` [` -- левая открывающая квадратная скобка
|
||||
CHAR_LCUB: 'etp-lcub', # ` {` -- левая открывающая фигурная скобка
|
||||
@@ -805,6 +806,7 @@ HANGING_PUNCTUATION_SYMBOLS_CLASSES = {
|
||||
# Правая пунктуация: все классы начинаются с 'etp-r'
|
||||
CHAR_RU_QUOT1_CLOSE: 'etp-raquo', # `» ` -- правая закрывающая кавычка-ёлочка
|
||||
CHAR_EN_QUOT1_CLOSE: 'etp-rdquo', # `” ` -- правая закрывающая кавычка-лапка
|
||||
CHAR_EN_QUOT2_CLOSE: 'etp-rsquo', # `’ ` -- правая закрывающая кавычка-апостроф (одинарная)
|
||||
CHAR_RPAR: 'etp-rpar', # `) ` -- правая закрывающая скобка
|
||||
CHAR_RSQB: 'etp-rsqb', # `] ` -- правая закрывающая квадратная скобка
|
||||
CHAR_RCUB: 'etp-rcub', # `} ` -- правая закрывающая фигурная скобка
|
||||
@@ -824,6 +826,7 @@ HANGING_PUNCTUATION_SPACE_CLASSES = {
|
||||
# Для левой пунктуации (компенсационный пробел слева от висячей пунктуации)
|
||||
CHAR_RU_QUOT1_OPEN: 'etp-sp-laquo', # ` «` -- для пробела пред открывающей кавычкой-ёлочкой
|
||||
CHAR_EN_QUOT1_OPEN: 'etp-sp-ldquo', # ` “` -- для пробела пред открывающей кавычкой-лапкой
|
||||
CHAR_EN_QUOT2_OPEN: 'etp-sp-lsquo', # ` ‘` -- для пробела пред открывающей кавычкой-апострофом (одинарной)
|
||||
CHAR_LPAR: 'etp-sp-lpar', # ` (` -- для пробела пред левой открывающей скобкой
|
||||
CHAR_LSQB: 'etp-sp-lsqb', # ` [` -- для пробела пред левой открывающей квадратной скобкой
|
||||
CHAR_LCUB: 'etp-sp-lcub', # ` {` -- для пробела пред левой открывающей фигурной скобкой
|
||||
@@ -832,6 +835,7 @@ HANGING_PUNCTUATION_SPACE_CLASSES = {
|
||||
# Для правой пунктуации (компенсационный пробел справа от висячей пунктуации)
|
||||
CHAR_RU_QUOT1_CLOSE: 'etp-sp-raquo', # `» ` -- для пробела после закрывающей кавычки-ёлочки
|
||||
CHAR_EN_QUOT1_CLOSE: 'etp-sp-rdquo', # `” ` -- для пробела после закрывающей кавычки-лапки
|
||||
CHAR_EN_QUOT2_CLOSE: 'etp-sp-rsquo', # `’ ` -- для пробела после закрывающей кавычки-апострофом (одинарной)
|
||||
CHAR_RPAR: 'etp-sp-rpar', # `) ` -- для пробела после правой закрывающей скобки
|
||||
CHAR_RSQB: 'etp-sp-rsqb', # `] ` -- для пробела после правой закрывающей квадратной скобки
|
||||
CHAR_RCUB: 'etp-sp-rcub', # `} ` -- для пробела после правой закрывающей фигурной скобки
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
import regex
|
||||
import logging
|
||||
from .config import CHAR_NDASH, STR_TO_SYMBOL_REPLACEMENTS
|
||||
from .config import CHAR_NDASH, CHAR_NBSP, CHAR_TIMES, STR_TO_SYMBOL_REPLACEMENTS
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -20,6 +20,7 @@ class SymbolsProcessor:
|
||||
# Паттерн для диапазонов: цифра-дефис-цифра -> цифра–цифра (среднее тире).
|
||||
# Обрабатываем арабские и римские цифры.
|
||||
self._range_pattern = regex.compile(pattern=r'(\d)-(\d)|([IVXLCDM]+)-([IVXLCDM]+)', flags=regex.IGNORECASE)
|
||||
self._times_pattern = regex.compile(pattern=r'(?<=\d)(?P<pre>\s*)(?P<letter>[xхXХ])(?P<post>\s*)(?=\d)')
|
||||
|
||||
logger.debug("SymbolsProcessor `__init__`")
|
||||
|
||||
@@ -31,6 +32,14 @@ class SymbolsProcessor:
|
||||
return f'{match.group(3)}{CHAR_NDASH}{match.group(4)}'
|
||||
return match.group(0) # На всякий случай
|
||||
|
||||
def _replace_times(self, match: regex.Match) -> str:
|
||||
# Встраивает CHAR_TIMES между цифрами и защищает его от переноса
|
||||
pre = match.group('pre')
|
||||
post = match.group('post')
|
||||
before = CHAR_NBSP if pre else ''
|
||||
after = CHAR_NBSP if post else ''
|
||||
return f'{before}{CHAR_TIMES}{after}'
|
||||
|
||||
|
||||
def process(self, text: str) -> str:
|
||||
# Шаг 1: Выполняем простые замены из списка `STR_TO_SYMBOL_REPLACEMENTS` (см. config.py).
|
||||
@@ -45,6 +54,7 @@ class SymbolsProcessor:
|
||||
# Шаг 2: Обрабатываем диапазоны с помощью регулярного выражения.
|
||||
# Эта замена более специфична и требует контекста (цифры вокруг дефиса).
|
||||
processed_text = self._range_pattern.sub(self._replace_range, processed_text)
|
||||
processed_text = self._times_pattern.sub(self._replace_times, processed_text)
|
||||
|
||||
return processed_text
|
||||
|
||||
|
||||
Reference in New Issue
Block a user