مقدمة:
المشكلة التقليدية في بعض البرامج اللتي لا تدعم العربية تتمركز حول نقطتين: عدم توصيل الحروف, و عدم ترتيبها
من اليمين الى اليسار.
مثلا, لو أردت كتابة
تجربة
فإنها قد تظهر بالشكل التالي:
ة ب ر ج ت
الحل اللذي يتبعه البرنامج هو استبدال الحرف بشكله (هناك في اليونيكود رموز خاصة بالاشكال المختلفة لكل حرف),
بحيث تكون النتيجة (تقريبيا) على هذا الشكل:
ﺗ ﺠ ﺮ ﺑ ﺔ
(مع ازالة المسافات بين الحروف, فقد وضعت للتوضيح فقط)
و عندها فإن النص سيظهر بشكل جيد في اي برنامج يدعم اليونيكود
اي ان البرنامج لا يصدر اي صورة, كل ما يصدره هو نسخة معالجة من الجملة
هناك شقين للمشكلة: اولا شكل الحروف, ثانيا ترتيبها في السياق ذو الاتجاه المعاكس.
أشكال الحروف:
بشكل عام, حروف اللغة العربية لها أربع أشكال, و هذه الأشكال تعتمد على موقع الحرف في الكلمة:
منفصل: عندما يكون الحرف مكتوبا لوحده, مثلا: حرف العين شكله المنفصل هو: ع
ابتدائي: عندما يكون الحرف في أول الكلمة, مثلا: ﻋ
منتصف: عندما يكون الحرف في منتصف الكلمة, مثال: ﻌ
انتهائي: عندما يكون الحرف في آخر الكلمة, مثال: ﻊ
و لكن, هذا ليس كل شيء, هناك حالات يكون فيها الحرف في منتصف الكلمة دون أن يأخذ الشكل الانتصافي مثل
حرف العين في كلمة "دعاء", حرف العين هنا يأخذ الشكل الابتدائي بالرغم من أنه في منتصف الكلمة! لماذا؟
لأنه مسبوق بحرف الدال, و حرف الدال لا يتصل بالحرف اللذي يليه, لذلك فإن أي حرف يلي حرف الدال لن يتصل به.
فشكل الحرف إذا ليس محددا فقط حسب موضعه في الكلمة, بل بخاصيتين أخريين: هل يستطيع هذا الحرف الاتصال
بالحرف السابق؟ و هل يستطيع الاتصال بالحرف اللاحق؟
هناك في اليونيكود مجموعتان للحروف العربية:
الأولى تعنى بالأشكال القياسية للحروف:
http://www.unicode.org/charts/PDF/U0600.pdf
والثانية تضم الأشكال الأخرى لكل حرف:
http://www.unicode.org/charts/PDF/UFE70.pdf
عند دراسة هذين الجدولين نلاحظ أولا ان الجدول الثاني يشير الى كل شكل بأنه شكل فرعي من حرف معين في الجدول
الأول, مثلا: الشكل الانتهائي لحرف الباء رمزه FE90 و نلاحظ انه معرف كالتالي:
ARABC LETTER BEH FINAL FORM
<final> 0628
و الرقم 0628 هو كود الشكل القياسي لحرف الباء.
الملاحظة الأخرى هي أن الشكل القياسي لكل حرف (في الجدول الأول) هو عادة شكل الحرف عندما يكون منفصلا ( ع مثلا )
و لكن رغم ذلك, هناك شكل في الجدول الثاني يمثل الشكل المنفصل لكل حرف (رغم أنه نفس الشكل القياسي)
فالشكل المنفصل لحرف الباء هو FE8E و هو معرف على أنه
<ioslated> 0268
القضية الثانية هي ترتيب الحروف من اليمين الى اليسار.
البرامج اللتي لا تدعم العربية عادة ما يكون ترتيب الحروف فيها من اليسار الى اليمين, اي اننا لا يكفي
ان نوصل الحروف ببعضها, و لكن يجب ايضا ان نعكس ترتيبها لكي نخدع البرنامج و نجعله يرسمها بالشكل الصحيح.
يمكننا ان نعكس جميع الحروف, و لكن لو فعلنا ذلك فإن الكلمات الانكليزية ايضا ستنعكس.
لهذا ما نقوم به هو تحليل النص و تقسيمه الى اقسام, كل قسم مكون من سلسلة حروف ذات اتجاه واحد, اي تقسيم النص
المتعدد الاتجاهات الى قطع, كل قطعة تكون ذات اتجاه واحد.
المقصود باتجاه النص هو طبيعته, يعني النصوص العربية اتجاهها يبدأ من اليمين الى اليسار, و الانكليزية
تبدأ من اليسار الى اليمين. فالنص اللذي يحتوي على احرف عربية فقط, يكون اتجاهه بالكامل من اليمين الى
اليسار, اما النص اللذي يحتوي بالكامل على احرف انكليزية, فاتجاهه يكون من اليسار الى اليمين.
اما النصوص اللتي تحتوي على خليط من الكلمات العربية و الانكليزية فيمكن ان نسميها نصوص مختلطة الاتجاهات
او متعددة الاتجاهات.
هناك رموز ليس لها اتجاه معين في حد ذاتها, مثل المسافة و الرموز الرياضية و علامات الترقيم, فهذه يمكن
ان تكون ضمن نص عربي, و بالتالي يكون اتجاهها تبعا للنص اللذي يحيطها, و يمكن ان نقول ان هذه الرموز
حيادية الاتجاه, اي اننها لا تتبنى اتجاها معينا في حد ذاتها.
لو كان النص مكونا من خليط عربي و انكليزي, اي اتجاه الحروف فيه بهذا الشكل:
RRRLLLRRRLLLLLRRRRR
نقوم بتقسيمه في هذا المثال الى خمسة اقسام, نقوم بقلب الاقسام التي يبدأ اتجاهها من اليمين R ثم نعيد
جميع هذه الاقسام مع بعضها.
ماذا عن الرموز الحيادية؟ يتم التعامل معها بناء على سياقها, اما ان يتم تحويلها الى اتجاه معين, او تبقى
على حالها (حيادية) و بالتالي عند تقسيم النص قد نجد قسما "حياديا"
الطريقة اللتي يتبعها البرنامج هي: اذا كان الرمز السابق له اتجاه معين و الرمز التالي له نفس ذلك الاتجاه
او له اتجاه حيادي, فحول الاتجاه من حيادي الى نفس اتجاه الرمز السابق, و الا ابقه حيادي الاتجاه.
مثلا:
مثال سهل:
RRR N RRR N LLL
^ ^
R N
و النتيجة ---> RRRRRRR N LLL
مثال اعقد قليلا:
RRR NNN LLL
^^^
RRN
و النتيجة ---> RRRRR N LLL
هذه هي المشاكل الرئيسية, و لكن هناك مشاكل فرعية, قد لا تكون ظاهرة للعيان مباشرة.
اللام الف: يجب ان يتم دمجهما قبل معالجة النص.
الحركات: وجود حركات التشكيل في وسط الكلمة يشوش على السياق, فبدلا من ان يرى المعالج الحرف التالي,
سيرى الحركة الموجودة فوق الحرف الحالي. لتجاوز هذه المشكلة كان لا بد من نزع الحركات و وضعها في هيكل بياني
مناسب بحيث يمكن اعادة وضع الحركات بعد معالجة اشكال الحروف.
الأقواس: يجب عكس الاقواس حين تظهر في سياق عربي, اي ضمن قسم يتجه من اليمين الى اليسار.