Troika: دعم تخطيط النص من اليمين إلى اليسار

تم إنشاؤها على ٥ أبريل ٢٠٢١  ·  11تعليقات  ·  مصدر: protectwise/troika

بدلاً من حل تشكيل النص المتقدم الكامل (مثل harfbuzz.wasm) ، أود بعض الدعم الأساسي الجاهز لتخطيط RTL. تتضمن Typr بالفعل مستوى معينًا من الدعم لاستبدالات الحروف الرسومية العربية ، على الرغم من أنني لا أعرف مدى اكتمال ذلك.

لقد أضفت بالفعل بعض التخطيط / منطق الالتفاف الأساسي جدًا من RTL. دعنا نستخدم هذه المشكلة لتتبع الأخطاء مع ذلك والفجوات الأخرى في الدعم.

صفحة الاختبار المؤقتة: https://troika-examples.netlify.app/#text -rtl

التعليق الأكثر فائدة

لقد دفعت إلى تنفيذ أكثر اكتمالاً لاكتشاف نوع الانضمام ؛ ثبت أن المنطق الذي اقتبسته من Opentype.js غير مكتمل. يتضمن التطبيق الجديد في الواقع إصدارًا مضغوطًا للغاية من تعريفات نوع الانضمام إلى Unicode ، لذا يجب أن يتعامل الآن مع جميع الأحرف القابلة للانضمام باللغة العربية وغير ذلك. كما أنه يعطي ارتفاعًا لائقًا في السرعة على كود Typr.

MichaelHazani منذ أن تطوعت لاختبار العبرية ، أعتقد أن هذا جاهز لك الآن. يمكنك استخدام صفحة الاختبار هذه حيث قمت بإضافة خطين عبريين إلى القائمة المنسدلة "الخط" ، ويمكنك كتابة النص الخاص بك. شكرا!

ال 11 كومينتر

أولاً ، أود أن أشكرك جزيل الشكر على العمل على هذا. سيكون دعم التخطيطات العربية و RTL مفيدًا للعديد من الأشخاص.
لقد أجريت بعض الاختبارات الأولى ، والنص العربي القياسي مدعوم جيدًا في الغالب في خطوط القاهرة ، وليمونادا ، وشهرزاد (بدون Tachkil).

كنت أختبر هاتين القاعدتين للغة العربية:

  1. ما إذا كانت الأشكال الثلاثة للكتابة جيدة (واحد في البداية ، في المنتصف ، في النهاية) ووصلات (ربط).
  2. Tachkil وهي مجموعة مؤشرات النطق ُ َ ً ٌ (لا تستخدم في معظم النصوص التي تجدها على الإنترنت إلا في حالات نادرة)

في ميرزا ​​، بعض الأحرف الداخلية غير متصلة (يتم وضع شكل نهاية الحرف بدلاً من الحرف الداخلي أو غير ذلك)
arabicTachkil

مع tachkil ، عملت بعض الخطوط بشكل جيد بينما قام البعض الآخر بتغيير شكل الحرف المجاور لها. عمل البعض مع نص كتبته في المربع بينما لم يكن لدي نص منسوخ.

إذا استخدمت أحرفًا غير عربية مثل الأقواس "("، ")" يتم تبديلها (يجب عكسها).

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

عظيم شكرا! يسعدني أن أسمع أنها بدأت بداية جيدة.

من المثير للاهتمام أن نتيجة استبدالات موضع الكلمة تختلف باختلاف الخط. دائمًا ما يكون منطق اكتشاف موضع الكلمات في Typr هو نفسه ، لذلك يجب أن يكون هناك شيء مختلف في كيفية ترميز تلك الخطوط لاستبدالاتها التي لا يتعامل معها Typr. سأبحث في Mirza على وجه التحديد لمعرفة ما إذا كان بإمكاني تحديد الفرق.

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

نص الإدخال: xxx
يجب أن تبدو بالشكل: [صورة]
تبدو صحيحة في الخط أ: [صورة]
يبدو غير صحيح في الخط ب: [صورة]

بالنسبة للأقواس ، أعتقد أن هذا هو جزء الأقواس المزدوجة من خوارزمية ثنائية الاتجاه. لست متأكدًا حتى الآن مما إذا كان هذا شيئًا سأتناوله بمفردي ، لكنني بالتأكيد سأبحث فيه.

