Кіріспе

Екі бағытты мәтін оңнан солға (RTL) және солдан оңға (LTR) екі мәтін бағытын қамтиды. Әдетте, бұл әртүрлі әліпбилерді қамтитын мәтін болып табылады, бірақ әр қатарда мәтін бағытын өзгертетін бустрофедонды да білдіруі мүмкін. Мысалы, RTL еврей аты Сара: שרה, оң жақта син (ש), ортада реш (ר) және сол жақта хе (ה) деп жазылады. Көптеген компьютерлік бағдарламалар мұны дұрыс көрсетуге шама келмеді, себебі олар тек бір бағытта мәтін көрсету үшін жасалған. Персия және араб тілдері сияқты оңнан солға жазылатын жазулар көбінесе, бірақ әрдайым емес, оңнан солға жазылады – математикалық өрнектер, сандық күндер және өлшем бірліктері солдан оңға жазылады. Бұл ағылшын тілі сияқты солдан оңға жазылатын мәтін енгізілген кезде де орын алады; немесе керісінше, араб тілі ағылшын тілі сияқты солдан оңға жазылатын мәтінге енгізілгенде де.

Екі бағыттағы скрипттерді қолдау

Екі бағытты жазу қолдауы – компьютер жүйесінің екі бағытты мәтінді дұрыс көрсету қабілеті. Бұл термин көбінесе "BiDi" немесе "bidi" деп қысқартылады. Алғашқы компьютерлер тек бір жазу жүйесін қолдау үшін жасалған, әдетте латын әліпбиіне негізделген солдан оңға жазу үшін. Жаңа символдар жиынтығы мен символдарды кодтаудың енгізілуі басқа солдан оңға жазуларды қолдауға мүмкіндік берді, бірақ араб немесе иврит сияқты оңнан солға жазуларды қолдау қиын болды, ал оларды араластыру мүмкін емес еді. Оңнан солға жазулар ISO/IEC 8859 6 және ISO/IEC 8859 8 сияқты кодтаулар арқылы енгізілді, әріптер (әдетте) жазу және оқу ретімен сақталды. Көрсету ретін солдан оңғадан оңнан солғаға ауыстыруға болады, бірақ бұл солдан оңға жазуларды дұрыс көрсету мүмкіндігінен айырылуға әкеледі. Екі бағытты жазу қолдауымен әртүрлі жазу жүйелерінің символдарын бір бетте, жазу бағытына қарамастан, араластыруға болады. Атап айтқанда, Unicode стандарты толық BiDi қолдауының негізін қамтамасыз етеді, солдан оңға және оңнан солға жазулардың қоспаларын қалай кодтау және көрсету керектігі туралы егжей-тегжейлі ережелерді ұсынады.

Юникодты bidi қолдауы

Unicode стандарты таңбалардың "логикалық", яғни олар түсіндірілуі тиіс ретпен реттелгенін талап етеді, "көрнекі" ретінен емес, олар қалай көрінетін ретпен. Бұл айырмашылық екі бағытты қолдау үшін маңызды, себебі кез келген екі бағытты өту кезінде визуалды бейнелеу "логикалық" реттен өзгеше болады. Осылайша, екі бағытты қолдауды қамтамасыз ету үшін Unicode таңбалардың логикалық тізбегін дұрыс визуалды бейнелеуге қалай түрлендіруге болатын алгоритмді белгілейді. Осы мақсатта Unicode кодировка стандарты барлық таңбаларды төрт түрге бөледі: "күшті", "әлсіз", "бейтарап" және "нақты пішімдеу".

Қатты кейіпкерлер

Күшті таңбалар — нақты бағыты бар таңбалар. Осы типтегі таңбалардың мысалдарына көптеген әліпбилік таңбалар, буындық таңбалар, хань идеограммалары, еуропалық емес немесе араб емес сандар, сондай-ақ тек осы жазу жүйелеріне тән аралық белгілер жатады.

Әлсіз кейіпкерлер

