متن دوسویه
متن دوسویه (به انگلیسی: Bidirectional text) به متنی گفته میشود که شامل هر دو جهت نگارش باشد، یعنی هم راستبهچپ باشد و هم چپبهراست. چنین متنی معمولاً دارای گونههای مختلف الفبا است.
پشتیبانی از اسکریپت دو جهته، توانایی یک سیستم کامپیوتری برای نمایش صحیح متن دوسویه است. این اصطلاح اغلب به "BiDi" یا "bidi" کوتاه میشود
استاندارد یونیکد به طور کامل از متن دوسویه پشتیبانی میکند. برای این کار استاندارد کدگذاری یونیکد، تمام نویسهها را به چهار گونه تقسیم میکند: «قوی»، «ضعیف»، «خنثی، بی اثر»، «صریح، واضح»
محتویات
نویسههای قوی (Strong)
نویسههای قوی آنهایی هستند که جهت مشخصی دارند. نمونههایی از این نوع نویسهها شامل حروف الفبا، نویسههای هجا، ایده نگاریهای هان، ارقام غیر اروپایی یا غیر عربی و علائم نگارشی مخصوص آن اسکریپت است.
نویسههای ضعیف (Weak)
نویسههای ضعیف آنهایی هستند که جهت مبهمی دارند. نمونههایی از این نوع نویسهها عبارتند از: ارقام اروپایی، ارقام هند شرقی، نمادهای حسابی و نمادهای ارز.
اعداد
Unless a directional override is present numbers are always encoded (and entered) big-endian, and the numerals rendered LTR. The weak directionality only applies to the placement of the number in its entirety.
نویسههای خنثی (Neutral)
نویسههای خنثی آنهایی هستند که بدون متننوشته جهت مشخصی ندارند. مثالها شامل جداکنندههای بند(paragraph)، جهشها(tabs) و اکثر نویسههای فضایسفید(whitespace) دیگر است. نمادهای نقطهگذاری که در بسیاری از اسکریپتها مشترک هستند، مانند کولون، کاما، نقطه تمام و فضای بدون وقفه نیز(no-break-space) در این دسته قرار میگیرند.
قالببندی صریح (Explicit formatting)
نویسههای قالببندی صریح، که به آنها "نویسههای قالببندی جهتدار" نیز گفته میشود، دنبالههای ویژهٔ یونیکد هستند که رفتار جهت پیشگزیدهٔ الگوریتم را تغییر میدهند. این نویسهها به «علامت»، «جاسازی»، «جداسازی» و «باطل کردن، پایمال کردن» تقسیم میشوند. تأثیرات آنها تا زمان وقوع جداکنندهٔ بند(paragraph separator) یا یک کاراکتر «پاپ(pop)» ادامه مییابد.
علامتها (Marks)
اگر یک نویسهٔ «ضعیف» توسط یک نویسهٔ «ضعیف» دیگر دنبال شود، الگوریتم به اوّلین نویسهٔ «قوی» همسایه نگاه میکند. گاهی اوقات این منجر به خطاهای نمایش ناخواسته می شود. این خطاها با نویسههای «شبه قوی(pseudo-strong)» تصحیح یا جلوگیری میشوند. به چنین نویسههای کنترل یونیکد «علامت» گفته میشود. علامت (U+200E علامت چپبهراست (LRM) یا U+200F علامت راستبهچپ (RLM)) باید در مکانی قرار داده شود تا یک شخصیت ضعیف محصور جهت نوشتن را به ارث ببرد.
جاسازیها (Embeddings)
نویسههای قالببندی جهت «جاسازی» که نویسههای زیرمتن نیز خوانده میشوند، نشان میدهد که یک قطعه از متن باید به عنوان جهت متمایز تلقی شود. متن در میان نویسههای قالببندی جاسازی، مستقل از متن اطراف نیست. همچنین، نویسههای درون قالب جاسازیشده میتوانند بر ترتیب نویسههای خارج تأثیر بگذارند. یونیکد 6.3 تشخیص داد که جاسازی جهت معمولاً تأثیر بسیار زیادی بر محیط اطراف خود دارد و بنابراین استفاده از آنها بی دلیل دشوار است.
نویسههای قالببندی جهت «جاسازی» روش قدیمی یونیکد برای قالببندی صریح هستند و از یونیکد 6.3 به نفع «جداسازی» کنار کشیدند.
جداسازیها (Isolates)
نویسههای قالببندی جهت «جداسازی» که نویسههای ایزوله نیز خوانده میشوند، نشان میدهند که یک قطعه از متن باید به صورت جهتدار از محیط اطراف خود جدا باشد. از یونیکد 6.3، اینها نویسههای قالببندی هستند که در اسناد جدید تشویق میشوند - البته هنگامی که بنسازههای هدف از آنها پشتیبانی کنند. این نویسههای قالببندی پس از آشکار شدن اینکه نویسههای جاسازی جهتدار معمولاً تأثیر بیش از حد زیادی بر محیط اطراف خود دارند و بنابراین استفاده از آنها بی دلیل دشوار است، معرفی شدند. بر خلاف نویسههای قالببندی جهتدار «جاسازی»، نویسههای «جداسازی» هیچ تأثیری بر ترتیببندی متن خارج از محدوده خود ندارند. جداسازیها میتوانند تو در تو باشند و ممکن است در جاسازی(Embedding) و پایمال(Override) قرار گیرند.
پایمال کردن (Overrides)
نویسههای قالببندی جهتدار «پایمال» که باطل یا نادیده گرفتن نیز خوانده میشوند، برای باطل کردن جهت پیشگزیدهٔ نویسههای درون خود و بازنویسی آن استفاده میشود. این گونه قالببندی فقط برای موارد خاصی استفاده میشود. (به عنوان مثال مجبور کردن نوشتن متنی از مخلوط انگلیسی، ارقام و حروف عبری از راست به چپ) توصیه میشود تا جایی که ممکن است از آنها اجتناب شود. به همانطور که در موارد دیگر قالببندیهای جهتدار صادق است، «پایمال» را نیز میتوان در داخل یکدیگر و در جاسازی و جداشده قرار داد.
پاپها (Pops)
نویسههای قالببندی جهتدار «پاپ» دامنهٔ جدیدترین «جاسازی»، «پایمال» یا «جداسازی» را خاتمه میدهند.
رانها (Runs)
در الگوریتم، هر دنبالهای از نویسههای قوی متصل به هم «ران» نامیده میشود. یک نویسهٔ «ضعیف» که بین دو نویسهٔ «قوی» با جهت یکسان قرار دارد، جهت گیری آنها را به ارث میبرد. یک نویسهٔ «ضعیف» که بین دو نویسهٔ «قوی» با جهت نوشتن متفاوت قرار دارد، جهت نوشتن زمینهٔ اصلی را به ارث میبرد (در یک سند LTR ، شخصیت LTR ، در یک سند RTL ، RTL میشود).
جدول نویسههای دوسویهٔ ممکن
گونه | توضیحات | قدرت | جهتگیری | نویسههای کنترل دوجهته | دامنهٔ عمومی |
---|---|---|---|---|---|
L | جهت چپ به راست | قوی | چپبهراست | U+200E LEFT-TO-RIGHT MARK (LRM) | |
R | جهت راست به چپ | قوی | راستبهچپ | U+200F RIGHT-TO-LEFT MARK (RLM) | |
AL | حروف عربی | قوی | راستبهچپ | U+061C ARABIC LETTER MARK (ALM) | |
EN | اعداد اروپایی | ضعیف | |||
ES | جداکنندههای اروپایی | ضعیف | |||
ET | پایاندهندهٔ اعداد اروپایی | ضعیف | |||
AN | اعداد عربی | ضعیف | |||
CS | جداکنندهٔ اعداد معمولی | ضعیف | |||
NSM | علامت بدون فضا | ضعیف | |||
BN | مرز خنثی | ضعیف | |||
B | جداکنندهٔ بند | خنثی | |||
S | جداکنندهٔ بخش | خنثی | |||
WS | فضای سفید | خنثی | |||
ON | دیگر نویسههای خنثی | خنثی | |||
LRE | جاسازی چپ به راست | صریح | چپبهراست | U+202A LEFT-TO-RIGHT EMBEDDING (LRE) | فقط نویسهٔ LRE |
LRO | باطل کردن چپ به راست | صریح | چپبهراست | U+202D LEFT-TO-RIGHT OVERRIDE (LRO) | فقط نویسهٔ LRO |
RLE | جاسازی راست به چپ | صریح | راستبهچپ | U+202B RIGHT-TO-LEFT EMBEDDING (RLE) | فقط نویسهٔ RLE |
RLO | باطل کردن راست به چپ | صریح | راستبهچپ | U+202E RIGHT-TO-LEFT OVERRIDE (RLO) | فقط نویسهٔ RLO |
پایان قالب جهتگیری | صریح | U+202C POP DIRECTIONAL FORMATTING (PDF) | فقط نویسهٔ PDF | ||
LRI | جداساز چپ به راست | صریح | چپبهراست | U+2066 LEFT-TO-RIGHT ISOLATE (LRI) | فقط نویسهٔ LRI |
RLI | جداساز راست به چپ | صریح | راستبهچپ | U+2067 RIGHT-TO-LEFT ISOLATE (RLI) | فقط نویسهٔ RLI |
FSI | جداساز اوّلین نویسهٔ قوی | صریح | U+2068 FIRST STRONG ISOLATE (FSI) | فقط نویسهٔ FSI | |
PDI | پایان جداسازی | صریح | U+2069 POP DIRECTIONAL ISOLATE (PDI) | فقط نویسهٔ PDI |