Скільки ж здавалося б банальних питань, які буквально постійно у нас на очах. Однак відповіді на них ми ніколи не намагалися знайти тому, що не помічали цього питання – звикли до нього. Адже найчастіше такі питання приховують цікаві, глибокі та іноді просто витончені відповіді.

Чи замислювалися ви колись, чому єврейська та арабська писемність мають одну явну особливість, а саме написання праворуч наліво? Виявляється, є цілком практичне пояснення.

Семітські мови, до яких входить і арабська, і іврит, одні з найдавніших на планеті. Вони зароджувалися в той час, коли ніхто навіть і мріяти не міг про папір, адже він з'явився лише близько двох тисяч років тому. Єврейська та арабська писемність виникла на основі давньовавилонського клинописного листа, а західна традиція листа - з давньоєгипетського папірусного листа.

Щоб пояснити наочно, у чому між ними відмінність, включимо уяву. Уявіть, що перед вами лежить папірус, а в руках у вас стило (тонкий ножик). Ми нарізаємо ієрогліфи правою рукою (85% людей – правші). При цьому те, що написано праворуч від нас, закрите, зате чудово видно те, що ліворуч. Постає питання: як вам зручніше писати? Звісно, ​​зліва направо, бо так зручно бачити, що вже написано.


А тепер візьміть у руки камінь, молоток та зубило. Молоток у праву руку (85%), зубило – у ліву. Почнемо висікати клинописні ієрогліфи. Ліва рука із зубилом нам надійно закриває те, що написано зліва, зате те, що праворуч, нам добре видно. Як нам зручніше писати? У цьому випадку – праворуч наліво.


До речі, якщо уважніше придивитися до букв єврейського алфавіту, можна помітити, що й своєрідна конфігурація свідчить у тому, що спочатку літери висікалися у чомусь твердому. Такі букви набагато простіше зобразити зубилом, а не пером.

Звичайно, з того часу камінь перестав бути єдиним довговічним зберігачем інформації, але правила листа вже сформувалися, тож було прийнято рішення не змінювати правила писемності кардинальним чином.

Чи згодні з такою версією?

Чи замислювалися ви колись, чому єврейська та арабська писемність мають одну явну особливість, а саме написання праворуч наліво? Виявляється, є цілком практичне пояснення.

Справа в тому, що єврейська та арабська писемність виникла на основі давньовавилонського клинописного листа, а західна традиція листа - з давньоєгипетського папірусного листа.

Щоб пояснити наочно, у чому між ними відмінність, включимо уяву. Уявіть, що перед вами лежить папірус, а в руках у вас стило (тонкий ножик). Ми нарізаємо ієрогліфи правою рукою (85% людей – правші). При цьому те, що написано праворуч від нас, закрите, зате чудово видно те, що ліворуч. Постає питання: як вам зручніше писати? Звичайно, ліворуч праворуч, оскільки так зручно бачити, що вже написано.

А тепер візьміть у руки камінь, молоток та зубило. Молоток у праву руку (85%), зубило – у ліву. Почнемо висікати клинописні ієрогліфи. Ліва рука із зубилом нам надійно закриває те, що написано зліва, зате те, що праворуч, нам добре видно. Як нам зручніше писати? У цьому випадку справа наліво.

До речі, якщо уважніше придивитися до букв єврейського алфавіту, можна помітити, що й своєрідна конфігурація свідчить у тому, що спочатку літери висікалися у чомусь твердому. Такі букви набагато простіше зобразити зубилом, а не пером.

Звичайно, з того часу камінь перестав бути єдиним довговічним зберігачем інформації, але правила листа вже сформувалися, тож було прийнято рішення не змінювати правила писемності кардинальним чином.

Пам'ятаю, коли я в дитинстві вперше дізнався, що деякі народи, наприклад, араби та євреї, пишуть праворуч наліво, то дуже здивувався. Мені здавалося незрозумілим, як можна писати. Адже це страшно незручно!

