Schriftfeaturesystem

Lookupsystem

Schrift/Sprachtabelle

Details Schrift/Sprachtabelle

Die Tabelle beginnt folgendermassen:

Position Länge Typ Inhalt
02 Byte uint16 Anzahl Schriftsysteme

Danach folgt für eine Liste mit einem Eintrag für jedes Schriftsystem:

Position Länge Typ Inhalt
04 Byte char Schriftsystem-ID
42 Byte uint16 Position Sprachtabelle

Liste der Schriftsystem-IDs (bei Microsoft)

Die Position ist gerechnet ab dem Anfang der Schrift/Sprachtabelle. Die Sprachtabelle beginnt folgendermassen:

Position Länge Typ Inhalt
02 Byte uint16 Position Standardfeaturenummern
22 Byte uint16 Anzahl Sprachen

Danach folgt eine Liste mit einem Eintrag für jede Sprache:

Position Länge Typ Inhalt
04 Byte char Sprachen-ID
42 Byte uint16 Position Featurenummern

Liste der Sprach-IDs (bei Microsoft)

Eine Position von 0 bedeutet, das keine Featurenummern zugeordnet sind. Ansonsten ist die Position gerechnet ab dem Anfang der Sprachtabelle. Die Tabelle der Featurenummern beginnt folgendermassen:

Position Länge Typ Inhalt
02 Byte uint16 unbenutzt
22 Byte uint16 benötigtes Feature
42 Byte uint16 Anzahl Features

Danach folgt eine Liste mit einem Eintrag für jedes Feature:

Position Länge Typ Inhalt
02 Byte uint16 Featurenummer

Ein Wert 65535 für „benötigtes Feature“ bedeutet, dass es kein zwingend benötigtes Feature gibt.

Featuretabelle

Details Featuretabelle

Die Tabelle beginnt folgendermassen:

Position Länge Typ Inhalt
02 Byte uint16 Anzahl Features

Danach folgt eine Liste mit einem Eintrag für jedes Feature:

Position Länge Typ Inhalt
04 Byte char Feature-ID
42 Byte uint16 Position Lookupnummern

Die Featurenummer erhält man, indem man die Features ab 0 durchnummeriert.

Liste der Feature-IDs (bei Microsoft)

Die Position ist gerechnet ab dem Anfang der Featuretabelle. Die Tabelle der Lookupnummern beginnt folgendermassen:

Position Länge Typ Inhalt
02 Byte uint16 unbenutzt
22 Byte uint16 Anzahl Lookupeinträge

Danach folgt eine Liste der Lookupnummern:

Position Länge Typ Inhalt
02 Byte uint16 Lookupnummer

Lookuptabelle

Details Lookuptabelle

Die Tabelle beginnt folgendermassen:

Position Länge Typ Inhalt
02 Byte uint16 Anzahl Lookupeinträge

Danach folgt eine Liste mit den Positionen der Lookupeinträge:

Position Länge Typ Inhalt
02 Byte uint16 Position Lookupeintrag

Die Lookupnummer erhält man, indem man die Lookupeinträge ab 0 durchnummeriert.

Die Position ist gerechnet ab dem Anfang der Lookuptabelle. Der Lookupeintrag beginnt folgendermassen:

Position Länge Typ Inhalt
02 Byte uint16 Typ
22 Byte uint16 Flags
42 Byte uint16 Anzahl Unterblocks

Danach folgt eine Liste der Positionen der Unterblocks:

Position Länge Typ Inhalt
02 Byte uint16 Position Unterblock

Die Position ist gerechnet ab dem Anfang des Lookupeintrags.

Zeichenliste

Format 1

Die Liste beginnt folgendermassen:

Position Länge Typ Inhalt
02 Byte uint16 Format (immer 1)
22 Byte uint16 Anzahl Einträge

Danach folgt eine Liste der GIDs:

Position Länge Typ Inhalt
02 Byte uint16 GID

Format 2

Die Liste beginnt folgendermassen:

Position Länge Typ Inhalt
02 Byte uint16 Format (immer 2)
22 Byte uint16 Anzahl Bereiche

Danach folgt eine Liste mit einem Eintrag für jeden Bereich:

Position Länge Typ Inhalt
02 Byte uint16 erste GID
22 Byte uint16 letzte GID
42 Byte uint16 erste Indexnummer

Zeichenklassen

Format 1

Die Definition beginnt folgendermassen:

Position Grösse Typ Inhalt
02 Byte uint16 Format (immer 1)
22 Byte uint16 erste GID
42 Byte uint16 Anzahl GIDs

