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