Еще о церковно-славянских шрифтах (технич. статья, ч.1)


[Православная беседа] [Ответы и комментарии] [Написать ответ]


Отправлено Юрий Ермолаев 15:37:28 12/05/1999:

chart1.gif

Заранее предупреждаю (и прошу прощения за то), что данное сообщение посвящено преимущественно ТЕХНИЧЕСКИМ ВОПРОСАМ. Я планирую в ближайшем будущем поместить более проработанные и лучше иллюстрированные материалы в специальном разделе нашего сайта (http://orthodox-culture.da.ru); но, поскольку очередное (крупное) обновление сайта задерживается, а проблема постоянно "всплывает" на Форуме, предлагаю предварительные (хотя все же достаточно объемистые) заметки вниманию тех, кто интересуется этой темой.  
 
[ Иллюстрация, помещенная в заголовке сообщения, будет пояснена ниже ]. 
 
______________________________________________ 
 
Как уже отмечалось на Форуме, стандартная кириллическая UNICODE-таблица (0400-04FF) поддерживает русские буквы "старой орфографии". Впрочем, эта проблема без особого труда решалась и в рамках прежней, более привычной ANSI-кодировки (речь будет идти только о Windows-платформах). Необходимые 4 дополнительные буквы: "i" ("и" десятиричное), "ять", "фита" и "ижица" нередко включались в русифицированные шрифты (причем  "i" на практике вообще брали из латинской части таблицы; да и вместо специального начертания "ижицы" чаще использовали  латинскую "v"). Позиции этих букв, конечно, не были стандартизованы, что порождало несовместимость.   
 
Теперь многие православные пользователи компьютеров обратили внимание и на то, что в UNICODE-зоне 0400-04FF фактически сделана попытка вместить ВСЕ возможные (по мнению разработчиков) славянские буквы, включая церковную графику. На первый взгляд, это удалось. Но при более внимательном анализе выявляются серьезные недостатки. Мне трудно судить, насколько эта таблица хороша для современных восточно-славянских языков — сербского, болгарского, украинского, белорусского, — но для церковно-славянского (и, тем более, древне-церковно-славянского, древнерусского или древнеболгарского, специфические символы которых там тоже присутствуют) она все же не вполне пригодна.  
 
Смириться с отсутствием некоторых начертаний церковно-славянских букв еще можно было бы, поставив их (в реально разрабатываемом шрифте) на место подходящих по значению. Так, в качестве не предусмотренного, но совершенно необходимого варианта начертания строчной буквы "есть" (так называемого "якорного", употребляемого в начале слов и для отличия падежей двойств. и множ. чисел от созвучных падежей ед. числа) можно договориться использовать позицию буквы "Ukrainian ie" = 0454; букву "зело" считать идентичной "Dze" = (0405, 0455); принять, что "йотированный азъ" должен быть на месте русского "я", т.е. "Ya" = (042F, 044F); наконец, согласиться, что "Omega with titlo" = (047C, 047D) соответствует варианту буквы "омега", необходимому для передачи некоторых церковно-славянских междометий в звательном падеже ("О, ПРЕСЛАВНОЕ ЧУДЕСЕ...", "ОЛЕ СТРАШНАГО ТАИНСТВА..." и т.п.) — никакой титлы там на самом деле нет, хотя должна изображаться не только титла, но и придыхание; однако это не "омега" с двумя надстрочными знаками, а уже вполне самостоятельная буква алфавита. Все остальные церковно-славянские буквы в таблице имеются (с точностью до наименований). 
 
Однако главный недостаток в другом.  
 
Диакритические знаки — неотъемлемая часть церковно-славянского языка, имеющая не только лингвистическое и культурно-историческое, но и духовное значение. Так, под титлами пишутся многие слова сакрального ряда, и их сокращение служит не для экономии места (как нередко утверждают светские филологи, изучавшие в вузе вымышленный "старославянский" язык), а для указания на прикровенный смысл. Церковные слова под титлами давно уже приобрели характер своего рода идеограмм и при чтении воспринимаются целостно, без "раскрытия" сокращений; поэтому их замена полными написаниями — наподобие того, как это делается в современных изданиях древнерусских текстов — недопустима. Пренебрежение надстрочными знаками лишает церковный текст определенного, если так можно выразиться, духовного оттенка. Да и различение омонимов, а также внешне схожих грамматических форм, невозможно без точного воспроизведения титл и ударений (напр., БГЪ под титлой — Бог единый, Господь, а БОГЪ без титлы — один из "богов" язычников; АГГЛЪ с титлой — читается "ангел" — служебный дух Господень, а АГГЕЛЪ без титлы — так и читается "аггел" — дух падший, т.е. бес; РАБЪ с острым ударением ("оксия") — ед. число им. падежа, а РАБЪ с облеченным ударением ("камора") — множ. число родит. падежа, по-русски "рабов"; и т.п.)  
 
Можно утверждать, что по тому, насколько та или иная компьютерная технология или стандарт способны передавать именно эти важные особенности церковно-славянского языка, следует судить о СТЕПЕНИ ЕЕ ПРИГОДНОСТИ для этого языка вообще. 
 
Для представления комбинированных символов в UNICODE-таблице (0400-04FF) неявно заложена технология, которую можно условно назвать "Составными Буквами". Эта технология вынуждает самого пользователя набирать — по отдельности — основную букву и все дополнительные к ней знаки. Что, вообще говоря, довольно неестественно. Представим для сравнения, что буквы "ё" и "й" в русском языке всегда надо было бы набирать в "два касания"... С точки зрения текстового процессора такая составная буква есть последовательность НЕСКОЛЬКИХ РАЗНЫХ символов. В самом же шрифте разработчик должен реализовать один из методов, позволяющих надстрочному знаку"наехать" на др. букву:  
 
   а). использование так называемых "мертвых символов";  
   б). установка левой границы каждого надстрочного знака в отрицательную область для совмещения с любой предыдущей буквой;  
   в). задание отрицательного кернинга для всех возможных пар вида: "надстрочный знак" — "любая возможная под ним буква".  
 