Danach folgt eine Liste für die GIDs ab der ersten GID:

Position Grösse Typ Inhalt
02 Byte uint16 Klassennummer

Nicht enthaltene GIDs sind in der Klasse 0.

Format 2

Die Definition beginnt folgendermassen:

Position Grösse Typ Inhalt
02 Byte uint16 Format (immer 2)
22 Byte uint16 Anzahl GID-Bereiche

Danach folgt eine Liste mit einem Eintrag für jeden Bereich:

Position Grösse Typ Inhalt
02 Byte uint16 erste GID
22 Byte uint16 letzte GID
42 Byte uint16 Klassennummer

In keinem Bereich enthaltene GIDs sind in der Klasse 0.

"GPOS" Block

Details "GPOS" Block

Der Block beginnt folgendermassen:

Position Grösse Typ Inhalt
04 Byte uint32 Version
42 Byte uint16 Position Schrift/Sprachtabelle
62 Byte uint16 Position Featuretabelle
82 Byte uint16 Position Lookuptabelle

Damit lassen sich über das Lookupsystem die Unterblocks ermitteln. Passen mehrere Unterblocks auf ein Feature, so wirken die Einträge kumulativ.

Typ 2

Details GPOS Typ 2

Dieser Typ behandelt paarweise Positionierung.

Format 1

Der Unterblock beginnt folgendermassen:

Position Grösse Typ Inhalt
02 Byte uint16 Format (immer 1)
22 Byte uint16 Position Zeichenliste
42 Byte uint16 Werteformat 1
62 Byte uint16 Werteformat 2
82 Byte uint16 Anzahl Paarlisten

Die Position ist gerechnet ab dem Anfang des Unterblocks. Die Zeichenliste enthält die möglichen Zeichen links.

Für klassische Unterschneidung gilt: Das Werteformat 1 muss 4 oder 68 sein, das Werteformat 2 muss 0 sein.

Danach folgt eine Liste der Positionen der Paarlisten:

Position Grösse Typ Inhalt
02 Byte uint16 Position Paarliste

Die Position ist gerechnet ab dem Anfang des Unterblocks.

Jede Paarliste deckt eines der möglichen Zeichen links aus der Zeichenliste ab (identische Reihenfolge). Die Paarliste beginnt folgendermassen:

Position Grösse Typ Inhalt
02 Byte uint16 Anzahl Paare

Danach folgt eine Liste mit einem Eintrag für jedes Paar. Der Inhalt jeden Eintrags ist vom Werteformat 1 abhängig.

Bei einem Wert von 4:

Position Grösse Typ Inhalt
02 Byte uint16 GID rechts
22 Byte int16 Unterschneidung

Bei einem Wert von 68:

Position Grösse Typ Inhalt
02 Byte uint16 GID rechts
22 Byte int16 Unterschneidung
42 Byte uint16 Position Hintingtabelle

Format 2

Der Unterblock beginnt folgendermassen:

Position Grösse Typ Inhalt
02 Byte uint16 Format (immer 2)
22 Byte uint16 Position Zeichenliste
42 Byte uint16 Werteformat 1
62 Byte uint16 Werteformat 2
82 Byte uint16 Position Klassendefinition links
102 Byte uint16 Position Klassendefinition rechts
122 Byte uint16 Anzahl Klassen links
142 Byte uint16 Anzahl Klassen rechts

Die Positionen sind gerechnet ab dem Anfang des Unterblocks.

Für klassische Unterschneidung gilt: Das Werteformat 1 muss 4 oder 68 sein, das Werteformat 2 muss 0 sein.

Danach folgt eine Liste mit einem Eintrag für jede mögliche Kombination von Klassen. Dabei werden erst alle möglichen Kombinationen mit der Klasse 0 links gelistet, dann alle möglichen Kombinationen mit der Klasse 1 links, und so weiter. Die Einträge innerhalb einer Klasse links sind geordnet nach den Klassen rechts von 0 an aufsteigend. Der Inhalt jeden Eintrags ist vom Werteformat 1 abhängig.

Bei einem Wert von 4:

Position Grösse Typ Inhalt
02 Byte int16 Unterschneidung

Bei einem Wert von 68:

Position Grösse Typ Inhalt
02 Byte int16 Unterschneidung
22 Byte uint16 Position Hintingtabelle

Typ 9

Details GPOS Typ 9

Dieser Typ verweist auf den eigentlichen Unterblock.

Der Unterblock ist folgendermassen aufgebaut:

