Die Version 5 verwendet als Basisformat das PFP-File-Format Version 3 mit seinen Chunks. Das File trägt als ID "FONT", Hauptversion 5, Unterversion 0. Eine Datei enthält in der Regel immer nur einen Font (z.B. Arial), kann aber beliebig viele Faces enthalten, die sich durch Style (Fett, Kursiv, Antialiased) und Pixelgröße unterscheiden. Jedes Face ist in einem eigenen Chunk untergebracht, der den Namen "FACE" trägt.
- Header
- Jedes FACE beginnt mit einem 12 Byte großen Header:
Byte 0: Flags 1 Byte
Byte 1: Pixelformat 1 Byte
Byte 2: Size (Fontgröße in Pixel) 2 Byte
Byte 4: MaxBearingY 2 Byte
Byte 6: MaxHeight 2 Byte
Byte 8: Position Underscore 2 Byte
Byte 10: Anzahl Sprungtabellen 2 Byte
Beschreibung:
-
Flags
Folgende Flags sind definiert: Bit 0: Font benutzt Antialiasing
Bit 1: Font ist fett (bold)
Bit 2: Font ist kursiv (italic)
-
Pixelformat
0 = undefiniert
1 = Monochrom, 8 Bit Pro Pixel (1 Byte)
2 = Monochrom, 1 Bit pro Pixel
3 = Antialiased, 8 Bit pro Pixel (1 Byte) = 256 Graustufen
4 = Antialiased, 2 Bit pro Pixel = 4 Graustufen
5 = Antialiased, 4 Bit pro Pixel = 16 Graustufen
-
Size
Größe der Fonts
-
MaxBearingY
Dieser positive Wert gibt an, wieviele Pixel nach oben des größte Glyph abweicht. Da Font5-Fonts immer von einer Grundlinie aus gezeichnet werden, kann man mit diesem Wert den höchsten Punkt im Font-Face ermitteln, um z.B. statt von der Grundline aus von oben aus die Fonts abzubilden (Align=Top)
-
MaxHeight
Dieser Wert gibt die maximale Höhe der Glyphs an und gleichzeitig die Anzahl Pixel, die bei einem Zeilenumbruch auf der Y-Achse dazuaddiert werden müssen. Aus der Differenz "MaxHeight-MaxBearingY" kann man ausserdem den tiefsten Punkt im Fontface errechnen, für den Fall dass man die Fonts von unten aus abbilden möchte (Align=Bottom).
-
Anzahl Sprungtabellen
Dieser Wert gibt an, wieviele Sprungtabellen im Face enthalten sind.
- Sprungtabellen
- Das FONT5-Format sieht vor, dass es mehrere Sprungtabellen geben kann. Dadurch ist es möglich selektiv nur die Fonts in das File einzubinden, die man tatsächlich benötigt.
Byte 0: Start Character in Tabelle (UNICODE) 2 Byte
Byte 2: End Character in Tabelle (UNICODE) 2 Byte
Byte 4: Pointer auf Beginn der Sprungtabelle 4 Byte
Beschreibung:
-
Start und Ende in Character Tabelle
Diese beiden Werte geben an, mit welchem Zeichen die nachfolgende Sprungtabelle beginnt und Ended. Da UNICODE verwendet wird, sind die Werte 2 Byte groß und im LittleEndian Format angegeben.
-
Pointer auf Beginn der Sprungtabelle
Ein 4 Byte Pointer im Little Endian Format, der den Beginn der Sprungtabelle innerhalb des FACE angibt.
Die Sprungtabellen selbst besteht aus 4-Byte Werten im Little Endian Format, die den Beginn des jeweiligen Glyphs innerhalb des Font-FACE angibt. Dabei wird der 12-Byte große Header und die Sprungtabelle mitgerechnet.
Die Sprungtabelle enthält nur Pointer für existierende Glyphs. Ist ein Glyph nicht vorhanden, enthält der Wert in der Sprungtabelle 0.
Die Position des ersten Sprungtabelle errechnet sich folgendermaßen: Position= 12 + Anzahl Sprungtabellen * 8
- Glyphs
- Ein Glyph besteht aus einem Header und einer Bitmap. Der Header ist folgendermaßen aufgebaut:
Byte 0: Breite (2 Byte)
Byte 2: Höhe (2 Byte)
Byte 4: BearingX (signed) (2 Byte)
Byte 6: BearingY (signed) (2 Byte)
Byte 8: Advance (2 Byte)
Das Format der Bitmap ergibt sich aus dem Pixelformat im FACE-Header. Die Größe errechnet sich aus BitsProPixel * Breite * Höhe, wobei auf volle Byte aufgerundet wird.
Die Position des ersten Glyphs errechnet sich folgendermaßen: Position= 12 + Anzahl Sprungtabellen * 8 + Anzahl Chars in jeder Sprungtabelle * 4