(Все эти методы отличаются между собой скорее объемом работы, чем качеством результата). Технология "Составных Букв" имеет два очевидных преимущества: позволяет набирать буквы со сколь угодно сложной диакритикой на обычной клавиатуре (но в церковно-славянском языке много букв, все равно требующих дополнительных клавиш) и существенно экономит общее количество требуемых знакомест (в ANSI-кодировках это важно, но для UNICODE, обещавшей нам 65 тыс. знаков — странное достоинство...) 
 
А вот принципиально неустранимые недостатки (или, если хотите, ограничения) этой технологии: 
 
   1). не обеспечивает достаточно точного размещения надстрочных знаков, индивидуального для каждой буквы; к тому же результат может быть разным в разных системах верстки и на разных устройствах вывода; 
   2). не учитывает, что в церковной традиции некоторые буквы с надстрочными знаками изображаются немного иначе, чем без них (для исключения пересечений с верхним выносным элементом буквы); напр.: "укъ" и "ять" с тупым ударением ("варией"), "ять" с "каморой" и др. 
   3). препятствует использованию кернинга по прямому назначению; 
   4). исключает применение автоматической разрядки строк (трекинга); 
   5). искажает привычный процесс редактирования текста, нарушая принцип "WYSIWYG" ("что вижу, то и имею"), т.к. текстовый курсор будет все время "залипать" на комбинированных символах; 
   6). затрудняет расстановку и корректировку переносов, орфографический и грамматический контроль (было бы странным совсем не планировать такую задачу для церковно-славянского языка, хотя бы в будущем). 
 
Попытки улучшить внешний вид "Составных Букв" (устранить 1-й недостаток) известны. Один из примеров (в ANSI-кодировке) легко доступен в Internet: это свободно распространяемый разработчиком церковно-славянский шрифт "Полуустав" (HalfUstav, www.lgg.ru/~hamster или www.microdin.ru/~hamster) — переработка известного шрифта "Евангелие". В нем часть надстрочных знаков может располагаться тремя различными способами относительно основной буквы: "ближнее", "среднее" и "дальнее" расположение (какое именно выбрать для данной буквы — должен решать пользователь, применяя при наборе соответствующие комбинации клавиш). Это не TrueType, а PostScript шрифт, обеспечивающий несколько лучшие возможности по управлению "наездом" символов друг на друга. Примерно тот же подход применяется в коммерческих шрифтовых разработках. Легко видеть, что все это, к сожалению, нисколько не устраняет остальные 5 недостатков,  и только усложняет процесс набора текста.  
 
