forked from KolibriOS/kolibrios
6496d04506
This version of menuetlibc was taken from revision 4743, right before I made any changes git-svn-id: svn://kolibrios.org@4973 a494cfbc-eb01-0410-851d-a64ba20cac60
170 lines
3.7 KiB
C
170 lines
3.7 KiB
C
/*******************************************************************
|
|
*
|
|
* 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 */
|