add: наследование lang/mode при расстановке переносах в конвейере Типографа
This commit is contained in:
parent
ab63e02634
commit
4d9f4a798e
@ -15,8 +15,8 @@ class Hyphenator:
|
|||||||
"""Правила расстановки переносов для разных языков.
|
"""Правила расстановки переносов для разных языков.
|
||||||
"""
|
"""
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
langs: frozenset[str] = DEFAULT_LANGS, # Языки, которые обрабатываем в переносе слов
|
langs: frozenset[str] = None, # Языки, которые обрабатываем в переносе слов
|
||||||
mode: str = DEFAULT_MODE, # Режим обработки текста
|
mode: str = None, # Режим обработки текста
|
||||||
max_unhyphenated_len: int = 14, # Максимальная длина непереносимой группы
|
max_unhyphenated_len: int = 14, # Максимальная длина непереносимой группы
|
||||||
min_chars_per_part: int = 3): # Минимальная длина после переноса (хвост, который разрешено переносить)
|
min_chars_per_part: int = 3): # Минимальная длина после переноса (хвост, который разрешено переносить)
|
||||||
self.langs: frozenset[str] = parse_and_validate_langs(langs)
|
self.langs: frozenset[str] = parse_and_validate_langs(langs)
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
from etpgrf.config import DEFAULT_MODE, DEFAULT_LANGS
|
|
||||||
from etpgrf.comutil import parce_and_validate_mode, parse_and_validate_langs
|
from etpgrf.comutil import parce_and_validate_mode, parse_and_validate_langs
|
||||||
from etpgrf.hyphenation import Hyphenator
|
from etpgrf.hyphenation import Hyphenator
|
||||||
|
import copy
|
||||||
|
|
||||||
|
|
||||||
# --- Основной класс Typographer ---
|
# --- Основной класс Typographer ---
|
||||||
class Typographer:
|
class Typographer:
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
langs: str | list[str] | tuple[str, ...] | frozenset[str] = DEFAULT_LANGS,
|
langs: str | list[str] | tuple[str, ...] | frozenset[str] | None = None,
|
||||||
mode: str = DEFAULT_MODE,
|
mode: str | None = None,
|
||||||
hyphenation_rule: Hyphenator | None = None, # Перенос слов и параметры расстановки переносов
|
hyphenation_rule: Hyphenator | None = None, # Перенос слов и параметры расстановки переносов
|
||||||
# glue_prepositions_rule: GluePrepositionsRule | None = None, # Для других правил
|
# glue_prepositions_rule: GluePrepositionsRule | None = None, # Для других правил
|
||||||
# ... другие модули правил ...
|
# ... другие модули правил ...
|
||||||
@ -20,16 +20,24 @@ class Typographer:
|
|||||||
self.mode: str = parce_and_validate_mode(mode)
|
self.mode: str = parce_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
|
||||||
|
else:
|
||||||
self.hyphenation_rule = hyphenation_rule
|
self.hyphenation_rule = hyphenation_rule
|
||||||
|
|
||||||
|
|
||||||
# Конвейер для обработки текста
|
# Конвейер для обработки текста
|
||||||
def process(self, text: str) -> str:
|
def process(self, text: str) -> str:
|
||||||
processed_text = text
|
processed_text = text
|
||||||
if self.hyphenation_rule:
|
if self.hyphenation_rule:
|
||||||
# Передаем активные языки и символ переноса, если модуль Hyphenator
|
# Обработчик переносов (Hyphenator) активен. Обрабатываем текст...
|
||||||
# не получает их в своем __init__ напрямую от пользователя,
|
|
||||||
# а конструируется с настройками по умолчанию, а потом конфигурируется.
|
|
||||||
# В нашем примере Hyphenator уже получает их в __init__.
|
|
||||||
processed_text = self.hyphenation_rule.hyp_in_text(processed_text)
|
processed_text = self.hyphenation_rule.hyp_in_text(processed_text)
|
||||||
|
|
||||||
# if self.glue_prepositions_rule:
|
# if self.glue_prepositions_rule:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user