Особенно заметные проблемы возникают с кернингом. Одни и те же достаточно широкие титлы могут оказаться как над узкой, так и над широкой буквой, и кернинг будет либо нужен, либо нет. Но первой буквой в кернинговой паре с какими-то последующими будет сама титла, которая "не знает", что окажется под ней (т.е. что будет слева). С другой стороны, кернинговать титлу с предшествующими буквами (на которые она будет "наезжать") нельзя без учета следующей за ней справа. Задавать же кернинг для всевозможных сочетаний из трех букв — огромный труд. В результате даже среди коммерческих разработок не найти шрифта с полноценным кернингом, что делает заголовки и любые фрагменты, набранные более-менее крупным кеглем, "дырявыми" и непрофессионально выглядящими. 
 
Но известна и другая технология построения шрифтов с большим объемом диакритики; ее можно для краткости назвать "Монолитными Буквами": в самом шрифте размещаются ВСЕ ВОЗМОЖНЫЕ (вернее, нужные) комбинации основных букв с доп. знаками, и каждая такая комбинация рассматривается как отдельная буква (неделимое целое). Расположение добавочного знака над (под) основной буквой выполняет сам шрифтовой дизайнер — индивидуально для каждой комбинации, имея возможность при необходимости скорректировать контур и основной буквы. В текстовом процессоре такая комбинация ничем не будет отличаться от простой буквы — она представляется единственным машинным символом (1 или 2 байтами — см. далее); курсор всегда перемещается от буквы к букве; кернинг, трекинг, переносы и орфография (если они есть) будут работать, как надо. Ясно, что технология "Монолитные Буквы" обеспечивает совсем другое качество, чем "Составные Буквы". 
 
Церковно-славянские шрифты, сделанные по этой технологии, пока широко не известны. Но могу указать подходящий "родственный" пример (в ANSI-кодировке): комплект PostScript-шрифтов для "классического" греческого языка под названием PT Pragmatica Greek Polytonic производства ParaGraph, еще 1994 г. Файлы называются так: Pgp55_pg.pfb, Pgp56_pg.pfb и т.п. — посмотрите в своих коллекциях — может, случайно "обретете"... Заметим, что в греческом языке всего 7 гласных букв плюс согласная "ro" — "переносчики" диакритических знаков, поэтому общее число комбинаций (даже с учетом 2-х типов придыхания, 3-х видов ударения, возможности почти любых сочетаний из них плюс "подписная йота" и "знак разделения") оказывается относительно невелико и укладывается в рамки 256-знаковой кодовой страницы, которую с равным успехом можно реализовать в ANSI- или же в UNICODE-кодировках. И, кстати, в UNICODE уже зарегистрирована аналогичная таблица в зоне 1F00-1FFF для "расширенного" греческого языка, помимо основной для современного,   "новогреческого" (0370-03FF). 
 
По сути, та же технология "Монолитных Букв" — хотя и в меньшем масштабе — применена во второй половине стандартной ANSI-страницы для Центральной Европы (0080-00FF). Так что с ней знаком каждый, кому попадался латинский шрифт с "умляутами". 
 
В церковно-славянском языке ситуация сложнее, чем в языках с латинской графикой и греческом. И хотя подстрочных знаков тут нет, а разновидностей надстрочных знаков немного, но зато их "носителями" могут выступать почти все буквы алфавита (ударений и придыханий — все гласные, титл — часть гласных и почти все согласные). Это приводит к значительно большему количеству теоретически возможных комбинаций. Кроме того, буквенные титлы (с маленькой надписной буквой) создают дополнительное разнообразие. Но все же привлекательность технологии "Монолитных Букв", снимающей все вышеуказанные ограничения, позволяет признать ее более перспективной и предпочтительной для церковно-славянского языка. К тому же она хранит очевидное преемство от традиционной "словолитни" прошлых веков, где имелись все варианты начертаний комбинированных букв именно в монолитном — металлическом — исполнении.  
 
