PC-skärmteckensnitt

PC Screen Font (PSF) är ett bitmappsteckensnitt som för närvarande används av Linux-kärnan för konsolteckensnitt . Dokumentation för PSF-filformatet finns i källkoden för Linux kbd-verktygen. Formatet beskrivs av University Eindhoven.

Filformat

Filhuvud

Varje PSF-fil börjar med en rubrik. Det finns två huvudtyper: PSF1 och PSF2. Alla multibyte-heltal är i minst signifikanta byteordning (lilla endian).

psf1 header
Längd Beskrivning Anteckningar
2 Magiska bytes Alltid 36 04
1 PSF-teckensnittsläge Olika teckensnittsflaggor, se teckensnittslägen
1 Teckenstorlek Teckenstorlek i byte, 8-bitars heltal utan tecken. För psf1 till teckenstorlek är alltid lika med teckenhöjden
psf2 header
Längd Beskrivning Anteckningar
4 Magiska bytes Alltid 72 b5 4a 86
4 Version 32-bitars heltal utan tecken, för närvarande alltid 0
4 Rubrikstorlek 32-bitars heltal utan tecken, storleken på rubriken i byte (vanligtvis 32)
4 Flaggor 32-bitars osignerat heltal, se Teckensnittsflaggor
4 Längd 32 bitars osignerat heltal, antal glyfer
4 Teckenstorlek 32-bitars heltal utan tecken, antal byte per tecken
4 Höjd 32-bitars heltal utan tecken, höjden på varje glyf
4 Bredd 32 bitars osignerat heltal, bredd på varje glyf

Alla psf1-glyfer är 8 pixlar breda.

Teckensnittslägen

Teckensnittsläget i en psf1-header är ett 8-bitars osignerat heltal som innehåller olika flaggor om typsnittet

Teckensnittslägesbitar
Värde ( hexadecimalt ) namn Menande
0x01 PSF1_MODE512 Om denna bit är inställd kommer teckensnittet att ha 512 tecken. Om den inte är inställd kommer teckensnittet att ha bara 256 tecken.
0x02 PSF1_MODEHASTAB Om denna bit är inställd kommer teckensnittet att ha en unicode- tabell.
0x04 PSF1_MODESEQ Motsvarar PSF1_MODEHASTAB

Teckensnitt flaggor

Teckensnittsflaggorfältet i en psf2-rubrik är ett 32-bitars osignerat heltal som innehåller olika flaggor om typsnittet. Det finns för närvarande bara en flagga.

Teckensnittsflaggabitar
Värde (hexadecimal) namn Menande
0x00000001 PSF2_HAS_UNICODE_TABLE Om denna bit är inställd kommer teckensnittet att ha en unicode-tabell

Fil bitmappar

Den faktiska glyfdatan följer omedelbart efter rubriken. Varje bit i varje glyf representerar en pixel i teckensnittet: 0 för otecknat, 1 för ritat. Varje rad i varje glyf är vadderad till ett helt antal byte. Till exempel skulle ett 12x12 teckensnitt ha 2 byte per rad. Bokstaven "A" i en 12x12 PSF-bitmapp kan se ut så här:

utfyllnad Teckensnittsdata | +----------+ +--+ 000001100000 0000 0000111110000 0000 000110011000 0000 001100001100 0000 011000000000 011000000000 010 100 100 100 100 11111111 0000 111111111111 0000 110000000011 0000 1100000000011 0000 1100000000011 0000 1100010000

med tolv bitar av faktiska data och utfyllnad för att fylla varje rad till närmaste byte. Rader lagras längst till vänster i kolumnen först.

Unicode-tabellen

Om en PSF-fil innehåller en unicode-tabell, har varje glyf en post i unicode-tabellen, med den första glyfen som motsvarar den första posten i tabellen, den andra glyfen den andra posten, och så vidare. Formatet för en post i unicode-tabellen beror på typen av PSF-huvud.

PSF1 Unicode-tabellen

Poster i unicode-tabellen för en PSF1-fil representeras som en serie av 16 bitars heltal utan tecken med liten endian som slutar på 0xffff. De första heltalen i posten innehåller ett unicode-tecken som representeras av motsvarande glyf. Dessa unicode-tecken fortsätter tills heltal 0xFFFE påträffas. Sedan, med utgångspunkt från värdet 0xfffe, istället för att representera enskilda unicode-tecken, representerar siffrorna serier av unicode-tecken som motsvarar glyfen, startar en ny serie med varje 0xffffe som påträffas och slutar när 0xffff påträffas. Till exempel skulle följande serie med 16-bitars heltal utan tecken med liten endian tolkas på följande sätt:

0xdead 0xbeef 0xfffe 0x3141 0x5926 0xfffe 0x1234 0x5678 0xffff

Närhelst antingen U+död, U+nötkött, sekvensen U+3141 U+5926 eller sekvensen U+1234 U+5678 visas, visa glyfen som motsvarar denna unicode-tabellpost.

PSF2 Unicode-tabellen

Poster i unicode-tabellen för en PSF2-fil är desamma som i en PSF1-fil, förutom att unicode-tecken representeras i UTF-8, unicode-sekvenser börjar med en byte-sekvens 0xfe snarare än två-byte-sekvensen 0xfffe, och unicode-poster slutar med en byte-sekvensen 0xff snarare än tvåbyte-sekvensen 0xffff.