mod: Висячая пунктуация в конвейре

This commit is contained in:
2025-12-23 17:19:42 +03:00
parent 22ddf6ef11
commit 80dde55f42

View File

@@ -14,6 +14,7 @@ from etpgrf.quotes import QuotesProcessor
from etpgrf.layout import LayoutProcessor
from etpgrf.symbols import SymbolsProcessor
from etpgrf.sanitizer import SanitizerProcessor
from etpgrf.hanging import HangingPunctuationProcessor
from etpgrf.codec import decode_to_unicode, encode_from_unicode
from etpgrf.config import PROTECTED_HTML_TAGS, SANITIZE_ALL_HTML
@@ -34,6 +35,7 @@ class Typographer:
layout: LayoutProcessor | bool | None = True, # Правила для тире и спецсимволов
symbols: SymbolsProcessor | bool | None = True, # Правила для псевдографики
sanitizer: SanitizerProcessor | str | bool | None = None, # Правила очистки
hanging_punctuation: str | bool | list[str] | None = None, # Висячая пунктуация
# ... другие модули правил ...
):
@@ -96,6 +98,11 @@ class Typographer:
elif sanitizer: # Если передана строка режима или True
self.sanitizer = SanitizerProcessor(mode=sanitizer)
# J. --- Конфигурация висячей пунктуации ---
self.hanging: HangingPunctuationProcessor | None = None
if hanging_punctuation:
self.hanging = HangingPunctuationProcessor(mode=hanging_punctuation)
# Z. --- Логирование инициализации ---
logger.debug(f"Typographer `__init__`: langs: {self.langs}, mode: {self.mode}, "
f"hyphenation: {self.hyphenation is not None}, "
@@ -104,6 +111,7 @@ class Typographer:
f"layout: {self.layout is not None}, "
f"symbols: {self.symbols is not None}, "
f"sanitizer: {self.sanitizer is not None}, "
f"hanging: {self.hanging is not None}, "
f"process_html: {self.process_html}")
@@ -216,6 +224,11 @@ class Typographer:
# который применит все остальные правила к каждому текстовому узлу.
self._walk_tree(soup)
# --- ЭТАП 4.5: Висячая пунктуация ---
# Применяем после всех текстовых преобразований, но перед финальной сборкой
if self.hanging:
self.hanging.process(soup)
# --- ЭТАП 5: Финальная сборка ---
processed_html = str(soup)
# BeautifulSoup по умолчанию экранирует амперсанды (& -> &), которые мы сгенерировали