Конечно, данная технология вносит свои трудности: 
 
   1). не хватает клавиш на стандартной клавиатуре; 
   2). не хватает стандартной 256-знаковой кодовой страницы. 
 
Но эти трудности не являются принципиально непреодолимыми, хотя и требуют некоторых усилий. Обе они — не новые для компьютерной полиграфии, и средства их решения давно апробированы на примере дальневосточных языков (CJK).  
 
1-я трудность может быть устранена разработкой специальных программных средств, обеспечивающих эффективное "расширение клавиатуры", типа хорошо известных "кириллизаторов". При терпении некоторых неудобств может оказаться достаточным даже применение стандартного Windows-приложения CharacterMap или старой-старой, но удобной  универсальной программы Foreigner, 1993 г. (не исключено, что есть и более новая версия, а также и Web-сайт, но я знаю только E-mail автора: goldsborough@brandonu.ca). Для идеографических шрифтов с их тысячами символов разработано немало специализированных средств, начиная от простых "переключателей регистров" и кончая графическими "виртуальными клавиатурами", где весь набор текста предлагается осуществлять мышкой на экране.  
 
Вообще, такие "расширители" представляют не слишком сложную задачу для программиста, хотя и используют иногда довольно хитроумные механизмы Windows: фильтры для клавиатурных сообщений (hooks) и OLE и/или DDE обмен для вставки набираемых символов в произвольное целевое приложение. 
 
Придется также создать специальную церковно-славянскую раскладку клавиатуры, зарегистрировать ее в Windows как отдельный язык и научить приложения стандартным образом его использовать... Но это отдельная тема. 
 
Борьба со 2-й трудностью начинается с решения вопроса об упорядочении состава и расположения букв церковно-славянского алфавита в рамках того или иного стандарта (ANSI или UNICODE). И вот тут-то недостатки существующих стандартов кириллических таблиц становятся очевидны. 
 
Заметим, что в UNICODE-зоне 0400-04FF предусмотрены позиции только для простейших диакритических знаков — ударений, придыханий и простых титл. Если использовать эту таблицу по принципу "Составных Букв", то буквенные титлы, предназначенные для "наезда" на др. символы, все равно придется размещать в каких-то не предназначенных для них знакоместах (например, вместо сербских букв). И еще при этом необходимо как-то заново договариваться о дополнительной суб-стандартизации. Вообще, для разработчика шрифтов такой "стандарт" — не помощь в работе, а "вечный бой... покой нам только снится".  
 
Не лучше ли, в конце концов, заняться выработкой нормального рабочего стандарта — не для всевозможных славянских алфавитов "вообще", а специально для церковно-славянского языка — если уж нам никак не прожить без UNICODE? Тогда можно было бы сразу решиться на поддержку "Монолитных Букв" и "застолбить" достаточный диапазон адресов в одной из неиспользуемых областей. Отведено же целых 640 позиций (1400-167F) для "канадского силлабического алфавита", не говоря уже об алфавитах индейцев племени чероки (13A0-13FF), рунических буквах (16A0-16FF) и проч. экзотике.  
 
И, кстати, Microsoft и Netscape тут не при чем: дело придется иметь с консорциумом The Unicode Consortium (P.O. Box 700519 San Jose, CA 95170-0519, USA, www.unicode.org), в который может вступить любой желающий, если это желание подкреплено скромной суммой с кредитки — от $120 до $12,000, в зависимости от желаемого статуса. Тогда — пожалуйста: можно участвовать в доработке стандарта, правда, только начиная со статуса "Specialist", стоящего $600 в год. Но индейцы-то чероки нашли эту кучку баксов, хоть им и пришлось, вероятно, продать последний головной убор своего вождя =(:-о) ... чем же православное сообщество славян хуже? 
 
Вообще, не стоит принимать на веру утверждения типа "в UNICODE все уже давно сделано, а чего нет — добрые фирмы быстро сделают в лучшем виде". И еще: нам не обойтись без исследования РЕАЛЬНЫХ ПОТРЕБНОСТЕЙ в шрифтах того или иного вида. А это возможно выполнить только в церковной среде, никакие фирмы не помогут, скорее, напортят.  
 
