| Viewing file:  sfnt.h (4.9 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
/*******************************************************************************
 *
 *   © 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
 
 
 |