Ce qu'est réellement un CHM
Un .chm est un petit système de fichiers. Microsoft l'a appelé ITSS : un en-tête, un répertoire d'entrées, et une ou deux sections de contenu — la section 0 stockée en clair, la section 1 compressée en LZX. À l'intérieur se trouvent des pages HTML ordinaires, des feuilles de style et des images, plus quelques flux de métadonnées dont le nom commence par # ou $.
Deux de ces flux comptent ici. #SYSTEM enregistre le titre du fichier d'aide et sa rubrique par défaut — la page qu'une visionneuse devrait ouvrir en premier. Sans elle, un lecteur doit deviner, et deviner par ordre alphabétique tombe généralement sur une feuille de style. Le fichier .hhc est l'arbre de contenu, écrit comme un plan de site HTML fait de <UL> et <LI> imbriqués contenant des entrées <OBJECT type="text/sitemap">.
Les vrais fichiers .hhc sont réputés mal formés — des éléments de liste jamais fermés partout — ils sont donc analysés avec l'analyseur HTML du navigateur, qui s'en remet exactement comme le faisait la visionneuse d'origine. Un analyseur XML refuserait purement et simplement le fichier.
Lire une page
Les feuilles de style et les images de chaque page sont résolues par rapport au chemin de cette page dans le fichier d'aide, puis remplacées par les octets du CHM lui-même. Les liens entre rubriques fonctionnent : la page est affichée dans une iframe de même origine mais sans allow-scripts, donc rien à l'intérieur ne peut s'exécuter, tandis que l'outil, lui, peut intercepter un clic et naviguer vers la rubrique visée. Un lien pointant vers le web n'est pas suivi, et une politique injectée default-src 'none' empêche qu'il soit récupéré même par accident.
À propos de la compression, sans détour
L'outil indique ce que le fichier emploie : LZX avec sa taille de fenêtre et son nombre de blocs de réinitialisation, ou rien du tout si tout tient dans la section stockée.
Le décodeur LZX employé ici a été écrit d'après la spécification [MS-PATCH] et d'après lzxd.c de libmspack. Son lecteur de flux binaire, son décodage de Huffman canonique, ses blocs non compressés et son filtre x86 sont couverts par des tests unitaires. Son décodage des blocs verbatim et aligned n'a jamais été exécuté sur un fichier produit par le compresseur de Microsoft, faute de corpus hors ligne pour l'éprouver.
Donc si une page ne se décompresse pas, cet outil affiche l'erreur précise et refuse d'afficher quoi que ce soit. Il ne met pas les octets récupérés à l'écran. Du bruit qui ressemble à une page est pire qu'un échec honnête, parce qu'on ne peut pas faire la différence. Si un vrai fichier d'aide échoue ici, cela vaut la peine de le signaler : le défaut est de notre côté.
Également disponible
Chaque page listée avec sa taille et la section où elle réside, le compilateur qui a produit le fichier, et les détails du répertoire ITSS. Pour extraire les fichiers plutôt que les lire, utilisez l'Extracteur CHM.
Confidentialité
Le fichier d'aide est ouvert dans votre navigateur et n'est jamais envoyé.
Tiny Online Tools