Причем разумно будет не пытаться объять сразу все, а иметь в виду пока только церковно-славянский язык не древнее XIX в. (т.е. ограничить себя ПРАКТИЧЕСКИМИ запросами современного церковного книгоиздания — бумажного и электронного). Ясно также, что далеко не все теоретически допустимые комбинации букв с диакритическими знаками следует вообще рассматривать.  
 
В 1997-98 гг. мы в СПб Обществе Русской Православной культуры изучили представительную выборку используемых в церковном обиходе текстов (из широко распространенных — в том числе в репринтах — изданий прошлого века Синодальной Типографии и Типографии Киево-Печерской Лавры: Евангелия, Апостола, Следованной Псалтири, Служебника, Типикона, Часослова и др.), а также провели консультации с преподавателями церковно-славянского языка. Это позволило нам сформировать предварительный список из 175 букв с надстрочными знаками и титлами, реально встречающихся в церковных текстах, которые, на наш взгляд,  имеет смысл включать в ANSI- и/или UNICODE-стандарт для технологии "Монолитных Букв". Результаты этих исследований в сжатом виде представлены на ГРАФИЧЕСКОЙ ИЛЛЮСТРАЦИИ в заголовке данного сообщения. Эти данные хорошо бы обсудить на Форуме: может быть, кто-то предложит свои обоснованные поправки. 
 
Далее. В этом списке показаны только строчные буквы. В связи с традиционными особенностями употребления (вернее, неупотребления) в церковно-славянских текстах заглавных букв, последних, казалось бы, потребуется гораздо меньше; однако нужно ведь еще обеспечить возможность набора произвольных заголовков. Таким образом, необходимы знакоместа под 175+175 символов + знаки пунктуации (10 знакомест в ANSI, а в UNICODE надо использовать стандартные адреса в зоне 0000-007F, кроме одного доп. значка "тысяча") и, вероятно, "на крайний случай" — все те же надстрочные знаки отдельно (порядка 16) — чтобы можно было в редких непредусмотренных ситуациях частично воспользоваться только что раскритикованной мною технологией "Составных Букв" и все же получить нужную комбинацию — хотя бы и с худшим качеством. Таким образом всего, с учетом нескольких резервных знакомест, надо рассчитывать на 384 позиции, т.е. ровно полторы стандартные кодовые страницы. Например, в свободной UNICODE-зоне 1700-1DFF такая таблица могла бы занять адреса 1700-187F. 
 
Вроде бы очевидно, что в рамках ANSI-стандарта не удержаться без добавочных ухищрений. Однако оказалось, что и для этой кодировки можно предложить некоторые нетрадиционные технические решения. По инициативе нашего Общества была разработана концепция и пробный стандарт расположения ВСЕХ "Монолитных Букв" в 256-знаковой таблице и реализующий его комплект церковно-славянских шрифтов, который уже около года "обкатывается" в небольших издательских проектах. Эта разработка, как нам представляется, после всестороннего обсуждения сможет послужить неплохой (по крайней мере, временной) альтернативой для полной UNICODE-реализации, создание которой, как мы сейчас увидим, потребует ответов еще на некоторые непростые вопросы. Шрифты для бета-тестирования (а впоследствии — и окончательные версии) будут распространяться свободно с нашего сайта. Более подробной информации на эту тему можно ожидать в следующей части данной технической статьи, которая будет в скором времени подготовлена для Форума. 
 
Возвращаясь к стандарту UNICODE, который, в принципе, должен бы был решить проблему кардинальным образом, вспомним, что одного следования стандарту недостаточно. Если при размещении алфавита в пределах 256-знаковой кодовой страницы каждый символ текста может представляться одним байтом (в том числе и в UNICODE), то при выходе за эти границы потребуется уже двухбайтовая адресация. Дело усложняется еще тем, что в среде Windows в текстах (напр., на азиатских языках) допускается использование СМЕСИ из 1-байтовых и 2-байтовых символов — с особыми правилами для их различения, выделения так наз. "ведущих" байтов и интерпретации (во потрудилась-то команда мистера Билла, представляете? И это еще не все...) В программном интерфейсе Win32 API предусмотрены специальные функции для манипуляций со строками, содержащими перемешанные 1- и 2-байтовые символы, а также новые версии ряда старых функций. Современные Win32-приложения должны, теоретически, вызывать только такие функции.  
 
