Home | History | Annotate | Download | only in layout
      1 /*
      2  ****************************************************************************** *
      3  *
      4  *   Copyright (C) 1999-2001, International Business Machines
      5  *   Corporation and others.  All Rights Reserved.
      6  *
      7  ****************************************************************************** *
      8  *   file name:  sfnt.h
      9  *
     10  *   created on: ??/??/2001
     11  *   created by: Eric R. Mader
     12  */
     13 
     14 #ifndef __SFNT_H
     15 #define __SFNT_H
     16 
     17 #include "LETypes.h"
     18 
     19 
     20 #ifndef ANY_NUMBER
     21 #define ANY_NUMBER 1
     22 #endif
     23 
     24 struct DirectoryEntry
     25 {
     26     le_uint32   tag;
     27     le_uint32   checksum;
     28     le_uint32   offset;
     29     le_uint32   length;
     30 };
     31 
     32 struct SFNTDirectory
     33 {
     34     le_uint32       scalerType;
     35     le_uint16       numTables;
     36     le_uint16       searchRange;
     37     le_uint16       entrySelector;
     38     le_uint16       rangeShift;
     39     DirectoryEntry  tableDirectory[ANY_NUMBER];
     40 };
     41 
     42 
     43 struct CMAPEncodingSubtableHeader
     44 {
     45     le_uint16   platformID;
     46     le_uint16   platformSpecificID;
     47     le_uint32   encodingOffset;
     48 };
     49 
     50 struct CMAPTable
     51 {
     52     le_uint16   version;
     53     le_uint16   numberSubtables;
     54     CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
     55 };
     56 
     57 struct CMAPEncodingSubtable
     58 {
     59     le_uint16   format;
     60     le_uint16   length;
     61     le_uint16   language;
     62 };
     63 
     64 struct CMAPFormat0Encoding : CMAPEncodingSubtable
     65 {
     66     le_uint8    glyphIndexArray[256];
     67 };
     68 
     69 struct CMAPFormat2Subheader
     70 {
     71     le_uint16   firstCode;
     72     le_uint16   entryCount;
     73     le_int16    idDelta;
     74     le_uint16   idRangeOffset;
     75 };
     76 
     77 struct CMAPFormat2Encoding : CMAPEncodingSubtable
     78 {
     79     le_uint16  subHeadKeys[256];
     80     CMAPFormat2Subheader subheaders[ANY_NUMBER];
     81 };
     82 
     83 struct CMAPFormat4Encoding : CMAPEncodingSubtable
     84 {
     85     le_uint16   segCountX2;
     86     le_uint16   searchRange;
     87     le_uint16   entrySelector;
     88     le_uint16   rangeShift;
     89     le_uint16   endCodes[ANY_NUMBER];
     90 //  le_uint16   reservedPad;
     91 //  le_uint16   startCodes[ANY_NUMBER];
     92 //  le_uint16   idDelta[ANY_NUMBER];
     93 //  le_uint16   idRangeOffset[ANY_NUMBER];
     94 //  le_uint16   glyphIndexArray[ANY_NUMBER];
     95 };
     96 
     97 struct CMAPFormat6Encoding : CMAPEncodingSubtable
     98 {
     99     le_uint16   firstCode;
    100     le_uint16   entryCount;
    101     le_uint16   glyphIndexArray[ANY_NUMBER];
    102 };
    103 
    104 struct CMAPEncodingSubtable32
    105 {
    106     le_uint32   format;
    107     le_uint32   length;
    108     le_uint32   language;
    109 };
    110 
    111 struct CMAPGroup
    112 {
    113     le_uint32   startCharCode;
    114     le_uint32   endCharCode;
    115     le_uint32   startGlyphCode;
    116 };
    117 
    118 struct CMAPFormat8Encoding : CMAPEncodingSubtable32
    119 {
    120     le_uint32   is32[65536/32];
    121     le_uint32   nGroups;
    122     CMAPGroup   groups[ANY_NUMBER];
    123 };
    124 
    125 struct CMAPFormat10Encoding : CMAPEncodingSubtable32
    126 {
    127     le_uint32   startCharCode;
    128     le_uint32   numCharCodes;
    129     le_uint16   glyphs[ANY_NUMBER];
    130 };
    131 
    132 struct CMAPFormat12Encoding : CMAPEncodingSubtable32
    133 {
    134     le_uint32   nGroups;
    135     CMAPGroup   groups[ANY_NUMBER];
    136 };
    137 
    138 typedef le_int32 fixed;
    139 
    140 struct BigDate
    141 {
    142     le_uint32   bc;
    143     le_uint32   ad;
    144 };
    145 
    146 struct HEADTable
    147 {
    148     fixed       version;
    149     fixed       fontRevision;
    150     le_uint32   checksumAdjustment;
    151     le_uint32   magicNumber;
    152     le_uint16   flags;
    153     le_uint16   unitsPerEm;
    154     BigDate     created;
    155     BigDate     modified;
    156     le_int16    xMin;
    157     le_int16    yMin;
    158     le_int16    xMax;
    159     le_int16    yMax;
    160     le_int16    lowestRecPPEM;
    161     le_int16    fontDirectionHint;
    162     le_int16    indexToLocFormat;
    163     le_int16    glyphDataFormat;
    164 };
    165 
    166 struct MAXPTable
    167 {
    168     fixed       version;
    169     le_uint16   numGlyphs;
    170     le_uint16   maxPoints;
    171     le_uint16   maxContours;
    172     le_uint16   maxComponentPoints;
    173     le_uint16   maxComponentContours;
    174     le_uint16   maxZones;
    175     le_uint16   maxTwilightPoints;
    176     le_uint16   maxStorage;
    177     le_uint16   maxFunctionDefs;
    178     le_uint16   maxInstructionDefs;
    179     le_uint16   maxStackElements;
    180     le_uint16   maxSizeOfInstructions;
    181     le_uint16   maxComponentElements;
    182     le_uint16   maxComponentDepth;
    183 };
    184 
    185 struct HHEATable
    186 {
    187     fixed       version;
    188     le_int16    ascent;
    189     le_int16    descent;
    190     le_int16    lineGap;
    191     le_uint16   advanceWidthMax;
    192     le_int16    minLeftSideBearing;
    193     le_int16    minRightSideBearing;
    194     le_int16    xMaxExtent;
    195     le_int16    caretSlopeRise;
    196     le_int16    caretSlopeRun;
    197     le_int16    caretOffset;
    198     le_int16    reserved1;
    199     le_int16    reserved2;
    200     le_int16    reserved3;
    201     le_int16    reserved4;
    202     le_int16    metricDataFormat;
    203     le_uint16   numOfLongHorMetrics;
    204 };
    205 
    206 struct LongHorMetric
    207 {
    208     le_uint16   advanceWidth;
    209     le_int16    leftSideBearing;
    210 };
    211 
    212 struct HMTXTable
    213 {
    214     LongHorMetric hMetrics[ANY_NUMBER];        // ANY_NUMBER = numOfLongHorMetrics from hhea table
    215 //  le_int16      leftSideBearing[ANY_NUMBER]; // ANY_NUMBER = numGlyphs - numOfLongHorMetrics
    216 };
    217 
    218 #endif
    219 
    220