لقد دفعت التعليمات البرمجية ببعض الدعم التقريبي للتخطيط ثنائي الاتجاه. في الوقت الحالي ، أصبح الأمر يدويًا تمامًا باستخدام أحرف التحكم LRO / RLO / PDF لتحديد نطاقات الاتجاه. يعتبر ثنائي الاتجاه التلقائي الكامل أكثر تعقيدًا وما زلت ألتف رأسي حول نطاقه ، لكن التمكن من وضع النطاقات (مع التفاف الخط والاختيار!) يعد بداية مهمة.

image

أنا آسف حقًا لأنني لم أرسل تعليقًا بالأمس. فكرت في إجراء اختبار كامل في عطلة نهاية الأسبوع ، لكنني أعتقد أنه من الأفضل القيام بالأشياء في خطوات.
لنبدأ من الخطوط التي تعمل بشكل جيد (قد يكون هناك بعض المشاكل في بعض الخطوط) لقد استخدمت الخط شهرزاد ، لكن Cairo و Lemonada يعطيان نفس النتيجة.
تعرض خطوط Mirza و Amiri دائمًا أحرفًا غير متصلة.
الخطوط Noto Sans و Roboto لا تعمل على الإطلاق.

في الصورة أدناه ، استخدمت اللون الأحمر للإشارة إلى الشكل الخاطئ للحرف ، والأخضر هو الشكل الصحيح.
تظهر المشكلة فقط عندما يكون لدينا Tachkil (نغمات صوتية) أو حرف لاتيني أو رقمي.

  1. بدلاً من الشكل النهائي ، لدينا شكل داخلي.
  2. داخل الكلمة ، بدلاً من شكل البداية لدينا الشكل الداخلي. (داخل الكلمة بعض الأحرف لا تحتوي على أربطة)
  3. عندما يكون لدينا رقم بعد الكلمة مباشرة ، (كم 2) نحتفظ بصيغة النهاية.
  4. يتم عكس الأرقام.

arabThree

النص الذي استخدمته:
كم 2.
كم 2
بِسم اللَّه الرحمن الرحيم
بِسمِ اللَّهِ الرَّحمٰنِ الرَّحيمِ

تحتوي هذه الإجابة على صورة لكيفية رسم الحروف
https://www.quora.com/How-can-anyone-read-Arabic-as-the-letters-are-all-connected-to-each-other/answer/Hashem-Mohamed-4

شكرًا جزيلاً على حقيبة الاختبار المرمزة هذه ، وهذا مفيد للغاية !!! إنها تساعدني حقًا على فهم الأشياء.

منطق Typr لاكتشاف موضع الكلمة خاطئ بالتأكيد ؛ لقد تجاوزته بمنطق مقتبس من opentype.js والنتيجة تبدو الآن أفضل بكثير:

image

سأساهم في إصلاح Typr للخلف بعد إجراء مزيد من الاختبارات.

سيتم التعامل مع مشكلة "تم عكس الأرقام" مع عمل BiDi الذي بدأته. في الوقت الحالي ، يمكن التعامل مع ذلك باستخدام أحرف LRO / PDF صريحة.

حافظ على هذه الأنواع من حقائب الاختبار قادمة! 🤩

كان هذا سريعا.
حسنًا ، لم أجد شيئًا يحتاج إلى مزيد من الإصلاح باستثناء ما يمكن فعله باستخدام عمل ثنائي الاتجاه الذي ذكرته (يمكن استخدام الأرقام والأقواس على نطاق واسع مع النص العربي).
هل يمكنك إظهار مثال على كيفية استخدام أحرف LRO / PDF؟ لم أتمكن من إعادة إنتاج مثال النص المختلط بنفسي.

آخر شيء لا يتعلق بالنص العربي ولكن ربما يتعلق بتصيير SDF ، هو أن بعض الأحرف بها أسود في الداخل عندما يتم توصيل حرفين معًا كما هو الحال هنا
image
image
وأحيانًا ضمن نفس الشخصية
image
هذا مرئي فقط بخط Lemonda. شهرزاد ، القاهرة تعمل بشكل جيد (ربما لأن الشخصيات تتصل في المكان الصحيح).
(تبدو كعملية منطقية في أداة عرض المتجهات.)