Я навіть спробував написати щось у зворотному напрямку, але майже відразу все розмазав рукою, якою тримав ручку.

На мої запитання, чому ж євреї з арабами пишуть саме так, ніхто не дав зрозумілої відповіді. Тому довгий час мені залишалося задовольнятися поясненням, що вони просто так заведено.

Проте відповідь на цю загадку не давала мені спокою, навіть коли я виріс. Мені здавалося, що має бути вагома причина для того, щоб писати у «неправильному» напрямку. І зрештою з'ясувалося, що це справді так!


Виявилося, що все пояснюється досить просто та логічно. Справа в тому, що семітські мови, до яких входить і арабська, і іврит, одні з найдавніших на планеті. Вони зароджувалися в той час, коли ніхто навіть і мріяти не міг про папір, адже він з'явився лише близько двох тисяч років тому.


Проте людям треба було якось фіксувати інформацію, тому вони висікали письмена на камені. А тепер уявимо, як правшам, яких на землі 85%, буде зручніше орудувати молотком та зубилом? Звичайно ж, це зручніше робити, тримаючи зубило в лівій руці і стукаючи по ньому молотком, затиснутим у правій. А в цьому випадку найзручніше писати якраз праворуч наліво!


До речі, придивись уважніше до літер єврейського алфавіту. Їх своєрідна конфігурація свідчить у тому, що спочатку літери висікалися чимось твердому. Такі букви набагато простіше зобразити зубилом, а не пером.


Хоча з того часу камінь перестав бути єдиним довговічним зберігачем інформації, але правила листа вже сформувалися, тож ніхто не став їх кардинально змінювати.


Ось так просто пояснюється загадка про направлення листа в івриті та арабській мові. Якщо це стало для тебе відкриттям, обов'язково поділися своїми новими знаннями зі своїми друзями.

  1. Для кожного символу у рядку обчислюється спрямованість;
  2. Рядок б'ється на блоки однакової спрямованості;
  3. Блоки вишиковуються у порядку, заданому базовим напрямом.

На спрямованість кожного символу впливає його тип та спрямованість сусідніх символів.

Три типи символів

1) Сильно спрямовані(або строго типізовані, сильно типовані) - наприклад, літери. Їхня спрямованість заздалегідь визначена - для більшості символів це LTR, для арабських та івриту - RTL.


Слова на картинці цілком строго типізовані:



2) Нейтральні- наприклад, знаки пунктуації чи прогалини. Їхня спрямованість не задана явно, вони спрямовані так само, як сусідні сильно спрямовані символи.


Кома між спрямованими зліва направо "o" і "w" у рядку "Hello, world" приймає їх спрямованість і при базовому LTR, і при RTL:



Але що якщо нейтрально спрямований символ потрапляє між двома сильно спрямованими символами різної спрямованості? Такий символ набуває базової спрямованості.


Ось тут розташування "++" в одному випадку між односпрямованими "C" і "a", а в іншому - між різноспрямованими "C" і арабським "و", призводить до різного результату:



Те саме трапляється з нейтральними символами в кінці рядка:



3) Слабо спрямовані(або слабо типізовані, weakly typed) - наприклад, числа. Вони мають свою спрямованість, але ніяк не впливають на навколишні символи.


Безперервні слова з цифр вишиковуються зліва направо, але два числа поспіль, розділені нейтральним символом, будуть йти один за одним праворуч наліво, якщо задана базова RTL-спрямованість:



Ще наочніший випадок - число, в якому розряди розділені пробілом:



При цьому допускається розділяти числа точкою, комою, двокрапкою - ці роздільники теж слабо спрямовані (докладніше можна подивитися у специфікації):


Спрямовані блоки (directional run)

Послідовні символи однакової спрямованості поєднуються в блоки (directional run). Ці блоки вишиковуються один за одним у порядку, визначеному базовим напрямом:



