Помощь - Поиск - Пользователи - Календарь
Полная версия: Как отконвертить старые ttf шрифты, чтоб всюду работали
ProDTP > Шрифты > Траблы и баги со шрифтами
Kassian
О кириллических шрифтах TrueType: квадратики, кракозябры и просто пустое место

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

Основные важные сайты: Казарновский, Шрифты и Microsoft Windows.

Существуют две кодовые таблицы CP1252 (WesternEurope) и CP1251 (Cyrillic).
В 1252 входят юникод диапазоны BasicLatin (простая латиница) и Latin-1 (диакритика для фр., нем. и т.д.). В 1251 входят юникод диапазоны BasicLatin и Cyrillic.

Юникодные приложения будут выбирать символы по юникод номеру, тут проблем немного.
С неюникод приложениями дело сложнее. В общем случае они будут обращаться только к символам CP1252 (WesternEurope). Все сказанное не зависит от версии Windows!

Если кириллица в шрифте сидит на месте расширенной латинице (CP1252), то в неюникодных программах все будет замечательно, но юникодные программы будут буксовать: при вводе с кириллической раскладкой они будут искать в шрифте символы с юникод номерами Cyrillic (CP1251) и не находить их.
Если же кириллица сидит на законной CP1251, то ее наоборот не найдут неюникодные программы.

Есть несколько способов, как обмануть всех и поиметь кириллицу и там, и там.

1. Продублировать кириллицу в нижней части 1252 (WE) и 1251 (Cyr). Так поступает, например, ParaType в своих шрифтах с суффиксом имени CTT. Тут будут некоторые напряги с символом Евро и сербской буквой Ђ — скажем еще раз спасибо Юникодной комиссии за наше счастливое детство без их опеки и без их евро.

2. Сделать шрифт содержащий только CP1251 (Cyr), а потом разложить его в реестре (w2k/XP) или в win.ini (Win9x) на [имя_шрифта] Cyr, так же как мы раскладываем Times New Roman на Times New Roman Cyr, Times New Roman CE и т.д. Сделать это можно программой WGL Assistance (и подобными). Чтобы WGL Assistance увидел этот шрифт как Cyr, при генерации его в FontLab надо поставить Supported CodePages: 1252 и 1251.

3. Сделать шрифт содержащий только CP1251 (Cyr), а потом воспользоваться замечательным хаком имени самого Билла Гейтса. Если некоторый байт в файле шрифта будет изменен с 00 на CC, то такой шрифт будет считаться кириллическим, т.е. имеется в виду, что у этого шрифта неюникод программы будут обращаться к CP1251, что нам и нужно! (Речь идет о старшем байте поля fsSelection таблицы OS/2. Это недокумментированная и более того, противоречащая спецификации TrueType фича, но именно так были устроенны системные национальные шрифты в Win3.11.) Можно это сделать вручную, если знать, как этот байт искать, но проще воспользоваться FontLab. Делается это так: Microsoft Character Set ставится Cyrillic CP1251, чтобы избежать глюков с некоторыми юникод программами (напр., Word 8/97) ставим еще и Supported CodePages: 1252 и 1251. Потом в св-вах TrueType ставим галочку на Put MS Char Set into fsSelection field. Дело в шляпе (сорри за каламбур). Эта фишка будет работать под Win3.11, Win9x, w2k (и скорее всего XP тоже; под NT — не знаю).


Теперь от теории к практике
В те времена, когда о юникоде знали только в Микрософте, было сделано много кириллических шрифтов, у которых кириллица располагалась на месте расширенной латиницы, т.е. CP1252 (WE). Естественно в юникодных программах кирилица у них работать не хотела.
Как такие шрифты "лечить": любым из трех способов.

Проще всего №1 — можно воспользоваться общеизвестной досовской утилиткой ttfconv.exe, которая сдублирует кириллицу с 1252 на 1251. Надо только иметь в виду, что эта утилита не сдублирует 6 сербских и македонских символов:
138 U+0409 CYRILLIC CAPITAL LETTER LJE
140 U+040A CYRILLIC CAPITAL LETTER NJE
131 U+0453 CYRILLIC SMALL LETTER GJE
154 U+0459 CYRILLIC SMALL LETTER LJE
156 U+045A CYRILLIC SMALL LETTER NJE
159 U+045F CYRILLIC SMALL LETTER DZHE

Способами №2 и №3 я сам практически не пользовался. На первый взгляд там все работает (№2 вообще совершенно законный), но кто их знает...

А вообще под w2k/XP если вы пользуетесь неюникодными программами, то переходите на шрифты type1 - во избежание проблем с выводом на postscript принтер.

[Версия 1.0]

Это сообщение было отредактировано:  Kassian, 18 Фев, 2004 г. - 21:46
Valik-ZERO
Существует схожая проблема!

В конце 90-х на платформе win 3.x - 95 был создан финами "национальный" шрифт с латиницей, кирилицей и спецомыми символами (с умляутами)
В результате спада экономики шрифт не модифицировался и на ос win 2k и 2003 половина спецомых символов каждый второй раз заменяется квадратиком

Вопрос: КАК ИХ СДЕЛАТЬ НОРМАЛЬНЫМИ???

Это сообщение было отредактировано:  Valik-ZERO, 06 Июл, 2004 г. - 15:59
akzhaiyk
Вопрос мог бы быть внятнее.
БТВ Причем экономика и кодировка?
akzhaiyk
Цитата
А вообще под w2k/XP если вы пользуетесь неюникодными программами, то переходите на шрифты type1 - во избежание проблем с выводом на postscript принтер.

C type1 такая же бодяга с национальными шрифтами с рядом программ от Adobe и только с ними.
Пользуйтесь, пока не пофиксили Postscript драйвер, версиями драйверов для NT4.
peppper
вот я запустил ТТФконв.эксе и секунду и прога исчезла - это уже все поконвертилось? :roll:

Еще проблема с Опен Тайп в ХР: пользуюсь Корелом12, Фрихендом9-11, ФШ.
в Кореле видны изначально только несколько ТТФ а остальные ОТ, которые ну совсем не отвечают моим требованиям(((  посносил ОТ, в винде всё испортилось(((, зато фрихенд9 - все работает! А мне часто корел нужен... ПОМОГИТЕ!!!

хочу убить Билла(Гейца) :evil:
Kassian
peppper
IPB Image  К сожалению, первое предупреждение из трех возможных. Дублирование сообщения; вопрос не по теме (тут обсуждаются truetype, а не opentype).

Цитата
вот я запустил ТТФконв.эксе и секунду и прога исчезла - это уже все поконвертилось?

Да, все случилось так быстро, что ты и не заметил.
И все-таки стоит самому сначала проверить, прежде чем спрашивать.
PinkP
Однажды меня настолько достал нездорово любимый заказчиками юникодовский Arial, что я сделал его обычным. Сразу исчезли все проблемы при вставке текста через буфер из разных приложений и ручном наборе. А конвертился Фонтлабом. Пробовал разные форматы, пока не остановился на состоящем из 3-х файлов: *.afm *.inf *.pfb.
nik7777
Очень вредный совет.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2012 Invision Power Services, Inc.

Реклама

   Rambler's Top100    Яндекс цитирования