وشكرا مرة أخرى على عملك.

شكرا! أنا أعمل حاليًا على إضافة تطبيق كامل لخوارزمية ثنائية الاتجاه أعتقد أنه يجب أن يوضح جميع المشكلات الأخرى التي وصفتها حتى الآن.

يحتوي نص "BiDi 1" في القائمة المنسدلة للمثال على مثال على LRO / PDF ، ولكن لا تقلق بشأن ذلك في الوقت الحالي ، فهو مجرد فجوة مؤقتة وليس صحيحًا على أي حال. صحيح أن ثنائي الاتجاه سيكون أفضل.

مشكلة التعبئة المنطقية مع هذا الخط هي نفسها التي تمت مناقشتها في # 57 على ما أعتقد.

لدينا الآن دعم ثنائي الاتجاه بالكامل!

image

هناك بعض المقتطفات ثنائية الاتجاه في صفحة المثال ولكن قم ببعض الاختبارات باستخدام نص rtl + ltr المختلط الخاص بك.

تحول هذا إلى مثال كلاسيكي عن ذهابي في حفرة أرنب ؛ لم أجد تطبيق JS ثنائي الاتجاه مناسبًا ولم أرغب في إحضار fribidi.wasm ، لذلك قررت أن أتأرجح في تنفيذ JS جديد كمشروع ليالي وعطلات نهاية الأسبوع. انظر https://github.com/lojjic/bidi-js! أحتاج إلى إضافة بعض المستندات هناك ولكنها متوافقة تمامًا وفقًا لاختبارات ثنائية الاتجاه الرسمية ، صغيرة جدًا (حوالي 10 كيلو بايت) وسريعة جدًا على الرغم من إمكانية تحسينها بشكل أكبر.

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

لقد دفعت إلى تنفيذ أكثر اكتمالاً لاكتشاف نوع الانضمام ؛ ثبت أن المنطق الذي اقتبسته من Opentype.js غير مكتمل. يتضمن التطبيق الجديد في الواقع إصدارًا مضغوطًا للغاية من تعريفات نوع الانضمام إلى Unicode ، لذا يجب أن يتعامل الآن مع جميع الأحرف القابلة للانضمام باللغة العربية وغير ذلك. كما أنه يعطي ارتفاعًا لائقًا في السرعة على كود Typr.

MichaelHazani منذ أن تطوعت لاختبار العبرية ، أعتقد أن هذا جاهز لك الآن. يمكنك استخدام صفحة الاختبار هذه حيث قمت بإضافة خطين عبريين إلى القائمة المنسدلة "الخط" ، ويمكنك كتابة النص الخاص بك. شكرا!

تبدو رائعة!
("حسنًا ، يبدو أن الاختبار ناجح. علامات الترقيم هي المكان الذي يجب أن تكون عليه ؛ المحاذاة اليمنى تبدو جيدة. كلا الخطين يعرضان اللغة العبرية بالطريقة التي يجب عرضها بها. التبديل إلى اللغة الإنجليزية ، أي هذه الكلمة ، لا يقطع المحاذاة. أتقنه!")
image

لقد قمت بإصدار v0.41.0 مع العمل المنجز هنا حتى الآن. هناك بلا شك نصوص أخرى من RTL ستحتاج إلى معالجة متخصصة إضافية ، لكن هذا يعطي خطًا أساسيًا قويًا بما يكفي أعتقد أنه يمكننا التعامل مع هؤلاء على أساس كل حالة على حدة. وهناك دائمًا إمكانية السماح بملحق Harfbuzz الإضافي الاختياري (# 91) لبعض الحالات الأكثر تقدمًا / غموضًا.

أشكركم مرة أخرى boulabiar و MichaelHazani على مساعدتكم القيمة هنا !!! 🎉

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

Ocelyn picture Ocelyn  ·  13تعليقات

natarius picture natarius  ·  14تعليقات

drcmda picture drcmda  ·  11تعليقات

asbjornlystrup picture asbjornlystrup  ·  7تعليقات

stephencorwin picture stephencorwin  ·  39تعليقات