Слабо спрямовані числа, незважаючи на те, що мають свою спрямованість, не впливають на формування блоків, що може призводити до такого результату – вони продовжують попередній спрямований блок:


Дзеркальні символи

Деякі символи в різних контекстах мають різну форму - наприклад, що відкриває дужка в RTL буде виглядати як закриває в LTR (що логічно, адже контент у дужках йтиме після - тобто, зліва від неї).


У більшості випадків це не створює проблем, але якщо дужки випадково виявляться різною спрямованістю, візуально вони дивитися в один бік. Наприклад, якщо дужка висить у кінці рядка:


Беремо лад під контроль

Як ми побачили вище, часто текст за цими правилами форматується не так, як хотілося б.


У цьому випадку нам знадобляться інструменти для вбудовування бажаного напрямку у існуючий контекст або перевизначення напрямків конкретних символів.

Ізоляція (isolate)

Із завданням базового напряму ми вже ознайомилися вище: це робить атрибут dir. Це глобальний атрибут, він застосовується до будь-якого елемента.


dir створює новий рівень вбудовування (embedding level) та ізолює вміст від зовнішнього контексту. Контент всередині спрямований відповідно до значення атрибута, а зовнішня спрямованість самого контейнера стає нейтральною.


Явна установка атрибута dir дозволяє уникнути багатьох проблем форматування змішаного тексту:


أنا أحب C++و Java


Якщо спрямованість контенту невідома заздалегідь, можна вказати auto як значення атрибута dir. Тоді напрямок вмісту визначиться за допомогою «деякої евристики» - він просто візьметься у першого строго типізованого символу, що попався.


(comment)


Аналогічно працює тег та css-правило unicode-bidi: isolate:


Landmark: (name)- (Distance)

Вбудовування (embed)

Можна відкрити новий рівень вбудовування без ізоляції - правило unicode-bidi: embed в комбінації з потрібним значенням правила direction визначають напрям всередині елемента, і його спрямованість зовні. Але це практично не потрібно майже ніколи.

Перевизначення (override)

або unicode-bidi: bidi-override; direction: rtl. Перевизначає напрямок кожного символу всередині елемента. Потрібно використовувати дуже рідко (наприклад, якщо потрібно поміняти місцями два конкретні символи) і не забувати ізолювати дочірні елементи.


Hello, world!


При цьому зовні елемент сприймається як сильно спрямований. Щоб він поводився як isolate зовні, але як bidi-override всередині, потрібно використовувати unicode-bidi: isolate-override .

Керуючі символи (marks)

Вставка символів, що управляють, - неприємний спосіб, але він корисний, коли у нас немає доступу до розмітки, але є доступ до контенту. Наприклад, це можуть бути просто невидимі сильно спрямовані символи, ‎ і ‏ (‎ / ‏ або u200e / u200f). Вони допомагають задати потрібний напрямок нейтрального символу.


Наприклад, у цьому випадку, щоб знак оклику в кінці рядка прийняв напрямок LTR, потрібно, щоб він знаходився між двома LTR символами:


Hello, world!‎

Також будь-яка описана вище логіка реалізується через символи, що управляють. Для ізоляції – LRI/RLI, для перевизначення – LRO/RLO, і т.д. - дивись докладний посібник з керуючих символів.

Підтримка браузерами

На жаль, в IE тег , dir="auto" і відповідні правила CSS не підтримуються. Крім того, специфікація цих правил все ще на стадії Editor's Draft.


Якщо потрібен аналог dir="auto", що працює в будь-якому браузері, можна парсить контент регулярним і виставляти атрибут dir самостійно. Але краще, звісно, ​​так не робити.

HTML чи CSS?

Однозначно, керувати напрямом тексту наскільки можна через HTML–атрибут dir і тег , а чи не через правила CSS. Напрямок тексту – це не стилізація, це частина контенту. Сторінка може бути вставлена ​​через якийсь instant view або бути прочитана через RSS-reader.

