Die Version 6 ist angelehnt an Version 5 und verwendet als Basisformat das PFP-File-Format Version 3 mit seinen Chunks. Die Wesentlichen Unterschiede zu Version 5 sind:
- Es gibt keine Sprungtabellen mehr
- Die Glyphs für die vorhandenen Zeichen liegen hintereinander in Chunks, die Applikation muss sich selbst merken, wo ein Glyph zu finden ist (z.B. innerhalb eines binären Baumes)
- Die Glyphs unterstützen Hints, also die Information, ob eine bestimmte Zeichenkombination näher zueinander dargestellt werden können oder mehr Platz brauchen. Beispiel: "To" - das "o" kann in diesem Fall nach links unter den T-Strich gerückt werden. Bei "Tö" geht das aber ja nach Font nicht.
Das File trägt als ID "FONT", Hauptversion 6, Unterversion 0. Eine Datei enthält in der Regel immer nur einen Font (z.B. Liberation Sans), 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 Glyphs (2 Byte)
Beschreibung:
- Der Aufbau ist somit fast identisch zu Version 5, nur Byte 10 enthält statt der Anzahl Spruntabellen die Anzahl Glyphs.
- Glyphs
- Ein wesentlicher Unterschied zu Version 5 (und allen vorhergehenden) besteht darin, dass es keine Sprungtabellen mehr gibt. Stattdessen folgen nun direkt die Chunks mit den Glyphs. Der Aufbau der Chunks ist folgendermassen:
Byte 0: Größe des Chunks in Bytes (4 Byte)
Byte 4: Unicode-Wert des Zeichens (2 Byte)
Byte 6: Breite (2 Byte)
Byte 8: Höhe (2 Byte)
Byte 10: BearingX (signed) (2 Byte)
Byte 12: BearingY (signed) (2 Byte)
Byte 14: Advance (2 Byte)
Byte 16: Hints-Tabelle (n Byte)
Byte 16+n: Bitmap (x Byte)
Beschreibung:
Aufgrund dieses Aufbaus läßt es sich nicht errechnen, an welcher Stelle im File sich ein bestimmtes Glyph befinden. Die Applikation muss daher alle Glyphs lesen und sich diese Information selbst erstellen, zum Beispiel innerhalb eines binären Baumes.