0,0 → 1,169 |
/******************************************************************* |
* |
* ttcmap.h 1.0 |
* |
* TrueType Character Mappings |
* |
* Copyright 1996-1999 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; |
UShort numGlyphId; /* control value */ |
}; |
|
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; |
UShort numGlyphId; /* control value */ |
}; |
|
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 */ |