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.
510 lines
15 KiB
510 lines
15 KiB
4 years ago
|
/*
|
||
|
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__ */
|
||
|
|