حل مشکلات مرسوم در فارسی نویسی

Reading Time: 8 mins

فارسی نوشتن (یا کامل‌تر بگیم ابجد نوشتن) با یک سری چالش همراهه مخصوصا اگر ادیتورتون ساپورتش برای زبان های ابجد و Right-to-left خیلی خوب نباشه، که خب اکثر ادیتور های تحت وب همینطوری هستن، مثل بخش نظرات سایت ها و غیره. مشکلاتی پیش میاد مثل برعکس شدن متن‌های مرکب از حروف لاتین و ابجد و همینطور آمدن علامت های سوال (؟)، تعجب (!) و نقطه (.) سر جمله! یا این که با اینکه بعد هر کلمه اسپیس میزنی بازم تو نتیجه می‌بینی که کلمه هات به هم چسبیدن! تو این پست تا جایی که دانشم راه بده می‌گم که چطور می‌شه با استفاده از یه سری کاراکتر یونیکود این مشکلات رو حل کنیم!

فهرست

مثال
مقدمه و تعاریف
    ۱- جهت‌گیری (Directionality)
    ۲- کاراکتر بلاک (Chacacter Block)
    ۳- انواع کاراکتر های غیر چاپی (Non-printing characters)
کاراکتر های Mark
کاراکتر های Embedding
کاراکتر های Override
زمین بازی
طرز کار در کیبورد لینوکس
طرز کار در کیبورد ویندوز
    ۱- جدول کاراکتر های ذکر شده در ویندوز

مثال

‫این متن رو ببینین:
        ‪سلام! من یک متن فارسی هستم!

حالا این یکی:
        سلام! من یک متن فارسی هستم!

متن اول علامت تعجبش اومده سر جمله! بعضا پیش میاد، ولی متن دوم علامت تعجب ته جملست به شکل مطلوب، چرا؟ چون اول جمله یک کاراکتر 202B اضافه تر داره! به کاراکتر های مشابه این می‌گیم کاراکتر های غیر چاپی یا non-printing characters، کاراکتر های دیگری هم هستن که می‌تونن متن رو برامون راست‌چین کنن، چپ‌چین کنن، برش گردونن، ترتیب کاراکتر بلاک هارو عوض کنن و هزار تا چیز دیگه. این مطلب هدفش آشنایی با این کاراکتر هاست; تمام این کاراکتر ها به شکل پیشفرض در کیبرد های لینوکسی (یا حداقل اکثرشون) موجودن ولی برای ویندوز باید به شکل دستی اضافشون کرد که آموزشش رو در انتهای مطلب گذاشتم. این مطلب رو پس از پاسخ به یه دوست هموطن تو Stackoverflow نوشتم چون به ذهنم خطور کرد که شاید خیلیا واقعا بتونن ازش استفاده کنن.

مقدمه و تعاریف

۱- جهت‌گیری (Directionality):

کاراکتر ها یک ویژگی ذاتی به نام جهت‌گیری (directionality) دارند. مثلاً کاراکتر های لاتین جهت‌گیری چپ‌به‌راست (LTR: Left-to-right) و کاراکتر های فارسی جهت‌گیری راست‌به‌چپ (RTL: Right-to-left)، برخی کاراکتر ها هم جهت‌گیری خنثی دارند مثل نقطه (.) و درنگ (،).

وقتی ما تعدادی حرف از نوع RTL را کنار هم می‌چینیم نوشته ما راست به چپ نوشته خواهد شد و وقتی تعدادی حرف از نوع LTR کنار هم می‌چینیم نوشته ما چپ به راست خواهد بود. خب پَ‌نَ‌پَ!

۲- کاراکتر بلاک (Character Block):

به کاراکتر های کنار همی که جهت‌گیری یکسانی دارند می‌گویند کاراکتر بلاک! مثلاً در تصویر بعدی ۷ کاراکتر بلاک داریم.

characters-block-photo

۳- انواع کاراکتر های غیر چاپی

سه دستشون اینجا مهم هستن: ۱- Mark، ‫۲- Embedding، ‫۳- Override

کاراکتر های Mark

۱- 200F: Right-To-Left Mark

این کاراکتر در ذات خودش جهت‌گیری راست به چپ داره اما هیچ نمود دیداری‌ای نداره! کاربرد مهمش اینه که می‌تونیم کنار یه کاراکتر خنثی مثل نقطه بنویسیمش تا جهت‌گیری کاراکتر بلاکی که اون نقطه جزوش هست رو تغییر بده.

متنی ساده که وارد بخش پاسخ های stackexchange شده.

