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

دوسویه bidi

الگوریتم متن دوسویه‌ی یونیکد: ترتیب درست نمایش وقتی فارسی و انگلیسی کنار هم می‌آیند.

واردسازی دوسویه

متن در حافظه به ترتیبی ذخیره می‌شود که تایپ شده، اما وقتی فارسی و انگلیسی کنار هم می‌آیند، ترتیبی که روی صفحه دیده می‌شود با آن فرق دارد. مرورگرها و ویرایشگرها این جابه‌جایی را با «الگوریتم دوسویه‌ی یونیکد» انجام می‌دهند.

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

هر روال یک «جهت بند» می‌گیرد: جهت خودکار جهت را از نخستین حرف قوی متن حدس می‌زند، و دو جهت دیگر آن را از پیش تعیین می‌کنند. «تراز» هر نویسه یک عدد است: زوج یعنی چپ به راست و فرد یعنی راست به چپ.

پایاها و متغیرها

جهت خودکار DirAuto

پایا جهت خودکار: صحیح۳۲ = 0
جهت بند از نخستین حرف قوی متن تشخیص داده شود؛ اگر اولین حرف فارسی باشد راست به چپ و اگر انگلیسی باشد چپ به راست.
bidi-Reorder.salam
واردسازی دوسویه

روال ریشه:
    م := "abc سلام"
    سرچاپ دوسویه.تراز بند(م، دوسویه.جهت خودکار)، دوسویه.تراز بند("سلام abc"، دوسویه.جهت خودکار)
    سرچاپ دوسویه.تراز بند(م، دوسویه.جهت راست به چپ)، دوسویه.تراز بند("سلام"، دوسویه.جهت چپ به راست)
    سرچاپ دوسویه.ترازها(م، دوسویه.جهت چپ به راست)
    سرچاپ دوسویه.ترتیب دیداری(م، دوسویه.جهت چپ به راست)
    سرچاپ دوسویه.بازچینش(م، دوسویه.جهت چپ به راست)
پایان
خروجی0 1 1 0 [0, 0, 0, 0, 1, 1, 1, 1] [0, 1, 2, 3, 7, 6, 5, 4] abc مالس

جهت چپ به راست DirLTR

پایا جهت چپ به راست: صحیح۳۲ = 1
بند چپ به راست است، مثل یک صفحه‌ی انگلیسی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: bidi-Reorder.salam

جهت راست به چپ DirRTL

پایا جهت راست به چپ: صحیح۳۲ = 2
بند راست به چپ است، مثل یک صفحه‌ی فارسی.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: bidi-Reorder.salam

روال‌ها

تراز بند ParagraphLevel

روال تراز بند(s: رشته، dir: صحیح): صحیح
تراز پایه‌ی بند را برمی‌گرداند: صفر برای چپ به راست و یک برای راست به چپ.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: bidi-Reorder.salam

ترازها Levels

روال ترازها(s: رشته، dir: صحیح): وکتور<صحیح>
تراز هر نویسه را در یک وکتور برمی‌گرداند؛ ترازهای فرد راست به چپ نمایش داده می‌شوند.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: bidi-Reorder.salam

ترتیب دیداری VisualOrder

روال ترتیب دیداری(s: رشته، dir: صحیح): وکتور<صحیح>
می‌گوید از چپ به راست روی صفحه، کدام نویسه‌ها به چه ترتیبی دیده می‌شوند. عضو شماره‌ی i، شماره‌ی نویسه‌ای است که در جای i دیده می‌شود.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: bidi-Reorder.salam

بازچینش Reorder

روال بازچینش(s: رشته، dir: صحیح): رشته
متن را به ترتیبی که باید از چپ به راست رسم شود بازمی‌چیند؛ همان رشته، ولی به ترتیب نمایش.

نمونه‌ی این مورد همراه با موارد بالاتر آمده است: bidi-Reorder.salam