~paravoid/subjective.work

e7955b30d7db3d5784684c98c038971a35d056bf — paravoid 2 years ago d2ec741
Blog: Add bidi-text
2 files changed, 89 insertions(+), 0 deletions(-)

A src/blog/bidi-text/iq.md
M src/blog/index.md
A src/blog/bidi-text/iq.md => src/blog/bidi-text/iq.md +88 -0
@@ 0,0 1,88 @@
---
title: "Writing Bidirectional Text"
date: 2022-07-14
---

> Once awareness of the human predicament was achieved, we immediately took off in two directions, splitting ourselves down the middle. One half became dedicated to apologetics, even celebration, of our new toy of consciousness. The other half condemned and occasionally launched direct assaults on this “gift.”

— Thomas Ligotti, <cite>Songs of a Dead Dreamer</cite>.

---

::: {dir="rtl"}
لنفرض عندك الجملة الاتية:

"Arthur خوش ولد"

اذا تجي تحاول تكتبها، حتحصل الاتي:
:::

::: {style="text-align: right;"}
"Arthur خوش ولد"
:::

::: {dir="rtl"}
ممكن تعيد صياغة الجملة حتى تخلي حروف عربية بالبداية، هيچ مثلا:

"اشوف Arthur حباب"

بس الجملة صارت ركيكة زيادة بدون داعي. شصار لو حاطين باللغة العربية حرف مخفي تگدر تحطه بالبداية وتفضها! همزين، الUnicode بي هيچ حرف؛ أسمه [Right-To-Left Mark](https://unicode-table.com/en/200F/). مجرد حطه بالبداية وهاهيه.


لنفرض ردت تكتب هالجملة:

"اكو فرق شاسع بين `rsync /src` و `rsync /src/‎`"

اذا تجرب تكتبها حتحصل:

"اكو فرق شاسع بين `rsync /src` و `rsync /src/`"

الحل بكل بساطة هو ان تحط [Left-To-Right Mark](https://unicode-table.com/en/200E/) بعد ال/.

امثلة بعد:

- "الرينج بال‎$120–$129" (اكو LTR Mark وره ال"بال").
- "صحت Marc، ‏Mark اندارلي" (اكو RTL Mark وره الفارزة).

هسه خلي ناخذ مثال شوية معقد:
:::

::: {style="text-align: right;"}
Had a fight with John—ضلعي!‏—today
:::

::: {dir="rtl"}
اذا نكتبها مباشرة:

:::

::: {style="text-align: right;"}
Had a fight with John—ضلعي!—today
:::

::: {dir="rtl"}
هسه حتگلي وين الصعوبة بالموضوع، مجرد خلي RTL Mark وره علامة التعجب وفضها! وحتكون صح. هسه خلي نشوف هاي:

"سألتني شبيك؟ گلتلها Had a fight with John—⁧ضلعي!⁩—today."

نشوف الطريقة الخطأ:

"سألتني شبيك؟ گلتلها Had a fight with John—ضلعي!—today."

الحاسبة مگدرت تقرا افكارنا وتفتهم انه هاي جملة وحدة. مو مشكلة، الUnicode بي حرف اسمه [Right-To-Left Isolate](https://unicode-table.com/en/2067/) يخلينا نعزل كلمة "ضلعي!" بحيث ما تأثر على او تتأثر بأي شي خارجها (لاحظ انه محطينا RTL Mark وره علامة التعجب)، مجرد خليه قبلها وخلي [Pop Directional Isolate](https://unicode-table.com/en/2069/) وراها حتى تحدد مكان انتهاء العزل.

طبعا اكو هم [Left-To-Right Isolate](https://unicode-table.com/en/2066/) و[First Strong Isolate](https://unicode-table.com/en/2068/) (يمشي على اتجاه اول حرف بالعزل).

---

هسه ممكن انت دتفكر شلون تدخل ذني الحروف بسهولة، اكيد ما راح تگعد تنسخ وتلصق بيهن لو [تحفظ وتدخل رموزهن يدويا](https://en.wikipedia.org/wiki/Unicode_input). بالنسبة الي، استخدم ال[Compose key](https://en.wikipedia.org/wiki/Compose_key). اذا دتستخدم لينكس فمجرد حدد المفتاح اللي يعجبك وضيف الcharacters ل‎~/.XCompose، هيچ مثلا:
:::

```
<Multi_key> <l> <m> : U200E # Left-To-Right Mark
<Multi_key> <r> <m> : U200F # Right-To-Left Mark
<Multi_key> <l> <i> : U2066 # Left-To-Right Isolate
<Multi_key> <r> <i> : U2067 # Right-To-Left Isolate
<Multi_key> <f> <i> : U2068 # First Strong Isolate
<Multi_key> <p> <i> : U2069 # Pop Directional Isolate
```
\ No newline at end of file

M src/blog/index.md => src/blog/index.md +1 -0
@@ 2,6 2,7 @@
pagetitle: "pv's Blog"
---

- Writing Bidirectional Text ([iq](/blog/bidi-text/iq.html))
- The Hunt for a UEFI Graphics Bug ([iq](/blog/uefi-graphics-bug/iq.html))
- The Curious Case of LenovoRuntimePassword ([iq](/blog/lenovoruntimepassword/iq.html))
- Hello World! ([en](/blog/hello/en.html), [iq](/blog/hello/iq.html))