ОДНАКО: все это дает ожидаемый результат лишь в том случае, если у конечного пользователя действительно установлена система, поддерживающая работу с двухбайтовыми наборами символов (DBCS) — напр., дальневосточная версия Windows95/98 или NT. В противном случае даже самые "UNICODE-ориентированные" приложения типа Office97, отдавая обработку своих строк на откуп системным функциям, перед растеризацией получат следующий результат: 2-байтовые символы будут интерпретированы как последовательность 1-байтовых; затем те будут расширены (нулями слева!) опять до 2-байтовых и транслированы к базовому адресу данного языка; из шрифта, выбранного в контекст отображения устройства, извлечены глифы букв, соответствующих этим позициями в UNICODE-таблице и ... — результат ясен: вместо осмысленного церковно-славянского текста на экране или  принтере пользователь с возмущением узрит что-то нечитаемое, а может, и неожиданно кощунственное. Вот так и появляются суеверия и "компьютеро-боязнь" у некоторых православных людей... 
 
Поэтому хочу подчеркнуть: проблема не только в том, что надо разработать, принять и официально утвердить подходящий стандарт для церковно-славянского языка, а в том, что для КАЧЕСТВЕННОГО выполнения этой работы придется, видимо, рано или поздно соглашаться на переход к 2-байтовому представлению данного алфавита, наподобие дальневосточных CJK-языков. Кодовые страницы большинства остальных языков сейчас  укладываются в 256 знаков и продолжают использовать 1-байтовое представление и в UNICODE, поэтому им не знакома эта проблема, которая ведь подразумевает и другую. А именно: можно ли ожидать от потенциальных пользователей готовности перейти на дальневосточную платформу только ради того, чтобы применять UNICODE-версию церковно-славянского шрифта?  
 
Не исключено, что какие-нибудь из этих вопросов я интерпретировал по-своему, и, возможно, они нуждаются в уточнении. Все изложенное, в первую очередь — результаты наших исследований практического употребления церковно-славянских букв и знаков — есть предмет для КВАЛИФИЦИРОВАННОЙ КРИТИКИ И ОБСУЖДЕНИЯ всеми заинтересованными лицами.  
 
Для желающих заниматься разработкой шрифтов могу порекомендовать ознакомиться с сервером Российской фирмы FontLab Developers Group (www.fontlab.com, правда, он весь на английском, видимо, наши братья-специалисты больше любят не своих ближних, а тех, кто лучше платит...); а из "бумажных пособий" — книгу "Шрифты. Разработка и использование" / Барышников Г.М. и др. — М.: ЭКОМ, 1997 (ISBN 5-7163-0014-6). 
 
Продолжение (о предлагаемом варианте ANSI-стандарта и реализующих его шрифтах для бета-тестирования) будет подготовлено в ближайшее время — аще модератор Форума ничтоже вопреки глаголати станет... 
______________________________________________ 
 
P.S. Кстати, братья и сестры, а также уважаемые господа. Почему бы нам не подумать о создании чего-нибудь типа "АССОЦИАЦИИ РАЗРАБОТЧИКОВ И ПОЛЬЗОВАТЕЛЕЙ СЛАВЯНСКИХ ШРИФТОВ" (название примерное)? А то ведь продолжение дискуссии по чисто техническим вопросам может стать неинтересно большинству участников Форума... Хотелось бы узнать, много ли существует действительно заинтересованных потенциальных членов такой организации, сколь серьезны их намерения и сколь осознаны потребности. 
 
Да благословит милосердный Господь наши благие дела  — постольку, поскольку мы будем сами в состоянии свою профессиональную деятельность понимать как род христианского служения, свидетельствуя миру нашу веру в Воскресшего Христа, Которому слава во веки. Аминь. 
 
Помощник Председателя  
Общества Русской Православной культуры  
Свт. Игнатия (Брянчанинова) — Юрий Ермолаев — 


Ответы и комментарии:


[Православная беседа] [Начало] [Написать ответ]