Position Grösse Typ Inhalt
02 Byte uint16 Version
22 Byte uint16 Typ
44 Byte uint32 Position

Die Position ist ab dem Anfang des Unterblocks gerechnet.

"GSUB" Block

Details "GSUB" Block

Der Block beginnt folgendermassen:

Position Grösse Typ Inhalt
04 Byte uint32 Version
42 Byte uint16 Position Schrift/Sprachtabelle
62 Byte uint16 Position Featuretabelle
82 Byte uint16 Position Lookuptabelle

Damit lassen sich über das Lookupsystem die Unterblocks ermitteln. Passen mehrere Unterblocks auf ein Feature, so gilt der erste Unterblock mit einem Treffer für das Zeichen oder die Zeichenkombination.

Typ 1

Details GSUB Typ 1

Dieser Typ behandelt den Ersatz einzelner Zeichen durch ein Alternativzeichen.

Format 1

Der Unterblock ist folgendermassen aufgebaut:

Position Grösse Typ Inhalt
02 Byte uint16 Format (immer 1)
22 Byte uint16 Position Zeichenliste
42 Byte uint16 GID Delta

Die Position ist gerechnet ab dem Anfang des Unterblocks.

Die Zeichenliste enthält die zu ersetzenden Zeichen. Um das Ersatzzeichen zu erhalten, muss das GID Delta addiert werden. Erhält man dabei eine Zahl grösser 0x10000, so muss 0x10000 abgezogen werden.

Format 2

Der Unterblock beginnt folgendermassen:

Position Grösse Typ Inhalt
02 Byte uint16 Format (immer 2)
22 Byte uint16 Position Zeichenliste
42 Byte uint16 Anzahl Zeichen

Die Position ist gerechnet ab dem Anfang des Unterblocks. Die Zeichenliste enthält die zu ersetzenden Zeichen.

Danach folgt ein Liste mit den Ersatzzeichen für die Einträge der Zeichenliste (identische Reihenfolge):

Position Grösse Typ Inhalt
02 Byte uint16 GID Alternativzeichen

Typ 4

Details GSUB Typ 4

Dieser Typ behandelt den Ersatz von Zeichenkombinationen durch einzelne Zeichen (Ligaturen).

Der Unterblock beginnt folgendermassen:

Position Grösse Typ Inhalt
02 Byte uint16 Format (immer 1)
22 Byte uint16 Position Zeichenliste
42 Byte uint16 Anzahl Ligatursätze

Die Position ist gerechnet ab dem Anfang des Unterblocks. Die Zeichenliste enthält die möglichen, ersten Zeichen der Ligaturen. Für jedes dieser Zeichen gibt es einen Ligatursatz.

Danach folgt eine Liste mit den Positionen der Ligatursätze zu den Zeichen (identische Reihenfolge):

Position Grösse Typ Inhalt
02 Byte uint16 Position Ligatursatz

Die Position ist ab dem Anfang des Unterblocks gerechnet. Die Ligatursätze beginnen folgendermassen:

Position Grösse Typ Inhalt
02 Byte uint16 Anzahl Ligaturen

Danach folgt eine Liste mit den Positionen der Ligaturdefinitionen:

Position Grösse Typ Inhalt
02 Byte uint16 Position Ligatur

Die Positionen sind gerechnet ab dem Anfang des Ligatursatzes. Die Ligaturdefinition beginnt folgendermassen:

Position Grösse Typ Inhalt
02 Byte uint16 GID Ligatur
22 Byte uint16 Anzahl Zeichen

Danach folgt eine Liste aller Zeichen, aus dem die Ligatur aufgebaut ist, ausser dem ersten:

Position Grösse Typ Inhalt
02 Byte uint16 GID Originalzeichen

Die Liste ist um einen Eintrag kürzer als die „Anzahl Zeichen“, da das erste Zeichen nicht enthalten ist.

Typ 7

Details GSUB Typ 7

Dieser Typ verweist auf den eigentlichen Unterblock.

Der Unterblock ist folgendermassen aufgebaut:

Position Grösse Typ Inhalt
02 Byte uint16 Version
22 Byte uint16 Typ
44 Byte uint32 Position

Die Position ist ab dem Anfang des Unterblocks gerechnet.

Diskussion

Geben Sie Ihren Kommentar ein. Wiki-Syntax ist zugelassen:
V R O S E
 
referenz/fontfeatures.txt · Zuletzt geändert: 2013/01/17 16:16 (Externe Bearbeitung)
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC0 1.0 Universal
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki