Дореволюционная ("царская") орфография
в MS Windows 95 и Windows NT 4.0.

       Здесь предлагаются наборы файлов для Windows 95 и для Windows NT 4.0, установка которых добавляет к русскому набору символов Windows старинные литеры, использовавшиеся в дореволюционной орфографии: яти, фиты и ижицы.

       Набор состоит из двух частей: шрифтов и системных файлов, которые необходимо подменить в Windows, чтобы последние корректно работали с новыми символами.

1. Шрифты (одинаковые для Win95 и WinNT)

       Шрифтов пока три: Arial (arial.ttf), Royal Arial (arialr.ttf) и Royal Times New Roman (timesr.ttf). Реально первые два из них - это один и тот же шрифт (сделанный на базе оригинального Arial, поставляемого Микрософтом), но под разными именами. Сделано это со следующей целью. Установка Royal Arial, как и Royal Times New Roman, совершенно безболезненна и не должна влиять на уже установленные программы и имеющиеся документы. Поэтому его можно устанавливать, ничего (или почти ничего :)) не боясь. Все наши файлы будут отформатированы в Royal Arial и Royal Times New Roman.

       Установка же Arial предполагает удаление одноимённого оригинального шрифта и установку вместо него нашего. Эта замена (теоретически) может повлиять на работу уже имеющихся программ, которые используют Arial, или на вид документов, набранных с помощью оригинального шрифта. Поэтому замена Arial не обязательна, однако предоставляет некоторые преимущества: в частности, MS Word 95 (7.0) использует в окнах поиска/замены именно его. Поэтому после установки нашего шрифта добавленные символы будут видны и в этих окнах. Если этого не сделать, то в полях ввода искомого/заменяемого текста вместо новых символов будут отображаться пустые прямоугольнички.

       Шрифты можно установить через Панель Управления | Шрифты (Control Panel | Fonts). Напоминание: если Вы всё же отважились заменить Arial, сохраните оригинальный шрифт, скопировав его предварительно из папки со шрифтами в какое-нибудь безопасное место.

       Для правильного отображения русских символов с помощью Royal Arial и Royal Times New Roman нужно внести изменение в файл WIN.INI, добавив в секцию [FontSubstitutes] следующие строки:

Royal Arial Cyr,204=Royal Arial,204
Royal Times New Roman Cyr,204=Royal Times New Roman,204

       В русской версии Windows 95 нужно добавить также строки:

Royal Arial Cyr,0=Royal Arial,204
Royal Times New Roman Cyr,0=Royal Times New Roman,204

2. WINDOWS 95: Системные файлы: CP_1251.NLS и GDI.EXE

       Эти файлы необходимо заменить в системе, чтобы она правильно работала с вновь появившимися символами. ВНИМАНИЕ: модуль GDI.EXE различается в зависимости от версии Windows. В настоящее время имеются исправленные версии GDI.EXE для русской и американской версий Windows 95.

       Эти файлы расположены в системном каталоге Windows 95; обычно это C:\Windows\System. Перед заменой сохраните оригинальные файлы в безопасном месте.

       После того, как оригиналы сохранены, нужно заменить старые файлы новыми. Для выполнения такой замены необходимо, чтобы графическая система Windows была выгружена из памяти и не работала. Для этого необходимо перезагрузить Windows в режиме эмуляции MS-DOS. Не используйте сессию MS-DOS, запущенную из-под Windows - в этом случае работающая система не позволит Вам удалить старые файлы. Будьте внимательны: для русской версии Windows 95 нужно скопировать файл GDI_RUS.EXE в GDI.EXE, а для американской - GDI_US.EXE в GDI.EXE. Файл CP_1251.NLS одинаковый для обеих версий, его надо просто переписать на место старого.

       После записи этих файлов нужно вернуться в Windows, и на этом процедура установки закончена. После этого Charmap.exe должна показывать яти, фиты и ижицы для шрифта Royal Arial Cyr, a Word 6.0/7.0/95/97 должен уметь вставлять их через "Вставить Символ" ("Insert Symbol"). Если настроить на них горячие клавиши, то их можно и печатать. Правда, тут есть пока непонятность: символы, напечатанные с помощью горячих клавиш, потом не ищутся с помощью функции поиска. Символы же, вставленные копированием из буфера или Вставкой Символа, ищутся без проблем. Странный эффект, непонятно с чем связанный.

       Эта же процедура, изложенная немного другими словами, описана здесь.

