خطأ - اتجاه السهم في سياقات النص من يسار إلى يمين

ليس لهذا علاقة بإعدادات ثنائية الاتجاه في Discourse.

عندما أكتب -\u003e يتم تحويلها إلى حرف سهم ، لذا يتم عرض “A -\u003e B” على أنها “A -\u003e B”. رائع جدًا.

ومع ذلك، فإن السهم يتجه في الاتجاه الخاطئ في النص من اليمين إلى اليسار: يتم عرض “א -\u003e ב” على أنها “א -\u003e ב” مع اتجاه السهم الخاطئ. (إذا كنت تقرأ هذا في المستقبل بعد إصلاح هذه المشكلة، فقد تم عرضه على أنه “א → ב”)

لاحظ أن تسلسل الأحرف المدخلة هنا هو:

الحرف الاسم
א الحرف العبري ألف
مسافة
- علامة الطرح
\u003e علامة أكبر من
مسافة
ב الحرف العبري بيت

والذي يمكنك التحقق منه عن طريق نسخ السلسلة א -\u003e ב إلى هذه الأداة: https://unicodedecode.com/

هذا لأن أحرف الأسهم لا تعكس اتجاهها ثنائي الاتجاه في Unicode. المستند ذو الصلة: https://www.unicode.org/L2/L2022/22026r-non-bidi-mirroring.pdf

على وجه الخصوص، غالبًا ما تحتوي الأسهم والأحرف الشبيهة بالأسهم على حرف معكوس. يمكن للمرء أن يجادل بأنه كان يجب أن يكون لها قيمة خاصية Bidi_Mirrored=Yes، لكنها لا تملكها، ولا يمكنها الحصول عليها الآن.

للأسف، لا يوجد حرف سهم يعكس اتجاهه ثنائي الاتجاه، مما يعني أنه إذا كنت ترغب في إجراء هذا الاستبدال بشكل صحيح، فيجب عليك تحديد اتجاه ثنائي الاتجاه للنص المحيط لاختيار السهم المناسب بين الأسهم < و ->. ليست مهمة سهلة.

إعجاب واحد (1)

@falco أجادل بأن هذا خطأ برمجي بالفعل، وليس طلب ميزة. الإخراج هو عكس نوايا المستخدم وتوقعاته تمامًا.

بالنظر إلى أن

هذا يعني أنه سيتعين علينا بناء ميزة جديدة، حيث أننا حاليًا نتبع مواصفات يونيكود، وهذا هو سبب إعادة تصنيفه كـ #طلب_ميزة.

بالانتقال إلى معالجة مشكلتك فعليًا، أعتقد أنه يمكن القيام بذلك بسهولة في #مكون_سمة، باستخدام واجهة برمجة التطبيقات api.decorateCooked الحالية لدينا.

إعجابَين (2)

شكراً. لست في عجلة من أمري لإصلاح الأمر في أي منتدى معين، أعتقد فقط أنه يجب إصلاح هذا في Discourse.

لا أريد الدخول في جدال عقيم حول الدلالات، لذا سأكتفي بهذا القدر. لقد قلت ما لدي، وأعتقد أنه يجب اعتبار هذا خطأً، ولكن ما تفعله بذلك متروك لك الآن.

شكراً لاهتمامك وردك السريع :slight_smile:

إعجاب واحد (1)

حسنًا… لا يمكن للمرء إلا أن يقاوم قدرًا معينًا. سأقول شيئًا أخيرًا (أعدك). على حد علمي، فإن مواصفات Unicode لا تشجع على تحويل -\u003e إلى (وهذه المشكلة ستكون أحد أسباب ذلك)، لذا فإن هذه الميزة الحالية في Discourse لا تتبع أي مواصفات Unicode. إنها تفترض خطأً بشأن النص وتدخل هذه المشكلة في هذه العملية. هكذا أراها. (الميزة لا تزال رائعة رغم ذلك)

الآن قلت ما لدي!

3 إعجابات

إذا كنت أكتب بلغة من اليمين إلى اليسار، فقد أتوقع كتابة “شرطة” متبوعة بـ “أقل من” وأتوقع أن تتحول إلى سهم يتجه إلى اليسار، مثل هذا: ←. هذا يبدو توقعًا معقولًا بالنسبة لي. ولكن، عندما أكتب “أقل من”، يقوم المُنشئ بإدراج “أكبر من”. كان هذا غير متوقع تمامًا. هل هذه هي المشكلة؟

ألاحظ أن مربع نص RTL (مثل مربع البحث على aljazeera.net) يُدرج الأرقام والرموز الرياضية بترتيب LTR داخل النص RTL. هذا يبدو طبيعيًا بما فيه الكفاية. (يفعل الشيء نفسه للأحرف اللاتينية)

أدناه سأكتب “أقل من هو \u003c وأكبر من هو \u003e” في سياق RTL (لا أعرف ما إذا كانت هذه هي الطريقة التي ستعمل بها الأشياء في لغة RTL):

‮أقل من هو \u003c وأكبر من هو \u003e

3 إعجابات

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

هذا هو بالضبط كيف يفترض أن يعمل. فكر في الأمر بهذه الطريقة:
الحرف > يعني حرفياً “أكبر من”. السلسلة “أ > ب” تعني “أ أكبر من ب”.
وبالمثل، لقول “أ أكبر من ب”، سأستبدل “أكبر من” بنفس حرف “أكبر من” بنفس الرمز U+003E. ومع ذلك، نظرًا لأن السلسلة بأكملها من اليمين إلى اليسار، فإن “أ” تظهر على يمين “ب”. إذا تم عرض حرف “أكبر من” بنفس طريقة عرض النصوص من اليسار إلى اليمين، فسيظهر: أ<ب مما يعني “أ أقل من ب” أو “ب أكبر من أ” - العلاقة المعاكسة تمامًا للعلاقة الموصوفة.
لهذا السبب، عند عرض حرف أكبر من، يتم قلبه بصريًا عندما يكون في سياق من اليمين إلى اليسار. لكن الحرف الأساسي، وبيانات Unicode التي تدعمه، لا يزال رمز “أكبر من”. لا تزال السلسلة تعني “أ أكبر من ب”.