Әлсіз таңбалар – бұл нақты бағыты жоқ таңбалар. Мұндай таңбалардың мысалдарына еуропалық цифрлар, шығыс араб цифрлары, арифметикалық белгілер және валюта белгілері жатады.

Бейтарап таңбалар

Бейтарап таңбалар контекстсіз бағытын анықтау мүмкін емес. Мысалға, абзацтарды бөлуге арналған таңбалар, табуляциялар және көптеген басқа да бос орын таңбалары осыған жатады. Екі нүкте, үтір, толық нүкте және үздірілмейтін бос орын сияқты көптеген жазу жүйелерінде қолданылатын тыныш белгілер де осы санатқа кіреді.

Жауапты пішімдеу

Ашық пішімдеу таңбалары, сондай-ақ "бағытты пішімдеу таңбалары" деп те аталады, – алгоритмнің әдепкі мінез-құлқынан өзгеше әрекет етуіне бағыттайтын арнайы Юникод тізбектері. Бұл таңбалар "белгілерге", "енгізілімдерге", "оқшаулауға" және "басымдықтарға" бөлінеді. Олардың әсері абзацты бөлу таңбасы немесе "поп" таңбасы кездескенше жалғасады.

Белгілер

Егер "әлсіз" таңбадан кейін тағы бір "әлсіз" таңба келсе, алгоритм бірінші көршілес "күшті" таңбаны қарастырады. Кейде бұл күтпеген дисплей қателіктеріне әкеледі. Бұл қателіктер "жалған күшті" таңбалармен түзетіледі немесе болдырмауға болады. Мұндай Юникод басқару таңбалары "белгілер" деп аталады. Белгі (немесе) жабық әлсіз таңбаға жазу бағытын мұра ету үшін тиіс орналасқан жерге енгізіледі. Мысалы, араб тіліндегі (RTL) мәтінде ағылшын тіліндегі бренд атауын (LTR) дұрыс көрсету үшін, егер символдан кейін LTR мәтіні болмаса, LRM белгісі енгізіледі (мысалы, "قرأ Wikipedia™‎ طوال اليوم."). Егер LRM белгісі қосылмаса, ™ әлсіз таңбасы күшті LTR таңбасы мен күшті RTL таңбасының арасында қалады. Осылайша, RTL контекстінде ол RTL деп есептеледі және дұрыс емес ретпен көрсетіледі (мысалы, "قرأ Wikipedia™ طوال اليوم.").

Тіркелгендер

"Кірістіру" бағытталған форматтау символдары – классикалық Unicode форматтау әдісі, бірақ Unicode 6.3 нұсқасынан бастап "оқшаулау" (isolates) пайдасына қолданудан жаңқа жасалуда. "Кірістіру" мәтіннің бір бөлігі бағыттық жағынан ерекше қаралуы керек екенін көрсетеді. Кірістіру форматтау символдарының әсер ету аймағындағы мәтін, қоршаған мәтіннен тәуелсіз болмайды. Сондай-ақ, кірістірілген символдар сыртқы символдардың ретіне әсер етуі мүмкін. Unicode 6.3 кірістірулердің әдетте қоршаған ортаға тым күшті әсер ететінін және осы себепті оларды қолданудың қажетсіз қиын екенін мойындады.

Изоляттар

"Оқшаулау" бағытты пішімдеу таңбалары мәтіннің бір бөлігін қоршаған ортадан бағыттық тұрғыдан оқшауланған ретінде қарастыруға сигнал береді. Unicode 6.3 нұсқасынан бастап, мақсатты платформалар оларды қолдайтыны белгілі болғаннан кейін жаңа құжаттарда қолдануға ұсынылатын пішімдеу таңбалары осылар. Бұл пішімдеу таңбалары бағыттық енгізулер әдетте қоршаған ортаға тым күшті әсер ететіні және осылайша оларды пайдалану қажетсіз қиын екені анық болғаннан кейін енгізілді. Ескі 'енгізу' бағытты пішімдеу таңбаларынан айырмашылығы, 'оқшаулау' таңбалары өздерінің аумағынан тыс мәтіннің ретіне әсер етпейді. Оқшауланған элементтер бір-біріне ішкі болып орналаса алады және енгізулер мен қайта жазулардың ішінде орналастырылуы мүмкін.

