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