مستندات Office باتجاه RTL سليم في Word (arabic-rtl-docs)
مستندات Office باتجاه RTL سليم في Word (arabic-rtl-docs)

مستندات Office باتجاه RTL سليم في Word (arabic-rtl-docs)

مهارة تجعل ملفات Office المولّدة برمجيًا تظهر باتجاه RTL سليم في Microsoft Word، عبر حقن طبقات OOXML الست التي يفحصها Word وتغفلها المكتبات الشائعة.

مقدمة

ملف عربي يبدو مثاليا في المعاينة، ثم يفتحه العميل في Microsoft Word فإذا العناوين ملتصقة باليسار، وأعمدة الجدول معكوسة، وقوائم التنقيط مقلوبة، وأرقام الآيبان داخل الفقرات مبعثرة الترتيب. لا يرمي Word أي خطأ، ولا يشتكي أي محرر آخر، فتبقى المشكلة مختبئة حتى لحظة التسليم. هذه المهارة وُجدت لتقضي على هذا النوع من المفاجآت: تجعل ملفات Office المولّدة برمجيًا تظهر باتجاه RTL سليم في Word نفسه، لا في المعاينات المتسامحة.

لماذا تخدعك المعاينة

تولّد مكتبات مثل docx-js وpython-docx وopenpyxl ملفات صحيحة البنية، لكنها تضع أعلام الاتجاه على مستوى الفقرات فقط وتترك طبقات أعلى لا تقل أهمية. يعتمد LibreOffice على استنتاج الاتجاه من النصوص نفسها فيعرض الملف سليما، أما Word فيقرأ تعريف هوية المستند من طبقات OOXML محددة، فإذا غابت عامل الملف كله كمستند غربي الاتجاه تحدث فيه نصوص عربية، وطبّق قواعد LTR على العناوين والجداول والترقيم. لهذا تمر الملفات من كل فحص سطحي وتفشل عند المستخدم الحقيقي.

مفتاح التشغيل الرئيسي themeFontLang

أهم قاعدة في المهارة أن ملف settings.xml يجب أن يحمل عنصر themeFontLang بصفة bidi مضبوطة على لغة RTL مثل ar-SA. هذا هو المفتاح الذي يقرر Word بناء عليه تشغيل محرك التخطيط من اليمين إلى اليسار أصلا. بدونه قد يحمل الملف كل الأعلام الأخرى، من bidi على كل فقرة إلى rtl على كل مقطع، ويظل يعرض العناوين والفقرات محاذاة إلى اليسار. لا تكتب أي مكتبة توليد هذا العنصر، لأنه يولد عادة حين يحفظ Word نفسه ملفا من جلسة حقيقية، وهنا يأتي دور سكربت التقوية المرفق بالمهارة.

الطبقات الست التي يفحصها Word

إلى جانب المفتاح الرئيسي تضبط المهارة لغة النصوص المعقدة في افتراضيات المستند داخل styles.xml بصفة bidi عربية، وخصائص الفقرة الافتراضية ونمط Normal بعلم bidi، وعلم bidi على مستوى القسم في كل sectPr حتى تعمل التذييلات وأرقام الصفحات والترقيم التلقائي بالاتجاه الصحيح، وعلم bidi على كل فقرة عربية وعلم rtl على كل مقطع نصي فيها، وعلم bidiVisual على كل جدول حتى يظهر عموده الأول في الكود على اليمين كما يتوقع القارئ العربي.

محاذاة منطقية ورموز لاتينية آمنة

تحذر المهارة من فخ دقيق: استخدام المحاذاة الفيزيائية right في الفقرات العربية قد يعيد Word تفسيره كنهاية منطقية فيعرض النص يسارا، خصوصا في Word لنظام Mac. الحل هو المحاذاة المنطقية start وend دائما في المحتوى العربي. كذلك تضبط المهارة التعامل مع الرموز اللاتينية داخل النص العربي: الآيبان والبريد والروابط وأسماء المنتجات توضع في مقاطع مستقلة دون علم rtl حتى لا ينعكس ترتيب أرقامها، وتبقى الأقواس وعلامات الترقيم المجاورة داخل المقطع العربي نفسه حتى يعكسها المحرك في مواضعها الصحيحة، مع أرقام عربية مشرقية وعلامات ترقيم عربية في النثر العربي كما تقتضيه الكتابة التجارية السعودية والخليجية.

