mod: minor .

This commit is contained in:
2025-05-13 00:46:36 +03:00
parent 8b0efa26eb
commit f48dd5bb53
5 changed files with 47 additions and 31 deletions

View File

@@ -1,6 +1,5 @@
from etpgrf.comutil import parse_and_validate_mode, parse_and_validate_langs
from etpgrf.hyphenation import Hyphenator
import copy
# --- Основной класс Typographer ---
@@ -8,37 +7,41 @@ class Typographer:
def __init__(self,
langs: str | list[str] | tuple[str, ...] | frozenset[str] | None = None,
mode: str | None = None,
hyphenation_rule: Hyphenator | None = None, # Перенос слов и параметры расстановки переносов
hyphenation: Hyphenator | bool | None = True, # Перенос слов и параметры расстановки переносов
# glue_prepositions_rule: GluePrepositionsRule | None = None, # Для других правил
# ... другие модули правил ...
):
# --- Обработка и валидация параметра langs ---
# A. --- Обработка и валидация параметра langs ---
self.langs: frozenset[str] = parse_and_validate_langs(langs)
# --- Обработка и валидация параметра mode ---
# B. --- Обработка и валидация параметра mode ---
self.mode: str = parse_and_validate_mode(mode)
# Сохраняем переданные модули правил
if hyphenation_rule is not None:
# 1. Создаем поверхностную копию объекта hyphenation_rule.
self.hyphenation_rule = copy.copy(hyphenation_rule)
# 2. Наследуем режим типографа, если он не задан в hyphenation_rule.
if self.hyphenation_rule.mode is None:
self.hyphenation_rule.mode = self.mode
# 2. Наследуем языки от типографа, если они не заданы в hyphenation_rule.
if self.hyphenation_rule.langs is None:
self.hyphenation_rule.langs = self.langs
print("Typographer: langs:", self.langs, "// mode:", self.mode) # Для отладки
# C. --- Инициализация правила переноса ---
# Предпосылка: если вызвали типограф, значит, мы хотим обрабатывать текст и переносы тоже нужно расставлять.
# А для специальных случаев, когда переносы не нужны, пусть не ленятся и делают `hyphenation=False`.
self.hyphenation: Hyphenator | None = None
if hyphenation is True or hyphenation is None:
# 1. Создаем новый объект Hyphenator с заданными языками и режимом, а все остальное по умолчанию
self.hyphenation = Hyphenator(langs=self.langs, mode=self.mode)
elif isinstance(hyphenation, Hyphenator):
# 2. Если hyphenation - это объект Hyphenator, то просто сохраняем его (и используем его langs и mode)
self.hyphenation = hyphenation
elif hyphenation is False:
# 3. Если hyphenation - False, то правило переноса выключено.
self.hyphenation = None
else:
self.hyphenation_rule = hyphenation_rule
# 4. Если hyphenation что-то неведомое, то игнорируем его и правило переноса выключено
self.hyphenation = None
# D. --- Конфигурация других правил---
# Конвейер для обработки текста
def process(self, text: str) -> str:
processed_text = text
if self.hyphenation_rule:
if self.hyphenation is not None:
# Обработчик переносов (Hyphenator) активен. Обрабатываем текст...
processed_text = self.hyphenation_rule.hyp_in_text(processed_text)
processed_text = self.hyphenation.hyp_in_text(processed_text)
# if self.glue_prepositions_rule:
# processed_text = self.glue_prepositions_rule.hyp_in_text(processed_text, non_breaking_space_char=self._get_nbsp())