О блоге

Все новые материалы размещаются на Блогосайте alv.me. Старые - в процессе переноса.

19.08.2008

Шрифтовой терминатор: пакет terminus-fonts

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

И потому эта интермедия посвящается замечательному пакету terminus-fonts. Он - болгарского происхождения, автор его - Dimitar Toshkov Zhekov (затрудняюсь транскирибировать с языка братьев-славян) и проживает здесь: http://www.is-vn.bg/hamster/jimmy-en.html в виде архива tar.gz объемом около 100 Кбайт. Его можно найти также в портах FreeBSD и в портежах Gentoo, вероятно, и в других системах. Для FreeBSD, в частности, он доступен и в качестве бинарного пакета. Впрочем, использовать последний я не рекомендовал бы - почему-то в него не вошли собственно консольные шрифты (а только шрифты для X-терминала). Так что лучше получить "авторский экземпляр" пакета и установить его самостояткльно. Или уж, на худой конец, скачать мою подборку кириллических шрифтов для syscons, включающую и уже готовые шрифты из описываемого пакета. Кстати, кириллические шрифты для Linux-консоли можно выудить рядом.

Пакет terminus-fonts - не просто шрифтовой набор, а универсальный инструмент для генерации терминальных шрифтов любого назначения. Он включает в себя:

  • шрифтовые файлы базовой гарнитуры в формате BDF (Bitmap Distribution Format) нормального и полужирного начертания, высотой от 14 до 24 пикселей, в кодировке Unicode;
  • набор скриптов для преобразования их в шрифтовые файлы различных используемых Unix-консолями и X-терминалами форматов;
  • make-файлы для соответствующих преобразований;
  • необходимые дополнительные данные, в частности, unimap-таблицы для преобразования 8-битных кодировок в Unicode;
  • файлы документации на английском и болгарском языках.

В README-файлах дается исчерпывающее описание того, как обращаться с пакетов. И потому я лишь кратко опишу доступные возможности. И так, базовые bdf-шрифты могут быть преобразованы в шрифтовые файлы следующих форматов:

  • raw-формат, в котором шрифтовой файл содержит только бинарные данные; этот формат используется для вывода в консольных драйверах BSD-семейства (syscons FreeBSD и DragonFlyBSD, pcvt и wscons, применяемые в OpenBSD и NetBSD);
  • psf-формат, включающий, кроме собственно шрифтовых данных, заголовок и psf-сигнатуру с дополнительной информацией о шрифте; это - основной формат вывода в Linux-консоли;
  • pcf-формат для вывода на X-терминалах.

Генерация шрифтовых файлов осуществляется командой make с указанием соответствующей цели, например,

$ make raw

для создания raw-файлов,

$ make psf

и

$ make pcf

для psf- и pcf-форматов, соответственно. Кроме того, командой

$ make txt

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

Какой бы формат шрифта ни был избран для компиляции, в итоге генерируется три "шрифтоначертания" - ter-*n ("нормальное"), ter-*b (полужирное) и ter-*f (для использования в консоли с Frame Buffer). Размеры матрицы образовавшихся шрифтов зависят от выходного формата: raw-шрифты имет матрицы 14 и 16 пикселей по вертикали, срдеи шрифтов для Linux-консоли представлены также матрицы 20, 24, 28 и 32 пикселя (правда, их нет в представлении для Frame Buffer).

Каждое шрифтоначертание автоматически генерируется в нескольких кодировках: ISO8859-1/2/5/9/15/16, Windows-1250/1251/1252/1254, IBM-437/852/855/866, KOI8-R/U/E/F, Bulgarian-MIK, Paratype-PT154/PT254 и Macintosh-Ukrainian. Поскольку все шрифты - более чем 500-символьные, для Linux-консоли и X-терминала можно подобрать любые сочетания кодировок ввода и вывода.

Интересно, что для BSD-консоли шрифты с традиционной для нее кодировкой вывода CP866 сами собой не образуются. Однако их при желании можно изготовить из шрифтов Linux-консоли способом, описанным ранее. Или - просто отказаться от использования DOS-кодировки, ограничившись выводом в KOI8. Ведь одна из причин применения CP866 на выводе - низкое качество KOI-шрифтов, - теперь отпадает, а с разрывами в рамках псевдографических программ я, например, вполне готов примириться. Тем более, что их и не видно...

Ибо качество консольных шрифтов исключительно высокое. При этом их внешний вид и читабельность не ухудшаются при нестандартной плотности знаков. Правда, их вариации для X-терминалов именно в терминале выглядят достаточно непривычно. Однако для текстового режима - пожалуй, ничего лучше не придумаешь. Главное же - варианты шрифтов для Frame Buffer в графической консоли (что Linux, что DragonFlyBSD) выглядят просто замечательно.

Правда, на использование шрифтов terminus-fonts во FreeBSD (и в DragonFlyBSD), что и на самодельные шрифты, описанные ранее. Будучи представлены в чистом raw-формате, они не могут ни быть встроенными в ядро систем, ни использоваться с программой src2png. Однако для повседневной жизни в консоли лучше их трудно что-либо придумать.