Home | History | Annotate | Download | only in leperf
      1 /***************************************************************************
      2 *
      3 *   Copyright (C) 2016 and later: Unicode, Inc. and others.
      4 *   License & terms of use: http://www.unicode.org/copyright.html#License
      5 *
      6 ****************************************************************************/
      7 /***************************************************************************
      8 *
      9 *   Copyright (C) 1998-2013, International Business Machines
     10 *   Corporation and others.  All Rights Reserved.
     11 *
     12 ************************************************************************/
     13 
     14 #ifndef __SFNT_H
     15 #define __SFNT_H
     16 
     17 #include "layout/LETypes.h"
     18 
     19 U_NAMESPACE_USE
     20 
     21 #ifndef ANY_NUMBER
     22 #define ANY_NUMBER 1
     23 #endif
     24 
     25 struct DirectoryEntry
     26 {
     27     le_uint32   tag;
     28     le_uint32   checksum;
     29     le_uint32   offset;
     30     le_uint32   length;
     31 };
     32 
     33 #ifndef __cplusplus
     34 typedef struct DirectoryEntry DirectoryEntry;
     35 #endif
     36 
     37 struct SFNTDirectory
     38 {
     39     le_uint32       scalerType;
     40     le_uint16       numTables;
     41     le_uint16       searchRange;
     42     le_uint16       entrySelector;
     43     le_uint16       rangeShift;
     44     DirectoryEntry  tableDirectory[ANY_NUMBER];
     45 };
     46 
     47 #ifndef __cplusplus
     48 typedef struct SFNTDirectory SFNTDirectory;
     49 #endif
     50 
     51 
     52 struct CMAPEncodingSubtableHeader
     53 {
     54     le_uint16   platformID;
     55     le_uint16   platformSpecificID;
     56     le_uint32   encodingOffset;
     57 };
     58 
     59 #ifndef __cplusplus
     60 typedef struct CMAPEncodingSubtableHeader CMAPEncodingSubtableHeader;
     61 #endif
     62 
     63 struct CMAPTable
     64 {
     65     le_uint16   version;
     66     le_uint16   numberSubtables;
     67     CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER];
     68 };
     69 
     70 #ifndef __cplusplus
     71 typedef struct CMAPTable CMAPTable;
     72 #endif
     73 
     74 struct CMAPEncodingSubtable
     75 {
     76     le_uint16   format;
     77     le_uint16   length;
     78     le_uint16   language;
     79 };
     80 
     81 #ifndef __cplusplus
     82 typedef struct CMAPEncodingSubtable CMAPEncodingSubtable;
     83 #endif
     84 
     85 #ifdef __cplusplus
     86 struct CMAPFormat0Encoding : CMAPEncodingSubtable
     87 {
     88     le_uint8    glyphIndexArray[256];
     89 };
     90 #else
     91 struct CMAPFormat0Encoding
     92 {
     93 	CMAPEncodingSubtable base;
     94 
     95 	le_uint8 glyphIndexArray[256];
     96 };
     97 
     98 typedef struct CMAPFormat0Encoding CMAPFormat0Encoding;
     99 #endif
    100 
    101 struct CMAPFormat2Subheader
    102 {
    103     le_uint16   firstCode;
    104     le_uint16   entryCount;
    105     le_int16    idDelta;
    106     le_uint16   idRangeOffset;
    107 };
    108 
    109 #ifndef __cplusplus
    110 typedef struct CMAPFormat2Subheader CMAPFormat2Subheader;
    111 #endif
    112 
    113 #ifdef __cplusplus
    114 struct CMAPFormat2Encoding : CMAPEncodingSubtable
    115 {
    116     le_uint16  subHeadKeys[256];
    117     CMAPFormat2Subheader subheaders[ANY_NUMBER];
    118 };
    119 #else
    120 struct CMAPFormat2Encoding
    121 {
    122 	CMAPEncodingSubtable base;
    123 
    124     le_uint16  subHeadKeys[256];
    125     CMAPFormat2Subheader subheaders[ANY_NUMBER];
    126 };
    127 
    128 typedef struct CMAPFormat2Encoding CMAPFormat2Encoding;
    129 #endif
    130 
    131 #ifdef __cplusplus
    132 struct CMAPFormat4Encoding : CMAPEncodingSubtable
    133 {
    134     le_uint16   segCountX2;
    135     le_uint16   searchRange;
    136     le_uint16   entrySelector;
    137     le_uint16   rangeShift;
    138     le_uint16   endCodes[ANY_NUMBER];
    139 /*
    140     le_uint16   reservedPad;
    141     le_uint16   startCodes[ANY_NUMBER];
    142     le_uint16   idDelta[ANY_NUMBER];
    143     le_uint16   idRangeOffset[ANY_NUMBER];
    144     le_uint16   glyphIndexArray[ANY_NUMBER];
    145 */
    146 };
    147 #else
    148 struct CMAPFormat4Encoding
    149 {
    150 	CMAPEncodingSubtable base;
    151 
    152     le_uint16   segCountX2;
    153     le_uint16   searchRange;
    154     le_uint16   entrySelector;
    155     le_uint16   rangeShift;
    156     le_uint16   endCodes[ANY_NUMBER];
    157 /*
    158 //  le_uint16   reservedPad;
    159 //  le_uint16   startCodes[ANY_NUMBER];
    160 //  le_uint16   idDelta[ANY_NUMBER];
    161 //  le_uint16   idRangeOffset[ANY_NUMBER];
    162 //  le_uint16   glyphIndexArray[ANY_NUMBER];
    163 */
    164 };
    165 
    166 typedef struct CMAPFormat4Encoding CMAPFormat4Encoding;
    167 #endif
    168 
    169 #ifdef __cplusplus
    170 struct CMAPFormat6Encoding : CMAPEncodingSubtable
    171 {
    172     le_uint16   firstCode;
    173     le_uint16   entryCount;
    174     le_uint16   glyphIndexArray[ANY_NUMBER];
    175 };
    176 #else
    177 struct CMAPFormat6Encoding
    178 {
    179 	CMAPEncodingSubtable base;
    180 
    181     le_uint16   firstCode;
    182     le_uint16   entryCount;
    183     le_uint16   glyphIndexArray[ANY_NUMBER];
    184 };
    185 
    186 typedef struct CMAPFormat6Encoding CMAPFormat6Encoding;
    187 #endif
    188 
    189 struct CMAPEncodingSubtable32
    190 {
    191     le_uint32   format;
    192     le_uint32   length;
    193     le_uint32   language;
    194 };
    195 
    196 #ifndef __cplusplus
    197 typedef struct CMAPEncodingSubtable32 CMAPEncodingSubtable32;
    198 #endif
    199 
    200 struct CMAPGroup
    201 {
    202     le_uint32   startCharCode;
    203     le_uint32   endCharCode;
    204     le_uint32   startGlyphCode;
    205 };
    206 
    207 #ifndef __cplusplus
    208 typedef struct CMAPGroup CMAPGroup;
    209 #endif
    210 
    211 #ifdef __cplusplus
    212 struct CMAPFormat8Encoding : CMAPEncodingSubtable32
    213 {
    214     le_uint32   is32[65536/32];
    215     le_uint32   nGroups;
    216     CMAPGroup   groups[ANY_NUMBER];
    217 };
    218 #else
    219 struct CMAPFormat8Encoding
    220 {
    221 	CMAPEncodingSubtable32 base;
    222 
    223     le_uint32   is32[65536/32];
    224     le_uint32   nGroups;
    225     CMAPGroup   groups[ANY_NUMBER];
    226 };
    227 
    228 typedef struct CMAPFormat8Encoding CMAPFormat8Encoding;
    229 #endif
    230 
    231 #ifdef __cplusplus
    232 struct CMAPFormat10Encoding : CMAPEncodingSubtable32
    233 {
    234     le_uint32   startCharCode;
    235     le_uint32   numCharCodes;
    236     le_uint16   glyphs[ANY_NUMBER];
    237 };
    238 #else
    239 struct CMAPFormat10Encoding
    240 {
    241 	CMAPEncodingSubtable32 base;
    242 
    243     le_uint32   startCharCode;
    244     le_uint32   numCharCodes;
    245     le_uint16   glyphs[ANY_NUMBER];
    246 };
    247 
    248 typedef struct CMAPFormat10Encoding CMAPFormat10Encoding;
    249 #endif
    250 
    251 #ifdef __cplusplus
    252 struct CMAPFormat12Encoding : CMAPEncodingSubtable32
    253 {
    254     le_uint32   nGroups;
    255     CMAPGroup   groups[ANY_NUMBER];
    256 };
    257 #else
    258 struct CMAPFormat12Encoding
    259 {
    260 	CMAPEncodingSubtable32 base;
    261 
    262     le_uint32   nGroups;
    263     CMAPGroup   groups[ANY_NUMBER];
    264 };
    265 
    266 typedef struct CMAPFormat12Encoding CMAPFormat12Encoding;
    267 #endif
    268 
    269 typedef le_int32 fixed;
    270 
    271 struct BigDate
    272 {
    273     le_uint32   bc;
    274     le_uint32   ad;
    275 };
    276 
    277 #ifndef __cplusplus
    278 typedef struct BigDate BigDate;
    279 #endif
    280 
    281 struct HEADTable
    282 {
    283     fixed       version;
    284     fixed       fontRevision;
    285     le_uint32   checksumAdjustment;
    286     le_uint32   magicNumber;
    287     le_uint16   flags;
    288     le_uint16   unitsPerEm;
    289     BigDate     created;
    290     BigDate     modified;
    291     le_int16    xMin;
    292     le_int16    yMin;
    293     le_int16    xMax;
    294     le_int16    yMax;
    295     le_int16    lowestRecPPEM;
    296     le_int16    fontDirectionHint;
    297     le_int16    indexToLocFormat;
    298     le_int16    glyphDataFormat;
    299 };
    300 
    301 #ifndef __cplusplus
    302 typedef struct HEADTable HEADTable;
    303 #endif
    304 
    305 struct MAXPTable
    306 {
    307     fixed       version;
    308     le_uint16   numGlyphs;
    309     le_uint16   maxPoints;
    310     le_uint16   maxContours;
    311     le_uint16   maxComponentPoints;
    312     le_uint16   maxComponentContours;
    313     le_uint16   maxZones;
    314     le_uint16   maxTwilightPoints;
    315     le_uint16   maxStorage;
    316     le_uint16   maxFunctionDefs;
    317     le_uint16   maxInstructionDefs;
    318     le_uint16   maxStackElements;
    319     le_uint16   maxSizeOfInstructions;
    320     le_uint16   maxComponentElements;
    321     le_uint16   maxComponentDepth;
    322 };
    323 
    324 #ifndef __cplusplus
    325 typedef struct MAXPTable MAXPTable;
    326 #endif
    327 
    328 struct HHEATable
    329 {
    330     fixed       version;
    331     le_int16    ascent;
    332     le_int16    descent;
    333     le_int16    lineGap;
    334     le_uint16   advanceWidthMax;
    335     le_int16    minLeftSideBearing;
    336     le_int16    minRightSideBearing;
    337     le_int16    xMaxExtent;
    338     le_int16    caretSlopeRise;
    339     le_int16    caretSlopeRun;
    340     le_int16    caretOffset;
    341     le_int16    reserved1;
    342     le_int16    reserved2;
    343     le_int16    reserved3;
    344     le_int16    reserved4;
    345     le_int16    metricDataFormat;
    346     le_uint16   numOfLongHorMetrics;
    347 };
    348 
    349 #ifndef __cplusplus
    350 typedef struct HHEATable HHEATable;
    351 #endif
    352 
    353 struct LongHorMetric
    354 {
    355     le_uint16   advanceWidth;
    356     le_int16    leftSideBearing;
    357 };
    358 
    359 #ifndef __cplusplus
    360 typedef struct LongHorMetric LongHorMetric;
    361 #endif
    362 
    363 struct HMTXTable
    364 {
    365     LongHorMetric hMetrics[ANY_NUMBER];       /* ANY_NUMBER = numOfLongHorMetrics from hhea table */
    366 /* le_int16        leftSideBearing[ANY_NUMBER];  ANY_NUMBER = numGlyphs - numOfLongHorMetrics     */
    367 };
    368 
    369 #ifndef __cplusplus
    370 typedef struct HMTXTable HMTXTable;
    371 #endif
    372 
    373 enum PlatformID
    374 {
    375     PLATFORM_UNICODE = 0,
    376     PLATFORM_MACINTOSH = 1,
    377     PLATFORM_ISO       = 2,
    378     PLATFORM_MICROSOFT = 3,
    379     PLATFORM_CUSTOM    = 4
    380 };
    381 
    382 enum MacintoshEncodingID
    383 {
    384     MACINTOSH_ROMAN = 0
    385 };
    386 
    387 enum MacintoshLanguageID
    388 {
    389     MACINTOSH_ENGLISH = 0
    390 };
    391 
    392 enum MicrosoftEncodingID
    393 {
    394     MICROSOFT_UNICODE_BMP  =  1,
    395     MICROSOFT_UNICODE_FULL = 10
    396 };
    397 
    398 enum MicrosoftLanguageID
    399 {
    400     MICROSOFT_ENGLISH = 0x409
    401 };
    402 
    403 enum NameID
    404 {
    405     NAME_COPYRIGHT_NOTICE     = 0,
    406     NAME_FONT_FAMILY          = 1,
    407     NAME_FONT_SUB_FAMILY      = 2,
    408     NAME_UNIQUE_FONT_ID       = 3,
    409     NAME_FULL_FONT_NAME       = 4,
    410     NAME_VERSION_STRING       = 5,
    411     NAME_POSTSCRIPT_NAME      = 6,
    412     NAME_TRADEMARK            = 7,
    413     NAME_MANUFACTURER         = 8,
    414     NAME_DESIGNER             = 9,
    415     NAME_DESCRIPTION          = 10,
    416     NAME_VENDOR_URL           = 11,
    417     NAME_DESIGNER_URL         = 12,
    418     NAME_LICENSE_DESCRIPTION  = 13,
    419     NAME_LICENSE_URL          = 14,
    420     NAME_RESERVED             = 15,
    421     NAME_PREFERRED_FAMILY     = 16,
    422     NAME_PREFERRED_SUB_FAMILY = 17,
    423     NAME_COMPATIBLE_FULL      = 18,
    424     NAME_SAMPLE_TEXT          = 19,
    425     NAME_POSTSCRIPT_CID       = 20
    426 };
    427 
    428 struct NameRecord
    429 {
    430     le_uint16 platformID;
    431     le_uint16 encodingID;
    432     le_uint16 languageID;
    433     le_uint16 nameID;
    434     le_uint16 length;
    435     le_uint16 offset;
    436 };
    437 
    438 #ifndef __cplusplus
    439 typedef struct NameRecord NameRecord;
    440 #endif
    441 
    442 struct NAMETable
    443 {
    444     le_uint16 version;
    445     le_uint16 count;
    446     le_uint16 stringOffset;
    447     NameRecord nameRecords[ANY_NUMBER];
    448 };
    449 
    450 #ifndef __cplusplus
    451 typedef struct NAMETable NAMETable;
    452 #endif
    453 
    454 #endif
    455 
    456