ما ملف CHM في حقيقته
ملف .chm نظام ملفات صغير سمّته مايكروسوفت ITSS: ترويسة، ودليل مدخلات، وقسم أو قسمان للمحتوى — القسم 0 مخزَّن كما هو، والقسم 1 مضغوط بخوارزمية LZX. وبداخله صفحات HTML عادية وأوراق أنماط وصور، إضافة إلى تدفقات بيانات وصفية تبدأ أسماؤها بـ# أو $.
ويهمّنا هنا تدفقان. يسجّل #SYSTEM عنوان ملف المساعدة وموضوعه الافتراضي — أي الصفحة التي ينبغي أن يفتحها العارض أولاً. ومن دونه يضطر القارئ إلى التخمين، والتخمين بالترتيب الأبجدي ينتهي غالباً إلى ورقة أنماط. أما ملف .hhc فهو شجرة المحتويات، مكتوبة خريطةَ موقع بصيغة HTML من عناصر <UL> و<LI> متداخلة تحوي مدخلات <OBJECT type="text/sitemap">.
وملفات .hhc الحقيقية معروفة برداءة تكوينها — عناصر قوائم غير مغلقة في كل مكان — لذا تُحلَّل بمحلّل HTML الخاص بالمتصفح، وهو يتعافى من ذلك كما كان يفعل عارض المساعدة الأصلي. أما محلّل XML فسيرفض الملف ببساطة.
قراءة صفحة
تُحَلّ أوراق أنماط كل صفحة وصورها بالنسبة إلى مسار الصفحة نفسها داخل ملف المساعدة، ثم تُستبدَل ببايتات ملف CHM ذاته. وتعمل الروابط بين المواضيع: تُعرَض الصفحة في إطار من المصدر نفسه لكن بلا allow-scripts، فلا ينفَّذ شيء بداخله، بينما تستطيع الأداة نفسها اعتراض النقر والانتقال إلى الموضوع المقصود. ولا يُتَّبع أي رابط يشير إلى الإنترنت، وسياسة default-src 'none' المحقونة تمنع جلبه حتى عرَضاً.
عن الضغط، بصراحة
تُبلِغ الأداة بما يستخدمه الملف: ضغط LZX مع حجم نافذته وعدد كتل إعادة التهيئة، أو لا شيء إن كان كل شيء في القسم المخزَّن.
وقد كُتب فاكّ ضغط LZX هنا من مواصفة [MS-PATCH] ومن ملف lzxd.c في libmspack. وقارئ تدفق البتات فيه، وفكّ ترميز هوفمان القانوني، والكتل غير المضغوطة، ومرشّح x86، كلها مغطّاة باختبارات وحدة. أما فكّ كتل verbatim وaligned فلم يُشغَّل قط على ملف أنتجه ضاغط مايكروسوفت نفسه، إذ لم تتوفّر مجموعة ملفات دون اتصال لاختباره عليها.
فإن تعذّر فكّ ضغط صفحة، عرضت هذه الأداة الخطأ بعينه وامتنعت عن عرض أي شيء. ولا تضع البايتات المستعادة على الشاشة. فالضجيج الذي يبدو صفحةً أسوأ من إخفاق صريح، لأنك لا تستطيع التفريق. وإن أخفق ملف مساعدة حقيقي هنا فالأمر جدير بالإبلاغ، فالخلل عندنا.
متاح أيضاً
كل صفحة مع حجمها والقسم الذي تقع فيه، والمُصرِّف الذي أنتج الملف، وتفاصيل دليل ITSS. ولإخراج الملفات بدل قراءتها استخدم مستخرج CHM.
الخصوصية
يُفتَح ملف المساعدة في متصفحك ولا يُرفَع أبداً.
Tiny Online Tools







