mod: разделение функциональности по файлам
This commit is contained in:
parent
bc20296729
commit
b64354f85b
47
etpgrf/typograph.py
Normal file
47
etpgrf/typograph.py
Normal file
@ -0,0 +1,47 @@
|
||||
from etpgrf.config import UTF, MNEMO_CODE
|
||||
from etpgrf.comutil import parse_and_validate_langs
|
||||
from etpgrf.hyphenation import Hyphenator
|
||||
|
||||
|
||||
# --- Основной класс Typographer ---
|
||||
class Typographer:
|
||||
def __init__(self,
|
||||
langs: str | list[str] | tuple[str, ...] | frozenset[str] = 'ru',
|
||||
code_out: str = 'mnemo',
|
||||
hyphenation_rule: Hyphenator | None = None, # Перенос слов и параметры расстановки переносов
|
||||
# glue_prepositions_rule: GluePrepositionsRule | None = None, # Для других правил
|
||||
# ... другие модули правил ...
|
||||
):
|
||||
|
||||
# --- Обработка и валидация параметра langs ---
|
||||
self.langs: frozenset[str] = parse_and_validate_langs(langs)
|
||||
|
||||
# --- Обработка и валидация параметра code_out ---
|
||||
if code_out not in MNEMO_CODE | UTF:
|
||||
raise ValueError(f"etpgrf: code_out '{code_out}' is not supported. Supported codes: {MNEMO_CODE | UTF}")
|
||||
|
||||
# Сохраняем переданные модули правил
|
||||
self.hyphenation_rule = hyphenation_rule
|
||||
|
||||
# TODO: вынести все соответствия UTF ⇄ MNEMO_CODE в отдельный класс
|
||||
# self.hyphen_char = "" if code_out in UTF else "­" # Мягкий перенос по умолчанию
|
||||
|
||||
# Конвейер для обработки текста
|
||||
def process(self, text: str) -> str:
|
||||
processed_text = text
|
||||
if self.hyphenation_rule:
|
||||
# Передаем активные языки и символ переноса, если модуль Hyphenator
|
||||
# не получает их в своем __init__ напрямую от пользователя,
|
||||
# а конструируется с настройками по умолчанию, а потом конфигурируется.
|
||||
# В нашем примере Hyphenator уже получает их в __init__.
|
||||
processed_text = self.hyphenation_rule.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())
|
||||
|
||||
# ... вызовы других активных модулей правил ...
|
||||
return processed_text
|
||||
|
||||
# def _get_nbsp(self): # Пример получения неразрывного пробела
|
||||
# return "\u00A0" if self.code_out in UTF else " "
|
||||
|
Loading…
x
Reference in New Issue
Block a user