text not using 200F

همان متن بالا با این تفاوت که پس از علامت تعجب از 200F استفاده شده.

۲- 200E: Left-to-right-mark

این کاراکتر در ذات خودش جهت‌گیری چپ به راست داره و مثل بقیه کاراکتر ها هیچ نمود دیداری‌ای نداره! کاربرد مهمش اینه که می‌تونیم کنار یه کاراکتر خنثی مثل نقطه بنویسیمش تا جهت‌گیری کاراکتر بلاکی که اون نقطه جزوی ازش هست رو تغییر بده!

در تصویر بعد تفاوت جمله پایین و بالا صرفاً وجود یک 200E پس از نقطه آخر جمله انگلیسی است.

استفاده از 200E پس از نقطه آخر جمله

text with and without 200E

نسخه خام متن در vscodium برای درک بهتر

vscodium screenshot for a better showcasing of U200E

کاراکتر های Embedding

۱- کاراکتر 202B: Right-to-left Embedding

کاراکتر اول 202B بود که تو همون مثال بالا باهاش آشنا شدیم، کارش اینه که بند (Paragraph) رو راست چین کنه، یا دقیق تر بگم، کاری کنه که کاراکتر بلاک ها با ترتیب راست به چپ نوشته بشن. مثال کاربردی مهمش زمانیه که می‌خوایم یک لیست عددی درست کنیم از کلماتی که بعضیاشون فارسی و بعضیاشون انگلیسین، برای اینکه این لیستمون تمیز و درست در بیاد قبل نوشتن کلمه انگلیسی (قبل عدد هم می‌شه) یک 202B اضافه می‌کنیم.

در خط دوم قبل هر عدد یک 202B اضافه شده

showing a use case of 202B

نسخه خام متن بالا در vscodium برای درک بهتر

202B use case in vscodium

پ.ن: کاربرد فرعی ولی مهم 202B

یه کاربرد دیگه که برای من به شخصه داشته این بوده که وقتی میخوام متن انگلیسی بنویسم ولی سمت راست تکست ادیتورم بیاد (تکست ادیتورای ساده مثل Gedit و KWrite و Notepad و یا تکست ادیتور های تحت وب تو سایتای مختلف)، ازش استفاده می‌کنم، قبل پاراگراف می‌نویسمش و متنم راست به چپ می‌شه، در این کاربری خاص البته فرقی نداره که 200F استفاده بشه یا 202B، یه نمونش اینه:

عدم استفاده از 202B قبل ردیف ۳ و ۴
202B character not used
استفاده از 202B قبل ردیف ۳ و ۴
202B character used

کاربرد دیگش اینه که بعضی ادیتورا کلهم راست چین ندارن، مثالش همین سامانه های معیوب دولتی/دانشگاهی که کلهم چپ چینن و متنتون رو این شکلی تحویلتون می‌دن:

    ‪مطالب upload شدند.

‫که خب راه حل اینه که سر جمله از 202B استفاده کنیم (بعضا هم لازم قبل هر کلمه ازش استفاده کنیم):

    مطالب upload شدند.

۲- کاراکتر 202A: Left-to-right Embedding

در تصویر پیش‌رو من با استفاده از کاراکتر 202A قبل از هر کلمه جهت‌گیریش در غالب پاراگراف رو به چپ‌به‌راست تغییر دادم و اینطوری شد که تونستم با استفاده از حروف فارسی، عبارت ریاضی چپ‌به‌راست بنویسم:

در جمله سوم پیش از هر کلمه یک 202A قرار داده شده

photo showing a use case of U202A

نسخه خام متن بالا در vscodium برای درک بهتر

۳- کاراکتر 202C: Pop Directional Formatting یا PDF

این کاراکتر نشانگر پایان یک بخش embedded هست، تصور کنید در یک متن می‌خوام به شکل متوالی از کاراکتر های 202A و 202B استفاده کنیم، هرجایی که لازم باشه محدوده راست‌به‌چپ یا چپ‌به‌راست ناشی از یکی از کاراکتر های embedding رو تموم کنیم از این کاراکتر PDF یا 202C استفاده می‌کنیم. من تو همین پست وبلاگم یکم پایین تر ازش استفاده کردم که متن دقیقش رو اینجا می‌ذارم. تو این متن هدفم این بود که کلمه ‪.exe‬ چپ‌به‌راست باشه که نقطه‌اش قبل کلمه بیاد ولی باقی جملم راست به چپ باشه، یعنی چی؟ یعنی من می‌خوام وسط یک پاراگراف راست‌به‌چپ، یک کاراکتر بلاک واحد چپ‌به‌راست داشته باشم.

