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