3. WINDOWS NT 4.0: Системный файл C_1251.NLS

       Этот файл необходимо заменить в системе, чтобы она правильно работала с вновь появившимися символами. Он расположен в системном каталоге Windows NT. Обычно это каталог C:\Windows\System32. Перед заменой сохраните оригинальный файл в безопасном месте. Чтобы заменить файл, достаточно, не выходя из Windows, просто переименовать оригинал, дав ему другое имя, и записать на его место имеющийся в этом комплекте исправленный файл.

4. WINDOWS 98

       К сожалению, сейчас у меня имеется версия gdi.exe только для американской версии Windows 98, которая проверена и работает. Когда у нас появится gdi.exe для русской версии, мы поместим здесь комплект для Win98.

5. Примеры текста, набранного в старой орфографии

       Брошюра «Объяснение Божественной Литургии»

       Статья И. Ильина «О русском правописании» (и в формате для Word 6/95: Iljin.doc)

       Правила русского правописания из дореволюционного издания Орфографического словаря.

6. Частые вопросы:

       В: Обязательно ли заменять стандартный шрифт Arial на предлагаемый здесь?

       О: Нет; для просмотра и печати текстов, подготовленных нами, достаточно установить только Royal Arial и заменить указанные системные файлы.

       В: Широкое распространение получили две разновидности Windows'95 - первая коммерческая версия Windows'95, выпущенная в августе 1995 года, и Windwos'95 OSR2, выпущенная в 1996 году. Для какой из разновидностей Window'95 был разработан файл GDI.EXE?

       О: В обеих упомянутых версиях этот файл (gdi.exe) одинаков, отличается только время создания. Поэтому и "заплатку" можно записывать в любую версию.

       Вопросы и комментарии направляйте по адресу: font@rus-sky.com (Владимиру)


