Présentation de la bibliothèque

Silurus publie une suite de parseurs écrits en Rust puis compilés en WebAssembly (WASM). Les modules ciblent les trois formats majeurs d’Office Open XML : DOCX, XLSX et PPTX. Une fois décodés, les contenus sont dessinés à l’écran via l’API Canvas 2D du navigateur. La bibliothèque expose à la fois des viewers prêts à l’emploi et des API documentaires permettant de créer des miniatures, des aperçus personnalisés ou des systèmes de navigation avancée.

Architecture technique et flux de traitement

Le pipeline débute par le chargement du fichier binaire, généralement fourni sous forme de .zip conforme à la spécification ECMA‑376 / ISO 29500. Le code Rust analyse la structure du conteneur, extrait les parties XML (par ex. document.xml pour DOCX) et les transforme en structures de données internes. Cette étape repose sur le modèle de sérialisation de serde, garantissant une conversion sans perte entre le texte XML et les objets Rust.

Après la phase d’analyse, le module WASM expose des fonctions JavaScript qui renvoient un arbre de mise en page (pages, blocs, cellules). Le rendu s’effectue ensuite entièrement côté client : chaque élément est tracé sur un canvas 2D grâce à des appels fillRect, drawImage ou strokeText. Le processus évite toute dépendance serveur, ce qui réduit la latence d’affichage et préserve la confidentialité des documents.

// Exemple d’initialisation du viewer DOCX
import init, { renderDocx } from "./silurus_wasm.js";
await init(); // charge le module WASM
const file = await fetch("/example.docx").then(r=>r.arrayBuffer());
renderDocx(file, document.getElementById("canvas"));

Analyse des performances et des limites

Le recours à Rust confère une empreinte mémoire réduite et une exécution proche du natif, ce qui est crucial pour le décodage de gros classeurs XLSX contenant des milliers de cellules. En revanche, le rendu Canvas 2D reste limité par le moteur graphique du navigateur : les effets de transparence ou les filtres avancés de PowerPoint ne sont pas toujours reproduits fidèlement. La documentation indique que le support des fonctionnalités varie selon le format ; par exemple, les tableaux imbriqués dans DOCX sont gérés, mais les champs de fusion complexes peuvent être omis.

Les documents « complexes » – ceux contenant des macros VBA, des références externes ou des objets OLE – ne sont pas garantis. Le moteur ne les interprète pas, ce qui peut entraîner des différences visibles par rapport à Microsoft Office. De plus, la spécification ISO 29500 prévoit des extensions propriétaires (ex. SmartArt) qui ne sont pas implémentées dans la version actuelle.

Perspectives d’intégration

Grâce à son API JavaScript, la bibliothèque s’intègre facilement dans des environnements SPA (React, Vue) ou des systèmes de gestion de contenu. Les développeurs peuvent générer des miniatures serveur‑less, améliorer l’UX de plateformes de partage de fichiers ou créer des éditeurs en ligne légers. La compilation en WASM assure la portabilité : le même binaire fonctionne sur Chrome, Edge, Firefox et Safari, à condition que le navigateur supporte WebAssembly et Canvas 2D.

En résumé, le projet combine la robustesse de Rust, la standardisation d’ECMA‑376 et la diffusion universelle du Web. Il offre une solution viable pour visualiser rapidement des documents Office sans recourir à des services cloud, tout en restant conscient des limites liées aux fonctionnalités avancées et aux objets propriétaires.