Mac OS 9
SFNTTypes.h
Go to the documentation of this file.
1 
19 #ifndef __SFNTTYPES__
20 #define __SFNTTYPES__
21 
22 #ifndef __MACTYPES__
23 #include <MacTypes.h>
24 #endif
25 
26 #if PRAGMA_ONCE
27 #pragma once
28 #endif
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 #if PRAGMA_IMPORT
35 #pragma import on
36 #endif
37 
38 #if PRAGMA_STRUCT_ALIGN
39 #pragma options align = mac68k
40 #elif PRAGMA_STRUCT_PACKPUSH
41 #pragma pack(push, 2)
42 #elif PRAGMA_STRUCT_PACK
43 #pragma pack(2)
44 #endif
45 
47  FourCharCode tableTag;
48  UInt32 checkSum;
49  UInt32 offset;
50  UInt32 length;
51 };
53 /* The search fields limits numOffsets to 4096. */
54 struct sfntDirectory {
55  FourCharCode format;
56  UInt16 numOffsets; /* number of tables */
57  UInt16 searchRange; /* (max2 <= numOffsets)*16 */
58  UInt16 entrySelector; /* log2(max2 <= numOffsets) */
59  UInt16 rangeShift; /* numOffsets*16-searchRange*/
60  sfntDirectoryEntry table[1]; /* table[numOffsets] */
61 };
62 typedef struct sfntDirectory sfntDirectory;
63 enum { sizeof_sfntDirectory = 12 };
64 
65 /* Cmap - character id to glyph id mapping */
66 enum { cmapFontTableTag = FOUR_CHAR_CODE('cmap') };
67 
68 enum {
69  kFontUnicodePlatform = 0,
70  kFontMacintoshPlatform = 1,
71  kFontReservedPlatform = 2,
72  kFontMicrosoftPlatform = 3,
73  kFontCustomPlatform = 4
74 };
75 
76 enum {
77  kFontUnicodeDefaultSemantics = 0,
78  kFontUnicodeV1_1Semantics = 1,
79  kFontISO10646_1993Semantics = 2
80 };
81 
82 enum {
83  kFontRomanScript = 0,
84  kFontJapaneseScript = 1,
85  kFontTraditionalChineseScript = 2,
86  kFontChineseScript = kFontTraditionalChineseScript,
87  kFontKoreanScript = 3,
88  kFontArabicScript = 4,
89  kFontHebrewScript = 5,
90  kFontGreekScript = 6,
91  kFontCyrillicScript = 7,
92  kFontRussian = kFontCyrillicScript,
93  kFontRSymbolScript = 8,
94  kFontDevanagariScript = 9,
95  kFontGurmukhiScript = 10,
96  kFontGujaratiScript = 11,
97  kFontOriyaScript = 12,
98  kFontBengaliScript = 13,
99  kFontTamilScript = 14,
100  kFontTeluguScript = 15,
101  kFontKannadaScript = 16,
102  kFontMalayalamScript = 17,
103  kFontSinhaleseScript = 18,
104  kFontBurmeseScript = 19,
105  kFontKhmerScript = 20,
106  kFontThaiScript = 21,
107  kFontLaotianScript = 22,
108  kFontGeorgianScript = 23,
109  kFontArmenianScript = 24,
110  kFontSimpleChineseScript = 25,
111  kFontTibetanScript = 26,
112  kFontMongolianScript = 27,
113  kFontGeezScript = 28,
114  kFontEthiopicScript = kFontGeezScript,
115  kFontAmharicScript = kFontGeezScript,
116  kFontSlavicScript = 29,
117  kFontEastEuropeanRomanScript = kFontSlavicScript,
118  kFontVietnameseScript = 30,
119  kFontExtendedArabicScript = 31,
120  kFontSindhiScript = kFontExtendedArabicScript,
121  kFontUninterpretedScript = 32
122 };
123 
124 enum {
125  kFontMicrosoftSymbolScript = 0,
126  kFontMicrosoftStandardScript = 1,
127  kFontMicrosoftUCS4Script = 10
128 };
129 
130 enum {
131  kFontCustom8BitScript = 0,
132  kFontCustom816BitScript = 1,
133  kFontCustom16BitScript = 2
134 };
135 
136 /* Language codes are zero based everywhere but within a 'cmap' table */
137 enum {
138  kFontEnglishLanguage = 0,
139  kFontFrenchLanguage = 1,
140  kFontGermanLanguage = 2,
141  kFontItalianLanguage = 3,
142  kFontDutchLanguage = 4,
143  kFontSwedishLanguage = 5,
144  kFontSpanishLanguage = 6,
145  kFontDanishLanguage = 7,
146  kFontPortugueseLanguage = 8,
147  kFontNorwegianLanguage = 9,
148  kFontHebrewLanguage = 10,
149  kFontJapaneseLanguage = 11,
150  kFontArabicLanguage = 12,
151  kFontFinnishLanguage = 13,
152  kFontGreekLanguage = 14,
153  kFontIcelandicLanguage = 15,
154  kFontMalteseLanguage = 16,
155  kFontTurkishLanguage = 17,
156  kFontCroatianLanguage = 18,
157  kFontTradChineseLanguage = 19,
158  kFontUrduLanguage = 20,
159  kFontHindiLanguage = 21,
160  kFontThaiLanguage = 22,
161  kFontKoreanLanguage = 23,
162  kFontLithuanianLanguage = 24,
163  kFontPolishLanguage = 25,
164  kFontHungarianLanguage = 26,
165  kFontEstonianLanguage = 27,
166  kFontLettishLanguage = 28,
167  kFontLatvianLanguage = kFontLettishLanguage,
168  kFontSaamiskLanguage = 29,
169  kFontLappishLanguage = kFontSaamiskLanguage,
170  kFontFaeroeseLanguage = 30,
171  kFontFarsiLanguage = 31,
172  kFontPersianLanguage = kFontFarsiLanguage,
173  kFontRussianLanguage = 32,
174  kFontSimpChineseLanguage = 33,
175  kFontFlemishLanguage = 34,
176  kFontIrishLanguage = 35,
177  kFontAlbanianLanguage = 36,
178  kFontRomanianLanguage = 37,
179  kFontCzechLanguage = 38,
180  kFontSlovakLanguage = 39,
181  kFontSlovenianLanguage = 40,
182  kFontYiddishLanguage = 41,
183  kFontSerbianLanguage = 42,
184  kFontMacedonianLanguage = 43,
185  kFontBulgarianLanguage = 44,
186  kFontUkrainianLanguage = 45,
187  kFontByelorussianLanguage = 46,
188  kFontUzbekLanguage = 47,
189  kFontKazakhLanguage = 48,
190  kFontAzerbaijaniLanguage = 49,
191  kFontAzerbaijanArLanguage = 50,
192  kFontArmenianLanguage = 51,
193  kFontGeorgianLanguage = 52,
194  kFontMoldavianLanguage = 53,
195  kFontKirghizLanguage = 54,
196  kFontTajikiLanguage = 55,
197  kFontTurkmenLanguage = 56,
198  kFontMongolianLanguage = 57,
199  kFontMongolianCyrLanguage = 58,
200  kFontPashtoLanguage = 59,
201  kFontKurdishLanguage = 60,
202  kFontKashmiriLanguage = 61,
203  kFontSindhiLanguage = 62,
204  kFontTibetanLanguage = 63,
205  kFontNepaliLanguage = 64,
206  kFontSanskritLanguage = 65,
207  kFontMarathiLanguage = 66,
208  kFontBengaliLanguage = 67,
209  kFontAssameseLanguage = 68,
210  kFontGujaratiLanguage = 69,
211  kFontPunjabiLanguage = 70,
212  kFontOriyaLanguage = 71,
213  kFontMalayalamLanguage = 72,
214  kFontKannadaLanguage = 73,
215  kFontTamilLanguage = 74,
216  kFontTeluguLanguage = 75,
217  kFontSinhaleseLanguage = 76,
218  kFontBurmeseLanguage = 77,
219  kFontKhmerLanguage = 78,
220  kFontLaoLanguage = 79,
221  kFontVietnameseLanguage = 80,
222  kFontIndonesianLanguage = 81,
223  kFontTagalogLanguage = 82,
224  kFontMalayRomanLanguage = 83,
225  kFontMalayArabicLanguage = 84,
226  kFontAmharicLanguage = 85,
227  kFontTigrinyaLanguage = 86,
228  kFontGallaLanguage = 87,
229  kFontOromoLanguage = kFontGallaLanguage,
230  kFontSomaliLanguage = 88,
231  kFontSwahiliLanguage = 89,
232  kFontRuandaLanguage = 90,
233  kFontRundiLanguage = 91,
234  kFontChewaLanguage = 92,
235  kFontMalagasyLanguage = 93,
236  kFontEsperantoLanguage = 94,
237  kFontWelshLanguage = 128,
238  kFontBasqueLanguage = 129,
239  kFontCatalanLanguage = 130,
240  kFontLatinLanguage = 131,
241  kFontQuechuaLanguage = 132,
242  kFontGuaraniLanguage = 133,
243  kFontAymaraLanguage = 134,
244  kFontTatarLanguage = 135,
245  kFontUighurLanguage = 136,
246  kFontDzongkhaLanguage = 137,
247  kFontJavaneseRomLanguage = 138,
248  kFontSundaneseRomLanguage = 139
249 };
250 
251 /* The following are special "don't care" values to be used in interfaces */
252 enum { kFontNoPlatform = -1, kFontNoScript = -1, kFontNoLanguage = -1 };
253 
255  UInt16 format;
256  UInt16 length;
257  UInt16 languageID; /* base-1 */
258 };
259 typedef struct sfntCMapSubHeader sfntCMapSubHeader;
260 enum { sizeof_sfntCMapSubHeader = 6 };
261 
263  UInt16 platformID; /* base-0 */
264  UInt16 scriptID; /* base-0 */
265  UInt32 offset;
266 };
267 typedef struct sfntCMapEncoding sfntCMapEncoding;
268 enum { sizeof_sfntCMapEncoding = 8 };
269 
271  UInt16 version;
272  UInt16 numTables;
273  sfntCMapEncoding encoding[1];
274 };
275 typedef struct sfntCMapHeader sfntCMapHeader;
276 enum { sizeof_sfntCMapHeader = 4 };
277 
278 /* Name table */
279 enum { nameFontTableTag = FOUR_CHAR_CODE('name') };
280 
281 enum {
282  kFontCopyrightName = 0,
283  kFontFamilyName = 1,
284  kFontStyleName = 2,
285  kFontUniqueName = 3,
286  kFontFullName = 4,
287  kFontVersionName = 5,
288  kFontPostscriptName = 6,
289  kFontTrademarkName = 7,
290  kFontManufacturerName = 8,
291  kFontDesignerName = 9,
292  kFontDescriptionName = 10,
293  kFontVendorURLName = 11,
294  kFontDesignerURLName = 12,
295  kFontLicenseDescriptionName = 13,
296  kFontLicenseInfoURLName = 14,
297  kFontLastReservedName = 255
298 };
299 
300 /* The following is a special "don't care" value to be used in interfaces */
301 enum { kFontNoName = -1 };
302 
304  UInt16 platformID; /* base-0 */
305  UInt16 scriptID; /* base-0 */
306  UInt16 languageID; /* base-0 */
307  UInt16 nameID; /* base-0 */
308  UInt16 length;
309  UInt16 offset;
310 };
311 typedef struct sfntNameRecord sfntNameRecord;
312 enum { sizeof_sfntNameRecord = 12 };
313 
315  UInt16 format;
316  UInt16 count;
317  UInt16 stringOffset;
318  sfntNameRecord rec[1];
319 };
320 typedef struct sfntNameHeader sfntNameHeader;
321 enum { sizeof_sfntNameHeader = 6 };
322 
323 /* Fvar table - font variations */
324 enum { variationFontTableTag = FOUR_CHAR_CODE('fvar') };
325 
326 /* These define each font variation */
328  FourCharCode axisTag;
329  Fixed minValue;
330  Fixed defaultValue;
331  Fixed maxValue;
332  SInt16 flags;
333  SInt16 nameID;
334 };
335 typedef struct sfntVariationAxis sfntVariationAxis;
336 enum { sizeof_sfntVariationAxis = 20 };
337 
338 /* These are named locations in style-space for the user */
339 struct sfntInstance {
340  SInt16 nameID;
341  SInt16 flags;
342  Fixed coord[1]; /* [axisCount] */
343  /* room to grow since the header carries a tupleSize field */
344 };
345 typedef struct sfntInstance sfntInstance;
346 enum { sizeof_sfntInstance = 4 };
347 
349  Fixed version; /* 1.0 Fixed */
350  UInt16 offsetToData; /* to first axis = 16*/
351  UInt16 countSizePairs; /* axis+inst = 2 */
352  UInt16 axisCount;
353  UInt16 axisSize;
354  UInt16 instanceCount;
355  UInt16 instanceSize;
356  /* �other <count,size> pairs */
357  sfntVariationAxis axis[1]; /* [axisCount] */
358  sfntInstance instance[1]; /* [instanceCount] �other arrays of data */
359 };
361 enum { sizeof_sfntVariationHeader = 16 };
362 
363 /* Fdsc table - font descriptor */
364 enum { descriptorFontTableTag = FOUR_CHAR_CODE('fdsc') };
365 
367  FourCharCode name;
368  Fixed value;
369 };
372  Fixed version; /* 1.0 in Fixed */
373  SInt32 descriptorCount;
374  sfntFontDescriptor descriptor[1];
375 };
377 enum { sizeof_sfntDescriptorHeader = 8 };
378 
379 /* Feat Table - layout feature table */
380 enum { featureFontTableTag = FOUR_CHAR_CODE('feat') };
381 
383  UInt16 featureType;
384  UInt16 settingCount;
385  SInt32 offsetToSettings;
386  UInt16 featureFlags;
387  UInt16 nameID;
388 };
389 typedef struct sfntFeatureName sfntFeatureName;
391  UInt16 setting;
392  UInt16 nameID;
393 };
396  UInt16 featureType;
397  UInt16 setting;
398 };
401  SInt32 version; /* 1.0 */
402  UInt16 featureNameCount;
403  UInt16 featureSetCount;
404  SInt32 reserved; /* set to 0 */
405  sfntFeatureName names[1];
406  sfntFontFeatureSetting settings[1];
407  sfntFontRunFeature runs[1];
408 };
409 typedef struct sfntFeatureHeader sfntFeatureHeader;
410 /* OS/2 Table */
411 enum { os2FontTableTag = FOUR_CHAR_CODE('OS/2') };
412 
413 /* Special invalid glyph ID value, useful as a sentinel value, for example */
414 enum { nonGlyphID = 65535L };
415 
416 /* Data type used to access names from font name table */
417 
418 typedef UInt32 FontNameCode;
419 /* Data types for encoding components as used in interfaces */
420 typedef UInt32 FontPlatformCode;
421 typedef UInt32 FontScriptCode;
422 typedef UInt32 FontLanguageCode;
429  FourCharCode name;
430  Fixed value;
431 };
432 typedef struct FontVariation FontVariation;
433 
434 #if PRAGMA_STRUCT_ALIGN
435 #pragma options align = reset
436 #elif PRAGMA_STRUCT_PACKPUSH
437 #pragma pack(pop)
438 #elif PRAGMA_STRUCT_PACK
439 #pragma pack()
440 #endif
441 
442 #ifdef PRAGMA_IMPORT_OFF
443 #pragma import off
444 #elif PRAGMA_IMPORT
445 #pragma import reset
446 #endif
447 
448 #ifdef __cplusplus
449 }
450 #endif
451 
452 #endif /* __SFNTTYPES__ */
Basic Macintosh data types.
long Fixed
Definition: MacTypes.h:153
Definition: SFNTTypes.h:428
Definition: SFNTTypes.h:262
Definition: SFNTTypes.h:270
Definition: SFNTTypes.h:254
Definition: SFNTTypes.h:371
Definition: SFNTTypes.h:46
Definition: SFNTTypes.h:54
Definition: SFNTTypes.h:400
Definition: SFNTTypes.h:382
Definition: SFNTTypes.h:366
Definition: SFNTTypes.h:390
Definition: SFNTTypes.h:395
Definition: SFNTTypes.h:339
Definition: SFNTTypes.h:314
Definition: SFNTTypes.h:303
Definition: SFNTTypes.h:327
Definition: SFNTTypes.h:348