687 |
|
|
688 |
|
|
689 |
static void |
static void |
690 |
|
ft_cmap_done_internal( FT_CMap cmap ); |
691 |
|
|
692 |
|
|
693 |
|
static void |
694 |
destroy_charmaps( FT_Face face, |
destroy_charmaps( FT_Face face, |
695 |
FT_Memory memory ) |
FT_Memory memory ) |
696 |
{ |
{ |
702 |
FT_CMap cmap = FT_CMAP( face->charmaps[n] ); |
FT_CMap cmap = FT_CMAP( face->charmaps[n] ); |
703 |
|
|
704 |
|
|
705 |
FT_CMap_Done( cmap ); |
ft_cmap_done_internal( cmap ); |
706 |
|
|
707 |
face->charmaps[n] = NULL; |
face->charmaps[n] = NULL; |
708 |
} |
} |
2259 |
} |
} |
2260 |
|
|
2261 |
|
|
2262 |
|
static void |
2263 |
|
ft_cmap_done_internal( FT_CMap cmap ) |
2264 |
|
{ |
2265 |
|
FT_CMap_Class clazz = cmap->clazz; |
2266 |
|
FT_Face face = cmap->charmap.face; |
2267 |
|
FT_Memory memory = FT_FACE_MEMORY(face); |
2268 |
|
|
2269 |
|
|
2270 |
|
if ( clazz->done ) |
2271 |
|
clazz->done( cmap ); |
2272 |
|
|
2273 |
|
FT_FREE( cmap ); |
2274 |
|
} |
2275 |
|
|
2276 |
|
|
2277 |
FT_BASE_DEF( void ) |
FT_BASE_DEF( void ) |
2278 |
FT_CMap_Done( FT_CMap cmap ) |
FT_CMap_Done( FT_CMap cmap ) |
2279 |
{ |
{ |
2280 |
if ( cmap ) |
if ( cmap ) |
2281 |
{ |
{ |
2282 |
FT_CMap_Class clazz = cmap->clazz; |
FT_Face face = cmap->charmap.face; |
2283 |
FT_Face face = cmap->charmap.face; |
FT_Memory memory = FT_FACE_MEMORY( face ); |
2284 |
FT_Memory memory = FT_FACE_MEMORY(face); |
FT_Error error; |
2285 |
|
FT_Int i, j; |
2286 |
|
|
2287 |
|
|
2288 |
|
for ( i = 0; i < face->num_charmaps; i++ ) |
2289 |
|
{ |
2290 |
|
if ( (FT_CMap)face->charmaps[i] == cmap ) |
2291 |
|
{ |
2292 |
|
FT_CharMap last_charmap = face->charmaps[face->num_charmaps - 1]; |
2293 |
|
|
2294 |
|
|
2295 |
|
if ( FT_RENEW_ARRAY( face->charmaps, |
2296 |
|
face->num_charmaps, |
2297 |
|
face->num_charmaps - 1 ) ) |
2298 |
|
return; |
2299 |
|
|
2300 |
|
/* remove it from our list of charmaps */ |
2301 |
|
for ( j = i + 1; j < face->num_charmaps; j++ ) |
2302 |
|
{ |
2303 |
|
if ( j == face->num_charmaps - 1 ) |
2304 |
|
face->charmaps[j - 1] = last_charmap; |
2305 |
|
else |
2306 |
|
face->charmaps[j - 1] = face->charmaps[j]; |
2307 |
|
} |
2308 |
|
|
2309 |
|
face->num_charmaps--; |
2310 |
|
|
2311 |
|
if ( (FT_CMap)face->charmap == cmap ) |
2312 |
|
face->charmap = NULL; |
2313 |
|
|
2314 |
if ( clazz->done ) |
ft_cmap_done_internal( cmap ); |
|
clazz->done( cmap ); |
|
2315 |
|
|
2316 |
FT_FREE( cmap ); |
break; |
2317 |
|
} |
2318 |
|
} |
2319 |
} |
} |
2320 |
} |
} |
2321 |
|
|
2366 |
return error; |
return error; |
2367 |
|
|
2368 |
Fail: |
Fail: |
2369 |
FT_CMap_Done( cmap ); |
ft_cmap_done_internal( cmap ); |
2370 |
cmap = NULL; |
cmap = NULL; |
2371 |
goto Exit; |
goto Exit; |
2372 |
} |
} |