خوارزمية يونيكود ثنائية الاتجاه

خوارزمية يونيكود ثنائية الاتجاه ( UBA )، المُعرَّفة رسميًا في الملحق رقم 9 من معيار يونيكود ( UAX #9 )، هي مواصفة طورتها منظمة يونيكود لتحديد كيفية عرض النصوص التي تحتوي على مزيج من الكتابة من اليسار إلى اليمين والكتابة من اليمين إلى اليسار. وهي جزء أساسي من معيار يونيكود ، ويُشترط استخدامها عند عرض الأحرف المكتوبة من اليمين إلى اليسار، مثل العربية أو العبرية .

خلفية

تُعرض معظم أنظمة الكتابة النص من اليسار إلى اليمين، لكن بعض الخطوط - بما فيها العربية والعبرية والثانوية والسريانية - تُكتب من اليمين إلى اليسار . عندما يظهر نص من كلا الاتجاهين في المستند نفسه، يُعرف هذا النص بالنص ثنائي الاتجاه (أو النص ثنائي الاتجاه ). وبدون تحديد واضح، تنشأ غموضات في تحديد الترتيب الصحيح لعرض الأحرف.

يحدد معيار يونيكود ترتيبًا منطقيًا لتخزين الأحرف في الذاكرة، بغض النظر عن اتجاهها المرئي. ويقوم برنامج UBA بترجمة هذا الترتيب المنطقي إلى ترتيب عرض مرئي صحيح.

أحرف التنسيق الاتجاهي

تحدد UBA عدة فئات من أحرف التحكم الخاصة المستخدمة للتأثير على اتجاه النص:

علامات الاتجاه الضمنية

أحرف خفيفة الوزن، عديمة العرض، تعمل كعلامات توجيهية دون التأثير على العرض:

اختصارنقطة الترميزاسم
LRMU+200Eعلامة من اليسار إلى اليمين
RLMU+200Fعلامة من اليمين إلى اليسار
ألمU+061Cعلامة الحروف العربية

تضمينات اتجاهية صريحة

الإشارة إلى أنه يجب التعامل مع جزء من النص على أنه مضمن في اتجاه معين:

اختصارنقطة الترميزاسم
LREU+202Aتضمين من اليسار إلى اليمين
RLEU+202Bتضمين من اليمين إلى اليسار

تجاوزات اتجاهية صريحة

فرض التعامل مع الأحرف على أنها ذات اتجاهية قوية، وتجاوز أنواعها الضمنية:

اختصارنقطة الترميزاسم
LROU+202Dتجاوز من اليسار إلى اليمين
RLOU+202Eتجاوز من اليمين إلى اليسار

عزل اتجاهي صريح

تم تقديم خاصية العزل في يونيكود 6.3 ، وهي تمنع النص المحاط بها من التأثير على ترتيب النص المحيط بها:

اختصارنقطة الترميزاسم
معهد أبحاث الرئةU+2066عزل من اليسار إلى اليمين
RLIU+2067عزل من اليمين إلى اليسار
FSIU+2068عزل قوي أولي
PDIU+2069عزل اتجاهي بوب

إنهاء الشخصيات

اختصارنقطة الترميزاسمينهي
ملف PDFU+202Cتنسيق اتجاه موسيقى البوبLRE، RLE، LRO، RLO
PDIU+2069عزل اتجاهي بوبLRI، RLI، FSI

الخوارزمية

تقوم هيئة UBA بمعالجة النصوص في أربع مراحل رئيسية:

1. فصل الفقرات

يتم تقسيم النص إلى فقرات عند أحرف فاصلة الفقرات (النوع B). تتم معالجة كل فقرة بشكل مستقل.

2. التهيئة

يتم تخصيص نوع حرف ثنائي الاتجاه (مثل L، R، AL، EN، AN) لكل حرف من قاعدة بيانات أحرف يونيكود . كما يتم تهيئة قائمة مستوى التضمين .

3. تحديد مستويات التضمين

تحدد سلسلة من القواعد مستوى تضمين كل حرف:

  • P1–P3 : تحديد مستوى تضمين الفقرة (0 للاتجاه من اليسار إلى اليمين، 1 للاتجاه من اليمين إلى اليسار).
  • X1–X10 : تعيين مستويات تضمين صريحة بناءً على أحرف التنسيق الاتجاهي.
  • W1–W7 : حل الأنواع الضعيفة (مثل الأرقام الأوروبية، والفواصل).
  • N0–N2 : حل أنواع التنسيق المحايدة والمعزولة، بما في ذلك أزواج الأقواس .
  • I1–I2 : حل مستويات التضمين الضمني.

يبلغ الحد الأقصى لعمق التضمين 125 مستوى ، وهي قيمة مضمونة عدم تغييرها في الإصدارات المستقبلية من المعيار. [ 1 ]

4. إعادة الترتيب

القواعد من L1 إلى L4 تعيد ترتيب الأحرف في كل سطر للعرض:

  • L1 : يعيد ضبط المسافات البيضاء والفواصل إلى مستوى تضمين الفقرة.
  • L2 : يعكس التسلسلات المتجاورة للأحرف عند أعلى مستويات التضمين، وصولاً تدريجياً إلى أدنى مستوى فردي.
  • L3 : يعيد ترتيب العلامات المدمجة بالنسبة لأحرفها الأساسية.
  • L4 : يطبق عكس الرسوم على الأحرف التي لها Bidi_Mirroredالخاصية عندما يكون اتجاهها المحدد من اليمين إلى اليسار (على سبيل المثال، "(" تصبح ")").

أنواع الأحرف ثنائية الاتجاه

تُصنف الشخصيات إلى الفئات التالية:

فئةيكتبوصف
قويLمن اليسار إلى اليمين (مثل اللاتينية، الهان)
Rالكتابة من اليمين إلى اليسار (مثلاً، العبرية)
الألفالكتابة العربية من اليمين إلى اليسار (مثل: العربية، السريانية)
ضعيفالإنجليزيةالرقم الأوروبي
ESفاصل الأرقام الأوروبي
ETمُنهي الأرقام الأوروبي
ANالأرقام العربية
علوم الحاسوبفاصل الأرقام المشترك
NSMعلامة بدون تباعد
حياديبفاصل الفقرات
Sفاصل القطاعات
WSمساحة بيضاء
علىمحايدون آخرون

المطابقة

يجب أن يتضمن التنفيذ المتوافق ما يلي:

  • اعرض جميع الأحرف المرئية بالترتيب الموصوف بواسطة UBA (UAX9-C1).
  • قم بتطبيق تجاوزات البروتوكول ذات المستوى الأعلى فقط كما هو محدد في القسم 4.3 من المواصفات (UAX9-C2).

بروتوكولات المستوى الأعلى

تسمح هيئة الاتحاد الأوروبي (UBA) بستة تجاوزات لبروتوكولات المستوى الأعلى (HL1–HL6)، بما في ذلك:

  • HL1 : تجاوز مستوى تضمين الفقرة.
  • HL3 : محاكاة أحرف التنسيق الاتجاهي الصريح عبر الترميز (مثل سمة HTML ).dir
  • HL4 : تطبيق UBA بشكل مستقل على أجزاء من النص المنظم (مثل XML ، شفرة المصدر ).
  • HL6 : تطبيق انعكاس إضافي للرموز الرسومية يتجاوز الخاصية القياسية Bidi_Mirrored.

مكافئات HTML و CSS

في صفحات الويب ، يمكن استبدال أحرف التنسيق الاتجاهي Unicode بعلامات HTML5 و CSS3 :

يونيكودHTMLCSS
RLI...PDIdir="rtl"direction:rtl; unicode-bidi:isolate
LRI...PDIdir="ltr"direction:ltr; unicode-bidi:isolate
FSI...PDI<bdi>،dir="auto"unicode-bidi:plaintext

الاعتبارات الأمنية

يشكل سوء استخدام أحرف التنسيق ثنائية الاتجاه مخاطر أمنية جسيمة ، إذ يمكن استخدامها لإخفاء برمجيات خبيثة أو نصوص تبدو بريئة. وقد وُثِّق ذلك في التقرير الفني رقم 36 من يونيكود (UTR36). وتُعدّ عمليات التجاوز الاتجاهي (LRO، RLO) خطيرة للغاية، ويُنصح بتجنبها قدر الإمكان.

تاريخ

  • يونيكود 1.0 (1991): تم تقديم الدعم الأساسي ثنائي الاتجاه.
  • يونيكود 6.3 (2013): مراجعة رئيسية أدخلت العزل الاتجاهي (LRI، RLI، FSI، PDI) وحل أزواج الأقواس (القاعدة N0). أُضيفت هذه الميزات لمعالجة التأثير المفرط للتضمينات الاتجاهية على النص المحيط.
  • Unicode 17.0 (2025): الإصدار الحالي (المراجعة 51).

انظر أيضاً

مراجع

  1. "الملحق رقم 9 من معيار يونيكود: خوارزمية يونيكود ثنائية الاتجاه" . اتحاد يونيكود . تم الاطلاع عليه بتاريخ 13 أغسطس 2025 .