123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- /*
- ******************************************************************************
- *
- * © 2016 and later: Unicode, Inc. and others.
- * License & terms of use: http://www.unicode.org/copyright.html#License
- *
- ******************************************************************************
- ****************************************************************************** *
- *
- * Copyright (C) 1999-2001, International Business Machines
- * Corporation and others. All Rights Reserved.
- *
- ****************************************************************************** *
- * file name: sfnt.h
- *
- * created on: ??/??/2001
- * created by: Eric R. Mader
- */
- #ifndef __SFNT_H
- #define __SFNT_H
- #include "LETypes.h"
- #ifndef ANY_NUMBER
- #define ANY_NUMBER 1
- #endif
- struct DirectoryEntry
- {
- le_uint32 tag;
- le_uint32 checksum;
- le_uint32 offset;
- le_uint32 length;
- };
- struct SFNTDirectory
- {
- le_uint32 scalerType;
- le_uint16 numTables;
- le_uint16 searchRange;
- le_uint16 entrySelector;
- le_uint16 rangeShift;
- DirectoryEntry tableDirectory[ANY_NUMBER];
- };
- struct CMAPEncodingSubtableHeader
- {
- le_uint16 platformID;
- le_uint16 platformSpecificID;
- le_uint32 encodingOffset;
- };
- struct CMAPTable
- {
- le_uint16 version;
- le_uint16 numberSubtables;
- CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
- };
- struct CMAPEncodingSubtable
- {
- le_uint16 format;
- le_uint16 length;
- le_uint16 language;
- };
- struct CMAPFormat0Encoding : CMAPEncodingSubtable
- {
- le_uint8 glyphIndexArray[256];
- };
- struct CMAPFormat2Subheader
- {
- le_uint16 firstCode;
- le_uint16 entryCount;
- le_int16 idDelta;
- le_uint16 idRangeOffset;
- };
- struct CMAPFormat2Encoding : CMAPEncodingSubtable
- {
- le_uint16 subHeadKeys[256];
- CMAPFormat2Subheader subheaders[ANY_NUMBER];
- };
- struct CMAPFormat4Encoding : CMAPEncodingSubtable
- {
- le_uint16 segCountX2;
- le_uint16 searchRange;
- le_uint16 entrySelector;
- le_uint16 rangeShift;
- le_uint16 endCodes[ANY_NUMBER];
- // le_uint16 reservedPad;
- // le_uint16 startCodes[ANY_NUMBER];
- // le_uint16 idDelta[ANY_NUMBER];
- // le_uint16 idRangeOffset[ANY_NUMBER];
- // le_uint16 glyphIndexArray[ANY_NUMBER];
- };
- struct CMAPFormat6Encoding : CMAPEncodingSubtable
- {
- le_uint16 firstCode;
- le_uint16 entryCount;
- le_uint16 glyphIndexArray[ANY_NUMBER];
- };
- struct CMAPEncodingSubtable32
- {
- le_uint32 format;
- le_uint32 length;
- le_uint32 language;
- };
- struct CMAPGroup
- {
- le_uint32 startCharCode;
- le_uint32 endCharCode;
- le_uint32 startGlyphCode;
- };
- struct CMAPFormat8Encoding : CMAPEncodingSubtable32
- {
- le_uint32 is32[65536/32];
- le_uint32 nGroups;
- CMAPGroup groups[ANY_NUMBER];
- };
- struct CMAPFormat10Encoding : CMAPEncodingSubtable32
- {
- le_uint32 startCharCode;
- le_uint32 numCharCodes;
- le_uint16 glyphs[ANY_NUMBER];
- };
- struct CMAPFormat12Encoding : CMAPEncodingSubtable32
- {
- le_uint32 nGroups;
- CMAPGroup groups[ANY_NUMBER];
- };
- typedef le_int32 fixed;
- struct BigDate
- {
- le_uint32 bc;
- le_uint32 ad;
- };
- struct HEADTable
- {
- fixed version;
- fixed fontRevision;
- le_uint32 checksumAdjustment;
- le_uint32 magicNumber;
- le_uint16 flags;
- le_uint16 unitsPerEm;
- BigDate created;
- BigDate modified;
- le_int16 xMin;
- le_int16 yMin;
- le_int16 xMax;
- le_int16 yMax;
- le_int16 lowestRecPPEM;
- le_int16 fontDirectionHint;
- le_int16 indexToLocFormat;
- le_int16 glyphDataFormat;
- };
- struct MAXPTable
- {
- fixed version;
- le_uint16 numGlyphs;
- le_uint16 maxPoints;
- le_uint16 maxContours;
- le_uint16 maxComponentPoints;
- le_uint16 maxComponentContours;
- le_uint16 maxZones;
- le_uint16 maxTwilightPoints;
- le_uint16 maxStorage;
- le_uint16 maxFunctionDefs;
- le_uint16 maxInstructionDefs;
- le_uint16 maxStackElements;
- le_uint16 maxSizeOfInstructions;
- le_uint16 maxComponentElements;
- le_uint16 maxComponentDepth;
- };
- struct HHEATable
- {
- fixed version;
- le_int16 ascent;
- le_int16 descent;
- le_int16 lineGap;
- le_uint16 advanceWidthMax;
- le_int16 minLeftSideBearing;
- le_int16 minRightSideBearing;
- le_int16 xMaxExtent;
- le_int16 caretSlopeRise;
- le_int16 caretSlopeRun;
- le_int16 caretOffset;
- le_int16 reserved1;
- le_int16 reserved2;
- le_int16 reserved3;
- le_int16 reserved4;
- le_int16 metricDataFormat;
- le_uint16 numOfLongHorMetrics;
- };
- struct LongHorMetric
- {
- le_uint16 advanceWidth;
- le_int16 leftSideBearing;
- };
- struct HMTXTable
- {
- LongHorMetric hMetrics[ANY_NUMBER]; // ANY_NUMBER = numOfLongHorMetrics from hhea table
- // le_int16 leftSideBearing[ANY_NUMBER]; // ANY_NUMBER = numGlyphs - numOfLongHorMetrics
- };
- #endif
|