Типографика / [Из песочницы] Шрифты из склепа

в 10:11, , рубрики: dos, dosbox, linux, mac os x, terminal, разработка, русификация, метки: , , , , , ,

Типографика / [Из песочницы] Шрифты из склепа
Мне от моноширинных шрифтов многого не надо. Адекватная поддержка кириллицы. Для программирования — отсутствие замыливания. Возможность различать 0 (который ноль) и О. Возможность различать I (которое i), l (которое L) и | (которое or). Для работы в консольном двухпанельнике — поддержка псевдографики. Однако в современном мире подобных шрифтов не так, чтобы много. Откуда же их взять?
Осторожно! Под катом — сплошные анахронизмы.
Мне эта мысль не давала покоя довольно долго. Была перепробована куча вариантов, и ни один из них не устроил. Да, есть Terminus, но на его реализацию кириллицы невозможно смотреть без слез, есть Nouveau IBM — он почти то, что надо, но что-то и в нем для моих глаз не так. Различные варианты переделки пристойных пропорциональных шрифтов в моноширинные приемлемых результатов не дали. Мысль о комфортных шрифтах была отложена на какое-то время. Но не навсегда.
Сегодня меня осенило — ведь насколько качественно мелкие шрифты были прорисованы в русификаторах под DOS! А уж псевдографика там — прекрасна, как нигде еще. Осталось их только оттуда выудить, да и адаптировать к современным реалиям.
Скачав keyrus.com и еще пяток русификаторов, я приступил к экспериментам. Дизассемблировать русификаторы, чтобы найти смещения шрифтов, казалось неблагодарной задачей. От мысли написать на скорую руку риппер я также отказался, так как единственное, что я помнил — битмап глифа нулевого символа в 99% VGA шрифтов равен 16 нулевым байтам, и в результатах такого выдирания я не был уверен в силу гарантированной кучи мусора на выходе.
Пришлось вооружаться досбоксом и знакомыми с середины 90х утилитами. С их помощью искомые шрифты
были добыты без труда. К сожалению, часть тех русификаторов, что удалось найти, были пропущены через модные тогда упаковщики исполняемых файлов. Тратить на них время не стал.
Выдернув шрифты, я полез в линукс писать конвертер. В качестве целевого формата — уже не помню, почему, был выбран BDF. Сам конвертер оказался совершенно трививален — даже битмапы глифов не пришлось как-либо модифицировать, поэтому его код не выкладываю. Единственным вопросом, занявшим некоторое время, явился поиск таблицы перекодировки из CP866 в Unicode, которую можно было бы быстро воткнуть с код на C.
Результат в BDF — с небольшими модификациями — оказался вполне приемлемым.
Как в терминале, так и в GUI редакторах (например, Sublime Text 2). Под линуксом, более того, это оказалось оптимальным вариантом, так как возможности отключить антиалиасинг только для gnome-terminal я не нашел. Да и отсутствие настройки межстрочного расстояния может сыграть шутку с псевдографикой — вертикальные линии окажутся разорванными при использовании ttf.
Но… Черт, я хотел получить эти шрифты не только под линуксом, но и на маке, так как приходится работать одновременно в двух ОС. Но мак — увы и ах — не поддерживает BDF. Начинаем копать глубже.
Попытки сгенерировать валидные ttf с растровыми глифами к успеху не привели. Почему — до сих пор не знаю, требует вдумчивого изучения матчасти.
Чтобы не топтаться на месте — начал экспериментировать с векторизацией. Было очевидно, что попытки оттрассировать глифы размера 8x16 приведут к отсутствию приемлемого результата. Надо масштабировать вверх. Писать свою ресайзилку — лень. На просторах сети было найдено то, что нужно — консольная утилита bdfresize. Собрал, проверил работоспособность, отмасштабировал в 32x64.
Полез в fontforge трассировать. Для трассировки использовался potrace с параметрами "-z white -a -1". Параметры подбирал не сам — как было сказано на просторах сети, «this will split diagonal pixels and suppress conversion from polygons to curves». Сказать это на русском языке так, чтобы звучало адекватно, я, к сожалению, затрудняюсь.
Результат трассировки без дополнительных правок оказался квадратно-гнездовым, но без артефактов. Ровно то, что хотелось получить.
На этом этапе все, что оставалось сделать — сгенерировать ttf и проверить на маке. В стандартном терминале, терминале с Midnight Commander, и в редакторе текста все выглядело не хуже, чем под линуксом (с отключенным антиалиасингом, конечно).
На этом я решил и остановиться — мои шрифтовые хотелки успокоились, и удовлетворение я получил как от результата, так и от пройденного квеста.
Результаты конвертации не выкладываю, так как для меня не ясны правовые аспекты в данной ситуации. Уверен, что каждый, кто дочитал до этого места, в состоянии получить такие же шрифты — при наличии желания.
PS: Под ОС, занимающей на данный момент доминирующее положение на рынке десктопов, результаты не проверялись в силу отсутствия такой возможности.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js