17d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod/*************************************************************************** 27d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod* 37d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod* Copyright (C) 1998-2011, International Business Machines 47d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod* Corporation and others. All Rights Reserved. 57d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod* 67d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod************************************************************************/ 77d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 87d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __SFNT_H 97d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#define __SFNT_H 107d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 117d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#include "layout/LETypes.h" 122eef71737ea29ffadbb5a2be4a898b44f53f66acBehdad Esfahbod#include "letest.h" 132eef71737ea29ffadbb5a2be4a898b44f53f66acBehdad Esfahbod 142eef71737ea29ffadbb5a2be4a898b44f53f66acBehdad EsfahbodHB_BEGIN_VISIBILITY 157d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 167d242364ea647f655a7092bda25f9a10774c57f5Behdad EsfahbodU_NAMESPACE_USE 177d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 187d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef ANY_NUMBER 197d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#define ANY_NUMBER 1 207d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 217d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 227d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct DirectoryEntry 237d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 247d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 tag; 257d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 checksum; 267d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 offset; 277d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 length; 287d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 297d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 307d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 317d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct DirectoryEntry DirectoryEntry; 327d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 337d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 347d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct SFNTDirectory 357d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 367d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 scalerType; 377d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 numTables; 387d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 searchRange; 397d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 entrySelector; 407d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 rangeShift; 417d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod DirectoryEntry tableDirectory[ANY_NUMBER]; 427d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 437d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 447d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 457d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct SFNTDirectory SFNTDirectory; 467d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 477d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 487d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 497d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPEncodingSubtableHeader 507d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 517d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 platformID; 527d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 platformSpecificID; 537d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 encodingOffset; 547d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 557d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 567d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 577d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPEncodingSubtableHeader CMAPEncodingSubtableHeader; 587d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 597d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 607d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPTable 617d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 627d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 version; 637d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 numberSubtables; 647d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER]; 657d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 667d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 677d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 687d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPTable CMAPTable; 697d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 707d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 717d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPEncodingSubtable 727d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 737d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 format; 747d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 length; 757d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 language; 767d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 777d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 787d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 797d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPEncodingSubtable CMAPEncodingSubtable; 807d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 817d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 827d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifdef __cplusplus 837d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat0Encoding : CMAPEncodingSubtable 847d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 857d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint8 glyphIndexArray[256]; 867d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 877d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#else 887d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat0Encoding 897d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 907d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPEncodingSubtable base; 917d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 927d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint8 glyphIndexArray[256]; 937d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 947d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 957d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPFormat0Encoding CMAPFormat0Encoding; 967d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 977d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 987d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat2Subheader 997d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1007d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 firstCode; 1017d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 entryCount; 1027d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 idDelta; 1037d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 idRangeOffset; 1047d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 1057d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1067d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 1077d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPFormat2Subheader CMAPFormat2Subheader; 1087d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 1097d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1107d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifdef __cplusplus 1117d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat2Encoding : CMAPEncodingSubtable 1127d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1137d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 subHeadKeys[256]; 1147d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPFormat2Subheader subheaders[ANY_NUMBER]; 1157d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 1167d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#else 1177d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat2Encoding 1187d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1197d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPEncodingSubtable base; 1207d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1217d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 subHeadKeys[256]; 1227d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPFormat2Subheader subheaders[ANY_NUMBER]; 1237d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 1247d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1257d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPFormat2Encoding CMAPFormat2Encoding; 1267d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 1277d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1287d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifdef __cplusplus 1297d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat4Encoding : CMAPEncodingSubtable 1307d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1317d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 segCountX2; 1327d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 searchRange; 1337d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 entrySelector; 1347d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 rangeShift; 1357d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 endCodes[ANY_NUMBER]; 1367d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod/* 1377d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 reservedPad; 1387d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 startCodes[ANY_NUMBER]; 1397d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 idDelta[ANY_NUMBER]; 1407d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 idRangeOffset[ANY_NUMBER]; 1417d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 glyphIndexArray[ANY_NUMBER]; 1427d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod*/ 1437d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 1447d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#else 1457d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat4Encoding 1467d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1477d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPEncodingSubtable base; 1487d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1497d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 segCountX2; 1507d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 searchRange; 1517d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 entrySelector; 1527d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 rangeShift; 1537d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 endCodes[ANY_NUMBER]; 1547d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod/* 1557d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// le_uint16 reservedPad; 1567d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// le_uint16 startCodes[ANY_NUMBER]; 1577d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// le_uint16 idDelta[ANY_NUMBER]; 1587d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// le_uint16 idRangeOffset[ANY_NUMBER]; 1597d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod// le_uint16 glyphIndexArray[ANY_NUMBER]; 1607d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod*/ 1617d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 1627d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1637d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPFormat4Encoding CMAPFormat4Encoding; 1647d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 1657d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1667d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifdef __cplusplus 1677d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat6Encoding : CMAPEncodingSubtable 1687d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1697d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 firstCode; 1707d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 entryCount; 1717d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 glyphIndexArray[ANY_NUMBER]; 1727d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 1737d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#else 1747d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat6Encoding 1757d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1767d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPEncodingSubtable base; 1777d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1787d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 firstCode; 1797d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 entryCount; 1807d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 glyphIndexArray[ANY_NUMBER]; 1817d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 1827d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1837d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPFormat6Encoding CMAPFormat6Encoding; 1847d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 1857d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1867d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPEncodingSubtable32 1877d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1887d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 format; 1897d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 length; 1907d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 language; 1917d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 1927d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1937d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 1947d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPEncodingSubtable32 CMAPEncodingSubtable32; 1957d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 1967d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 1977d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPGroup 1987d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 1997d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 startCharCode; 2007d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 endCharCode; 2017d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 startGlyphCode; 2027d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 2037d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2047d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 2057d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPGroup CMAPGroup; 2067d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 2077d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2087d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifdef __cplusplus 2097d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat8Encoding : CMAPEncodingSubtable32 2107d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2117d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 is32[65536/32]; 2127d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 nGroups; 2137d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPGroup groups[ANY_NUMBER]; 2147d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 2157d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#else 2167d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat8Encoding 2177d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2187d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPEncodingSubtable32 base; 2197d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2207d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 is32[65536/32]; 2217d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 nGroups; 2227d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPGroup groups[ANY_NUMBER]; 2237d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 2247d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2257d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPFormat8Encoding CMAPFormat8Encoding; 2267d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 2277d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2287d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifdef __cplusplus 2297d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat10Encoding : CMAPEncodingSubtable32 2307d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2317d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 startCharCode; 2327d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 numCharCodes; 2337d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 glyphs[ANY_NUMBER]; 2347d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 2357d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#else 2367d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat10Encoding 2377d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2387d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPEncodingSubtable32 base; 2397d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2407d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 startCharCode; 2417d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 numCharCodes; 2427d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 glyphs[ANY_NUMBER]; 2437d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 2447d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2457d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPFormat10Encoding CMAPFormat10Encoding; 2467d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 2477d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2487d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifdef __cplusplus 2497d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat12Encoding : CMAPEncodingSubtable32 2507d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2517d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 nGroups; 2527d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPGroup groups[ANY_NUMBER]; 2537d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 2547d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#else 2557d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct CMAPFormat12Encoding 2567d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2577d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPEncodingSubtable32 base; 2587d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2597d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 nGroups; 2607d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod CMAPGroup groups[ANY_NUMBER]; 2617d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 2627d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2637d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct CMAPFormat12Encoding CMAPFormat12Encoding; 2647d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 2657d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2667d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef le_int32 fixed; 2677d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2687d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct BigDate 2697d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2707d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 bc; 2717d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 ad; 2727d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 2737d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2747d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 2757d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct BigDate BigDate; 2767d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 2777d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2787d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct HEADTable 2797d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 2807d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod fixed version; 2817d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod fixed fontRevision; 2827d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 checksumAdjustment; 2837d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint32 magicNumber; 2847d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 flags; 2857d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 unitsPerEm; 2867d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod BigDate created; 2877d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod BigDate modified; 2887d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 xMin; 2897d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 yMin; 2907d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 xMax; 2917d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 yMax; 2927d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 lowestRecPPEM; 2937d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 fontDirectionHint; 2947d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 indexToLocFormat; 2957d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 glyphDataFormat; 2967d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 2977d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 2987d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 2997d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct HEADTable HEADTable; 3007d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 3017d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3027d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct MAXPTable 3037d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 3047d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod fixed version; 3057d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 numGlyphs; 3067d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxPoints; 3077d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxContours; 3087d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxComponentPoints; 3097d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxComponentContours; 3107d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxZones; 3117d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxTwilightPoints; 3127d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxStorage; 3137d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxFunctionDefs; 3147d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxInstructionDefs; 3157d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxStackElements; 3167d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxSizeOfInstructions; 3177d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxComponentElements; 3187d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 maxComponentDepth; 3197d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 3207d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3217d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 3227d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct MAXPTable MAXPTable; 3237d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 3247d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3257d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct HHEATable 3267d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 3277d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod fixed version; 3287d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 ascent; 3297d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 descent; 3307d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 lineGap; 3317d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 advanceWidthMax; 3327d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 minLeftSideBearing; 3337d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 minRightSideBearing; 3347d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 xMaxExtent; 3357d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 caretSlopeRise; 3367d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 caretSlopeRun; 3377d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 caretOffset; 3387d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 reserved1; 3397d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 reserved2; 3407d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 reserved3; 3417d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 reserved4; 3427d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 metricDataFormat; 3437d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 numOfLongHorMetrics; 3447d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 3457d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3467d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 3477d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct HHEATable HHEATable; 3487d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 3497d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3507d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct LongHorMetric 3517d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 3527d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 advanceWidth; 3537d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_int16 leftSideBearing; 3547d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 3557d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3567d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 3577d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct LongHorMetric LongHorMetric; 3587d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 3597d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3607d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct HMTXTable 3617d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 3627d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod LongHorMetric hMetrics[ANY_NUMBER]; /* ANY_NUMBER = numOfLongHorMetrics from hhea table */ 3637d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod/* le_int16 leftSideBearing[ANY_NUMBER]; ANY_NUMBER = numGlyphs - numOfLongHorMetrics */ 3647d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 3657d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3667d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 3677d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct HMTXTable HMTXTable; 3687d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 3697d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3707d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodenum PlatformID 3717d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 3727d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod PLATFORM_UNICODE = 0, 3737d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod PLATFORM_MACINTOSH = 1, 3747d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod PLATFORM_ISO = 2, 3757d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod PLATFORM_MICROSOFT = 3, 3767d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod PLATFORM_CUSTOM = 4 3777d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 3787d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3797d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodenum MacintoshEncodingID 3807d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 3817d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod MACINTOSH_ROMAN = 0 3827d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 3837d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3847d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodenum MacintoshLanguageID 3857d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 3867d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod MACINTOSH_ENGLISH = 0 3877d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 3887d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3897d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodenum MicrosoftEncodingID 3907d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 3917d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod MICROSOFT_UNICODE_BMP = 1, 3927d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod MICROSOFT_UNICODE_FULL = 10 3937d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 3947d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 3957d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodenum MicrosoftLanguageID 3967d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 3977d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod MICROSOFT_ENGLISH = 0x409 3987d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 3997d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 4007d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodenum NameID 4017d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 4027d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_COPYRIGHT_NOTICE = 0, 4037d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_FONT_FAMILY = 1, 4047d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_FONT_SUB_FAMILY = 2, 4057d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_UNIQUE_FONT_ID = 3, 4067d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_FULL_FONT_NAME = 4, 4077d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_VERSION_STRING = 5, 4087d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_POSTSCRIPT_NAME = 6, 4097d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_TRADEMARK = 7, 4107d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_MANUFACTURER = 8, 4117d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_DESIGNER = 9, 4127d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_DESCRIPTION = 10, 4137d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_VENDOR_URL = 11, 4147d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_DESIGNER_URL = 12, 4157d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_LICENSE_DESCRIPTION = 13, 4167d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_LICENSE_URL = 14, 4177d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_RESERVED = 15, 4187d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_PREFERRED_FAMILY = 16, 4197d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_PREFERRED_SUB_FAMILY = 17, 4207d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_COMPATIBLE_FULL = 18, 4217d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_SAMPLE_TEXT = 19, 4227d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NAME_POSTSCRIPT_CID = 20 4237d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 4247d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 4257d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct NameRecord 4267d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 4277d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 platformID; 4287d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 encodingID; 4297d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 languageID; 4307d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 nameID; 4317d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 length; 4327d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 offset; 4337d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 4347d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 4357d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 4367d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct NameRecord NameRecord; 4377d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 4387d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 4397d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodstruct NAMETable 4407d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod{ 4417d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 version; 4427d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 count; 4437d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod le_uint16 stringOffset; 4447d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod NameRecord nameRecords[ANY_NUMBER]; 4457d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod}; 4467d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 4477d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#ifndef __cplusplus 4487d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbodtypedef struct NAMETable NAMETable; 4497d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod#endif 4507d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 4512eef71737ea29ffadbb5a2be4a898b44f53f66acBehdad EsfahbodHB_END_VISIBILITY 4527d242364ea647f655a7092bda25f9a10774c57f5Behdad Esfahbod 4532eef71737ea29ffadbb5a2be4a898b44f53f66acBehdad Esfahbod#endif 454