You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
509 lines
15 KiB
509 lines
15 KiB
/* |
|
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__ */ |
|
|
|
|