/******************************************************************* * * ttcmap.h 1.0 * * TrueType Character Mappings * * Copyright 1996-1998 by * David Turner, Robert Wilhelm, and Werner Lemberg. * * This file is part of the FreeType project, and may only be used * modified and distributed under the terms of the FreeType project * license, LICENSE.TXT. By continuing to use, modify, or distribute * this file you indicate that you have read the license and * understand and accept it fully. * * ******************************************************************/ #ifndef TTCMAP_H #define TTCMAP_H #include "ttconfig.h" #include "tttypes.h" #ifdef __cplusplus extern "C" { #endif /* format 0 */ struct TCMap0_ { PByte glyphIdArray; }; typedef struct TCMap0_ TCMap0; typedef TCMap0* PCMap0; /* format 2 */ struct TCMap2SubHeader_ { UShort firstCode; /* first valid low byte */ UShort entryCount; /* number of valid low bytes */ Short idDelta; /* delta value to glyphIndex */ UShort idRangeOffset; /* offset from here to 1st code */ }; typedef struct TCMap2SubHeader_ TCMap2SubHeader; typedef TCMap2SubHeader* PCMap2SubHeader; struct TCMap2_ { PUShort subHeaderKeys; /* high byte mapping table */ /* value = subHeader index * 8 */ PCMap2SubHeader subHeaders; PUShort glyphIdArray; }; typedef struct TCMap2_ TCMap2; typedef TCMap2* PCMap2; /* format 4 */ struct TCMap4Segment_ { UShort endCount; UShort startCount; Short idDelta; /* in the specs defined as UShort but the example there gives negative values... */ UShort idRangeOffset; }; typedef struct TCMap4Segment_ TCMap4Segment; typedef TCMap4Segment* PCMap4Segment; struct TCMap4_ { UShort segCountX2; /* number of segments * 2 */ UShort searchRange; /* these parameters can be used */ UShort entrySelector; /* for a binary search */ UShort rangeShift; PCMap4Segment segments; PUShort glyphIdArray; }; typedef struct TCMap4_ TCMap4; typedef TCMap4* PCMap4; /* format 6 */ struct TCMap6_ { UShort firstCode; /* first character code of subrange */ UShort entryCount; /* number of character codes in subrange */ PUShort glyphIdArray; }; typedef struct TCMap6_ TCMap6; typedef TCMap6* PCMap6; /* charmap table */ struct TCMapTable_ { UShort platformID; UShort platformEncodingID; UShort format; UShort length; UShort version; Bool loaded; ULong offset; union { TCMap0 cmap0; TCMap2 cmap2; TCMap4 cmap4; TCMap6 cmap6; } c; }; typedef struct TCMapTable_ TCMapTable; typedef TCMapTable* PCMapTable; /* Load character mappings directory when face is loaded. */ /* The mappings themselves are only loaded on demand. */ LOCAL_DEF TT_Error CharMap_Load( PCMapTable table, TT_Stream input ); /* Destroy one character mapping table */ LOCAL_DEF TT_Error CharMap_Free( PCMapTable table ); /* Use character mapping table to perform mapping */ LOCAL_DEF UShort CharMap_Index( PCMapTable cmap, UShort charCode ); /* NOTE: The PFace type isn't defined at this point */ #ifdef __cplusplus } #endif #endif /* TTCMAP_H */ /* END */