Экранный шрифт ПК
PC Screen Font (PSF) — это формат растрового шрифта, который в настоящее время используется ядром Linux для консольных шрифтов. Документацию по формату файлов PSF можно найти в исходном коде утилит Linux kbd . [1] Формат описан Университетом Эйндховена. [2]
Формат файла
[ редактировать ]Заголовок файла
[ редактировать ]Каждый файл PSF начинается с заголовка. Существует два типа заголовков: PSF1 и PSF2. Все многобайтовые целые числа имеют порядок младших байтов (little endian).
Длина | Описание | Примечания |
---|---|---|
2 | Магические байты | Всегда 36 04
|
1 | Режим шрифта PSF | Различные флаги шрифтов, см. режимы шрифтов. |
1 | Размер глифа | Размер глифа в байтах, 8-битное целое число без знака. Для psf1 размер символа всегда равен высоте глифа. |
Длина | Описание | Примечания |
---|---|---|
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-битное целое число без знака, содержащее различные флаги шрифта.
Значение ( шестнадцатеричное ) | Имя | Значение |
---|---|---|
0x01 |
PSF1_MODE512 | Если этот бит установлен, шрифт будет содержать 512 символов. Если он не установлен, то шрифт будет содержать всего 256 символов. |
0x02 |
PSF1_MODEHASTAB | Если этот бит установлен, шрифт будет иметь таблицу Юникода . |
0x04 |
PSF1_MODESEQ | Эквивалент PSF1_MODEHASTAB |
Флаги шрифтов
[ редактировать ]Поле флагов шрифта в заголовке psf2 представляет собой 32-битное целое число без знака, содержащее различные флаги шрифта. На данный момент существует только один флаг.
Значение (шестнадцатеричное) | Имя | Значение |
---|---|---|
0x00000001 | PSF2_HAS_UNICODE_TABLE | Если этот бит установлен, шрифт будет иметь таблицу Юникода. |
Растровые изображения файлов
[ редактировать ]Фактические данные глифа следуют сразу за заголовком. Каждый бит в каждом глифе представляет один пиксель шрифта: 0 — ненарисованный, 1 — нарисованный. Каждая строка каждого глифа дополняется целым числом байтов. Например, шрифт 12x12 будет иметь 2 байта в строке. Буква «А» в растровом изображении PSF размером 12x12 может выглядеть следующим образом:
padding Font data | +----------+ +--+ 000001100000 0000 000011110000 0000 000110011000 0000 001100001100 0000 011000000110 0000 110000000011 0000 111111111111 0000 111111111111 0000 110000000011 0000 110000000011 0000 110000000011 0000 110000000011 0000
с двенадцатью битами реальных данных и заполнением каждой строки до ближайшего байта. Строки сохраняются первыми в крайнем левом столбце.
Таблица Юникода
[ редактировать ]Если файл PSF содержит таблицу Юникода, то каждый глиф имеет запись в таблице Юникода, причем первый глиф соответствует первой записи в таблице, второй глиф — второй записи и так далее. Формат записи в таблице Юникода зависит от типа заголовка PSF.
Таблица Юникода PSF1
[ редактировать ]Записи в таблице Юникода файла PSF1 представлены как последовательность 16-битных целых чисел без знака с прямым порядком байтов, оканчивающихся на 0xffff. Первые целые числа в записи содержат символ Юникода, представленный соответствующим глифом. Эти символы Юникода продолжаются до тех пор, пока не встретится целое число 0xFFFE. Затем, начиная со значения 0xfffe, вместо того, чтобы представлять отдельные символы Юникода, числа представляют собой серии символов Юникода, которые соответствуют глифу, начиная новую серию с каждым встречающимся 0xfffe и останавливаясь, как только встречается 0xffff. Например, следующая серия 16-битных целых чисел без знака с прямым порядком байтов будет интерпретироваться следующим образом:
0xdead 0xbeef 0xfffe 0x3141 0x5926 0xfffe 0x1234 0x5678 0xffff
Всякий раз, когда встречается U+dead, U+beef, последовательность U+3141 U+5926 или последовательность U+1234 U+5678, отобразите глиф, соответствующий этой записи таблицы Юникода.
Таблица Юникода PSF2
[ редактировать ]Записи в таблице Юникода файла PSF2 такие же, как и в файле PSF1, за исключением того, что символы Юникода представлены в UTF-8, последовательности Юникода начинаются с однобайтовой последовательности 0xfe, а не с двухбайтовой последовательности 0xfffe, а записи Юникода заканчиваются. с однобайтовой последовательностью 0xff, а не с двухбайтовой последовательностью 0xffff.
Ссылки
[ редактировать ]- ^ Организация ядра Linux (28 января 2007 г.). "psf.h" .
- ^ ВТ (1999). «Формат PSF» .