Перед ув'язненням: трохи болю

Ми познайомились із теорією. Але знання теорії не звільняє від потреби страждати.


Головна проблема, з якою я зіткнувся на перших хвилинах розробки під RTL-мова, це його чужорідність. Ми пишемо код зліва направо. Моя система, браузер та редактор працюють зліва направо, всі наші внутрішні продукти – зліва направо. Тому, як тільки в цей простір потрапляє арабська мова, все погано та боляче:

Маніпуляції з текстом

Якщо символи на екрані розташовані не в тому порядку, в якому вони насправді знаходяться в рядку, що буде, якщо спробувати редагувати текст? Чи хоча б виділити та скопіювати його частину?


Нічого гарного. Спробуйте самі:


Landmarks: دبي مارينا مول - 600 m, داماك العقارية - 1.2 km
azbycxdwevfugthsirjqkplom n

Маніпуляції з кодом

І те ж саме при редагуванні коду в редакторі і код-рев'ю - біль.


Навіть у порядку елементів у масиві не можна бути впевненим:



Або того гірше, код взагалі не виглядає валідним:



Теорій виникнення листа існує безліч, але слід розуміти, що жодна з них не може вважатися стовідсотково вірною - йдеться про процеси давністю кілька тисяч років, про які жодних письмових (вибачте за каламбур) свідчень не збереглося. Те саме можна сказати і про інші «передісторії цивілізації»: ми ніколи точно не дізнаємося, де жили перші індоєвропейці і як звучала їхня мова, ким були перші люди, що перейшли Берингову протоку, і в якому році вперше одомашнили собаку - ми можемо лише робити реконструкції та припущення різного ступеня обґрунтованості.

Тим не менш, зараз більшість вчених пов'язує направлення листа з типом письменних пристосувань, що спочатку застосовувалися. Тут є два основні варіанти.

    Текст пишеться якимось нагадує сучасну ручку пристосуванням (стилусом, загостреною трубочкою і т.п.) на м'якій поверхні, при цьому або по цій поверхні розподіляється барвник (туш, чорнило та ін по папері, папірусу та ін), або знаки на цій поверхні видавлюються / подряпуються, але без особливих зусиль (віск, береста, м'яка глина тощо). При такому способі листа інструмент найзручніше тримати у правій руці (більше 90% людей правші) найбільш розвиненими пальцями (вказівним, середнім та великим). У такому разі лист зліва направо виявляється набагато органічнішим, бо, по-перше, рука пише не закриває вже написане і з ним можна постійно звірятися, по-друге, при використанні барвника немає ризику змастити його рукою або рукавом.

    Текст висікається на твердій поверхні (камінь, дерево) за допомогою ріжучого інструменту (долото тощо) та била (молоток та ін.). У разі молоток зазвичай тримається правою рукою (>90% людей правші, і права рука вони сильніше), а різець - лівої; відповідно, «писати» зручніше справа наліво, так як при цьому молоток не заважає огляду знака, що вибивається в даний момент.

Основним способом письма у більшості людських цивілізацій зі зрозумілих причин був перший (м'яка поверхня + фарба/подряпування): це просто і не вимагає великих фізичних зусиль. Тому більшість відомих систем писемності використовують лист зліва направо. Сучасні системи письма справа наліво, мабуть, мають історичне коріння у другому варіанті, проте ці процеси настільки віддалені від нас у часі, що ми не можемо стверджувати напевно, що справа була саме так.

Що ж до інших способів листи, всі вони є похідними від зазначених. Східний лист зверху вниз - це той же лист зліва направо, що розвинулося внаслідок того, що писальний матеріал згортали в рулони, що поступово розверталися. Передньоазіатський бустрофедон (

теж є варіантом листа зліва направо, при якому поверхню (табличку) повертали на 180 градусів наприкінці кожного рядка.