Pull to refresh

Шрифты из склепа

Reading time 3 min
Views 31K
image Мне от моноширинных шрифтов многого не надо. Адекватная поддержка кириллицы. Для программирования — отсутствие замыливания. Возможность различать 0 (который ноль) и О. Возможность различать I (которое i), l (которое L) и | (которое or). Для работы в консольном двухпанельнике — поддержка псевдографики. Однако в современном мире подобных шрифтов не так, чтобы много. Откуда же их взять?

Осторожно! Под катом — сплошные анахронизмы.


Мне эта мысль не давала покоя довольно долго. Была перепробована куча вариантов, и ни один из них не устроил. Да, есть Terminus, но на его реализацию кириллицы невозможно смотреть без слез, есть Nouveau IBM — он почти то, что надо, но что-то и в нем для моих глаз не так. Различные варианты переделки пристойных пропорциональных шрифтов в моноширинные приемлемых результатов не дали. Мысль о комфортных шрифтах была отложена на какое-то время. Но не навсегда.

Сегодня меня осенило — ведь насколько качественно мелкие шрифты были прорисованы в русификаторах под DOS! А уж псевдографика там — прекрасна, как нигде еще. Осталось их только оттуда выудить, да и адаптировать к современным реалиям.

Скачав keyrus.com и еще пяток русификаторов, я приступил к экспериментам. Дизассемблировать русификаторы, чтобы найти смещения шрифтов, казалось неблагодарной задачей. От мысли написать на скорую руку риппер я также отказался, так как единственное, что я помнил — битмап глифа нулевого символа в 99% VGA шрифтов равен 16 нулевым байтам, и в результатах такого выдирания я не был уверен в силу гарантированной кучи мусора на выходе.

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

image


Выдернув шрифты, я полез в линукс писать конвертер. В качестве целевого формата — уже не помню, почему, был выбран BDF. Сам конвертер оказался совершенно трививален — даже битмапы глифов не пришлось как-либо модифицировать, поэтому его код не выкладываю. Единственным вопросом, занявшим некоторое время, явился поиск таблицы перекодировки из CP866 в Unicode, которую можно было бы быстро воткнуть с код на C.

Результат в BDF — с небольшими модификациями — оказался вполне приемлемым.

image


Как в терминале, так и в GUI редакторах (например, Sublime Text 2). Под линуксом, более того, это оказалось оптимальным вариантом, так как возможности отключить антиалиасинг только для gnome-terminal я не нашел. Да и отсутствие настройки межстрочного расстояния может сыграть шутку с псевдографикой — вертикальные линии окажутся разорванными при использовании ttf.

Но… Черт, я хотел получить эти шрифты не только под линуксом, но и на маке, так как приходится работать одновременно в двух ОС. Но мак — увы и ах — не поддерживает BDF. Начинаем копать глубже.

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

Чтобы не топтаться на месте — начал экспериментировать с векторизацией. Было очевидно, что попытки оттрассировать глифы размера 8x16 приведут к отсутствию приемлемого результата. Надо масштабировать вверх. Писать свою ресайзилку — лень. На просторах сети было найдено то, что нужно — консольная утилита bdfresize. Собрал, проверил работоспособность, отмасштабировал в 32x64.

image


Полез в fontforge трассировать. Для трассировки использовался potrace с параметрами "-z white -a -1". Параметры подбирал не сам — как было сказано на просторах сети, «this will split diagonal pixels and suppress conversion from polygons to curves». Сказать это на русском языке так, чтобы звучало адекватно, я, к сожалению, затрудняюсь.

Результат трассировки без дополнительных правок оказался квадратно-гнездовым, но без артефактов. Ровно то, что хотелось получить.

image


На этом этапе все, что оставалось сделать — сгенерировать ttf и проверить на маке. В стандартном терминале, терминале с Midnight Commander, и в редакторе текста все выглядело не хуже, чем под линуксом (с отключенным антиалиасингом, конечно).

На этом я решил и остановиться — мои шрифтовые хотелки успокоились, и удовлетворение я получил как от результата, так и от пройденного квеста.

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

PS: Под ОС, занимающей на данный момент доминирующее положение на рынке десктопов, результаты не проверялись в силу отсутствия такой возможности.

UPD: конвертер, сэмпловые bdf и ttf выложены на ifolder.ru/28488918

За качество кода конвертера автор ответственности не несет. Попыток как-либо причесать не предпринималось.
Tags:
Hubs:
+89
Comments 74
Comments Comments 74

Articles