سير العمل والتحقق

يبنى المستند أولا بالمكتبة المعتادة مع تطبيق القواعد منذ البداية، ثم يشغّل سكربت harden_rtl.py ليحقن ما فات المكتبة في الأقسام والجداول والفقرات والمقاطع، ثم يأتي وضع الفحص validate الذي يلتقط أخطاء المحتوى التي لا يراها الإصلاح البنيوي: فقرة عربية ما زالت تستخدم right، أو مقطع واحد يخلط حروفا عربية ولاتينية، أو أرقام لاتينية داخل مقطع عربي. بهذه الحلقة يخرج الملف وقد اجتاز فحصا بنيويا ومحتوى قبل أن يصل إلى أي عميل.

تفاصيل تحسم النتيجة في الملفات الحقيقية

تذهب المهارة أبعد من القواعد الست إلى مواضع تظهر في المستندات الفعلية. في python-docx مثلا لا توجد محاذاة START في واجهة المكتبة أصلا، ولا توجد واجهة لعلم bidi نفسه، فيصبح التعامل المباشر مع عناصر OOXML هو الطريق الوحيد، وتوفر المهارة طبقة مساعدة جاهزة تبني الفقرات والجداول العربية بشكل صحيح من أول مرة وتفصل النصوص المختلطة إلى مقاطع سليمة تلقائيا بحيث تبقى الأقواس في المقطع العربي ولا تتقطع المدى الرقمية. وفي الخطوط تنبّه إلى أن وجه النص اللاتيني ووجه النص المعقد فتحتان مستقلتان على المقطع نفسه، فيمكن إقران خط عربي تقليدي للعربية مع خط لاتيني كلاسيكي للإنجليزية دون أن يطغى أحدهما على الآخر. وحتى التواريخ تحسمها المهارة بصيغة مزدوجة هجرية وميلادية مع علامتي العصر، كما تجري به كتابات الأعمال في السعودية والخليج.

وهناك ظواهر تبدو أخطاء وليست كذلك، وتوثقها المهارة حتى لا يضيع الوقت في مطاردتها: أرقام داخل فقرة عربية قد تبدو معكوسة في محررات النصوص العادية بينما يعرضها Word والملف المطبوع بشكل صحيح، وترقيم العناوين يظهر طبيعيا على يمين العنوان في الاتجاه العربي، واختلاف العرض بين LibreOffice وWord ليس دليلا على خلل ما دام التحقق تم في Word نفسه وهو بيئة التسليم.

تغطية تتجاوز العربية

مع أن المهارة مبنية على التجربة العربية، فإن قواعدها نفسها تخدم كل لغات الاتجاه المعاكس في مستندات Office. للعبرية تضبط الأرقام اللاتينية وتبقي نقاط التشكيل في المقطع نفسه، وللفارسية تنبّه إلى اختلاف أرقامها عن الأرقام العربية المشرقية في ثلاثة مواضع، وللأردية ترشح خطوط النسخ المناسبة مثل Noto Nastaliq Urdu بدل الخطوط المسطحة. وفي كل لغة يبقى المبدأ واحدا: هوية المستند في settings.xml ولغته المعقدة في الافتراضيات، وما عداهما تفاصيل تتبع تلقائيا متى صحّ الأصلان.

نسبة المهارة

هذه المهارة من إعداد muhmoosa ومنشورة في مستودع claude-arabic-docs على GitHub برخصة MIT، وقد كُلّف بإعدادها أصلا لصالح محمد الموسى كما يذكر مستودعها. تُعرض هنا مع نسبتها الكاملة إلى صاحبها، ورابط المستودع الأصلي متاح في صفحة المهارة لمن أراد المصدر والتحديثات.

No comments yet