mod: правки для версии 0.1.3
This commit is contained in:
16
CHANGELOG.md
16
CHANGELOG.md
@@ -5,22 +5,20 @@
|
||||
Формат основан на [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
и этот проект придерживается [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [0.1.2] - 2025-05-02
|
||||
## [0.1.3] - 2026-01-11
|
||||
### Исправлено
|
||||
- **Критическое исправление:** Добавлена отсутствующая зависимость `regex` в `pyproject.toml`. Без неё библиотека
|
||||
падала при импорте.
|
||||
- Исправлена проблема с появлением лишних тегов `<html>` и `<body>` при обработке фрагментов HTML (когда используется парсер `lxml`). Теперь типограф автоматически определяет, был ли на входе полноценный документ или фрагмент, и возвращает соответствующий результат.
|
||||
|
||||
### Добавлено
|
||||
- Файл `LIBRARY_SPECS.md` для LLM.
|
||||
## [0.1.2] - 2025-12-27
|
||||
### Исправлено
|
||||
- **Критическое исправление:** Добавлена отсутствующая зависимость `regex` в `pyproject.toml`. Без неё библиотека падала при импорте.
|
||||
|
||||
|
||||
## [0.1.1] - 2025-05-02
|
||||
## [0.1.1] - 2025-12-23
|
||||
### Добавлено
|
||||
- Ссылки на зеркала репозитория (GitVerse, Gitea) в `pyproject.toml` и `README.md`.
|
||||
- Раздел Credits в документации.
|
||||
|
||||
|
||||
## [0.1.0] - 2025-05-01
|
||||
## [0.1.0] - 2025-12-23
|
||||
### Добавлено
|
||||
- Первый публичный релиз библиотеки `etpgrf`.
|
||||
- Основные модули:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Библиотека etpgrf: Контекст и Спецификация для LLM
|
||||
# Библиотека etpgrf: Контекст и Спецификация
|
||||
|
||||
Этот документ описывает архитектуру и API библиотеки `etpgrf` (Electro-Typographer), предназначенной для типографирования текста в вебе. Используйте этот контекст при разработке зависимых проектов (например, веб-сайтов).
|
||||
|
||||
@@ -16,14 +16,20 @@
|
||||
* **Язык:** Python 3.10+.
|
||||
* **Зависимости:** `beautifulsoup4`, `lxml`, `regex`.
|
||||
* **Главный класс:** `etpgrf.Typographer`.
|
||||
* **Принцип работы:**
|
||||
1. Принимает текст или HTML.
|
||||
2. Если HTML: парсит через `BeautifulSoup` (lxml), очищает от старой разметки (Sanitizer).
|
||||
3. Извлекает текстовые узлы, склеивает их в "супер-строку" для контекстных правил (кавычки).
|
||||
4. Применяет правила к тексту.
|
||||
5. Восстанавливает структуру HTML.
|
||||
6. Применяет висячую пунктуацию (модификация дерева DOM).
|
||||
7. Возвращает строку.
|
||||
* **Принцип работы (Pipeline):**
|
||||
1. **Анализ структуры:** Типограф проверяет, является ли входной текст полным HTML-документом (есть `<html>`, `<body>`) или фрагментом. Это важно для корректной сборки на выходе.
|
||||
2. **Парсинг и Санитизация:** Текст парсится через `BeautifulSoup` (предпочтительно `lxml`). Если включен санитайзер, происходит очистка от старой разметки (удаление висячей пунктуации или всех тегов).
|
||||
3. **Подготовка (Токенизация):** Извлекаются все текстовые узлы (`NavigableString`), которые склеиваются в одну "супер-строку". Это позволяет правилам видеть контекст через границы тегов (например, кавычка в `<b>` и слово после него).
|
||||
4. **Контекстная обработка:** К "супер-строке" применяются правила, требующие глобального контекста:
|
||||
* `QuotesProcessor`: расстановка кавычек.
|
||||
* `Unbreakables`: привязка предлогов и союзов.
|
||||
5. **Восстановление структуры:** Обработанная "супер-строка" аккуратно нарезается обратно и раскладывается по исходным текстовым узлам DOM-дерева.
|
||||
6. **Локальная обработка:** Запускается рекурсивный обход дерева. К каждому текстовому узлу применяются локальные правила:
|
||||
* `SymbolsProcessor`: псевдографика.
|
||||
* `LayoutProcessor`: тире, спецсимволы.
|
||||
* `Hyphenator`: расстановка переносов.
|
||||
7. **Висячая пунктуация:** Модифицируется само DOM-дерево. Символы пунктуации оборачиваются в теги `<span>` с классами для CSS-коррекции.
|
||||
8. **Финальная сборка:** Дерево сериализуется в строку. Если на входе был фрагмент, возвращается только содержимое `<body>`, чтобы не плодить лишние теги.
|
||||
|
||||
## 3. API: Класс Typographer
|
||||
|
||||
|
||||
24
Rules
Normal file
24
Rules
Normal file
@@ -0,0 +1,24 @@
|
||||
# Правила проекта 2025-etpgrf при обработке ИИ
|
||||
|
||||
## Общие сведения
|
||||
- **Проект:** Python-библиотека для экранной типографики для веб (висячая пунктуация, неразрывные пробелы, перенос слов и т.д.).
|
||||
- **Язык:** Python 3.10+.
|
||||
- **Стиль кода:** PEP8.
|
||||
- **Типизация:** Обязательные Type Hints для аргументов и возвращаемых значений.
|
||||
- **Язык комментариев:** Русский.
|
||||
|
||||
## Архитектура
|
||||
- **Точка входа:** Класс `Typographer` в `etpgrf/typograph.py`.
|
||||
- **Обработка HTML:**
|
||||
- Использовать `BeautifulSoup4` (предпочтительно парсер `lxml`).
|
||||
- НИКОГДА не парсить HTML регулярными выражениями.
|
||||
- **Санитизация:** Всегда выполняется *до* рекурсивного обхода дерева.
|
||||
- **Рекурсия:** Использовать `_walk_tree` для обработки текстовых узлов, сохраняя структуру HTML.
|
||||
- **Конфигурация:** Все константы (regex, коды символов, классы) должны быть в `etpgrf/config.py`.
|
||||
|
||||
## Тестирование
|
||||
- **Фреймворк:** `pytest`.
|
||||
- **Структура:**
|
||||
- Юнит-тесты: `tests/test_<module>.py`.
|
||||
- Интеграционные тесты: `tests/test_typograph.py`.
|
||||
- **Философия:** Тестировать как режим простого текста ("plain text"), так и режим HTML.
|
||||
@@ -8,7 +8,11 @@ etpgrf - библиотека для экранной типографики т
|
||||
- Висячая пунктуация
|
||||
- Очистка и обработка HTML
|
||||
"""
|
||||
__version__ = "0.1.0"
|
||||
__version__ = "0.1.3"
|
||||
__author__ = "Sergei Erjemin"
|
||||
__email__ = "erjemin@gmail.com"
|
||||
__license__ = "MIT"
|
||||
__copyright__ = "Copyright 2025 Sergei Erjemin"
|
||||
|
||||
import etpgrf.defaults
|
||||
import etpgrf.logger
|
||||
|
||||
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
||||
|
||||
[project]
|
||||
name = "etpgrf"
|
||||
version = "0.1.2"
|
||||
version = "0.1.3"
|
||||
description = "Electro-Typographer: Python library for advanced web typography (non-breaking spaces, hyphenation, hanging punctuation and ."
|
||||
readme = "README.md"
|
||||
requires-python = ">=3.10"
|
||||
@@ -26,7 +26,7 @@ classifiers = [
|
||||
]
|
||||
dependencies = [
|
||||
"beautifulsoup4>=4.10.0",
|
||||
"lxml>=4.9.0", # Рекомендуемый парсер
|
||||
"lxml>=4.9.0", # Рекомендуемый парсер (в принципе со встроенным html.parser тоже будет работать, но медленнее)
|
||||
"regex>=2022.1.18", # Критически важная зависимость для Unicode
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user