61 lines
1.7 KiB
Markdown
61 lines
1.7 KiB
Markdown
|
|
# Документация разработчика
|
|||
|
|
|
|||
|
|
## Архитектура
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
src/
|
|||
|
|
├── __main__.py # CLI (typer)
|
|||
|
|
├── core/
|
|||
|
|
│ ├── converter.py # основная логика
|
|||
|
|
│ ├── renderer.py # парсинг и диспетчеризация
|
|||
|
|
│ └── style_registry.py # стили
|
|||
|
|
├── handlers/
|
|||
|
|
│ ├── __init__.py # реестр обработчиков
|
|||
|
|
│ └── builtin.py # встроенные обработчики
|
|||
|
|
├── plugins/ # плагины (пользовательские)
|
|||
|
|
└── utils.py # вспомогательные функции
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Добавление нового обработчика
|
|||
|
|
|
|||
|
|
1. Создайте функцию:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
@register_handler("new_element")
|
|||
|
|
def handle_new_element(node, doc, images_dir, style_reg):
|
|||
|
|
# ваш код
|
|||
|
|
pass
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. Регистрируйте через `@register_handler("type")`
|
|||
|
|
3. В `mistune` должен быть соответствующий плагин (если нужен кастомный синтаксис)
|
|||
|
|
|
|||
|
|
## Стили
|
|||
|
|
|
|||
|
|
Стили определяются в YAML и применяются через `StyleRegistry`.
|
|||
|
|
|
|||
|
|
## Тестирование
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pytest tests/
|
|||
|
|
pytest tests/ -v -s # с логами
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Тесты покрывают:
|
|||
|
|
- Обработчики
|
|||
|
|
- Стили
|
|||
|
|
- CLI
|
|||
|
|
- Плагины
|
|||
|
|
|
|||
|
|
## Docker
|
|||
|
|
|
|||
|
|
Сборка: `docker build -t md2docx .`
|
|||
|
|
|
|||
|
|
Запуск: `docker run -v ./inputs:/app/inputs -v ./outputs:/app/outputs md2docx ...`
|
|||
|
|
|
|||
|
|
## CI/CD (опционально)
|
|||
|
|
|
|||
|
|
- Запуск тестов
|
|||
|
|
- Сборка Docker
|
|||
|
|
- Публикация в PyPI (опционально)
|