1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* ftccmap.h */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* FreeType charmap cache (specification). */ 6*37da2899SCharles.Forsyth /* */ 7*37da2899SCharles.Forsyth /* Copyright 2000-2001 by */ 8*37da2899SCharles.Forsyth /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9*37da2899SCharles.Forsyth /* */ 10*37da2899SCharles.Forsyth /* This file is part of the FreeType project, and may only be used, */ 11*37da2899SCharles.Forsyth /* modified, and distributed under the terms of the FreeType project */ 12*37da2899SCharles.Forsyth /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13*37da2899SCharles.Forsyth /* this file you indicate that you have read the license and */ 14*37da2899SCharles.Forsyth /* understand and accept it fully. */ 15*37da2899SCharles.Forsyth /* */ 16*37da2899SCharles.Forsyth /***************************************************************************/ 17*37da2899SCharles.Forsyth 18*37da2899SCharles.Forsyth 19*37da2899SCharles.Forsyth #ifndef __FTCCMAP_H__ 20*37da2899SCharles.Forsyth #define __FTCCMAP_H__ 21*37da2899SCharles.Forsyth 22*37da2899SCharles.Forsyth #include <ft2build.h> 23*37da2899SCharles.Forsyth #include FT_CACHE_H 24*37da2899SCharles.Forsyth 25*37da2899SCharles.Forsyth 26*37da2899SCharles.Forsyth FT_BEGIN_HEADER 27*37da2899SCharles.Forsyth 28*37da2899SCharles.Forsyth 29*37da2899SCharles.Forsyth /*************************************************************************/ 30*37da2899SCharles.Forsyth /* */ 31*37da2899SCharles.Forsyth /* <Section> */ 32*37da2899SCharles.Forsyth /* cache_subsystem */ 33*37da2899SCharles.Forsyth /* */ 34*37da2899SCharles.Forsyth /*************************************************************************/ 35*37da2899SCharles.Forsyth 36*37da2899SCharles.Forsyth /*************************************************************************/ 37*37da2899SCharles.Forsyth /* */ 38*37da2899SCharles.Forsyth /* @type: */ 39*37da2899SCharles.Forsyth /* FTC_CmapCache */ 40*37da2899SCharles.Forsyth /* */ 41*37da2899SCharles.Forsyth /* @description: */ 42*37da2899SCharles.Forsyth /* An opaque handle used to manager a charmap cache. This cache is */ 43*37da2899SCharles.Forsyth /* to hold character codes -> glyph indices mappings. */ 44*37da2899SCharles.Forsyth /* */ 45*37da2899SCharles.Forsyth typedef struct FTC_CMapCacheRec_* FTC_CMapCache; 46*37da2899SCharles.Forsyth 47*37da2899SCharles.Forsyth 48*37da2899SCharles.Forsyth /*************************************************************************/ 49*37da2899SCharles.Forsyth /* */ 50*37da2899SCharles.Forsyth /* @type: */ 51*37da2899SCharles.Forsyth /* FTC_CMapDesc */ 52*37da2899SCharles.Forsyth /* */ 53*37da2899SCharles.Forsyth /* @description: */ 54*37da2899SCharles.Forsyth /* A handle to an @FTC_CMapDescRec structure used to describe a given */ 55*37da2899SCharles.Forsyth /* charmap in a charmap cache. */ 56*37da2899SCharles.Forsyth /* */ 57*37da2899SCharles.Forsyth /* Each @FTC_CMapDesc describes which charmap (of which @FTC_Face) we */ 58*37da2899SCharles.Forsyth /* want to use in @FTC_CMapCache_Lookup. */ 59*37da2899SCharles.Forsyth /* */ 60*37da2899SCharles.Forsyth typedef struct FTC_CMapDescRec_* FTC_CMapDesc; 61*37da2899SCharles.Forsyth 62*37da2899SCharles.Forsyth 63*37da2899SCharles.Forsyth /*************************************************************************/ 64*37da2899SCharles.Forsyth /* */ 65*37da2899SCharles.Forsyth /* @enum: */ 66*37da2899SCharles.Forsyth /* FTC_CMapType */ 67*37da2899SCharles.Forsyth /* */ 68*37da2899SCharles.Forsyth /* @description: */ 69*37da2899SCharles.Forsyth /* The list of valid @FTC_CMap types. They indicate how we want to */ 70*37da2899SCharles.Forsyth /* address a charmap within an @FTC_FaceID. */ 71*37da2899SCharles.Forsyth /* */ 72*37da2899SCharles.Forsyth /* @values: */ 73*37da2899SCharles.Forsyth /* FTC_CMAP_BY_INDEX :: */ 74*37da2899SCharles.Forsyth /* Address a charmap by its index in the corresponding @FT_Face. */ 75*37da2899SCharles.Forsyth /* */ 76*37da2899SCharles.Forsyth /* FTC_CMAP_BY_ENCODING :: */ 77*37da2899SCharles.Forsyth /* Use a @FT_Face charmap that corresponds to a given encoding. */ 78*37da2899SCharles.Forsyth /* */ 79*37da2899SCharles.Forsyth /* FTC_CMAP_BY_ID :: */ 80*37da2899SCharles.Forsyth /* Use an @FT_Face charmap that corresponds to a given */ 81*37da2899SCharles.Forsyth /* (platform,encoding) ID. See @FTC_CMapIdRec. */ 82*37da2899SCharles.Forsyth /* */ 83*37da2899SCharles.Forsyth typedef enum FTC_CMapType_ 84*37da2899SCharles.Forsyth { 85*37da2899SCharles.Forsyth FTC_CMAP_BY_INDEX = 0, 86*37da2899SCharles.Forsyth FTC_CMAP_BY_ENCODING = 1, 87*37da2899SCharles.Forsyth FTC_CMAP_BY_ID = 2 88*37da2899SCharles.Forsyth 89*37da2899SCharles.Forsyth } FTC_CMapType; 90*37da2899SCharles.Forsyth 91*37da2899SCharles.Forsyth 92*37da2899SCharles.Forsyth /*************************************************************************/ 93*37da2899SCharles.Forsyth /* */ 94*37da2899SCharles.Forsyth /* @struct: */ 95*37da2899SCharles.Forsyth /* FTC_CMapIdRec */ 96*37da2899SCharles.Forsyth /* */ 97*37da2899SCharles.Forsyth /* @description: */ 98*37da2899SCharles.Forsyth /* A short structure to identify a charmap by a (platform,encoding) */ 99*37da2899SCharles.Forsyth /* pair of values. */ 100*37da2899SCharles.Forsyth /* */ 101*37da2899SCharles.Forsyth /* @fields: */ 102*37da2899SCharles.Forsyth /* platform :: The platform ID. */ 103*37da2899SCharles.Forsyth /* */ 104*37da2899SCharles.Forsyth /* encoding :: The encoding ID. */ 105*37da2899SCharles.Forsyth /* */ 106*37da2899SCharles.Forsyth typedef struct FTC_CMapIdRec_ 107*37da2899SCharles.Forsyth { 108*37da2899SCharles.Forsyth FT_UInt platform; 109*37da2899SCharles.Forsyth FT_UInt encoding; 110*37da2899SCharles.Forsyth 111*37da2899SCharles.Forsyth } FTC_CMapIdRec; 112*37da2899SCharles.Forsyth 113*37da2899SCharles.Forsyth 114*37da2899SCharles.Forsyth /*************************************************************************/ 115*37da2899SCharles.Forsyth /* */ 116*37da2899SCharles.Forsyth /* @struct: */ 117*37da2899SCharles.Forsyth /* FTC_CMapDescRec */ 118*37da2899SCharles.Forsyth /* */ 119*37da2899SCharles.Forsyth /* @description: */ 120*37da2899SCharles.Forsyth /* A structure to describe a given charmap to @FTC_CMapCache. */ 121*37da2899SCharles.Forsyth /* */ 122*37da2899SCharles.Forsyth /* @fields: */ 123*37da2899SCharles.Forsyth /* face_id :: @FTC_FaceID of the face this charmap belongs to. */ 124*37da2899SCharles.Forsyth /* */ 125*37da2899SCharles.Forsyth /* type :: The type of charmap, see @FTC_CMapType. */ 126*37da2899SCharles.Forsyth /* */ 127*37da2899SCharles.Forsyth /* u.index :: For @FTC_CMAP_BY_INDEX types, this is the charmap */ 128*37da2899SCharles.Forsyth /* index (within a @FT_Face) we want to use. */ 129*37da2899SCharles.Forsyth /* */ 130*37da2899SCharles.Forsyth /* u.encoding :: For @FTC_CMAP_BY_ENCODING types, this is the charmap */ 131*37da2899SCharles.Forsyth /* encoding we want to use. see @FT_Encoding. */ 132*37da2899SCharles.Forsyth /* */ 133*37da2899SCharles.Forsyth /* u.id :: For @FTC_CMAP_BY_ID types, this is the */ 134*37da2899SCharles.Forsyth /* (platform,encoding) pair we want to use. see */ 135*37da2899SCharles.Forsyth /* @FTC_CMapIdRec and @FT_CharMapRec. */ 136*37da2899SCharles.Forsyth /* */ 137*37da2899SCharles.Forsyth typedef struct FTC_CMapDescRec_ 138*37da2899SCharles.Forsyth { 139*37da2899SCharles.Forsyth FTC_FaceID face_id; 140*37da2899SCharles.Forsyth FTC_CMapType type; 141*37da2899SCharles.Forsyth 142*37da2899SCharles.Forsyth union 143*37da2899SCharles.Forsyth { 144*37da2899SCharles.Forsyth FT_UInt index; 145*37da2899SCharles.Forsyth FT_Encoding encoding; 146*37da2899SCharles.Forsyth FTC_CMapIdRec id; 147*37da2899SCharles.Forsyth 148*37da2899SCharles.Forsyth } u; 149*37da2899SCharles.Forsyth 150*37da2899SCharles.Forsyth } FTC_CMapDescRec; 151*37da2899SCharles.Forsyth 152*37da2899SCharles.Forsyth 153*37da2899SCharles.Forsyth /*************************************************************************/ 154*37da2899SCharles.Forsyth /* */ 155*37da2899SCharles.Forsyth /* @function: */ 156*37da2899SCharles.Forsyth /* FTC_CMapCache_New */ 157*37da2899SCharles.Forsyth /* */ 158*37da2899SCharles.Forsyth /* @description: */ 159*37da2899SCharles.Forsyth /* Creates a new charmap cache. */ 160*37da2899SCharles.Forsyth /* */ 161*37da2899SCharles.Forsyth /* @input: */ 162*37da2899SCharles.Forsyth /* manager :: A handle to the cache manager. */ 163*37da2899SCharles.Forsyth /* */ 164*37da2899SCharles.Forsyth /* @output: */ 165*37da2899SCharles.Forsyth /* acache :: A new cache handle. NULL in case of error. */ 166*37da2899SCharles.Forsyth /* */ 167*37da2899SCharles.Forsyth /* @return: */ 168*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 169*37da2899SCharles.Forsyth /* */ 170*37da2899SCharles.Forsyth /* @note: */ 171*37da2899SCharles.Forsyth /* Like all other caches, this one will be destroyed with the cache */ 172*37da2899SCharles.Forsyth /* manager. */ 173*37da2899SCharles.Forsyth /* */ 174*37da2899SCharles.Forsyth FT_EXPORT( FT_Error ) 175*37da2899SCharles.Forsyth FTC_CMapCache_New( FTC_Manager manager, 176*37da2899SCharles.Forsyth FTC_CMapCache *acache ); 177*37da2899SCharles.Forsyth 178*37da2899SCharles.Forsyth 179*37da2899SCharles.Forsyth /*************************************************************************/ 180*37da2899SCharles.Forsyth /* */ 181*37da2899SCharles.Forsyth /* @function: */ 182*37da2899SCharles.Forsyth /* FTC_CMapCache_Lookup */ 183*37da2899SCharles.Forsyth /* */ 184*37da2899SCharles.Forsyth /* @description: */ 185*37da2899SCharles.Forsyth /* Translates a character code into a glyph index, using the charmap */ 186*37da2899SCharles.Forsyth /* cache. */ 187*37da2899SCharles.Forsyth /* */ 188*37da2899SCharles.Forsyth /* @input: */ 189*37da2899SCharles.Forsyth /* cache :: A charmap cache handle. */ 190*37da2899SCharles.Forsyth /* */ 191*37da2899SCharles.Forsyth /* cmap_desc :: A charmap descriptor handle. */ 192*37da2899SCharles.Forsyth /* */ 193*37da2899SCharles.Forsyth /* char_code :: The character code (in the corresponding charmap). */ 194*37da2899SCharles.Forsyth /* */ 195*37da2899SCharles.Forsyth /* @return: */ 196*37da2899SCharles.Forsyth /* Glyph index. 0 means "no glyph". */ 197*37da2899SCharles.Forsyth /* */ 198*37da2899SCharles.Forsyth /* @note: */ 199*37da2899SCharles.Forsyth /* This function doesn't return @FTC_Node handles, since there is no */ 200*37da2899SCharles.Forsyth /* real use for them with typical uses of charmaps. */ 201*37da2899SCharles.Forsyth /* */ 202*37da2899SCharles.Forsyth FT_EXPORT( FT_UInt ) 203*37da2899SCharles.Forsyth FTC_CMapCache_Lookup( FTC_CMapCache cache, 204*37da2899SCharles.Forsyth FTC_CMapDesc cmap_desc, 205*37da2899SCharles.Forsyth FT_UInt32 char_code ); 206*37da2899SCharles.Forsyth 207*37da2899SCharles.Forsyth /* */ 208*37da2899SCharles.Forsyth 209*37da2899SCharles.Forsyth 210*37da2899SCharles.Forsyth FT_END_HEADER 211*37da2899SCharles.Forsyth 212*37da2899SCharles.Forsyth 213*37da2899SCharles.Forsyth #endif /* __FTCCMAP_H__ */ 214*37da2899SCharles.Forsyth 215*37da2899SCharles.Forsyth 216*37da2899SCharles.Forsyth /* END */ 217