Об этом проекте

rhwp — это открытый просмотрщик и редактор HWP/HWPX на базе Rust и WebAssembly. Разработан с использованием открытой документации Hancom, при этом явно указано, что это независимый проект без партнёрства, спонсорства или одобрения со стороны Hancom. Лицензия MIT. ## Область обработки документов Парсит бинарный формат HWP 5.0 (составной файл OLE2), HWPX (на базе Open XML) и HML (HWPML 2.9/2.91, ограниченная поддержка только проверенных структур). Обрабатывает абзацы, таблицы, текстовые поля, изображения, формулы, диаграммы, верхние и нижние колонтитулы, фоновые страницы, сноски и концевые сноски. Рендеринг поддерживает межстрочные интервалы, отступы, выравнивание, позиции табуляции, объединение ячеек и стили границ, вычисление формул в ячейках, многоколоночную вёрстку, нумерацию абзацев и маркеры, вертикальное письмо, раздельные колонтитулы для чётных и нечётных страниц, фоновые страницы, размещение объектов (в тексте, как символ, перед/за текстом). Формулы включают дроби, корни, верхние и нижние индексы, матрицы (MATRIX/PMATRIX/BMATRIX/DMATRIX), cases, EQALIGN, семейство PILE, крупные операторы (INT/SUM/PROD и др.), REL/BUILDREL, пределы, деление столбиком, греческие буквы и более 100 математических символов. Разбиение на страницы обрабатывает разделение по колонкам, разделение таблиц по строкам и коррекцию позиции абзацев на основе vpos. ## Вывод и бэкенды рендерера CLI экспортирует в SVG, PNG (требуется нативный Skia) и PDF. Для PDF по умолчанию используются SVG-совместимые пути, доступны опция преобразования текста в векторные контуры и байтовая воспроизводимость; прямой нативный бэкенд Skia является необязательным. В вебе используется рендеринг Canvas/CanvasKit, при этом общий paint IR (PageRenderTree → PageLayerTree) и бэкенды legacy/layered SVG, Canvas2D, CanvasKit replay и нативный Skia разделяют один и тот же контракт плоскости воспроизведения. По умолчанию запрашивается Canvas2D, а при явном указании `?renderer=auto` фиксируется CanvasKit только в случае успешного прохождения предварительной проверки документа. Сложные shaping-символы, комбинации старого хангыля и PUA, отображение структурных типографских знаков фиксируют весь документ на Canvas2D. CI визуальной регрессии проверяет различия рендеринга и PDF-гейт. ## Способы использования - Веб-демо (GitHub Pages), расширения для Chrome/Edge/Firefox, расширение VS Code (включая Open VSX) - npm-пакеты: `@rhwp/editor` (редактор, встраиваемый через iframe), `@rhwp/core` (API WASM-парсера и рендерера) - CLI: export-svg, export-png, export-pdf, dump, dump-pages, info, capabilities - Встроенный MCP-сервер: одной строкой конфигурации в MCP-хостах, таких как Claude Code, доступны инструменты hwp_info, hwp_search, hwp_fill_fields, сессионные инструменты hwp_open·hwp_doc_* - Бинарные файлы релизов: linux x86_64, macOS x86_64/aarch64, windows x86_64 и SHA256SUMS.txt Веб-редактор (rhwp-studio) предоставляет редактирование текста, диалоги форматирования, редактирование таблиц и слой API hwpctl, совместимый с Hancom Web Gigan-gi (30 Action, ParameterSet/ParameterArray, Field API). Сохранение поддерживает редактируемое сохранение HWP, сохранение HWPX/HML с сохранением семантики и преобразование HWPX→HWP. ## Подход к разработке Базируется на Rust 1.93.1, WASM-сборка воспроизводится с помощью Docker. Работает более 3400 тестов Rust, а также CI модульных, e2e и визуальных регрессионных тестов studio. Проект явно использует подход, при котором человек-руководитель владеет направлением и архитектурными решениями, а ИИ применяется как множитель реализации; изменения проходят утверждение плана, код-ревью и контроль качества. Записи о разработке накапливаются в каталоге mydocs/. Пул-реквесты от контрибьюторов принимаются в ветку devel, а не в main.