À propos du projet
rhwp est une visionneuse et un éditeur open source HWP/HWPX basé sur Rust et WebAssembly. Il a été développé en s'appuyant sur les documents publics de Hancom et précise qu'il s'agit d'un projet indépendant sans relation de partenariat, de parrainage ou d'approbation avec Hancom. Licence MIT.
## Périmètre de traitement des documents
Il analyse les fichiers binaires HWP 5.0 (fichiers composites OLE2), HWPX (basé sur Open XML) et HML (HWPML 2.9/2.91, prise en charge limitée aux structures validées). Il gère les paragraphes, tableaux, zones de texte, images, formules, graphiques, en-têtes/pieds de page, pages d'arrière-plan et notes de bas de page/notes de fin.
Le rendu prend en charge l'interligne, l'indentation, l'alignement, les taquets de tabulation, la fusion de cellules et les styles de bordure, le calcul des formules de cellules, la mise en page multicolonne, la numérotation des paragraphes/les puces, l'écriture verticale, les en-têtes séparés pour pages paires/impaires, les pages d'arrière-plan et le placement des objets (avec le corps du texte, comme un caractère, devant/derrière le texte). Les formules incluent les fractions, radicaux, exposants/indices, matrices (MATRIX/PMATRIX/BMATRIX/DMATRIX), cases, EQALIGN, la famille PILE, les grands opérateurs (INT/SUM/PROD, etc.), REL/BUILDREL, les limites, la division longue, les lettres grecques et plus de 100 symboles mathématiques. La pagination gère la division multicolonne, la division par lignes de tableau et la correction de position des paragraphes basée sur vpos.
## Sortie et backends de rendu
La CLI exporte en SVG, PNG (nécessite la fonctionnalité native Skia) et PDF. Pour le PDF, les chemins compatibles SVG sont utilisés par défaut, avec une option de conversion du texte en tracés vectoriels et une reproductibilité au niveau des octets ; le backend direct native Skia est optionnel. Sur le Web, le rendu utilise Canvas/CanvasKit, avec un IR de peinture commun (PageRenderTree → PageLayerTree) partagé par les backends SVG legacy/layered, Canvas2D, CanvasKit replay et native Skia selon le même contrat de plan de lecture. La requête par défaut est Canvas2D, et en spécifiant explicitement `?renderer=auto`, le rendu est fixé sur CanvasKit uniquement si le document passe l'inspection préalable. Les caractères à mise en forme complexe, les combinaisons d'ancien hangeul/PUA et l'affichage des marques de composition structurelle fixent l'ensemble du document concerné sur Canvas2D. Une CI de régression visuelle valide les différences de rendu et les contrôles PDF.
## Voies d'utilisation
- Démo web (GitHub Pages), extensions Chrome/Edge/Firefox, extension VS Code (y compris Open VSX)
- Paquets npm : `@rhwp/editor` (éditeur intégré en iframe), `@rhwp/core` (API du parseur/rendu WASM)
- CLI : export-svg, export-png, export-pdf, dump, dump-pages, info, capabilities
- Serveur MCP intégré : avec une seule ligne de configuration, utilisation des outils de session hwp_info, hwp_search, hwp_fill_fields, hwp_open·hwp_doc_* depuis des hôtes MCP comme Claude Code
- Binaires de release : linux x86_64, macOS x86_64/aarch64, windows x86_64 avec SHA256SUMS.txt fourni
L'éditeur web (rhwp-studio) fournit l'édition de texte, les boîtes de dialogue de mise en forme, l'édition de tableaux et une couche API hwpctl compatible avec le webgigan de Hancom (30 actions, ParameterSet/ParameterArray, API Field). La sauvegarde prend en charge l'enregistrement avec édition HWP, l'enregistrement avec préservation sémantique HWPX/HML et la conversion HWPX→HWP.
## Méthode de développement
Basé sur Rust 1.93.1, la compilation WASM est reproduite avec Docker. Plus de 3 400 tests Rust ainsi qu'une CI de tests unitaires/e2e/régression visuelle pour studio sont en place. Le projet adopte explicitement une approche où un responsable humain possède les décisions d'orientation et d'architecture et utilise l'IA comme multiplicateur d'implémentation, avec approbation des plans, revue de code et contrôles qualité. L'historique de développement est accumulé dans le répertoire mydocs/. Les PR de contribution sont acceptées sur la branche devel, et non sur main.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.