Шрифт экрана ПК

PC Screen Font (PSF) — это формат растрового шрифта, который в настоящее время используется ядром Linux для консольных шрифтов. Документацию формата файла PSF можно найти в исходном коде утилит Linux kbd. [1] Формат описан Университетом Эйндховена. [2]

Формат файла

Заголовок файла

Каждый файл PSF начинается с заголовка. Существует два типа заголовков: PSF1 и PSF2. Все многобайтовые целые числа находятся в порядке младшего байта (little endian).

заголовок psf1
ДлинаОписаниеПримечания
2Волшебные байтыВсегда36 04
1Режим шрифта PSFРазличные флаги шрифтов, см. режимы шрифтов
1Размер глифаРазмер глифа в байтах, 8-битное беззнаковое целое число. Для psf1 размер символа всегда равен высоте глифа
заголовок psf2
ДлинаОписаниеПримечания
4Волшебные байтыВсегда72 b5 4a 86
4Версия32-битное целое число без знака, в настоящее время всегда 0
4Размер заголовка32-битное беззнаковое целое число, размер заголовка в байтах (обычно 32)
4Флаги32-битное беззнаковое целое число, см. Флаги шрифтов
4Длина32-битное беззнаковое целое число, количество глифов
4Размер глифа32-битное беззнаковое целое число, количество байтов на глиф
4Высота32-битное беззнаковое целое число, высота каждого глифа
4Ширина32-битное беззнаковое целое число, ширина каждого глифа

Все глифы psf1 имеют ширину 8 пикселей.

Режимы шрифтов

Режим шрифта в заголовке psf1 — это 8-битное беззнаковое целое число, содержащее различные флаги шрифта.

Режим шрифта биты
Значение ( шестнадцатеричное )ИмяЗначение
0x01PSF1_MODE512Если этот бит установлен, шрифт будет иметь 512 глифов. Если он не установлен, шрифт будет иметь всего 256 глифов.
0x02PSF1_MODEHASTABЕсли этот бит установлен, шрифт будет иметь таблицу Unicode .
0x04PSF1_MODESEQЭквивалентно PSF1_MODEHASTAB

Флаги шрифтов

Поле флагов шрифта в заголовке psf2 представляет собой 32-битное беззнаковое целое число, содержащее различные флаги о шрифте. В настоящее время существует только один флаг.

Флаги шрифта
Значение (шестнадцатеричное)ИмяЗначение
0x00000001PSF2_HAS_UNICODE_TABLEЕсли этот бит установлен, шрифт будет иметь таблицу Unicode.

Файлы битовых карт

Фактические данные глифа следуют сразу за заголовком. Каждый бит в каждом глифе представляет один пиксель в шрифте: 0 для ненарисованного, 1 для нарисованного. Каждая строка каждого глифа дополняется целым числом байтов. Например, шрифт 12x12 будет иметь 2 байта на строку. Буква «A» в битовой карте PSF 12x12 может выглядеть следующим образом:

 прокладка Данные шрифта |+----------+ +--+000001100000 0000000011110000 0000000110011000 0000001100001100 0000011000000110 0000110000000011 00001111111111111 00001111111111111 0000110000000011 0000110000000011 0000110000000011 0000110000000011 0000

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

Таблица юникода

Если файл PSF содержит таблицу Unicode, то каждый глиф имеет запись в таблице Unicode, причем первый глиф соответствует первой записи в таблице, второй глиф — второй записи и т. д. Формат записи в таблице Unicode зависит от типа заголовка PSF.

Таблица юникода PSF1

Записи в таблице unicode файла PSF1 представлены как ряд 16-битных беззнаковых целых чисел с прямым порядком байтов, заканчивающихся на 0xffff. Первые целые числа в записи содержат символ unicode, представленный соответствующим глифом. Эти символы unicode продолжаются до тех пор, пока не встретится целое число 0xFFFE. Затем, начиная со значения 0xfffe, вместо того, чтобы представлять отдельные символы unicode, числа представляют ряд символов unicode, соответствующих глифу, начиная новый ряд с каждым встреченным 0xfffe и останавливаясь, как только встретится 0xffff. Например, следующий ряд 16-битных беззнаковых целых чисел с прямым порядком байтов будет интерпретироваться следующим образом:

0xмертвый0xговядина0xfffe0x31410x59260xfffe0x12340x56780xffff

Всякий раз, когда встречается U+dead, U+beef, последовательность U+3141 U+5926 или последовательность U+1234 U+5678, отображать глиф, соответствующий этой записи таблицы Unicode.

Таблица юникода PSF2

Записи в таблице Unicode файла PSF2 такие же, как и в файле PSF1, за исключением того, что символы Unicode представлены в кодировке UTF-8, последовательности Unicode начинаются с однобайтовой последовательности 0xfe, а не с двухбайтовой последовательности 0xfffe, и записи Unicode заканчиваются однобайтовой последовательностью 0xff, а не двухбайтовой последовательностью 0xffff.

Ссылки

  1. ^ Организация ядра Linux (28.01.2007). "psf.h".
  2. ^ TUE (1999). "формат psf".
Взято с "https://en.wikipedia.org/w/index.php?title=PC_Screen_Font&oldid=1206509319"