متن دوسویه

پشتیبانی یونیکد

پشتیبانی از متن دوسویه به توانایی یک برنامهٔ رایانه‌ای در نمایش درست متن دوسویه گفته می‌شود.
رایانه‌های نخستین تنها برای پشتیبانی از یک نوع خط طراحی شده بودند که معمولاً چپ‌به‌راست و تنها بر مبنای الفبای لاتین بود. افزودن کدبندی‌های نویسهٔ تازه، موجب شد برخی از خط‌های چپ‌به‌راست دیگر نیز پشتیبانی شوند، اما از نوشتارهای راست‌به‌چپ مانند فارسی یا عبری به این سادگی پشتبانی نمی‌شد و ترکیب اینگونه نوشتارها عملی نبود. نوشتارهای راست‌به‌چپ نخستین بار در کدبندی‌هایی مانند ایزو/آی‌ئی‌سی ۸۸۵۹-۶ و ایزو/آی‌ئی‌سی ۸۸۵۹-۸ معرفی شدند که حروف را معمولاً به همان ترتیب خواندن و نوشتن ذخیره می‌کردند.
برعکس‌کردن ترتیب نمایش کاراکترهای چپ‌به‌راست که به راست‌به‌چپ شدن آن‌ها منجر می‌شود به سادگی امکان‌پذیر است، اما چنین کاری به قیمت ناتوانی در نمایش صحیح نوشتارهای چپ‌به‌راست تمام خواهد شد. با پشتیبانی از متن دوسویه، امکان ترکیب نوشتارهای گوناگون در یک صفحه، بدون توجه به سوی نوشتاریشان، فراهم آمده. به ویژه استاندارد یونیکد که مبانی پشتیبانی کامل از متن دوسویه را فراهم می‌آورد و قوانین مشخصی برای کدبندی و نمایش ترکیب نوشتارهای چپ‌به‌راست و راست‌به‌چپ دارد.
در کدبندی یونیکد، تمام نویسه‌ها به جز نشانه‌های سجاوندی، به ترتیبی که نوشته می‌شوند ذخیره می‌گردند. این یعنی سوی نوشتن نویسه‌ها در داخل خودشان ذخیره می‌شود. در چنین مواردی، نویسه را نویسهٔ قوی می‌گویند. با این حال، نشانه‌های سجاوندی ممکن است هم در نوشتارهای چپ‌به‌راست نمایان شوند و هم راست‌به‌چپ؛ به این نویسه‌ها، نویسه‌های ضعیف می‌گویند زیرا شامل هیچگونه اطلاعاتی در مورد جهت‌شان نیستند و تصمیم‌گیری در مورد جهت آن‌ها بر عهدهٔ نرم‌افزار خواهد بود. گاهی اوقات بر اثر اشتباه در الگوریتمی که برای تشخیص جهت نویسه‌های ضعیف به کار می‌رود، شاهد خطاهایی در نمایش هستیم. این الگوریتم‌ها جهت نویسه‌های ضعیف را با توجه به نویسه‌های قوی چپ‌به‌راست و راست‌به‌چپ تعیین می‌کنند. در این الگوریتم‌ها هر بخش از نویسه‌های به‌هم‌پیوستهٔ قوی را یک ران (به انگلیسی: run) می‌گویند. یک نویسهٔ ضعیف که بین دو نویسهٔ قوی هم‌سو جای بگیرد، جهت آن‌ها را به ارث خواهد برد. نویسهٔ ضعیفی که بین دو نویسهٔ قوی با سوهای متفاوت جای داشته باشد، سوی نوشتار اصلی را به ارث خواهد برد (در یک سند راست‌به‌چپ، این نویسه راست‌به‌چپ خواهد شد و در یک سند چپ‌به‌راست، چپ‌به‌راست). اگر پس از یک نویسهٔ ضعیف، نویسهٔ ضعیف دیگری وجود داشته باشد، الگوریتم به دنبال نخستین نویسهٔ قوی همسایه خواهد گشت. این روند گاهی منجر به خطاهای ناخواسته در نمایش می‌شود. می‌توان با نویسه‌های شبه‌قوی جلوی چنین خطاهایی را گرفت. به این نویسه‌های شبه‌قوی در نویسه‌های کنترلی یونیکد، نشانه (به انگلیسی: mark) گفته می‌شود. از نشانه‌های U+200E  (نشانهٔ چپ‌به‌راست) (HTML: &#8206; &lrm; LRM) یا U+200F  (نشانهٔ راست‌به‌چپ) (HTML: &#8207; &rlm; RLM) می‌توان در کنار نویسهٔ ضعیف محصورشده استفاده کرد تا سوی نوشتاری آن‌ها را به ارث برد.
برای نمونه، برای نمایش صحیح U+2122 ™ (نماد نشان تجاری) در کنار یک نمانامِ انگلیسی (چپ‌به‌راست) در یک متن عربی (راست‌به‌چپ)، اگر از پس نماد نشان تجاری یک نویسهٔ چپ‌به‌راست نیامده‌باشد، یک نشانهٔ LRM را پس از نماد می‌گذارند. اگر LRM افزوده نشود، نویسهٔ ضعیف ™ در همسایگی یک نویسهٔ قوی چب‌به‌راست و یک نویسهٔ قوی راست‌به‌چپ جای خواهد گرفت؛ از آنجایی که در یک متن چپ‌به‌راست هستیم، این نویسه هم راست‌به‌چپ تصور می‌شود و به صورت نادرستی نمایش می‌یابد.

سامانه‌های نوشتاری که از متن دوسویه استفاده می‌کنند

برخی سامانه‌های نوشتاری را می‌توان از هر دو سو نوشت.
بوستروفیدن، هیروگلیف مصری و حروف چینی از این گونه‌اند.