Қайталау

"Айдастыру" бағыттағы пішімдеу символдары ерекше жағдайларды, мысалы, бөлшек нөмірлерін (мысалы, ағылшын әріптерінен, сандардан және еврей әріптерінен тұратын бөлшек нөмірін оңнан солға жазуды күштеу) қамтамасыз етеді, бірақ олардан мүмкіндігінше аулақ болу ұсынылады. Басқа бағытталған пішімдеу символдары сияқты, "айдастырулар" бір-біріне іштей орналастырылуы мүмкін, сондай-ақ кіріктірулер мен оқшаулаулар ішінде де қолданылуы мүмкін.

Әкелер

"Pop" бағыттағы пішімдеу символдары ең соңғы "енгізу", "басып жабу" немесе "оқшаулау" аясын тоқтатады.

Жүгіреді

Алгоритмде біріктірілген мықты таңбалардың әр тізбегі "жүргізу" деп аталады. Екі бірдей бағытталған "күшті" таңбаның арасында орналасқан "әлсіз" таңба олардың бағытын қабылдайды. Егер "әлсіз" таңба екі әртүрлі бағытта жазылған "күшті" таңбаның арасында болса, ол негізгі контекстің жазу бағытын қабылдайды (LTR құжатында таңба LTR болады, RTL құжатында ол RTL болады).

Қауіпсіздік

Юникодтың екі бағытты таңбалары "Троян көзі" осалдығында қолданылады. Visual Studio Code 2021 жылдың қазан айында жарық көрген 1.62 нұсқасынан бастап BiDi басқару таңбаларын бөліп көрсетеді. Visual Studio 2021 жылдың 14 желтоқсанында шыққан 17.0.3 нұсқасынан бастап BiDi басқару таңбаларын бөліп көрсетеді.

Мысыр иероглифтері

Мысыр иероглифтері екі жаққа қарай жазылатын, онда нақты "басы" немесе "құйрығы" бар белгілер жолдың басына қаратылатын.

Қытай таңбалары және басқа да CJK жазулары

Қытай таңбаларын екі бағытта да, сондай-ақ тік (жоғарыдан төменге, содан кейін оңнан солға қарай) жазуға болады, әсіресе тақташалар сияқты белгілерде. Бірақ жеке таңбалардың бағыты өзгермейді. Мұны Қытайдағы туристік автобустарда жиі көруге болады, онда компанияның аты көліктің алдыңғы жағынан артқы жағына қарай жазылады, яғни автобустың оң жағында оңнан солға, ал сол жағында солдан оңға қарай. Көліктің оң жағындағы ағылшын тіліндегі мәтіндер де көбінесе кері ретпен жазылады. (Төмендегі туристік автобус пен қызметтік көліктің суреттерін қараңыз.) Сол сияқты, жапон және корей жазу жүйелері сияқты, бірдей төртбұрышты таңбалардан тұратын басқа CJK жазуларын да кез келген бағытта жазуға болады, бірақ көлденең (солдан оңға), тік (жоғарыдан төменге) және тік (жоғарыдан төменге, оңнан солға) пішіндері ең көп таралған.

Бустрофедон

Бустрофедон – ежелгі грек жазбаларында, көне сабай тілінде (Ежелгі Оңтүстік Арабия тілі) және венгр руналарында кездесетін жазу стилі. Бұл жазу тәсілі әрбір келесі жолда бағытын өзгертеді және әдетте жеке таңбаларды айналдырады.

Ай түрі

Ай түрі – соқырларға арналған тактильдік әліпби ретінде жасалған латын әліпбиінің көтеріңкі бейімделуі. Алғашқыда мәтін жолдардың соңында бағытын өзгертетін (бірақ әріптердің бағыты емес). Арнайы көтеріңкі сызықтар бір жолдың соңы мен келесі жолдың басын байланыстыратын. Шамамен 1990 жылы солдан оңға қарай бағытталуға көшті.