diff options
Diffstat (limited to 'common/quicktime_win32/SFNTTypes.h')
| -rw-r--r-- | common/quicktime_win32/SFNTTypes.h | 509 |
1 files changed, 509 insertions, 0 deletions
diff --git a/common/quicktime_win32/SFNTTypes.h b/common/quicktime_win32/SFNTTypes.h new file mode 100644 index 0000000..79abc6e --- /dev/null +++ b/common/quicktime_win32/SFNTTypes.h @@ -0,0 +1,509 @@ +/* + 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 <MacTypes.h> +#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 <count,size> 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__ */ + |