отступаем!
„Хотел бы я услышать как императрице Марии Фёдоровне предлагают «твóрог» на завтрак вместо творогá…“
Довлатов

Операция «Ы́», или как оно было.

Идея сверстать всю эту нецензурщину бродила в моей черепушке года два — c тех пор как собратья по орфографомании одарили меня фолиантом „Русского словаря языкового расширения“. В нём бранная страница выглядела так: GIF, 96 KB.

На возможность распознать её программно следовало забить — себе дороже править будет. Но не тут кобыла, я не сдался и всё-таки подключил к FineReader языковой набор с ударениями. Возни вышло много, а толку мало — слишком слабо отличаются буквы, чтобы уверенно их распознавать. Тем не менее, из программы всё-таки вышел некий черновик для дальнейшей работы.

А её предстояло… Для начала надо было найти способ корректно отображать в браузере „некоторые буквы и цифры“, например прописную «Ы» под ударением. Думаю, вы не часто сталкивались с подобной проблемой, верно? Вот и поисковики так ответили…

Пришлось заняться изысканиями. Первое, что я нашёл, это коды ударных гласных, общих для кириллицы и латиницы:

A.....................Á.....Á
á.....................á.....á
É.....................É.....É
é.....................é.....é
Ó.....................Ó.....Ó
ó.....................ó.....ó

Для языкового расширения букв было явно недостаточно. Кроме того, оказалось, что эти коды не отображались у старичков, например, в четвёртом нэцкэ.

Становилось ясно, что придётся учить новые трюки. Горестно повздыхав, я убил ночку на вникание в стандарт Unicode (скоро 2004 кончится, пора уж).

Возможности, действительно, оказались богатыми, хотя сам этот стандарт версии 4 впечатления окончательного и устоявшегося на меня не произвёл. Глаголицу, например, не поддерживает вообще. Исторические символы кириллицы, такие как «ять» или «ижица», заявлены в стандарте Unicode, но похоже ещё не нашли в нём своего окончательного места. По крайней мере, в некоторых системных шрифтах под их номерами стоят другие символы.

Далее выяснилось, что шрифтов, содержащих все символы Unicode, вообще не существует в природе. Так что, пока на него можно лишь надежды возлагать. Действительно, Unicode весь в развитии, производители шрифтов банально за ним не поспевают. Всё ещё будет.

Ну, да вернёмся к нашим ударениям. Отдельных мест под ударные кириллические гласные в Unicode кодировке, увы, не предусмотрено. Зато можно создавать совершенно безумные знаки сложением нескольких символов в один. The Unicode Consortium рекомендует для фонетических знаков, таких как ударение, использовать отдельные символы (spacing characters). По сути — символ, а за ним апостроф. Мне это показалось странным — насколько я помню, в букваре ударная гласная выглядела одним символом. Может быть, юникодовцы имели в виду более продвинутые лингвистические книги, где в квадратных скобках транскрипций что только не встретишь…

Так или иначе, но рекомендация есть правило, на которое можно положить, если это оправдано. Формат кодировки, слава ОЗУ, позволяет. Итак, я занялся сложением. Из кучи значков группы Combining Diacritical Marks (U+0300—U+036F) я выбрал наиболее подходящий, на мой взгляд, COMBINING ACUTE ACCENT (U+0301). Дальше — дело техники, знай, ставь значок после ударных гласных на странице в кодировке Unicode.

То есть, конечно, дальше-то всё только начиналось. И ещё одну ночку я медленно и печально воссоздавал форматирование и орфографию оригинала (любые сомнения в том, что автор „Словаря“ им является, отпадают в первые же минуты вёрстки). Лексикон свой расширил… Семантика слова «верстáн» для меня больше не секрет.

Ну, а чтобы при вёрстке фонетически насыщенных русских текстов не повторять все мучения сызнова, склерозник в студию. Отныне все самые ударные буквы русского языка сведены в одну страничку-табличку, пользуйтесь на здоровье!


Nota bene рáз.

Вот какую мысль мне подкинул MS Word 10, сохраняющий документы в формат гипертекста с использованием хитрого алгоритма. Используя его, можно отображать юникодовские символы на страницах с любой восьмибитной кодировкой, например WIN-1251 или KOI-8R. Делай раз: шестнадцатеричный индекс символа в кодировке Unicode переводится в десятеричное число. Делай два: которое и преподносится браузеру в конструкции &#XXX. Например, для того же острого слитного ударения:

COMBINING ACUTE ACCENT (U+0301)
0x0301(hex) = 769(dec)
Ы́ = Ы́

Однако, метод работает, как оказалось, только в современных браузерах, которые и с Unicode справляются. Во всяком случае, в браузерах-четвёрках, имеющих встроенную поддержку UTF-8, коды вида &#XXX; не проходят. Страницы же в кодировке Unicode отображаются ими нормально.

После разбора полётов разных браузеров, просто на всякий случай, был свёрстан обеднённый вариант бранной страницы.


Nota bene двá разá.

И ещё один момент. Символы ÁÓÉáóé из кодировки WIN не идентичны юникодовским, которые получаются синтезом из двух знаков. Как и всё синтетическое, смотрятся они… Похоже, что браузеры коряво интерпретируют Unicode; во всяком случае, одни и те же символы выглядят по-разному в IE и Opera. В общем, если позволяет контекст (прописная Ы и другие ударные гласные не встречаются), пожалуй, стоит использовать европейскую кодировку (коды из первой таблички).

Кроме U+0301, в юникоде есть ещё вагон и маленькая тележка значков, которые можно использовать под ударение. Мне, например, очень понравился символ U+F008, отлично сочетающийся со строчными гласными (кроме той же пресловутой «ы»). Плохо только то, что это ударение находится в группе Private Use, и, следовательно, стандартом Unicode не является (хотя XPюшины шрифты U+F008 держат).

Другой пример страстей по ударению я нашёл в справке к шрифту Elizabeth. Разработчики утверждают, что есть (во всяком случае, будет) в Unicode два разных диакритических знака, для ударений над строчными и прописными буквами, соответственно. Для шрифта Elizabeth код второго знака Acutesmall (U+F7B4). Диапазон и название выглядят, мягко говоря, подозрительно.

Из описания символа U+0301 следует, что он должен быть универсальным для любого буквенного символа, прописного или строчного. Значит, стоит ждать не второго ударения, а корректной обработки этого. Рано или поздно так и будет. Что ж, будем обновляться.

16 декабря 2004

Nóta béne три разá.

Совсем забыл живописать ещё одно свойство Unicode, которым не скоро удастся насладиться русскому человеку. Стандарт требует, чтобы разные символы, обозначающие одну букву, обрабатывались одинаково корректно. Например, строчная «а» и прописная «А» должны быть равноправны для программы-спеллера. И мамонтёнок, забивший в поисковик «мáма», найдёт её, несмотря на поставленное ударение.

Пока такой поддержки для русских ударений ни в одной программе нет. Но она обязательно появится, когда устоится символ для обозначения ударения. Именно устоится, потому что ни одной официальной конторы, которую интересует международный стандарт русского языка (хотя бы русскую команду Unicode), я не обнаружил.

Так что, русскоговорящие граждане, всё зависит от нашего удáрного труда.

18 декабря 2004

отступаем!