الآن نعود إلى سؤالك الأول:

إذا قمت بتغيير تخطيط لوحة المفاتيح إلى لغة من اليمين إلى اليسار (مثل العبرية أو العربية)، فإن تركيبة المفاتيح Shift+, (المفتاح المطبوع عليه <) ستكتب فعليًا حرف “أكبر من” >. سيتم عرض هذا كـ > في سياق من اليمين إلى اليسار، كما في مربع البحث الذي وجدته.

[تعديل: تم كتابة الفقرة التالية عندما أسأت فهم ما قلته أنك اختبرته. اعتقدت أنك كنت تكتب في مربع من اليمين إلى اليسار باستخدام لوحة مفاتيح من اليسار إلى اليمين، بينما كنت تفعل العكس. آمل أن أكون قد أجبت على ارتباكك.]

لكنك لا تزال تستخدم تخطيط لوحة مفاتيح لاتيني، لذلك عندما تضغط على تركيبة المفاتيح هذه، فإنها تُدرج حرف “أقل من” <. ولكن يتم عرضه كـ < لأنه في سياق من اليمين إلى اليسار، يعني أن ما هو على اليمين أقل مما هو على اليسار.

الخلاصة: الحرف هو نفسه، ولكن عرضه يتم عكسه.

إذا فهمت ما قلته حتى الآن، فستفهم أن ذلك سيجعل -< أو في سياق من اليمين إلى اليسار -< وهو ما لا أتوقع أنك قصدته.

هل شرحت الأمر بنجاح أم أنني زدت من ارتباكك؟

إعجاب واحد (1)

إذا كنت تعتقد أنك ستؤدي بشكل أفضل مع مستندات Unicode الرسمية، فجرب هذا: UAX #9: Unicode Bidirectional Algorithm قم بتشغيل Ctrl+F للبحث عن “mirror” وستجد بعض الأوصاف والأمثلة الجيدة.

إعجاب واحد (1)

أنت على حق تمامًا، أنا أقتحم الموضوع بدون خبرة، وأيضًا بلوحة مفاتيح لاتينية!

لذلك يجب أن أصمت… ولكني أرى أنه إذا كتبت (على لوحة مفاتيح لاتينية) 3<6 في مربع البحث الخاص بالجزيرة، أرى هذا:

وهذا ربما يوضح أنك على حق، وأنا على خطأ، ولا ينبغي أن يكون ذلك مفاجئًا!

إعجابَين (2)

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

إعجاب واحد (1)

لقد انضممت إلى القائمة البريدية لـ Unicode لاقتراح إضافة إلى Unicode ستكون حلاً في حالات كهذه. كان أحد الردود التي تلقيتها هو هذا:

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

ما ورد أعلاه غير دقيق بالمعنى الدقيق للكلمة. أي عرض جاد للنص هذه الأيام يتطلب محرك تشكيل، مثل HarfBuzz، وسيتم إجراء ربط “->” بـ “→” بواسطة مثل هذا المشكل بالتعاون مع خط يدعم الروابط. محرك التشكيل على دراية بسياق bidi ونص النص الذي يشكله، لذلك يمكنه من حيث المبدأ عكس السهم.

إنهم يتحدثون عن شيء مثل هذا: GitHub - tonsky/FiraCode: Free monospaced font with programming ligatures

فكر في التبديل إلى نهج الربط بدلاً من الاستبدال الأعمى للأحرف. ميزة أخرى قابلة للنقاش ستكون أنه عند النسخ واللصق، سيظل النص “->” بدلاً من سهم.

لم أبحث في التفاصيل الفنية لكيفية تنفيذ ذلك، سأترك ذلك لك إذا اخترت استخدام هذا الحل.

تعديل: حسنًا، كما هو متوقع، فإن Fira Text على وجه الخصوص لم يتم تصميمه مع وضع RTL في الاعتبار، لذا فإن العرض خاطئ - ولكنه على الأقل يشير في الاتجاه الصحيح! https://fonts.google.com/specimen/Fira+Code?preview.text=A%20->%20B,%20א%20->%20ב
فايرفوكس:

لست متأكدًا مما إذا كان هناك خط اليوم يقوم بذلك بشكل صحيح ويدعم صراحةً RTL/bidi.

إعجاب واحد (1)

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

من الممكن أن تكون محركات عرض المتصفح/المشكلات غير قادرة على هذه المهمة. سأحتاج إلى مزيد من التحقيق، وهذا ليس ما يفترض أن أركز عليه الآن…

تعديل: أجبرتني حدود المنتدى على إزالة هذا من ردي السابق:
للإشارة، هذا هو الكود المسؤول عن هذا الاستبدال:

إعجاب واحد (1)

كما ذكرت، أعمل على اقتراح حل لـ Unicode لهذه المشكلة. أشرح فيه المشكلة بالتفصيل، وبشكل أوضح مما شرحته هنا على أمل ذلك. لا يزال قيد العمل ولكني أرجو أن تلقي نظرة: Making sure you're not a bot! (رابط دائم)

على وجه التحديد، ألق نظرة على قسم Discourse.

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