22 #include FT_INTERNAL_VALIDATE_H
23 #include FT_INTERNAL_OBJECTS_H
24 #include FT_INTERNAL_DEBUG_H
25 #include FT_INTERNAL_RFORK_H
26 #include FT_INTERNAL_STREAM_H
27 #include FT_INTERNAL_SFNT_H
28 #include FT_TRUETYPE_TABLES_H
29 #include FT_TRUETYPE_TAGS_H
30 #include FT_TRUETYPE_IDS_H
32 #include FT_SERVICE_SFNT_H
33 #include FT_SERVICE_POSTSCRIPT_NAME_H
34 #include FT_SERVICE_GLYPH_DICT_H
35 #include FT_SERVICE_TT_CMAP_H
36 #include FT_SERVICE_KERNING_H
37 #include FT_SERVICE_TRUETYPE_ENGINE_H
39 #ifdef FT_CONFIG_OPTION_MAC_FONTS
43 #define GRID_FIT_METRICS
48 const char* service_id )
54 if ( desc && service_id )
100 volatile ft_jmp_buf* jump_buffer = &valid->jump_buffer;
103 valid->error =
error;
139 return FT_Err_Invalid_Library_Handle;
144 memory = library->memory;
155 (
const FT_Byte*)args->memory_base,
159 #ifndef FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT
174 stream = args->stream;
218 #define FT_COMPONENT trace_objs
270 FT_FREE( slot->bitmap.buffer );
277 slot->bitmap.buffer =
NULL;
288 slot->bitmap.buffer =
buffer;
303 FT_FREE( slot->bitmap.buffer );
335 slot->
format = FT_GLYPH_FORMAT_NONE;
386 if ( !face || !face->driver )
389 driver = face->driver;
390 clazz = driver->
clazz;
393 FT_TRACE4((
"FT_New_GlyphSlot: Creating new slot object\n" ));
406 slot->
next = face->glyph;
417 FT_TRACE4((
"FT_New_GlyphSlot: Return %d\n", error ));
449 if ( slot->generic.finalizer )
476 internal = face->internal;
482 internal->transform_matrix.xx = 0x10000L;
483 internal->transform_matrix.xy = 0;
484 internal->transform_matrix.yx = 0;
485 internal->transform_matrix.yy = 0x10000L;
486 matrix = &
internal->transform_matrix;
489 internal->transform_matrix = *
matrix;
492 if ( ( matrix->xy | matrix->yx ) ||
493 matrix->xx != 0x10000L ||
494 matrix->yy != 0x10000L )
495 internal->transform_flags |= 1;
499 internal->transform_delta.x = 0;
500 internal->transform_delta.y = 0;
501 delta = &
internal->transform_delta;
504 internal->transform_delta = *delta;
507 if ( delta->x | delta->y )
508 internal->transform_flags |= 2;
516 #ifdef GRID_FIT_METRICS
527 metrics->horiBearingX =
FT_PIX_FLOOR( metrics->horiBearingX );
528 metrics->horiBearingY =
FT_PIX_CEIL ( metrics->horiBearingY );
530 right =
FT_PIX_CEIL( metrics->vertBearingX + metrics->width );
531 bottom =
FT_PIX_CEIL( metrics->vertBearingY + metrics->height );
533 metrics->vertBearingX =
FT_PIX_FLOOR( metrics->vertBearingX );
534 metrics->vertBearingY =
FT_PIX_FLOOR( metrics->vertBearingY );
536 metrics->width = right - metrics->vertBearingX;
537 metrics->height = bottom - metrics->vertBearingY;
541 metrics->vertBearingX =
FT_PIX_FLOOR( metrics->vertBearingX );
542 metrics->vertBearingY =
FT_PIX_FLOOR( metrics->vertBearingY );
544 right =
FT_PIX_CEIL ( metrics->horiBearingX + metrics->width );
545 bottom =
FT_PIX_FLOOR( metrics->horiBearingY - metrics->height );
547 metrics->horiBearingX =
FT_PIX_FLOOR( metrics->horiBearingX );
548 metrics->horiBearingY =
FT_PIX_CEIL ( metrics->horiBearingY );
550 metrics->width = right - metrics->horiBearingX;
551 metrics->height = metrics->horiBearingY -
bottom;
554 metrics->horiAdvance =
FT_PIX_ROUND( metrics->horiAdvance );
555 metrics->vertAdvance =
FT_PIX_ROUND( metrics->vertAdvance );
565 FT_Int32 load_flags )
576 if ( !face || !face->size || !face->glyph )
577 return FT_Err_Invalid_Face_Handle;
585 driver = face->driver;
628 ( face->internal->transform_matrix.yx == 0 &&
629 face->internal->transform_matrix.xx != 0 ) ||
630 ( face->internal->transform_matrix.xx == 0 &&
631 face->internal->transform_matrix.yx != 0 ) ) )
644 face->internal->ignore_unpatented_hinter ||
669 if ( !error && slot->
format == FT_GLYPH_FORMAT_BITMAP )
680 internal->transform_flags = 0;
687 glyph_index, load_flags );
689 internal->transform_flags = transform_flags;
708 #ifdef GRID_FIT_METRICS
709 if ( !( load_flags & FT_LOAD_NO_HINTING ) )
744 if ( ( load_flags & FT_LOAD_IGNORE_TRANSFORM ) == 0 )
750 if ( internal->transform_flags )
759 &internal->transform_matrix,
760 &internal->transform_delta );
764 if ( internal->transform_flags & 1 )
766 &internal->transform_matrix );
768 if ( internal->transform_flags & 2 )
770 internal->transform_delta.x,
771 internal->transform_delta.y );
787 slot->
format != FT_GLYPH_FORMAT_BITMAP &&
788 slot->
format != FT_GLYPH_FORMAT_COMPOSITE &&
811 FT_Int32 load_flags )
817 return FT_Err_Invalid_Face_Handle;
819 glyph_index = (
FT_UInt)char_code;
890 while ( face->
glyph )
968 return FT_Err_Invalid_CharMap_Handle;
1000 for ( ; --cur >=
first; )
1002 if ( cur[0]->encoding == FT_ENCODING_UNICODE )
1011 #ifdef FT_MAX_CHARMAP_CACHEABLE
1014 FT_ERROR((
"find_unicode_charmap: UCS-4 cmap is found "
1015 "at too late position (%d)\n", cur - first ));
1029 for ( ; --cur >=
first; )
1031 if ( cur[0]->encoding == FT_ENCODING_UNICODE )
1033 #ifdef FT_MAX_CHARMAP_CACHEABLE
1036 FT_ERROR((
"find_unicode_charmap: UCS-2 cmap is found "
1037 "at too late position (%d)\n", cur - first ));
1046 return FT_Err_Invalid_CharMap_Handle;
1077 for ( cur = first; cur <
end; ++cur )
1083 #ifdef FT_MAX_CHARMAP_CACHEABLE
1086 FT_ERROR((
"find_unicode_charmap: UVS cmap is found "
1087 "at too late position (%d)\n", cur - first ));
1122 clazz = driver->
clazz;
1129 if (
FT_NEW(
internal ) )
1138 #ifdef FT_CONFIG_OPTION_INCREMENTAL
1143 face->
internal->incremental_interface = 0;
1144 for ( i = 0; i < num_params && !face->
internal->incremental_interface;
1147 face->
internal->incremental_interface =
1168 if ( error2 && error2 != FT_Err_Invalid_CharMap_Handle )
1194 #ifndef FT_MACINTOSH
1200 const char* pathname,
1215 return FT_Open_Face( library, &args, face_index, aface );
1242 return FT_Open_Face( library, &args, face_index, aface );
1246 #ifdef FT_CONFIG_OPTION_MAC_FONTS
1307 return FT_Err_Invalid_Library_Handle;
1313 memory = library->
memory;
1319 stream->
close = close;
1335 const char* driver_name,
1344 error = new_memory_stream( library,
1347 memory_stream_close,
1369 if ( face_index > 0 )
1373 error =
FT_Open_Face( library, &args, face_index, aface );
1401 ft_lookup_PS_in_sfnt_stream(
FT_Stream stream,
1416 *is_sfnt_cid =
FALSE;
1424 return FT_Err_Unknown_File_Format;
1432 *is_sfnt_cid =
FALSE;
1434 for ( i = 0; i < numTables; i++ )
1445 *is_sfnt_cid =
TRUE;
1446 if ( face_index < 0 )
1454 *is_sfnt_cid =
FALSE;
1455 if ( face_index < 0 )
1458 if ( face_index >= 0 && pstable_index == face_index )
1461 return FT_Err_Table_Missing;
1486 error = ft_lookup_PS_in_sfnt_stream( stream,
1507 face_index < 0 ? face_index : 0,
1508 is_sfnt_cid ?
"cid" :
"type1",
1515 if ( error == FT_Err_Unknown_File_Format )
1527 #ifndef FT_MACINTOSH
1543 FT_Error error = FT_Err_Cannot_Open_Resource;
1548 FT_Long pfb_len, pfb_pos, pfb_lenpos;
1552 if ( face_index == -1 )
1554 if ( face_index != 0 )
1560 for ( i = 0; i < resource_cnt; ++
i )
1567 pfb_len += temp + 6;
1584 for ( i = 0; i < resource_cnt; ++
i )
1593 FT_TRACE3((
"POST fragment[%d]: offsets=0x%08x, rlen=0x%08x, flags=0x%04x\n",
1594 i, offsets[i], rlen, flags ));
1597 if ( ( flags >> 8 ) == 0 )
1607 if ( ( flags >> 8 ) == type )
1611 if ( pfb_lenpos + 3 > pfb_len + 2 )
1613 pfb_data[pfb_lenpos ] = (
FT_Byte)( len );
1614 pfb_data[pfb_lenpos + 1] = (
FT_Byte)( len >> 8 );
1615 pfb_data[pfb_lenpos + 2] = (
FT_Byte)( len >> 16 );
1616 pfb_data[pfb_lenpos + 3] = (
FT_Byte)( len >> 24 );
1618 if ( ( flags >> 8 ) == 5 )
1621 if ( pfb_pos + 6 > pfb_len + 2 )
1623 pfb_data[pfb_pos++] = 0x80;
1628 pfb_data[pfb_pos++] = (
FT_Byte)type;
1629 pfb_lenpos = pfb_pos;
1630 pfb_data[pfb_pos++] = 0;
1631 pfb_data[pfb_pos++] = 0;
1632 pfb_data[pfb_pos++] = 0;
1633 pfb_data[pfb_pos++] = 0;
1636 error = FT_Err_Cannot_Open_Resource;
1637 if ( pfb_pos > pfb_len || pfb_pos + rlen > pfb_len )
1646 if ( pfb_pos + 2 > pfb_len + 2 )
1648 pfb_data[pfb_pos++] = 0x80;
1649 pfb_data[pfb_pos++] = 3;
1651 if ( pfb_lenpos + 3 > pfb_len + 2 )
1653 pfb_data[pfb_lenpos ] = (
FT_Byte)( len );
1654 pfb_data[pfb_lenpos + 1] = (
FT_Byte)( len >> 8 );
1655 pfb_data[pfb_lenpos + 2] = (
FT_Byte)( len >> 16 );
1656 pfb_data[pfb_lenpos + 3] = (
FT_Byte)( len >> 24 );
1692 FT_Long face_index_in_resource = 0;
1695 if ( face_index == -1 )
1697 if ( face_index >= resource_cnt )
1698 return FT_Err_Cannot_Open_Resource;
1700 flag_offset = offsets[face_index];
1708 return FT_Err_Cannot_Open_Resource;
1728 is_cff = rlen > 4 && !
ft_memcmp( sfnt_data,
"OTTO", 4 );
1732 face_index_in_resource,
1733 is_cff ?
"cff" :
"truetype",
1755 FT_Long map_offset, rdara_pos;
1761 &map_offset, &rdara_pos );
1766 map_offset, rdara_pos,
1768 &data_offsets, &count );
1771 error = Mac_Read_POST_Resource( library, stream, data_offsets, count,
1772 face_index, aface );
1776 (*aface)->num_faces = 1;
1781 map_offset, rdara_pos,
1783 &data_offsets, &count );
1789 error = Mac_Read_sfnt_Resource( library, stream, data_offsets, count,
1790 face_index_internal, aface );
1793 (*aface)->num_faces =
count;
1809 unsigned char header[128];
1814 if (
NULL == stream )
1815 return FT_Err_Invalid_Stream_Operation;
1825 if ( header[ 0] != 0 ||
1831 header[2 + header[1]] != 0 )
1832 return FT_Err_Unknown_File_Format;
1834 dlen = ( header[0x53] << 24 ) |
1835 ( header[0x54] << 16 ) |
1836 ( header[0x55] << 8 ) |
1839 rlen = ( header[0x57] << 24 ) |
1840 ( header[0x58] << 16 ) |
1841 ( header[0x59] << 8 ) |
1844 offset = 128 + ( ( dlen + 127 ) & ~127 );
1846 return IsMacResource( library, stream, offset, face_index, aface );
1854 load_face_in_embedded_rfork(
FT_Library library,
1862 #define FT_COMPONENT trace_raccess
1865 FT_Error error = FT_Err_Unknown_File_Format;
1878 args->
pathname, file_names, offsets, errors );
1882 is_darwin_vfs = ft_raccess_rule_by_darwin_vfs( library, i );
1883 if ( is_darwin_vfs && vfs_rfork_has_no_font )
1885 FT_TRACE3((
"Skip rule %d: darwin vfs resource fork"
1886 " is already checked and"
1887 " no font is found\n", i ));
1893 FT_TRACE3((
"Error[%d] has occurred in rule %d\n", errors[i], i ));
1900 FT_TRACE3((
"Try rule %d: %s (offset=%d) ...",
1904 if ( is_darwin_vfs && error == FT_Err_Cannot_Open_Stream )
1905 vfs_rfork_has_no_font =
TRUE;
1913 error = IsMacResource( library, stream2, offsets[i],
1914 face_index, aface );
1917 FT_TRACE3((
"%s\n", error ?
"failed":
"successful" ));
1921 else if ( is_darwin_vfs )
1922 vfs_rfork_has_no_font =
TRUE;
1927 if ( file_names[i] )
1933 error = FT_Err_Unknown_File_Format;
1938 #define FT_COMPONENT trace_objs
1961 error = IsMacBinary( library, stream, face_index, aface );
1966 #define FT_COMPONENT trace_raccess
1970 error = IsMacResource( library, stream, 0, face_index, aface );
1972 FT_TRACE3((
"%s\n", error ?
"failed" :
"successful" ));
1975 #define FT_COMPONENT trace_objs
1979 if ( (
FT_ERROR_BASE( error ) == FT_Err_Unknown_File_Format ||
1980 FT_ERROR_BASE( error ) == FT_Err_Invalid_Stream_Operation ) &&
1982 error = load_face_in_embedded_rfork( library, stream,
1983 face_index, aface, args );
2013 if ( ( !aface && face_index >= 0 ) || !args )
2024 memory = library->memory;
2041 num_params = args->num_params;
2042 params = args->params;
2045 error =
open_face( driver, stream, face_index,
2046 num_params, params, &face );
2051 error = FT_Err_Invalid_Handle;
2059 cur = library->modules;
2060 limit = cur + library->num_modules;
2063 for ( ; cur <
limit; cur++ )
2076 num_params = args->num_params;
2077 params = args->params;
2080 error =
open_face( driver, stream, face_index,
2081 num_params, params, &face );
2085 #ifdef FT_CONFIG_OPTION_MAC_FONTS
2086 if (
ft_strcmp( cur[0]->clazz->module_name,
"truetype" ) == 0 &&
2121 #if !defined( FT_MACINTOSH ) && defined( FT_CONFIG_OPTION_MAC_FONTS )
2122 error = load_mac_face( library, stream, face_index, aface, args );
2139 error = FT_Err_Unknown_File_Format;
2147 FT_TRACE4((
"FT_Open_Face: New face object, adding to list\n" ));
2150 if ( external_stream )
2163 FT_TRACE4((
"FT_Open_Face: Creating glyph slot\n" ));
2165 if ( face_index >= 0 )
2176 FT_TRACE4((
"FT_Open_Face: Creating size object\n" ));
2222 internal->transform_matrix.xy = 0;
2223 internal->transform_matrix.yx = 0;
2224 internal->transform_matrix.yy = 0x10000L;
2226 internal->transform_delta.x = 0;
2227 internal->transform_delta.y = 0;
2229 internal->refcount = 1;
2243 FT_TRACE4((
"FT_Open_Face: Return %d\n", error ));
2253 const char* filepathname )
2260 if ( !filepathname )
2265 open.
pathname = (
char*)filepathname;
2287 return FT_Err_Invalid_Face_Handle;
2289 driver = face->driver;
2291 return FT_Err_Invalid_Driver_Handle;
2300 error = FT_Err_Unimplemented_Feature;
2301 clazz = driver->
clazz;
2307 (
FT_Bool)( parameters->stream &&
2320 face->internal->refcount++;
2337 error = FT_Err_Invalid_Face_Handle;
2338 if ( face && face->driver )
2340 face->internal->refcount--;
2341 if ( face->internal->refcount > 0 )
2345 driver = face->driver;
2383 return FT_Err_Invalid_Face_Handle;
2386 return FT_Err_Invalid_Size_Handle;
2388 if ( !face->driver )
2389 return FT_Err_Invalid_Driver_Handle;
2393 driver = face->driver;
2394 clazz = driver->
clazz;
2395 memory = face->memory;
2441 return FT_Err_Invalid_Size_Handle;
2445 return FT_Err_Invalid_Face_Handle;
2449 return FT_Err_Invalid_Driver_Handle;
2460 if ( face->
size == size )
2470 error = FT_Err_Invalid_Size_Handle;
2489 return FT_Err_Invalid_Face_Handle;
2493 return FT_Err_Unimplemented_Feature;
2498 if ( req->width && !req->height )
2500 else if ( !req->width && req->height )
2506 for ( i = 0; i < face->num_fixed_sizes; i++ )
2523 return FT_Err_Invalid_Pixel_Size;
2537 if ( metrics->horiBearingY < 0 )
2540 height = metrics->horiBearingY;
2542 else if ( metrics->horiBearingY > 0 )
2543 height -= metrics->horiBearingY;
2547 advance = height * 12 / 10;
2549 metrics->vertBearingX = metrics->horiBearingX - metrics->horiAdvance / 2;
2550 metrics->vertBearingY = ( advance -
height ) / 2;
2551 metrics->vertAdvance = advance;
2561 #ifdef GRID_FIT_METRICS
2597 metrics = &face->size->metrics;
2598 bsize = face->available_sizes + strike_index;
2606 face->units_per_EM );
2608 face->units_per_EM );
2643 metrics = &face->size->metrics;
2647 FT_Long w = 0,
h = 0, scaled_w = 0, scaled_h = 0;
2650 switch ( req->type )
2653 w =
h = face->units_per_EM;
2657 w =
h = face->ascender - face->descender;
2661 w = face->bbox.xMax - face->bbox.xMin;
2662 h = face->bbox.yMax - face->bbox.yMin;
2666 w = face->max_advance_width;
2667 h = face->ascender - face->descender;
2677 goto Calculate_Ppem;
2766 return FT_Err_Invalid_Face_Handle;
2768 if ( strike_index < 0 || strike_index >= face->num_fixed_sizes )
2771 clazz = face->driver->clazz;
2780 #ifdef FT_DEBUG_LEVEL_TRACE
2785 FT_TRACE5((
"FT_Select_Size (font driver's `select_size'):\n" ));
2819 return FT_Err_Invalid_Face_Handle;
2821 if ( !req || req->width < 0 || req->height < 0 ||
2825 clazz = face->driver->clazz;
2834 #ifdef FT_DEBUG_LEVEL_TRACE
2839 FT_TRACE5((
"FT_Request_Size (font driver's `request_size'):\n" ));
2872 FT_TRACE3((
"FT_Request_Size: bitmap strike %lu matched\n",
2897 char_width = char_height;
2898 else if ( !char_height )
2899 char_height = char_width;
2901 if ( !horz_resolution )
2902 horz_resolution = vert_resolution;
2903 else if ( !vert_resolution )
2904 vert_resolution = horz_resolution;
2906 if ( char_width < 1 * 64 )
2907 char_width = 1 * 64;
2908 if ( char_height < 1 * 64 )
2909 char_height = 1 * 64;
2911 if ( !horz_resolution )
2912 horz_resolution = vert_resolution = 72;
2915 req.
width = char_width;
2916 req.
height = char_height;
2934 if ( pixel_width == 0 )
2935 pixel_width = pixel_height;
2936 else if ( pixel_height == 0 )
2937 pixel_height = pixel_width;
2939 if ( pixel_width < 1 )
2941 if ( pixel_height < 1 )
2945 if ( pixel_width >= 0xFFFFU )
2946 pixel_width = 0xFFFFU;
2947 if ( pixel_height >= 0xFFFFU )
2948 pixel_height = 0xFFFFU;
2951 req.
width = pixel_width << 6;
2952 req.
height = pixel_height << 6;
2974 return FT_Err_Invalid_Face_Handle;
2979 driver = face->driver;
2994 akerning->x =
FT_MulFix( akerning->x, face->size->metrics.x_scale );
2995 akerning->y =
FT_MulFix( akerning->y, face->size->metrics.y_scale );
3002 if ( face->size->metrics.x_ppem < 25 )
3004 face->size->metrics.x_ppem, 25 );
3005 if ( face->size->metrics.y_ppem < 25 )
3007 face->size->metrics.y_ppem, 25 );
3028 FT_Service_Kerning service;
3033 return FT_Err_Invalid_Face_Handle;
3040 return FT_Err_Unimplemented_Feature;
3042 error = service->get_track( face,
3062 return FT_Err_Invalid_Face_Handle;
3064 if ( encoding == FT_ENCODING_NONE )
3071 if ( encoding == FT_ENCODING_UNICODE )
3074 cur = face->charmaps;
3076 return FT_Err_Invalid_CharMap_Handle;
3078 limit = cur + face->num_charmaps;
3080 for ( ; cur <
limit; cur++ )
3082 if ( cur[0]->encoding == encoding )
3084 #ifdef FT_MAX_CHARMAP_CACHEABLE
3087 FT_ERROR((
"FT_Select_Charmap: requested charmap is found (%d), "
3088 "but in too late position to cache\n",
3089 cur - face->charmaps ));
3093 face->charmap = cur[0];
3113 return FT_Err_Invalid_Face_Handle;
3115 cur = face->charmaps;
3117 return FT_Err_Invalid_CharMap_Handle;
3121 limit = cur + face->num_charmaps;
3123 for ( ; cur <
limit; cur++ )
3125 if ( cur[0] == charmap )
3127 #ifdef FT_MAX_CHARMAP_CACHEABLE
3130 FT_ERROR((
"FT_Set_Charmap: requested charmap is found (%d), "
3131 "but in too late position to cache\n",
3132 cur - face->charmaps ));
3136 face->charmap = cur[0];
3152 if ( !charmap || !charmap->face )
3155 for ( i = 0; i < charmap->face->num_charmaps; i++ )
3156 if ( charmap->face->charmaps[i] == charmap )
3161 #ifdef FT_MAX_CHARMAP_CACHEABLE
3164 FT_ERROR((
"FT_Get_Charmap_Index: requested charmap is found (%d), "
3165 "but in too late position to cache\n",
3183 clazz->
done( cmap );
3216 face->
charmaps[j - 1] = last_charmap;
3247 if ( clazz ==
NULL || charmap ==
NULL || charmap->face ==
NULL )
3250 face = charmap->face;
3253 if ( !
FT_ALLOC( cmap, clazz->size ) )
3256 cmap->
clazz = clazz;
3260 error = clazz->
init( cmap, init_data );
3296 if ( face && face->charmap )
3301 if ( charcode > 0xFFFFFFFFUL )
3303 FT_TRACE1((
"FT_Get_Char_Index: too large charcode" ));
3304 FT_TRACE1((
" 0x%x is truncated\n", charcode ));
3322 if ( face && face->charmap && face->num_glyphs )
3325 if ( gindex == 0 || gindex >= (
FT_UInt)face->num_glyphs )
3347 if ( face && face->charmap && face->num_glyphs )
3349 FT_UInt32
code = (FT_UInt32)charcode;
3355 }
while ( gindex >= (
FT_UInt)face->num_glyphs );
3357 result = ( gindex == 0 ) ? 0 : code;
3377 if ( face && face->charmap &&
3378 face->charmap->encoding == FT_ENCODING_UNICODE )
3384 if ( charmap !=
NULL )
3389 if ( charcode > 0xFFFFFFFFUL )
3391 FT_TRACE1((
"FT_Get_Char_Index: too large charcode" ));
3392 FT_TRACE1((
" 0x%x is truncated\n", charcode ));
3394 if ( variantSelector > 0xFFFFFFFFUL )
3396 FT_TRACE1((
"FT_Get_Char_Index: too large variantSelector" ));
3397 FT_TRACE1((
" 0x%x is truncated\n", variantSelector ));
3401 (FT_UInt32)charcode,
3402 (FT_UInt32)variantSelector );
3425 if ( charmap !=
NULL )
3430 if ( charcode > 0xFFFFFFFFUL )
3432 FT_TRACE1((
"FT_Get_Char_Index: too large charcode" ));
3433 FT_TRACE1((
" 0x%x is truncated\n", charcode ));
3435 if ( variantSelector > 0xFFFFFFFFUL )
3437 FT_TRACE1((
"FT_Get_Char_Index: too large variantSelector" ));
3438 FT_TRACE1((
" 0x%x is truncated\n", variantSelector ));
3442 (FT_UInt32)charcode,
3443 (FT_UInt32)variantSelector );
3464 if ( charmap !=
NULL )
3492 if ( charmap !=
NULL )
3498 if ( charcode > 0xFFFFFFFFUL )
3500 FT_TRACE1((
"FT_Get_Char_Index: too large charcode" ));
3501 FT_TRACE1((
" 0x%x is truncated\n", charcode ));
3505 (FT_UInt32)charcode );
3526 if ( charmap !=
NULL )
3532 if ( variantSelector > 0xFFFFFFFFUL )
3534 FT_TRACE1((
"FT_Get_Char_Index: too large variantSelector" ));
3535 FT_TRACE1((
" 0x%x is truncated\n", variantSelector ));
3539 (FT_UInt32)variantSelector );
3558 FT_Service_GlyphDict service;
3565 if ( service && service->name_index )
3566 result = service->name_index( face, glyph_name );
3585 if ( buffer && buffer_max > 0 )
3589 (
FT_Long)glyph_index <= face->num_glyphs &&
3592 FT_Service_GlyphDict service;
3599 if ( service && service->get_name )
3600 error = service->get_name( face, glyph_index, buffer, buffer_max );
3620 FT_Service_PsFontName service;
3625 POSTSCRIPT_FONT_NAME );
3627 if ( service && service->get_ps_font_name )
3628 result = service->get_ps_font_name( face );
3643 FT_Service_SFNT_Table service;
3649 if ( service !=
NULL )
3650 table = service->get_table( face, tag );
3666 FT_Service_SFNT_Table service;
3670 return FT_Err_Invalid_Face_Handle;
3673 if ( service ==
NULL )
3674 return FT_Err_Unimplemented_Feature;
3676 return service->load_table( face, tag, offset, buffer, length );
3688 FT_Service_SFNT_Table service;
3693 return FT_Err_Invalid_Face_Handle;
3696 if ( service ==
NULL )
3697 return FT_Err_Unimplemented_Feature;
3699 return service->table_info( face, table_index, tag, &offset, length );
3708 FT_Service_TTCMaps service;
3713 if ( !charmap || !charmap->face )
3716 face = charmap->face;
3718 if ( service ==
NULL )
3720 if ( service->get_cmap_info( charmap, &cmap_info ))
3732 FT_Service_TTCMaps service;
3737 if ( !charmap || !charmap->face )
3740 face = charmap->face;
3742 if ( service ==
NULL )
3744 if ( service->get_cmap_info( charmap, &cmap_info ))
3799 cur = library->renderers.head;
3804 cur = (*node)->
next;
3872 render->
clazz = clazz;
3888 node->
data = module;
3956 return FT_Err_Invalid_Library_Handle;
3971 library->cur_renderer = renderer;
3973 if ( num_params > 0 )
3978 for ( ; num_params > 0; num_params-- )
3980 error = set_mode( renderer, parameters->tag, parameters->data );
4002 switch ( slot->format )
4004 case FT_GLYPH_FORMAT_BITMAP:
4016 renderer = library->cur_renderer;
4017 node = library->renderers.head;
4022 error = FT_Err_Unimplemented_Feature;
4025 error = renderer->
render( renderer, slot, render_mode,
NULL );
4042 if ( !error && update && renderer )
4060 if ( !slot || !slot->face )
4137 #define FREETYPE_VER_FIXED ( ( (FT_Long)FREETYPE_MAJOR << 16 ) | \
4141 return FT_Err_Invalid_Library_Handle;
4148 return FT_Err_Invalid_Version;
4151 for ( nn = 0; nn < library->num_modules; nn++ )
4153 module = library->modules[nn];
4158 return FT_Err_Lower_Module_Version;
4167 memory = library->memory;
4172 error = FT_Err_Too_Many_Drivers;
4177 if (
FT_ALLOC( module, clazz->module_size ) )
4197 library->auto_hinter = module;
4215 if ( clazz->module_init )
4217 error = clazz->module_init( module );
4223 library->modules[library->num_modules++] = module;
4257 const char* module_name )
4264 if ( !library || !module_name )
4267 cur = library->modules;
4268 limit = cur + library->num_modules;
4270 for ( ; cur <
limit; cur++ )
4271 if (
ft_strcmp( cur[0]->clazz->module_name, module_name ) == 0 )
4285 const char* mod_name )
4300 const char* service_id )
4306 FT_ASSERT( module->clazz && module->clazz->get_interface );
4310 if ( module->clazz->get_interface )
4311 result = module->clazz->get_interface( module, service_id );
4313 if ( result ==
NULL )
4322 for ( ; cur <
limit; cur++ )
4324 if ( cur[0] != module )
4328 if ( cur[0]->clazz->get_interface )
4331 if ( result !=
NULL )
4352 return FT_Err_Invalid_Library_Handle;
4360 for ( ; cur <
limit; cur++ )
4362 if ( cur[0] == module )
4365 library->num_modules--;
4367 while ( cur < limit )
4381 return FT_Err_Invalid_Driver_Handle;
4403 library->refcount++;
4422 #ifdef FT_DEBUG_LEVEL_ERROR
4431 library->
memory = memory;
4433 #ifdef FT_CONFIG_OPTION_PIC
4435 error = ft_pic_container_init( library );
4442 #if FT_RENDER_POOL_SIZE > 0
4459 #ifdef FT_CONFIG_OPTION_PIC
4460 ft_pic_container_destroy( library );
4482 major = library->version_major;
4483 minor = library->version_minor;
4484 patch = library->version_patch;
4507 return FT_Err_Invalid_Library_Handle;
4509 library->refcount--;
4510 if ( library->refcount > 0 )
4513 memory = library->memory;
4533 const char* driver_name[] = {
"type42",
NULL };
4537 m <
sizeof ( driver_name ) /
sizeof ( driver_name[0] );
4540 for ( n = 0; n < library->num_modules; n++ )
4547 if ( driver_name[m] &&
4548 ft_strcmp( module_name, driver_name[m] ) != 0 )
4554 FT_TRACE7((
"FT_Done_Library: close faces for %s\n", module_name ));
4556 faces = &
FT_DRIVER( module )->faces_list;
4557 while ( faces->
head )
4561 FT_TRACE0((
"FT_Done_Library: failed to free some faces\n" ));
4572 while ( library->num_modules > 0 )
4574 library->modules[library->num_modules - 1] );
4580 for ( n = 0; n < library->num_modules; n++ )
4588 library->modules[
n] = 0;
4595 FT_FREE( library->raster_pool );
4596 library->raster_pool_size = 0;
4598 #ifdef FT_CONFIG_OPTION_PIC
4600 ft_pic_container_destroy( library );
4617 if ( library && debug_hook &&
4619 (
sizeof ( library->debug_hooks ) /
sizeof (
void* ) ) )
4620 library->debug_hooks[hook_index] = debug_hook;
4639 FT_Service_TrueTypeEngine service;
4642 service = (FT_Service_TrueTypeEngine)
4646 result = service->engine_type;
4654 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
4657 ft_stub_set_char_sizes(
FT_Size size,
4673 if ( horz_res == 0 )
4674 horz_res = vert_res;
4676 if ( vert_res == 0 )
4677 vert_res = horz_res;
4679 if ( horz_res == 0 )
4680 horz_res = vert_res = 72;
4693 ft_stub_set_pixel_sizes(
FT_Size size,
4704 req.
width = width << 6;
4705 req.
height = height << 6;
4734 glyph->format == FT_GLYPH_FORMAT_COMPOSITE &&
4735 sub_index < glyph->num_subglyphs )
4740 *p_index = subg->
index;
4741 *p_flags = subg->
flags;
4742 *p_arg1 = subg->
arg1;
4743 *p_arg2 = subg->
arg2;
const FT_Byte * memory_base
#define FT_ALLOC(ptr, size)
GLenum GLsizei GLenum GLenum const GLvoid * table
ft_glyphslot_set_bitmap(FT_GlyphSlot slot, FT_Byte *buffer)
FT_Get_Kerning(FT_Face face, FT_UInt left_glyph, FT_UInt right_glyph, FT_UInt kern_mode, FT_Vector *akerning)
#define FREETYPE_VER_FIXED
static void ft_remove_renderer(FT_Module module)
ft_service_list_lookup(FT_ServiceDesc service_descriptors, const char *service_id)
FT_Module_Destructor module_done
#define FT_LOAD_VERTICAL_LAYOUT
FT_DivFix(FT_Long a, FT_Long b)
FT_Get_CMap_Format(FT_CharMap charmap)
FT_ULong raster_pool_size
FT_Raster_Render_Func raster_render
FT_Raccess_Get_DataOffsets(FT_Library library, FT_Stream stream, FT_Long map_offset, FT_Long rdata_pos, FT_Long tag, FT_Long **offsets, FT_Long *count)
static FT_CharMap find_variant_selector_charmap(FT_Face face)
FT_Stream_Seek(FT_Stream stream, FT_ULong pos)
cannot open resource broken file module version is too low unimplemented feature broken offset within table missing module invalid character code cannot render this glyph format invalid composite glyph invalid pixel size invalid library handle invalid face handle invalid glyph slot handle invalid cache manager handle too many modules out of memory cannot open stream invalid stream skip invalid stream operation nested frame access raster uninitialized raster overflow too many registered caches too few arguments code overflow division by zero found debug opcode nested DEFS execution context too long too many instruction definitions horizontal header(hhea) table missing" ) FT_ERRORDEF_( Locations_Missing
static void ft_glyphslot_done(FT_GlyphSlot slot)
FT_Select_Size(FT_Face face, FT_Int strike_index)
#define FT_LOAD_SBITS_ONLY
FT_Size_InitFunc init_size
FT_BEGIN_HEADER typedef signed long FT_Pos
FT_Renderer_RenderFunc render
FT_CMap_CharVarIndexFunc char_var_index
ft_synthesize_vertical_metrics(FT_Glyph_Metrics *metrics, FT_Pos advance)
GLfloat GLfloat GLfloat GLfloat h
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
FT_Generic_Finalizer finalizer
GLvoid **typedef void(GLAPIENTRY *PFNGLGETVERTEXATTRIBDVPROC)(GLuint
FT_SERVICE_ID_TRUETYPE_ENGINE
FT_Select_Metrics(FT_Face face, FT_ULong strike_index)
FT_Set_Transform(FT_Face face, FT_Matrix *matrix, FT_Vector *delta)
FT_Glyph_Format glyph_format
void(* FT_Stream_CloseFunc)(FT_Stream stream)
#define FT_REQUEST_HEIGHT(req)
FT_Slot_DoneFunc done_slot
enum FT_Render_Mode_ FT_Render_Mode
return FT_Err_Invalid_Argument
enum FT_ValidationLevel_ FT_ValidationLevel
FT_Get_Next_Char(FT_Face face, FT_ULong char_code, FT_UInt *agindex)
#define FT_LOAD_NO_HINTING
static void destroy_face(FT_Memory memory, FT_Face face, FT_Driver driver)
FT_List_Finalize(FT_List list, FT_List_Destructor destroy, FT_Memory memory, void *user)
FT_Done_Library(FT_Library library)
#define FT_DRIVER_HAS_HINTER(x)
GLuint GLsizei GLsizei GLfloat * metrics
GLuint GLsizei const GLuint const GLintptr * offsets
FT_List_Remove(FT_List list, FT_ListNode node)
#define FT_LOAD_NO_RECURSE
static void render(const Vertex_Buffer_Macrorenderer ¯orenderer, std::vector< Vertex_Buffer::Vertex_Buffer_Range * > &descriptors)
FT_New_GlyphSlot(FT_Face face, FT_GlyphSlot *aslot)
FT_Reference_Face(FT_Face face)
static FT_Renderer ft_lookup_glyph_renderer(FT_GlyphSlot slot)
FT_Bitmap_Size * available_sizes
FT_Stream_Pos(FT_Stream stream)
EGLSurface EGLint EGLint EGLint EGLint height
FT_Fixed linearHoriAdvance
FT_GlyphLoader_New(FT_Memory memory, FT_GlyphLoader *aloader)
FT_Remove_Module(FT_Library library, FT_Module module)
static void ft_glyphslot_grid_fit_metrics(FT_GlyphSlot slot, FT_Bool vertical)
ft_validator_run(FT_Validator valid)
#define FT_PARAM_TAG_INCREMENTAL
#define FT_READ_USHORT(var)
#define FT_MAX_CHARMAP_CACHEABLE
FT_Stream_Close(FT_Stream stream)
FT_Done_GlyphSlot(FT_GlyphSlot slot)
FT_Render_Glyph_Internal(FT_Library library, FT_GlyphSlot slot, FT_Render_Mode render_mode)
#define TT_PLATFORM_MICROSOFT
struct FT_AutoHinter_ServiceRec_ * FT_AutoHinter_Service
FT_New_Memory_Face(FT_Library library, const FT_Byte *file_base, FT_Long file_size, FT_Long face_index, FT_Face *aface)
#define FT_DRIVER_USES_OUTLINES(x)
static void ft_recompute_scaled_metrics(FT_Face face, FT_Size_Metrics *metrics)
#define FT_GLYPH_OWN_BITMAP
FT_Face_GetCharVariantIsDefault(FT_Face face, FT_ULong charcode, FT_ULong variantSelector)
FT_BEGIN_HEADER open_face_PS_from_sfnt_stream(FT_Library library, FT_Stream stream, FT_Long face_index, FT_Int num_params, FT_Parameter *params, FT_Face *aface)
FT_Lookup_Renderer(FT_Library library, FT_Glyph_Format format, FT_ListNode *node)
FT_BEGIN_HEADER typedef unsigned char FT_Bool
#define FT_LOAD_LINEAR_DESIGN
FT_Set_Pixel_Sizes(FT_Face face, FT_UInt pixel_width, FT_UInt pixel_height)
FT_Face_Internal internal
FT_Get_CMap_Language_ID(FT_CharMap charmap)
FT_Short max_advance_height
#define FT_TRACE1(varformat)
open_face_from_buffer(FT_Library library, FT_Byte *base, FT_ULong size, FT_Long face_index, const char *driver_name, FT_Face *aface)
FT_Size_SelectFunc select_size
FT_Get_Charmap_Index(FT_CharMap charmap)
#define FT_ERROR(varformat)
FT_Renderer_RenderFunc render_glyph
#define FT_ASSERT(condition)
FT_CMap_CharIndexFunc char_index
enum FT_Sfnt_Tag_ FT_Sfnt_Tag
FT_Load_Glyph(FT_Face face, FT_UInt glyph_index, FT_Int32 load_flags)
FT_CMap_VariantListFunc variant_list
static FT_Error find_unicode_charmap(FT_Face face)
FT_Size_Internal internal
FT_Add_Module(FT_Library library, const FT_Module_Class *clazz)
#define FT_TRACE4(varformat)
FT_Get_Sfnt_Table(FT_Face face, FT_Sfnt_Tag tag)
#define FT_RACCESS_N_RULES
FT_Slot_InitFunc init_slot
FT_Attach_Stream(FT_Face face, FT_Open_Args *parameters)
FT_Face_GetCharVariantIndex(FT_Face face, FT_ULong charcode, FT_ULong variantSelector)
FT_CMap_CharVariantListFunc charvariant_list
EGLContext EGLenum EGLClientBuffer buffer
#define FT_FACE_LOOKUP_SERVICE(face, ptr, id)
FT_Match_Size(FT_Face face, FT_Size_Request req, FT_Bool ignore_width, FT_ULong *size_index)
#define FT_LOAD_FORCE_AUTOHINT
#define FT_MODULE_IS_DRIVER(x)
#define TT_APPLE_ID_VARIANT_SELECTOR
#define FT_REQUEST_WIDTH(req)
ft_module_get_service(FT_Module module, const char *service_id)
FT_Outline_Transform(const FT_Outline *outline, const FT_Matrix *matrix)
FT_Face_GetVariantsOfChar(FT_Face face, FT_ULong charcode)
#define FT_STREAM_SKIP(distance)
FT_List_Up(FT_List list, FT_ListNode node)
FT_Raster_Funcs * raster_class
FT_GlyphLoader_Done(FT_GlyphLoader loader)
struct TT_FaceRec_ * TT_Face
FT_Request_Size(FT_Face face, FT_Size_Request req)
FT_Get_Char_Index(FT_Face face, FT_ULong charcode)
FT_Stream_Read(FT_Stream stream, FT_Byte *buffer, FT_ULong count)
FT_Request_Metrics(FT_Face face, FT_Size_Request req)
TT_MaxProfile max_profile
FT_Set_Char_Size(FT_Face face, FT_F26Dot6 char_width, FT_F26Dot6 char_height, FT_UInt horz_resolution, FT_UInt vert_resolution)
FT_Raster_DoneFunc raster_done
#define FT_DRIVER_IS_SCALABLE(x)
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
FT_Load_Sfnt_Table(FT_Face face, FT_ULong tag, FT_Long offset, FT_Byte *buffer, FT_ULong *length)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
EGLSurface EGLint EGLint EGLint width
static void Destroy_Module(FT_Module module)
FT_Incremental_InterfaceRec * FT_Incremental_Interface
FT_Get_Postscript_Name(FT_Face face)
ft_glyphslot_alloc_bitmap(FT_GlyphSlot slot, FT_ULong size)
#define FT_READ_ULONG(var)
#define FT_TRACE0(varformat)
FT_Renderer_TransformFunc transform_glyph
FT_Get_Track_Kerning(FT_Face face, FT_Fixed point_size, FT_Int degree, FT_Fixed *akerning)
#define FT_HAS_FIXED_SIZES(face)
FT_BEGIN_HEADER FT_List_Find(FT_List list, void *data)
FT_Select_Charmap(FT_Face face, FT_Encoding encoding)
static void destroy_charmaps(FT_Face face, FT_Memory memory)
FT_GlyphLoader glyph_loader
#define FT_IS_TRICKY(face)
FT_Face_GetKerningFunc get_kerning
typedefFT_BEGIN_HEADER struct FT_ValidatorRec_ volatile * FT_Validator
FT_Size_DoneFunc done_size
FT_Activate_Size(FT_Size size)
FT_Done_Size(FT_Size size)
FT_UShort maxSizeOfInstructions
const void * module_interface
FT_Stream_CloseFunc close
FT_Render_Glyph(FT_GlyphSlot slot, FT_Render_Mode render_mode)
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum format
FT_Get_SubGlyph_Info(FT_GlyphSlot glyph, FT_UInt sub_index, FT_Int *p_index, FT_UInt *p_flags, FT_Int *p_arg1, FT_Int *p_arg2, FT_Matrix *p_transform)
#define FT_TRACE7(varformat)
#define FT_RENEW_ARRAY(ptr, curcnt, newcnt)
FT_Load_Char(FT_Face face, FT_ULong char_code, FT_Int32 load_flags)
ft_validator_error(FT_Validator valid, FT_Error error)
static FT_Error open_face(FT_Driver driver, FT_Stream stream, FT_Long face_index, FT_Int num_params, FT_Parameter *params, FT_Face *aface)
#define FT_FACE_FLAG_EXTERNAL_STREAM
FT_Get_TrueType_Engine_Type(FT_Library library)
#define FT_READ_LONG(var)
FT_Get_First_Char(FT_Face face, FT_UInt *agindex)
#define FT_MODULE_FONT_DRIVER
#define TT_APPLE_ID_UNICODE_32
enum FT_TrueTypeEngineType_ FT_TrueTypeEngineType
FT_Sfnt_Table_Info(FT_Face face, FT_UInt table_index, FT_ULong *tag, FT_ULong *length)
enum FT_Encoding_ FT_Encoding
#define FT_LOAD_MONOCHROME
FT_Slot_LoadFunc load_glyph
FT_Set_Charmap(FT_Face face, FT_CharMap charmap)
static FT_Error ft_glyphslot_init(FT_GlyphSlot slot)
#define FT_HAS_GLYPH_NAMES(face)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
static void Destroy_Driver(FT_Driver driver)
FT_List_Add(FT_List list, FT_ListNode node)
FT_Glyph_Format glyph_format
FT_Size_RequestFunc request_size
FT_Error(* FT_Renderer_SetModeFunc)(FT_Renderer renderer, FT_ULong mode_tag, FT_Pointer mode_ptr)
FT_Face_DoneFunc done_face
FT_Size_Request_Type type
FT_MulFix(FT_Long a, FT_Long b)
ft_glyphslot_free_bitmap(FT_GlyphSlot slot)
FT_Outline_Check(FT_Outline *outline)
#define FT_HAS_VERTICAL(face)
FT_Stream_New(FT_Library library, const FT_Open_Args *args, FT_Stream *astream)
#define FT_TRACE3(varformat)
#define FT_FACE_MEMORY(x)
FT_CMap_New(FT_CMap_Class clazz, FT_Pointer init_data, FT_CharMap charmap, FT_CMap *acmap)
FT_CMap_Done(FT_CMap cmap)
const FT_String * module_name
FT_Vector_Transform(FT_Vector *vec, const FT_Matrix *matrix)
FT_BEGIN_HEADER struct FT_Glyph_Metrics_ FT_Glyph_Metrics
FT_Face_AttachFunc attach_file
FT_New_Library(FT_Memory memory, FT_Library *alibrary)
GLenum GLsizei GLsizei GLsizei GLsizei GLbitfield flags
static void destroy_size(FT_Memory memory, FT_Size size, FT_Driver driver)
static FT_Error ft_add_renderer(FT_Module module)
FT_Stream_Free(FT_Stream stream, FT_Int external)
struct FT_SizeRec_ * FT_Size
FT_Reference_Library(FT_Library library)
#define FT_MODULE_IS_RENDERER(x)
enum FT_Glyph_Format_ FT_Glyph_Format
FT_Slot_Internal internal
struct FT_Driver_ClassRec_ * FT_Driver_Class
FT_Open_Face(FT_Library library, const FT_Open_Args *args, FT_Long face_index, FT_Face *aface)
FT_Raster_RenderFunc raster_render
#define FT_TRACE5(varformat)
typedefFT_BEGIN_HEADER struct FT_AutoHinterRec_ * FT_AutoHinter
#define FT_LOAD_NO_AUTOHINT
static void ft_cmap_done_internal(FT_CMap cmap)
#define FT_RENDER_POOL_SIZE
FT_New_Face(FT_Library library, const char *filepathname, FT_Long face_index, FT_Face *aface)
#define FT_MODULE_IS_HINTER(x)
ft_validator_init(FT_Validator valid, const FT_Byte *base, const FT_Byte *limit, FT_ValidationLevel level)
FT_AutoHinter_GlyphLoadFunc load_glyph
FT_Fixed linearVertAdvance
GLint GLint GLint GLint GLint w
FT_Face_InitFunc init_face
FT_Stream_Open(FT_Stream stream, const char *filepathname)
FT_Get_Module(FT_Library library, const char *module_name)
FT_Outline_Translate(const FT_Outline *outline, FT_Pos xOffset, FT_Pos yOffset)
FT_Stream_OpenMemory(FT_Stream stream, const FT_Byte *base, FT_ULong size)
#define TT_PLATFORM_APPLE_UNICODE
FT_Get_Module_Interface(FT_Library library, const char *mod_name)
FT_Done_Face(FT_Face face)
FT_Raster_NewFunc raster_new
FT_Matrix transform_matrix
FT_Set_Debug_Hook(FT_Library library, FT_UInt hook_index, FT_DebugHook_Func debug_hook)
FT_Renderer_Class * clazz
#define FT_LOAD_NO_BITMAP
FT_CMap_CharNextFunc char_next
void(* FT_DebugHook_Func)(void *arg)
#define FT_FACE_FIND_SERVICE(face, ptr, id)
static void ft_set_current_renderer(FT_Library library)
#define FT_LOAD_IGNORE_TRANSFORM
#define FT_FACE_LIBRARY(x)
FT_CMap_VariantCharListFunc variantchar_list
struct FT_CharMapRec_ * FT_CharMap
#define FT_IS_SCALABLE(face)
FT_Module_Requester get_interface
void(* FT_List_Destructor)(FT_Memory memory, void *data, void *user)
FT_Short max_advance_width
FT_Get_Glyph_Name(FT_Face face, FT_UInt glyph_index, FT_Pointer buffer, FT_UInt buffer_max)
FT_Library_Version(FT_Library library, FT_Int *amajor, FT_Int *aminor, FT_Int *apatch)
FT_Face_GetVariantSelectors(FT_Face face)
FT_Get_Renderer(FT_Library library, FT_Glyph_Format format)
static void ft_glyphslot_clear(FT_GlyphSlot slot)
FT_Face_GetCharsOfVariant(FT_Face face, FT_ULong variantSelector)
FT_Module_Constructor FT_GLYPH_FORMAT_OUTLINE
FT_Module modules[FT_MAX_MODULES]
FT_CMap_CharVarIsDefaultFunc char_var_default
FT_Raccess_Guess(FT_Library library, FT_Stream stream, char *base_name, char **new_names, FT_Long *offsets, FT_Error *errors)
FT_BEGIN_HEADER FT_New_Size(FT_Face face, FT_Size *size)
FT_Get_Name_Index(FT_Face face, FT_String *glyph_name)
FT_Raccess_Get_HeaderInfo(FT_Library library, FT_Stream stream, FT_Long rfork_offset, FT_Long *map_offset, FT_Long *rdata_pos)
#define FT_LOAD_TARGET_MODE(x)
FT_Attach_File(FT_Face face, const char *filepathname)
FT_Set_Renderer(FT_Library library, FT_Renderer renderer, FT_UInt num_params, FT_Parameter *parameters)