Наши представления о возможностях использования дополнительных символов
в русских шрифтах в MS Windows 95/98.

       Это небольшое описание носит схематичный характер и, за отсутствием времени, не претендует на точность и выверенность формулировок. Цель его - помочь интересующимся этим вопросом понять общую ситуацию и возможные пути решения проблемы; а также скоординировать усилия по отладке и проверке приемлемого варианта. Кроме того, по возможности опускается всё, относящееся к этому вопросу, но выходящее за рамки русского языка.

       1. Введение в способы представления (кодировки) символов: кодовая страница (CodePage), она же Script (язык), появление Unicode.

       Истоки проблемы в том, что "с древнейших времён" для представления символа использовался 1 байт, что ограничивало размер символьного набора 255 символами. Первая половина - младшие 128 символов этого набора были выделены под цифры, латинские (английские) символы и знаки пунктуации. Вторая - старшая - половина использовалась для представления символов с надстрочными и подстрочными знаками и для некоторого количества специальных знаков - авторского права, торговой марки и т.п. Это позволяло отображать английский язык плюс языки со сходными символами.

       Языки же, у которых начертания существенно отличались от этой, так называемой, романской группы, не имели уже места для своих символов в этом ограниченном наборе. Тогда MS ввёл понятие кодовой страницы. Кодовая страница - это независимый атрибут текста, показывающий, к какому языку он относится. Для каждой группы родственных языков выделяется отдельное "кодовое пространство" - тот же набор из 255 символов, но коды этого набора соответствуют другим символам, чем в "романской" странице. Кодовым страницам для разных языков присваиваются номера, и теперь по одному тексту, представляющему собой набор символов - байтов - уже невозможно строго сказать, на каком языке написан (или к какой кодовой странице относится) этот текст. Т.е. он требует ещё независимого атрибута - номера кодовой страницы.

       Описанная ситуация имеет исключение - для символов английского языка. Младшая половина - первые 128 символов каждой кодовой страницы - одинаковы (или почти одинаковы, но различия, если и есть, то в несущественных символах), что обеспечивает возможность отображения английского языка в любой кодовой странице. Т.е. национальные символы располагаются в старшей половине, что ограничивает размер национального символьного набора 128 символами, зато делает английский текст "прозрачным" для всех страниц.

       Для славянской группы выделена страница под номером 1251, которая, в основном, и используется в локализованных и руссифицированных версиях Windows.

       Так обстояло дело до того, как MS стал использовать новую систему кодирования символов - Unicode, которая сразу была ориентирована на возможность одновременного представления символов разных языков. В общих чертах смысл схемы в следующем. Под символ отводится не один, а два байта, в результате чего общий диапазон всех символов, которые можно представить, пользуясь Юникодом, составляет 65536 (0xFFFF) символов. Внутри этого общего пространства каждому языку выделяются уже небольшие поддиапазоны значений. То есть, по коду символа становится возможным определить, к какому языку он относится. Например, кириллические символы занимают область с 0x400 по 0x4FF . По контрасту со схемой, использующей кодовые страницы, текст занимает вдвое больше места, поскольку под каждый символ отводится не один, а два байта, но зато имея только текст (или просто имея один символ), можно сразу сказать, к какому языку этот текст (или символ) относится. Т.е. тескт не требует специальных атрибутов, внешних к этому тексту - в каждом символе его кодом уже обозначен язык.

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

       Что касается интересующих нас дополнительных букв (если речь идет о царской орфографии, то это минимум шесть букв: прописные и строчные ять, фита и ижица), то ситуация с кодами для них следующая: в кириллической кодовой странице (CP-1251) мест для них не зарезервировано; в Unicode же они имеют свои места в кириллическом диапазоне. Поэтому в Unicode проблемы с местом для них нет, но в схеме с кодовой страницей - придется замещать ими какие-то из уже существующих кириллических символов.

       Следует заметить, что в схеме Unicode отведены места не только под указанные символы, но и под многие другие славянские символы. С кодировкой можно ознакомиться в прилагаемых ссылках.

       2. Кодировка символов в шрифтах.

       Пока рассматриваются только TrueType шрифты, как основные при работе с Windows. В этих шрифтах все символы нумеруются в соответствии с кодировкой Unicode. В самом шрифте, кроме того, проставляются флаги, говорящие о том, какие из Юникодовских диапазонов символов присутствуют в этом шрифте. Из вышеизложенного ясно, что добавление символов в TrueType шрифт поэтому не представляет проблем - добавляемые литеры помещаются на отведенные им в Unicode места.

       3. Перевод текста (перекодировка) между системой Unicode и схемой с кодовыми страницами.

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

       Здесь мы входим в недокументированную область - официальной информации от MS или нет, или она отрывочная.

       1. Для целей перекодировки из кодовых страниц в Unicode служат перекодировочные таблицы, расположенные, насколько нам известно, в двух местах:

       - в файлах cp_XXXX.nls,- ими, как написано у Константина Казарновского, пользуются Unicode-приложения, если у них возникает потребность в перекодировке; кроме того, здесь содержатся таблицы для определения соответствия строчных и прописных букв - для перевода нижнего и верхнего регистров;

       - в ресурсе системного модуля GDI.EXE,- этими таблицами, как написано там же, неявно пользуются 16-битные старые приложения и 32-битные, работающие в терминах кодовых страниц; здесь имеется только таблица перекодировки Codepage->Unicode.

       Оба формата и сами местоположения таблиц не документированы и, вообще говоря, не предназначены для изменений. Но известно, что изменения, тем не менее, возможны. Успешно применяется, например, правка второй из этих таблиц - для перевода Windows на кодировку КОИ-8Р (что есть частный случай изменения вида кодовой страницы).

       Соответственно, если мы рассматриваем русский язык, то для первого варианта существует файл cp_1251.nls, а для второй - таблица в определенном месте файла GDI.EXE. Таблица перекодировки задает правило для перевода каждого символа из данной кодовой таблицы в соответствующий код диапазона Unicode.

       Для обратного перевода - из Unicode в кодовую страницу - прямая возможность есть только в первом файле - cp_1251.nls, в котором есть для этого специальная таблица. Обратный перевод необходим в меньшем числе случаев, но иногда все же необходим (например, при переносе текста из Unicode-приложения в приложение, работающее с кодовыми страницами).

        4. Работа Unicode-приложений.

       Unicode-ориентированные приложения, как это сейчас представляется, не должны иметь больших проблем при работе с доп. символами в Windows 95. Они хранят и отображают текст в Unicode, поэтому для них ничего необычного в новых символах быть не должно. Проблемы будут при экспорте текста в не-Unicode формат - как раз в этом месте потребуется отладить механизм перекодировки Unicode -> кодовая страница. Пример такого приложения - MS Word 97. Он уже готов к работе с новыми символами и позволяет даже настроить горячие клавиши, с помощью которых их можно вводить с клавиатуры. Он хранит текст в формате Unicode, и только при экспорте в формат для Word 6.0/95 преобразует в формат, использующий кодовые страницы (языки), поэтому на неподготовленной системе новые символы, о которых неизвестно системе перекодировки Unicode->CodePage, в экспортированном документе отсутствуют.

       Кроме того, сходная проблема, видимо, возникнет при копировании текста в буфер обмена (clipboard) для последующей передачи не-Unicode приложению. Эта ветвь тоже потребует такой перекодировки.

       Наоборот, при приеме данных из буфера обмена от приложения, не использующего Unicode, потребуется правильная перекодировка Codepage->Unicode.

       5. Работа не-Unicode приложений.

       Для этих приложений, главным образом, требуется перекодировка Codepage->Unicode (для правильного отображения шрифтов). Эти приложения, как правило, не работают с Unicode напрямую, хотя перекодировка Unicode->Codepage теоретически может им понадобиться для приема текста от Unicode-приложения.

       Сюда относятся почти все распространенные редакторы, драйверы клавиатур и вообще все обычные программы.

       6. Исходные соображения к размышлению о возможных путях :).

       - добавление символов в шрифты не вызывает вообще никаких проблем;

       - если вся работа происходит внутри Unicode-приложения, то проблем с отображением и вводом текста нет;

       - изменение вида (содержимого) кодовой страницы предполагает собой изменение файлов операционной системы; кроме того, при таком изменении (в нашем случае) неизбежно пропадает часть уже имеющихся символов нашей кодовой страницы; эти изменения, впрочем, не очень болезненны, поскольку в этой части есть символы, повторяющиеся в первой половине страницы;

       - в настоящее время практически невозможно избежать работы с приложениями, использующими кодовые страницы;

       7. Замечание о содержимом нашей страницы (CP-1251).

       Во второй половине нашей страницы есть 2 неиспользуемых символа (с кодами 136 (0x88) и 152 (0x98)) и минимум 6 символов, повторяющих начертаниями латинские: S, s, I, i, J и j. Если говорить о выделении места под наши 6 символов, то, по-видимому, эти восемь позиций должны быть первыми кандидатами на замещение. В крайнем случае, текст с их использованием можно привести к читаемому виду заменой этих символов на соответствующие латинские. Правда, это приведет к последствиям для проверки орфографии в соотв. языках, но это уже неизбежно, если мы вообще хотим иметь доп. символы в нашей странице.

       Примечание: неиспользуемые символы задействовать не удлось, потому что Word 95 не распознавал их как буквы, из которых могут состоять слова. Видимо, это требует ещё каких-то исправлений - возможно, в cp_1251.nls.

       8. Короче говоря :), есть по крайней мере два способа решения нашей проблемы:

       1. Способ, не предполагающий модификации файлов ОС, но не соотвествующий стандарту Unicode и теряющий больше символов в кодовой странице. Кроме того, в этом способе нет возможности указать соответствие между строчными и   прописными символами, что выразится, например, в невозможности искать строки в тексте "без учета регистра". Функция автоматической смены регистра в Word тоже не будет работать с новыми символами (почему-то она не применяется к упомянутым символам).

       В этом способе шесть наших символов (по две яти, фиты и ижицы) просто помещаются в шрифте на места упомянутых латиноподобных символов. Соответственно, перекодировка из Codepage возвращает наши символы вместо старых, старые из шрифта исчезают.

       Самое большое преимущество этого способа - для установки на компьютер пользователя нужен только файл со шрифтом. Установив шрифт, пользователь получает возможность читать файлы в старой орфографии, а настроив горячие клавиши на новые символы - и писать в ней.

       Недостатки: шрифт не соответсвует стандарту Unicode => и в Unicode-приложениях мы не соответствуем стандарту; это, в числе прочего, лишает нас возможности пользоваться шрифтами, которые сделаны в соответствии со стандартом; пропадают 6 "чьих-то" символов ("чьих-то" - потому что не знаю, в каком языке они используются); не работают преобразования регистров.

       2. Способ, требующий модификации двух (как сейчас кажется) файлов ОС: cp_1251.nls и GDI.EXE.

       В этом способе все новые символы помещаются в шрифте на отведенные для них согласно Unicode места. Старые символы (S, s, и т.д.) остаются полностью доступными для Unicode приложений.

       Кодовая страница исправляется таким образом, что шесть наших новых символов помещаются вместо упомянутых латиноподобных. При этом для приложений, работающих через кодовые страницы, эти символы исчезают.

       Для реализации такой замены нужно 1) исправить таблицу Codepage->Unicode в GDI.EXE; 2) исправить таблицы Codepage<->Unicode и перекодировки нижний<->верхний регистр в cp_1251.nls.

       После изменений мы должны (не все вышеописанные операции мною проверены) получить следующую картину:

       - Unicode-приложения работают в полном соответствии со стандартом, им (приложениям) видны все старые и новые символы, работает автосмена регистра и поиск без учета регистра, шрифт полностью соответствует стандарту;

       - Codepage-приложения видят и могут использовать новые символы, но не видят 6 старых "латиноподобных" символов.

       Основной недостаток: для всех различных вариантов GDI.EXE (от разных версий Windows 95/98) нужно иметь соответствующие модифицированные версии для замены (этот путь уже опробован и в сети есть такие версии GDI.EXE для упомянутого "перевода" Windows на КОИ-8Р). Это относится и к файлам cp_1251.nls.

       То есть, чтобы установить такой комплект, пользователь должен, кроме установки шрифта, определить версию своей системы и подменить файлы GDI.EXE и cp_1251.nls.

       Предлагаемый выше комплект сделан по второму варианту.

       9. Ссылки по теме