در تصویر پیش رو جمله اول خام است، جمله دوم یک 202A دارد که بر خلاف میل ما تمام ادامه پاراگراف را چپ‌به‌راست کرده، جمله سوم اما به درستی درش صرفاً یک کاراکتر بلاک چپ‌به‌راست و بقیه راست‌به چپ اند.

متن بالا داخل ادیتور

نسخه خام متن در vscodium برای درک بهتر

pdf showcase in vscodium

کاراکتر های Override

۱- کاراکتر های 202D و 202E

کاراکتر های override خیلی کاربردی ندارن ولی کیوت ترین کاراکتر های غیر چاپی همینان! کارشون اینه که قبل هر پاراگرافی بیان جهت‌گیری تمامی کاراکتر های اون پاراگراف رو عوض می‌کنن! یعنی اگر قبل کلمه “سلام” یه 202D بذاری می‌شه “مالس” (202D: Right-to-left override). و اگر قبل کلمه “Hello” یه 202E بذاری می‌شه “olleH”‫ (202D: Left-to-right override). خیلیم عالی! براشون فقط دوتا کاربرد پیدا کردم! یه کاربردش بامبول بازی هست که تصاویرشو پایین می‌بینین و کاربرد بعدی یه کاربرد شیطانیه که جلوتر می‌گم!

استفاده از کاراکتر های اورراید پیش از کلمات جهت بامبول بازی!

نسخه خام متن در vscodium برای درک بهتر

vscodium showcase of override characters

۲- کاربرد شیطانی کاراکتر های override!

به فایل زیر نگاه کن! دقیق تر نگاه کن! چی می‌بینی؟ یه فایل png بی آزار نه؟

تصویر یک عکس بی آزار!

evil use case of override characters

ولی نهههه! این یک فایل اجرایی ویندوز هست! یک فایل ‪.exe‬ هست!

پشت صحنه عکس بی آزار!

evil use case of override character

حالا بذارید متن خام اسم فایل رو بهتون نشون بدم!

متن خام اسم فایل در vscodium

vscodium showcase of override character

این یکی از کاربرد های شیطانی هست که کاراکتر 202E داره! باهاش می‌شه کاری کرد که فایل اجرایی (که احتمالا مخربه!) رو کاریش کنیم شبیه فایل عکس شه 🙂 البته این روش قدیمی شده و رو ویندوزای جدید معمولا پسوند فایل مخفیه و حتی اگر مخفی نباشه هم نمی‌شه فایلی درست کرد که هم مخرب باشه و هم دسترسی ادمین نخواد و هم آیکونش با فایل تصویری مو نزنه و هم آنتی ویروس نشناستش!

زمین بازی

اینجا یه زمین بازی براتون درست کردم که با کاراکتر ها کار کنید و طی‌اش عمیق تر کاربرداشونو درک کنین.

طرز کار در کیبورد لینوکس

در اکثر کیبورد های لینوکسی ما به شکل پیشفرض این کاراکتر ها رو داریم و در جدول زیر محل کاراکتر ها در کیبورد رو نوشتم:

محل روی کیبورد کاراکتر
Alt + 0 200F
Alt + 9 200E
Alt + ] 202B
Alt + [ 202A
Alt + p 202C
Alt + i 202D
Alt + o 202E

طرز کار در کیبورد ویندوز

برای نوشتن این کاراکتر ها در ویندوز ۲ راه وجود داره، راه اول اینه که کلید Alt رو بگیرید و کد یونیکود کاراکترتون رو با استفاده از numpad کیبورد بنویسید (جدول پایین) و راه بعدی اینه که کاراکتر مورد نظرتون رو مطابق این آموزش خود سایت مایکروسافت به کیبورد اضافه کنید:
Insert ASCII or Unicode Latin-based symbols and characters

جدول کاراکتر های ذکر شده در ویندوز

محل روی کیبورد کاراکتر
Alt + 8207 200F
Alt + 8206 200E
Alt + 8235 202B
Alt + 8234 202A
Alt + 8236 202C
Alt + 8237 202D
Alt + 8238 202E

سخن پایانی

ممنونم که پستم رو خوندید، اگر جایی اشتباهی دیدید یا پیشنهادی برای بهتر شدن این پست یا کلاً هر جایی از بلاگم دارید ممنون می‌شم کامنت بذارید یا از ایمیل با من در ارتباط باشید.

منتشر شده در
دسته‌بندی شده در سایر

4 دیدگاه

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *