Wat is een CFF2-bestand?
Het CFF2-bestandsformaat is de versie 2.0 van het CFF-bestandsformaat en maakt een efficiënte opslag van glyph-contouren en metadata mogelijk, vergelijkbaar met het CFF-bestandsformaat. CFF2 verschilt van CFF doordat het bedoeld is om te worden gebruikt in de context van een OpenType-lettertype als een ‘sfnt’-tabel met de tag CFF2. Het kan niet worden gebruikt als een op zichzelf staand programma en is afhankelijk van gegevens in andere OpenType-tabellen.
CFF2-bestandsindeling
De CFF2-specificaties voor bestandsindelingen bevat details over de interne gegevenslay-out, gegevenstypen, tabellen en andere interne informatie over de bestandsindeling. Het kan worden doorverwezen ter referentie van de ontwikkelaar. Enkele details hierover zijn als volgt.
Gegevenslay-out
De binaire gegevens van het CFF2-bestandsformaat zijn logisch georganiseerd als een aantal afzonderlijke gegevensstructuren. De lay-out binnen de binaire gegevens is zoals weergegeven in de volgende tabel.
Invoer | Opmerkingen |
---|---|
Koptekst | Vaste locatie |
Top DICT | Vaste locatie |
Global Subr INDEX | Vaste locatie |
Variatie | Opslaan |
FDSelect | Alleen presenteren als er meer dan één Font DICT in de Font DICT INDEX is. |
Lettertype DICT INDEX | |
Array van lettertype DICT | Opgenomen in lettertype DICT INDEX. |
Privé DICT | Eén per lettertype DICT. |
Alleen de eerste drie structuren zijn gebaseerd op vaste locaties. De overige worden bereikt via offsets en hun volgorde kan worden gewijzigd.
Gegevenstypen
Het CFF2-bestandsformaat gebruikt de volgende gegevenstypen.
Naam | Bereik | Beschrijving |
---|---|---|
uint8 | 0 tot 255 | 8-bits niet-ondertekend nummer |
uint16 | 0 tot 65535 | 16-bits niet-ondertekend nummer |
uint32 | 0 tot 4294967295 | 32-bits niet-ondertekend nummer |
Offset | varieert | 1, 2, 3 of 4 byte offsets (gespecificeerd door OffSize veld in een Index tabel) |
UitGrootte | 1 tot 4 | 1-byte unsigned nummer specificeert de grootte van een Offset veld of velden |
Het slaat alle multi-byte numerieke gegevens en offsetvelden op in big-endian bytevolgorde. Het CFF2-formaat is vrij van opvulbytes omdat het geen uitlijningsbeperkingen respecteert.
DICT-gegevens
CFF2-bestanden bevatten de font-woordenboekgegevens als sleutel-waardeparen in een compacte tokenized-indeling. Woordenboeksleutels worden gecodeerd als operatoren van 1 of 2 bytes en woordenboekwaarden worden gecodeerd als numerieke operanden van variabele grootte. Er zijn drie structuren die het DICT-gegevensformaat gebruiken: Top DICT
, Font DICT
en Private DICT
. Er is een aantal integere operandtypen van verschillende grootte gedefinieerd en gecodeerd zoals weergegeven in de volgende tabel (eerste byte van operand is b0, tweede is b1, enzovoort).
Grootte | b0 bereik | Waardebereik | Waardeberekening |
---|---|---|---|
1 | 32 tot 246 | -107 tot +107 | b0 - 139 |
2 | 247 tot 250 | +108 tot +1131 | (b0 - 247) * 256 + b1 + 108 |
2 | 251 tot 254 | -1131 tot -108 | -(b0 - 251) * 256 - b1 - 108 |
3 | 28 | -32768 tot +32767 | b1 « 8 |
5 | 29 | -(2^31) tot +(2^31 - 1) | b1 « 24 | b2 « 16 | b3 « 8 | b4 |
Koptekst
De binaire gegevens beginnen met een kop met het formaat dat wordt weergegeven in de onderstaande tabel.
Type | Naam | Beschrijving |
---|---|---|
uint8 | majorVersion | Grote versie formatteren. Instellen op 2. |
uint8 | minorVersie | Kleinere versie opmaken. Zet op nul. |
uint8 | kopgrootte | Headergrootte (bytes). |
uint16 | topDictLengte | Lengte van Top DICT-structuur in bytes. |