http://charts.unicode.org/Unicode.charts/normal/U0400.html — официальная страница о кириллическом диапазоне Unicode.

http://www.glasnet.ru/~kazarn/fontsmain.htm — страница Константина Казарновского о языках, шрифтах и кодировках

Содержимое страницы CP-1251 (из Microsoft Development Library): графика, текст.

Программка Charmap.exe, у кого нету.

       10. Установка

       Предлагается всем попробовать для сбора статистики. ОСТОРОЖНО! Перед тем, как записать исправленный GDI.EXE в каталог Windows\System, убедитесь точно, что версия ваших Windows совпадает с той, для которой этот GDI.EXE сделан!

       Рекомендуемая последовательность действий:

       1. Находясь ещё в Windows, в каталоге Windows\System скопировать GDI.EXE в GDI.EX0 и CP_1251.NLS в CP_1251.NL0 (резервные копии на всякий случай);

       1a. Сразу можно прописать в секцию [FontSubstitutes] файла WIN.INI строчку:
Royal Arial Cyr,204=Royal Arial,204

       2. Перезапустить Windows в режиме MS-DOS (не использовать MS-DOS сессию, а именно выгрузить Windows; лучше всего выйти через Shut Down | Restart the computer in MS-DOS mode);

       3. Скопировать исправленный GDI_RUS.EXE или GDI_US.EXE, в зависимости от Вашей версии Windows, на место имеющегося в каталоге Windows\System. Также копировать CP_1251.NLS поверх старого.

       4. Зайти обратно в Windows.

       После этого Charmap.exe должна показывать яти, фиты и ижицы для шрифта Royal Arial Cyr, a Word 6.0/7.0/95/97 должен уметь вставлять их через "Вставить Символ" ("Insert Symbol"). Если настроить на них горячие клавиши, то их можно и печатать. Правда, тут есть непонятность: символы, напечатанные с помощью горячих клавиш, потом не ищутся с помощью функции поиска. Символы же, вставленные копированием из буфера или Вставкой Символа, ищутся без проблем. Странный эффект, непонятно с чем связанный.

       Вопросы и комментарии: font@rus-sky.com (Владимиру)