/* File: SFNTTypes.h Contains: Font file structures. Version: QuickTime 7.3 Copyright: (c) 2007 (c) 1994-2000 by Apple Computer, Inc., all rights reserved. Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __SFNTTYPES__ #define __SFNTTYPES__ #ifndef __MACTYPES__ #include #endif #if PRAGMA_ONCE #pragma once #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=mac68k #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif struct sfntDirectoryEntry { FourCharCode tableTag; UInt32 checkSum; UInt32 offset; UInt32 length; }; typedef struct sfntDirectoryEntry sfntDirectoryEntry; /* The search fields limits numOffsets to 4096. */ struct sfntDirectory { FourCharCode format; UInt16 numOffsets; /* number of tables */ UInt16 searchRange; /* (max2 <= numOffsets)*16 */ UInt16 entrySelector; /* log2(max2 <= numOffsets) */ UInt16 rangeShift; /* numOffsets*16-searchRange*/ sfntDirectoryEntry table[1]; /* table[numOffsets] */ }; typedef struct sfntDirectory sfntDirectory; enum { sizeof_sfntDirectory = 12 }; /* Cmap - character id to glyph id mapping */ enum { cmapFontTableTag = FOUR_CHAR_CODE('cmap') }; enum { kFontUnicodePlatform = 0, kFontMacintoshPlatform = 1, kFontReservedPlatform = 2, kFontMicrosoftPlatform = 3, kFontCustomPlatform = 4 }; enum { kFontUnicodeDefaultSemantics = 0, kFontUnicodeV1_1Semantics = 1, kFontISO10646_1993Semantics = 2 }; enum { kFontRomanScript = 0, kFontJapaneseScript = 1, kFontTraditionalChineseScript = 2, kFontChineseScript = kFontTraditionalChineseScript, kFontKoreanScript = 3, kFontArabicScript = 4, kFontHebrewScript = 5, kFontGreekScript = 6, kFontCyrillicScript = 7, kFontRussian = kFontCyrillicScript, kFontRSymbolScript = 8, kFontDevanagariScript = 9, kFontGurmukhiScript = 10, kFontGujaratiScript = 11, kFontOriyaScript = 12, kFontBengaliScript = 13, kFontTamilScript = 14, kFontTeluguScript = 15, kFontKannadaScript = 16, kFontMalayalamScript = 17, kFontSinhaleseScript = 18, kFontBurmeseScript = 19, kFontKhmerScript = 20, kFontThaiScript = 21, kFontLaotianScript = 22, kFontGeorgianScript = 23, kFontArmenianScript = 24, kFontSimpleChineseScript = 25, kFontTibetanScript = 26, kFontMongolianScript = 27, kFontGeezScript = 28, kFontEthiopicScript = kFontGeezScript, kFontAmharicScript = kFontGeezScript, kFontSlavicScript = 29, kFontEastEuropeanRomanScript = kFontSlavicScript, kFontVietnameseScript = 30, kFontExtendedArabicScript = 31, kFontSindhiScript = kFontExtendedArabicScript, kFontUninterpretedScript = 32 }; enum { kFontMicrosoftSymbolScript = 0, kFontMicrosoftStandardScript = 1, kFontMicrosoftUCS4Script = 10 }; enum { kFontCustom8BitScript = 0, kFontCustom816BitScript = 1, kFontCustom16BitScript = 2 }; /* Language codes are zero based everywhere but within a 'cmap' table */ enum { kFontEnglishLanguage = 0, kFontFrenchLanguage = 1, kFontGermanLanguage = 2, kFontItalianLanguage = 3, kFontDutchLanguage = 4, kFontSwedishLanguage = 5, kFontSpanishLanguage = 6, kFontDanishLanguage = 7, kFontPortugueseLanguage = 8, kFontNorwegianLanguage = 9, kFontHebrewLanguage = 10, kFontJapaneseLanguage = 11, kFontArabicLanguage = 12, kFontFinnishLanguage = 13, kFontGreekLanguage = 14, kFontIcelandicLanguage = 15, kFontMalteseLanguage = 16, kFontTurkishLanguage = 17, kFontCroatianLanguage = 18, kFontTradChineseLanguage = 19, kFontUrduLanguage = 20, kFontHindiLanguage = 21, kFontThaiLanguage = 22, kFontKoreanLanguage = 23, kFontLithuanianLanguage = 24, kFontPolishLanguage = 25, kFontHungarianLanguage = 26, kFontEstonianLanguage = 27, kFontLettishLanguage = 28, kFontLatvianLanguage = kFontLettishLanguage, kFontSaamiskLanguage = 29, kFontLappishLanguage = kFontSaamiskLanguage, kFontFaeroeseLanguage = 30, kFontFarsiLanguage = 31, kFontPersianLanguage = kFontFarsiLanguage, kFontRussianLanguage = 32, kFontSimpChineseLanguage = 33, kFontFlemishLanguage = 34, kFontIrishLanguage = 35, kFontAlbanianLanguage = 36, kFontRomanianLanguage = 37, kFontCzechLanguage = 38, kFontSlovakLanguage = 39, kFontSlovenianLanguage = 40, kFontYiddishLanguage = 41, kFontSerbianLanguage = 42, kFontMacedonianLanguage = 43, kFontBulgarianLanguage = 44, kFontUkrainianLanguage = 45, kFontByelorussianLanguage = 46, kFontUzbekLanguage = 47, kFontKazakhLanguage = 48, kFontAzerbaijaniLanguage = 49, kFontAzerbaijanArLanguage = 50, kFontArmenianLanguage = 51, kFontGeorgianLanguage = 52, kFontMoldavianLanguage = 53, kFontKirghizLanguage = 54, kFontTajikiLanguage = 55, kFontTurkmenLanguage = 56, kFontMongolianLanguage = 57, kFontMongolianCyrLanguage = 58, kFontPashtoLanguage = 59, kFontKurdishLanguage = 60, kFontKashmiriLanguage = 61, kFontSindhiLanguage = 62, kFontTibetanLanguage = 63, kFontNepaliLanguage = 64, kFontSanskritLanguage = 65, kFontMarathiLanguage = 66, kFontBengaliLanguage = 67, kFontAssameseLanguage = 68, kFontGujaratiLanguage = 69, kFontPunjabiLanguage = 70, kFontOriyaLanguage = 71, kFontMalayalamLanguage = 72, kFontKannadaLanguage = 73, kFontTamilLanguage = 74, kFontTeluguLanguage = 75, kFontSinhaleseLanguage = 76, kFontBurmeseLanguage = 77, kFontKhmerLanguage = 78, kFontLaoLanguage = 79, kFontVietnameseLanguage = 80, kFontIndonesianLanguage = 81, kFontTagalogLanguage = 82, kFontMalayRomanLanguage = 83, kFontMalayArabicLanguage = 84, kFontAmharicLanguage = 85, kFontTigrinyaLanguage = 86, kFontGallaLanguage = 87, kFontOromoLanguage = kFontGallaLanguage, kFontSomaliLanguage = 88, kFontSwahiliLanguage = 89, kFontRuandaLanguage = 90, kFontRundiLanguage = 91, kFontChewaLanguage = 92, kFontMalagasyLanguage = 93, kFontEsperantoLanguage = 94, kFontWelshLanguage = 128, kFontBasqueLanguage = 129, kFontCatalanLanguage = 130, kFontLatinLanguage = 131, kFontQuechuaLanguage = 132, kFontGuaraniLanguage = 133, kFontAymaraLanguage = 134, kFontTatarLanguage = 135, kFontUighurLanguage = 136, kFontDzongkhaLanguage = 137, kFontJavaneseRomLanguage = 138, kFontSundaneseRomLanguage = 139 }; /* The following are special "don't care" values to be used in interfaces */ enum { kFontNoPlatformCode = (unsigned long)(-1), kFontNoScriptCode = (unsigned long)(-1), kFontNoLanguageCode = (unsigned long)(-1) }; struct sfntCMapSubHeader { UInt16 format; UInt16 length; UInt16 languageID; /* base-1 */ }; typedef struct sfntCMapSubHeader sfntCMapSubHeader; enum { sizeof_sfntCMapSubHeader = 6 }; struct sfntCMapExtendedSubHeader { UInt16 format; UInt16 reserved; UInt32 length; UInt32 language; }; typedef struct sfntCMapExtendedSubHeader sfntCMapExtendedSubHeader; enum { sizeof_sfntCMapExtendedSubHeader = 12 }; struct sfntCMapEncoding { UInt16 platformID; /* base-0 */ UInt16 scriptID; /* base-0 */ UInt32 offset; }; typedef struct sfntCMapEncoding sfntCMapEncoding; enum { sizeof_sfntCMapEncoding = 8 }; struct sfntCMapHeader { UInt16 version; UInt16 numTables; sfntCMapEncoding encoding[1]; }; typedef struct sfntCMapHeader sfntCMapHeader; enum { sizeof_sfntCMapHeader = 4 }; /* Name table */ enum { nameFontTableTag = FOUR_CHAR_CODE('name') }; enum { kFontCopyrightName = 0, kFontFamilyName = 1, kFontStyleName = 2, kFontUniqueName = 3, kFontFullName = 4, kFontVersionName = 5, kFontPostscriptName = 6, kFontTrademarkName = 7, kFontManufacturerName = 8, kFontDesignerName = 9, kFontDescriptionName = 10, kFontVendorURLName = 11, kFontDesignerURLName = 12, kFontLicenseDescriptionName = 13, kFontLicenseInfoURLName = 14, kFontLastReservedName = 255 }; /* The following is a special "don't care" value to be used in interfaces */ enum { kFontNoNameCode = (unsigned long)(-1) }; struct sfntNameRecord { UInt16 platformID; /* base-0 */ UInt16 scriptID; /* base-0 */ UInt16 languageID; /* base-0 */ UInt16 nameID; /* base-0 */ UInt16 length; UInt16 offset; }; typedef struct sfntNameRecord sfntNameRecord; enum { sizeof_sfntNameRecord = 12 }; struct sfntNameHeader { UInt16 format; UInt16 count; UInt16 stringOffset; sfntNameRecord rec[1]; }; typedef struct sfntNameHeader sfntNameHeader; enum { sizeof_sfntNameHeader = 6 }; /* Fvar table - font variations */ enum { variationFontTableTag = FOUR_CHAR_CODE('fvar') }; /* These define each font variation */ struct sfntVariationAxis { FourCharCode axisTag; Fixed minValue; Fixed defaultValue; Fixed maxValue; SInt16 flags; SInt16 nameID; }; typedef struct sfntVariationAxis sfntVariationAxis; enum { sizeof_sfntVariationAxis = 20 }; /* These are named locations in style-space for the user */ struct sfntInstance { SInt16 nameID; SInt16 flags; Fixed coord[1]; /* [axisCount] */ /* room to grow since the header carries a tupleSize field */ }; typedef struct sfntInstance sfntInstance; enum { sizeof_sfntInstance = 4 }; struct sfntVariationHeader { Fixed version; /* 1.0 Fixed */ UInt16 offsetToData; /* to first axis = 16*/ UInt16 countSizePairs; /* axis+inst = 2 */ UInt16 axisCount; UInt16 axisSize; UInt16 instanceCount; UInt16 instanceSize; /* ...other pairs */ sfntVariationAxis axis[1]; /* [axisCount] */ sfntInstance instance[1]; /* [instanceCount] ...other arrays of data */ }; typedef struct sfntVariationHeader sfntVariationHeader; enum { sizeof_sfntVariationHeader = 16 }; /* Fdsc table - font descriptor */ enum { descriptorFontTableTag = FOUR_CHAR_CODE('fdsc') }; struct sfntFontDescriptor { FourCharCode name; Fixed value; }; typedef struct sfntFontDescriptor sfntFontDescriptor; struct sfntDescriptorHeader { Fixed version; /* 1.0 in Fixed */ SInt32 descriptorCount; sfntFontDescriptor descriptor[1]; }; typedef struct sfntDescriptorHeader sfntDescriptorHeader; enum { sizeof_sfntDescriptorHeader = 8 }; /* Feat Table - layout feature table */ enum { featureFontTableTag = FOUR_CHAR_CODE('feat') }; struct sfntFeatureName { UInt16 featureType; UInt16 settingCount; SInt32 offsetToSettings; UInt16 featureFlags; UInt16 nameID; }; typedef struct sfntFeatureName sfntFeatureName; struct sfntFontFeatureSetting { UInt16 setting; UInt16 nameID; }; typedef struct sfntFontFeatureSetting sfntFontFeatureSetting; struct sfntFontRunFeature { UInt16 featureType; UInt16 setting; }; typedef struct sfntFontRunFeature sfntFontRunFeature; struct sfntFeatureHeader { SInt32 version; /* 1.0 */ UInt16 featureNameCount; UInt16 featureSetCount; SInt32 reserved; /* set to 0 */ sfntFeatureName names[1]; sfntFontFeatureSetting settings[1]; sfntFontRunFeature runs[1]; }; typedef struct sfntFeatureHeader sfntFeatureHeader; /* OS/2 Table */ enum { os2FontTableTag = FOUR_CHAR_CODE('OS/2') }; /* Special invalid glyph ID value, useful as a sentinel value, for example */ enum { nonGlyphID = 65535L }; /* Deprecated "don't care" values - use kFontNoPlatformCode, kFontNoScriptCode, kFontNoLanguageCode, kFontNoName instead */ enum { kFontNoPlatform = -1, kFontNoScript = -1, kFontNoLanguage = -1, kFontNoName = -1 }; /* Data type used to access names from font name table */ typedef UInt32 FontNameCode; /* Data types for encoding components as used in interfaces */ typedef UInt32 FontPlatformCode; typedef UInt32 FontScriptCode; typedef UInt32 FontLanguageCode; /* ** FontVariation is used to specify a coordinate along a variation axis. The name ** identifies the axes to be applied, and value is the setting to be used. */ struct FontVariation { FourCharCode name; Fixed value; }; typedef struct FontVariation FontVariation; #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #endif /* __SFNTTYPES__ */