قواعد خوارزمية ثنائية الاتجاه “بيدي” وتحديد اتجاه الفقرة الأساسي
تفكيك تقني للمستوى المبتدئ من خوارزمية يونيكود ثنائية الاتجاه BiDi، وشرح ميكانيكية تحديد اتجاه الفقرة الأساسي وسلطته المطلقة في حل النزاعات البصرية للنصوص الهجينة.
عدد الكلمات: ~٢٣٠٠ · مدة القراءة: ١١ دقيقة
قواعد خوارزمية ثنائية الاتجاه وتحديد اتجاه الفقرة الأساسي
رحلة في منطق القرار التقني الأول: كيف تُحسم النزاعات البصرية وتُفرض السيادة الهيكلية على أسطر النصوص الهجينة؟
فوضى الحروف والحاجة إلى سيادة
لو تُرِك الأمر للحروف وحدَها لتعرض نفسَها على الشاشة، لشهدنا حرباً بصرية لا تنتهي. تخيل صفحة ويب تحتوي على كلمات عربية تطلب اليمين موطناً، ومصطلحات برمجية إنجليزية تتشبث باليسار منشأً، وعلامات ترقيم وأرقام واقفة في المنتصف حائرة، لا تدري لأي المعسكرين تنتمي. في غياب سلطة مركزية تنظم حركة هذه العناصر، يتحول النص الهجين إلى شظايا لغوية مبعثرة تفقد معناها المنطقي بمجرد تحولها إلى شكل بصري.
في المقال التأسيسي الأول من هذه السلسلة على منصة ذي يزن، فككنا معاً منطق اليونيكود وكيف فصل هذا المعيار العالمي بين “روح الحرف” الرقمية و”جسده” البصري. لكننا وقفنا عند معضلة النصوص الهجينة؛ حيث ينكسر التدفق البصري وتعم الفوضى عند اختلاط اتجاهات المحارف. الحل الذي صاغه مهندسو الحواسب لإنهاء هذا النزاع يُدعى خوارزمية يونيكود ثنائية الاتجاه (Unicode Bidirectional Algorithm)، والمعروفة اختصاراً بـ خوارزمية الـ BiDi.
هذه الخوارزمية ليست مجرد أداة مساعدة عابرة، بل هي “شرطي المرور” الأوحد والمنظم الصارم الذي يعمل في كواليس كافة المتصفحات ونظم التشغيل المعاصرة. إنها خوارزمية حتمية (Deterministic)؛ ممّا يعني أنها لا تخمن ولا تترك مجالاً للصدفة، بل تطبق قواعد رياضية صارمة على سلسلة المحارف لتنتج في جزء من الملي ثانية ترتيباً بصرياً مستقراً. وفي قلب هذه الخوارزمية، تقبع خطوة أولى، سيادية ومصيرية، يتحدد بناءً عليها مصير النص بأكمله: تحديد اتجاه الفقرة الأساسي (Base Paragraph Direction).
١- تشريح خوارزمية الـ BiDi: المبدأ الحتمي والطبقات الثلاث
قبل أن نغوص في ميكانيكية تحديد الاتجاه، علينا أولاً تفكيك البنية الفكرية لخوارزمية الـ BiDi. لا تنظر الخوارزمية إلى النص ككتلة حبر واحدة، بل تقسم محارف البشرية في اليونيكود إلى ثلاث طبقات رئيسية حسب طبيعتها الاتجاهية الفطرية. هذا التصنيف هو الأساس الذي تبنى عليه كافة القرارات اللاحقة:
أولاً: المحارف القوية (Strong Characters)
هي المحارف التي تمتلك اتجاهية فطرية حاسمة ولا تتأثر بالسياق المحيط بها مطلقاً. تنقسم إلى:
- محارف قوية من اليسار إلى اليمين (Left-to-Right – LTR): وتضم كافة الحروف اللاتينية (الإنجليزية، الفرنسية، وغيرها)، والأبجديات السيريلية، واليونانية، والأرمنية. تأخذ الرمز البرمجي
Lداخل الخوارزمية. - محارف قوية من اليمين إلى اليسار (Right-to-Left – RTL): وتضم الحروف العربية، والعبرية، والسريانية، والآرامية. تأخذ الرمز البرمجي
RأوAL(للأحرف العربية تحديداً لتفريق ميكانيكية اتصالها لاحقاً).
ثانياً: المحارف الضعيفة (Weak Characters)
هي المحارف التي ترتبط قيمتها الاتجاهية بطبيعتها العددية أو الرمزية المرتبطة بالأرقام. هي لا تملك قوة الحروف، لكنها تملك سلوكاً خاصاً:
- الأرقام الأوروبية (European Numbers – EN): وهي الأرقام العالمية المستعملة في الغرب وفي كثير من نصوصنا اليوم (1, 2, 3).
- الأرقام العربية-الهندية (Arabic-Indic Numbers – AN): وهي الأرقام المستخدمة بشكلٍ ما في المشرق العربي (١، ٢، ٣).
- فواصل الأرقام وعلامات التمايز: مثل علامة النسبة المئوية أو الفاصلة العشرية.
ثالثاً: المحارف المحايدة (Neutral Characters)
وهنا تكمن المعضلة الكبرى. المحارف المحايدة هي محارف مسالمة تماماً، لا تملك أي اتجاهية خاصة بها، وتتصرف مثل الحرباء؛ حيث تتبنى اتجاه السياق المحيط بها بالكامل. تضم هذه الطبقة:
- المسافات البيضاء (Spaces).
- علامات التموّج والترقيم الشائعة: النقطة (
.)، وعلامة التعجب (!)، والأقواس (())، وعلامات الاقتباس. - رموز الرياضيات العامة كعلامة الجمع (
+) والطرح (-).
تكمن عبقرية خوارزمية الـ BiDi في أنها تأخذ هذه السلسلة المتنوعة من المحارف المرتبطة بترتيبها المنطقي في الذاكرة (Logical Order)، ثم تقوم عبر مستويات متعددة بتطبيق قوانين دقيقة لحسم اتجاه المحارف الضعيفة والمحايدة، وصولاً إلى تحويلها إلى الترتيب البصري النهائي (Visual Order) على الشاشة.
٢- المفهوم السيادي: ما هو اتجاه الفقرة الأساسي (Base Direction)؟
لكي تبدأ الخوارزمية عملها، هي بحاجة إلى نقطة ارتكاز؛ إطار مرجعي يحكم السطر بأكمله. هذا الإطار المرجعي هو ما يُعرف بـ اتجاه الفقرة الأساسي (Base Paragraph Direction).
إن تحديد الاتجاه الأساسي للفقرة ليس مجرد خاصية جمالية لتنسيق النص نحو اليمين أو اليسار، بل هو قرار سيادي برمجي يحدد قيمة المتغير الأوّلي للخوارزمية. يكمن دوره الجوهري في أمرين لا غنى عنهما:
- تحديد الموضع الافتراضي للمحارف المحايدة: عندما تقع علامة ترقيم (كالنقطة أو علامة الاستفهام) في نهاية السطر أو بين سياقات مختلفة، فإن الاتجاه الأساسي للفقرة هو السند القانوني الأخير الذي يحدد هل تُعرض هذه النقطة في أقصى اليمين أم أقصى اليسار.
- تحديد ترتيب تدفق الكتل اللغوية الكبرى: إذا احتوى السطر على كتلة عربية وكتلة إنجليزية، فإن الاتجاه الأساسي يحدد أي الكتلتين تبدأ من حافة الشاشة أولاً، وكيف تتتابع السطور عند الانكسار التلقائي للنص (Word Wrapping).
إن غياب تحديد اتجاه الفقرة الأساسي صراحة يجعل المتصفح يتصرف كأعمى في ضباب؛ يحاول التخمين بناءً على أول حرف قوي يقابله، وهو سلوك تقني محفوف بالمخاطر يقود حتماً إلى تدمير واجهات المستخدم في الأنظمة الهجينة.
٣- الميكانيكية التطبيقية: كيف يُحسَب الاتجاه الأساسي؟
تعتمد خوارزمية الـ BiDi في نسختها القياسية الصادرة عن منظمة يونيكود (Unicode UAX #9) على قواعد محددة سلفاً لحساب اتجاه الفقرة الأساسي، وتتم العملية وفق تراتبية صارمة:
١. التحديد الصريح (Explicit Direction)
هو الحالة المثالية والآمنة تماماً، حيث يقوم مطور الويب أو النظام بتحديد الاتجاه مباشرة عبر كود البرمجة. في عالم الويب، يتم ذلك باستخدام سمة الاتجاه dir="rtl" أو dir="ltr" في لغة الـ HTML، أو عبر خاصية direction: rtl; في ملفات الـ CSS.
عندما يرى متصفح الويب هذا الأمر الصريح، فإنه يتوقف فوراً عن التخمين، ويقوم بتثبيت الاتجاه الأساسي للفقرة بناءً على رغبة المطور، وتصبح كافة القواعد اللاحقة محكومة بهذا الخيار.
٢. التخمين التلقائي القياسي (The First-Strong-Character Rule)
إذا أغفل المطور تحديد الاتجاه، أو إذا كنا نتعامل مع محتوى ديناميكي مجهول الهوية (مثل تعليقات المستخدمين أو تغريدات في منصة تواصل)، تنتقل خوارزمية الـ BiDi إلى القواعد التلقائية لحساب الاتجاه، وأبرزها قاعدة **”أول محرف قوي”**:
- تقوم الخوارزمية بمسح النص منطقياً محرفاً تلو الآخر، بدءاً من المحرف الأول في الذاكرة.
- تتجاهل الخوارزمية كافة المحارف المحايدة (المسافات، النقاط، الأقواس) وكافة المحارف الضعيفة (الأرقام).
- عندما تصطدم الخوارزمية بأول محرف قوي (Strong Character)، تتوقف عملية المسح فوراً:
- إذا كان المحرف القوي الأول ينتمي إلى عائلة الـ LTR (مثل حرف لاتيني)، يتم تعيين اتجاه الفقرة بالكامل كـ LTR.
- إذا كان المحرف القوي الأول ينتمي إلى عائلة الـ RTL (مثل حرف عربي)، يتم تعيين اتجاه الفقرة بالكامل كـ RTL.
- إذا انتهى النص بأكمله دون العثور على أي محرف قوي (مثلاً، فقرة تتكون من أرقام وعلامات ترقيم فقط)، فإن الخوارزمية تفضل افتراضياً اتجاه النظام الأساسي، وهو غالباً LTR.
٤- تفكيك الكارثة البصرية: ماذا يحدث عند غياب التحديد الصريح؟
لكي ندرك خطورة هذه الميكانيكية، دعنا نُفكك رياضياً وبصرياً ما يحدث عندما نترك الخوارزمية تخمن الاتجاه بناءً على قاعدة “أول محرف قوي” في نص هجين. لنأخذ هذا المثال التقني الشائع:
تطبيق الهاتف يستخدم مكتبة React Native لتطوير الواجهات.الحالة الأولى: تحديد الاتجاه الصريح نحو اليمين dir="rtl"
هنا قمنا بضبط الفقرة صراحة كـ RTL. تقرأ الخوارزمية النص، وتثبت الاتجاه الأساسي نحو اليمين. الكلمة العربية الأولى “تطبيق” تبدأ من اليمين، يسير النص طبيعياً، وعند الوصول إلى الكلمة الأجنبية “React Native”، يتعرف المحرك على محارفها كـ محارف قوية يسارية (LTR)، فيقوم بإنشاء “سياق محلي مؤقت” يتدفق من اليسار إلى اليمين لعرض الكلمة بشكل صحيح، ثم يعود للسياق العربي الأصلي ليكمل جملة “لتطوير الواجهات”. وفي النهاية، تأتي النقطة (.)، وهي محرف محايد. بما أن الاتجاه الأساسي الحاكم للفقرة هو RTL، فإن النقطة تحال سيادياً إلى نهاية التدفق العام للفقرة، أي تظهر مستقرة في أقصى يسار السطر بعد كلمة “الواجهات”، لينتج سطر بصري سليم ومريح للقراءة:
تطبيق الهاتف يستخدم مكتبة React Native لتطوير الواجهات.
الحالة الثانية: غياب التحديد الصريح وبدء الجملة بكلمة أجنبية
تخيل الآن أننا نقوم بعرض تعليقات المستخدمين ديناميكياً، وقام مستخدم بكتابة الجملة ذاتها، لكنه بدأها باسم المكتبة الأجنبية لأن سياق تعليقه يتطلب ذلك. سيكون الترتيب المنطقي في الذاكرة كالتالي:
React Native هي المكتبة المستخدمة في تطبيق الهاتف لتطوير الواجهات.إذا لم نضع وسم dir="rtl" على هذا القالب ديناميكياً، سيبدأ محرك المتصفح بفحص النص لتحديد الاتجاه الأساسي عبر قاعدة “أول محرف قوي”. سيصطدم المحرك بحرف “R” في كلمة “React”. إنه محرف قوي لاتيني يفرض اتجاه LTR! هنا تقع الكارثة؛ حيث يعلن المتصفح سيادة الـ LTR على الفقرة بالكامل.
تبدأ الخوارزمية بصف الكلمات من اليسار إلى اليمين. تضع React Native في أقصى اليسار، ثم تأتي الكلمات العربية. بما أن الكلمات العربية قوية اتجاهياً نحو اليمين، فإنها تُعرض محلياً متدفقة لليمين، لكن الترتيب الكلي للسطر أصبح محكوماً باليسار. والأسوأ من ذلك كله هو سلوك النقطة (.) في نهاية الجملة. النقطة محايدة، وحسب قانون الخوارزمية، عند تصفية الحسابات السيادية، تتبع النقطة اتجاه الفقرة الأساسي (الذي تم اعتماده هنا كـ LTR). النتيجة؟ يرى المتصفح أن النقطة يجب أن تذهب إلى أقصى يمين النص، فتقفز النقطة بصرياً لتستقر بين الكلمة اللاتينية والكلمة العربية، وينكسر النص تماماً ليظهر مشوهاً كالتالي:
React Native .هي المكتبة المستخدمة في تطبيق الهاتف لتطوير الواجهات
تأمل الفارق البصري الشاسع؛ لقد قُذفت النقطة وتداخلت الكلمات في ذهن القارئ لمجرد أن الآلة أخطأت في فهم “الاتجاه الأساسي” للفقرة، واعتبرت سياق النص كاملاً سياقاً غربياً لاتينياً. أيضاً تفصيل مهم، المتصفح هنا اختار تنسيق الخطوط Arial لتناسب اللغة المختارة كسيادية بناءً على أول حرف قوي صادفه، وغالباً تختار المواقع العربية مثلاً أنواع خطوط مختلفة للغات.
٥- جدول مرجعي: فئات المحارف وسلوكها في خوارزمية BiDi
لتسهيل استيعاب هذه القواعد البرمجية، يلخص الجدول التالي الفئات الأساسية للمحارف وكيف تصنفها خوارزمية يونيكود ثنائية الاتجاه أثناء مرحلة المعالجة:
| فئة المحرف (Type) | الرمز البرمجي | أمثلة توضيحية | السلوك والسيادة داخل الخوارزمية |
|---|---|---|---|
| قوي يساري (Strong LTR) | L |
الحروف اللاتينية (A, b, C)، الحروف السيريلية. | يفرض اتجاه اليسار، ويحول الاتجاه الأساسي لـ LTR إذا كان أول محرف قوي. |
| قوي يميني (Strong RTL) | R / AL |
الحروف العربية (أ، ب، ج)، الحروف العبرية. | يفرض اتجاه اليمين، ويحول الاتجاه الأساسي لـ RTL إذا كان أول محرف قوي. |
| ضعيف عددي (Weak Numeric) | EN / AN |
الأرقام الأوروبية (123)، الأرقام العربية-الهندية (١٢٣). | لا يحدد اتجاه الفقرة، ويمتلك قواعد تتابع خاصة حسب السياق العددي المحيط. |
| محايد سياقي (Neutral) | WS / ON |
المسافات، النقطة (.)، علامات الاستفهام، الأقواس. |
مسالم تماماً، يتشرب اتجاه المحارف القوية المحيطة به أو يتبع الاتجاه الأساسي للفقرة. |

خاتمة: مفتاح الحل الجذري
إن استيعاب ميكانيكية تحديد اتجاه الفقرة الأساسي يمثل نصف الطريق نحو بناء منصات رقمية تحترم الهوية البصرية للغة العربية وتتعامل بكفاءة مع اللغات الأجنبية المتداخلة. لقد رأينا كيف أن إغفال التحديد الصريح وترك الأمر لقاعدة “أول محرف قوي” يمثل مغامرة هندسية غير مأمونة العواقب تؤدي حتماً إلى تدمير انسيابية القراءة وعزل محارف الترقيم المحايدة.
الحل الجذري لا يكمن في التخمين، بل في امتلاك المطور لأدوات تحكم صارمة تفرض سيادة السياق الصحيح برمجياً. ولكن، ماذا لو كان لدينا نص ديناميكي تماماً لا يمكننا التنبؤ بمحتواه سلفاً؟ وماذا لو فرضنا اتجاه الفقرة كاملاً كـ RTL لكننا أردنا حماية عبارة إنجليزية معينة داخل السطر من التداخل مع الأرقام المحيطة بها؟
في المقال القادم من هذه السلسلة: عزل النصوص وحلول بيدي
سننتقل إلى المستوى المتقدم من خوارزمية الـ BiDi، وسنتعرف على الأدوات الهندسية الصارمة التي توفرها لنا لغات الويب الحديثة؛ حيث سنشرح بالتفصيل عزل المحارف ثنائي الاتجاه (BiDi Isolation)، وتفكيك وسوم الـ HTML المتقدمة مثل <bdi> و <bdo>، بالإضافة إلى التحكم عبر محارف اليونيكود غير المرئية لحسم أعقد النزاعات البصرية في النصوص الهجينة.
المراجع والمصادر:
- المعيار التقني الرسمي الصادر عن منظمة اليونيكود لخوارزمية ثنائية الاتجاه: Unicode Bidirectional Algorithm (UAX #9)
- دليل منظمة الويب العالمية لتحديد اتجاه النص الأساسي: W3C: Structural markup and right-to-left text in HTML
- توثيق معايير لغة HTML5 حول وسوم التحكم بالاتجاهية: WHATWG HTML Living Standard: The dir attribute
منصة ذي يزن © 2026
سلاسل التوطين والهندسة الثنائية
دليل معالجة النصوص الهجينة — ٥ مقالات
سلسلة دليل معالجة النصوص الهجينة — ٥ مقالات | منصة ذي يزن © ٢٠٢٦





