38#define FT_COMPONENT ttcmap
41#define TT_PEEK_SHORT FT_PEEK_SHORT
42#define TT_PEEK_USHORT FT_PEEK_USHORT
43#define TT_PEEK_UINT24 FT_PEEK_UOFF3
44#define TT_PEEK_LONG FT_PEEK_LONG
45#define TT_PEEK_ULONG FT_PEEK_ULONG
47#define TT_NEXT_SHORT FT_NEXT_SHORT
48#define TT_NEXT_USHORT FT_NEXT_USHORT
49#define TT_NEXT_UINT24 FT_NEXT_UOFF3
50#define TT_NEXT_LONG FT_NEXT_LONG
51#define TT_NEXT_ULONG FT_NEXT_ULONG
92#ifdef TT_CONFIG_CMAP_FORMAT_0
118 for (
n = 0;
n < 256;
n++ )
131 tt_cmap0_char_index(
TT_CMap cmap,
132 FT_UInt32 char_code )
137 return char_code < 256 ?
table[6 + char_code] : 0;
142 tt_cmap0_char_next(
TT_CMap cmap,
143 FT_UInt32 *pchar_code )
146 FT_UInt32 charcode = *pchar_code;
152 while ( ++charcode < 256 )
154 gindex =
table[charcode];
168 tt_cmap0_get_info(
TT_CMap cmap,
291#ifdef TT_CONFIG_CMAP_FORMAT_2
320 for (
n = 0;
n < 256;
n++ )
331 if (
idx > max_subs )
338 glyph_ids = subs + ( max_subs + 1 ) * 8;
339 if ( glyph_ids >
valid->limit )
343 for (
n = 0;
n <= max_subs;
n++ )
355 if ( code_count == 0 )
361 if ( first_code >= 256 || code_count > 256 - first_code )
372 if ( ids < glyph_ids || ids + code_count * 2 >
table +
length )
404 FT_UInt32 char_code )
409 if ( char_code < 0x10000UL )
456 tt_cmap2_char_index(
TT_CMap cmap,
457 FT_UInt32 char_code )
464 subheader = tt_cmap2_get_subheader(
table, char_code );
495 tt_cmap2_char_next(
TT_CMap cmap,
496 FT_UInt32 *pcharcode )
501 FT_UInt32 charcode = *pcharcode + 1;
505 while ( charcode < 0x10000UL )
507 subheader = tt_cmap2_get_subheader(
table, charcode );
519 if ( char_lo >=
start +
count && charcode <= 0xFF )
528 if ( charcode == 0x100 )
533 if ( char_lo <
start )
568 if ( charcode <= 0xFF )
582 tt_cmap2_get_info(
TT_CMap cmap,
690#ifdef TT_CONFIG_CMAP_FORMAT_4
692 typedef struct TT_CMap4Rec_
695 FT_UInt32 cur_charcode;
705 } TT_CMap4Rec, *TT_CMap4;
709 tt_cmap4_init( TT_CMap4 cmap,
715 cmap->cmap.data =
table;
719 cmap->cur_charcode = (FT_UInt32)0xFFFFFFFFUL;
720 cmap->cur_gindex = 0;
727 tt_cmap4_set_range( TT_CMap4 cmap,
732 FT_UInt num_ranges = cmap->num_ranges;
735 while ( range_index < num_ranges )
740 p =
table + 14 + range_index * 2;
743 p += 2 + num_ranges * 2;
754 if ( range_index >= num_ranges - 1 &&
755 cmap->cur_start == 0xFFFFU &&
756 cmap->cur_end == 0xFFFFU )
772 cmap->cur_range = range_index;
789 tt_cmap4_next( TT_CMap4 cmap )
797 if ( cmap->cur_charcode >= 0xFFFFUL )
800 charcode = (
FT_UInt)cmap->cur_charcode + 1;
802 if ( charcode < cmap->cur_start )
803 charcode = cmap->cur_start;
809 FT_Int delta = cmap->cur_delta;
812 if ( charcode <=
end )
833 cmap->cur_charcode = charcode;
834 cmap->cur_gindex = gindex;
838 }
while ( ++charcode <=
end );
854 if ( (
FT_Int)charcode + delta < 0 &&
856 charcode = (
FT_UInt)( -delta );
858 else if ( (
FT_Int)charcode + delta < 0x10000L &&
860 charcode = (
FT_UInt)( 0x10000L - delta );
868 cmap->cur_charcode = charcode;
869 cmap->cur_gindex = gindex;
872 }
while ( ++charcode <=
end );
878 if ( tt_cmap4_set_range( cmap, cmap->cur_range + 1 ) < 0 )
881 if ( charcode < cmap->cur_start )
882 charcode = cmap->cur_start;
886 cmap->cur_charcode = (FT_UInt32)0xFFFFFFFFUL;
887 cmap->cur_gindex = 0;
934 if (
length < 16 + num_segs * 2 * 4 )
947 if ( ( search_range | range_shift ) & 1 )
955 if ( search_range > num_segs ||
956 search_range * 2 < num_segs ||
957 search_range + range_shift != num_segs ||
958 search_range != ( 1U << entry_selector ) )
963 starts =
table + 16 + num_segs * 2;
964 deltas = starts + num_segs * 2;
965 offsets = deltas + num_segs * 2;
966 glyph_ids =
offsets + num_segs * 2;
971 p =
ends + ( num_segs - 1 ) * 2;
978 FT_UInt last_start = 0, last_end = 0;
986 for (
n = 0;
n < num_segs;
n++ )
1001 if ( start <= last_end && n > 0 )
1010 if ( last_start >
start || last_end >
end )
1024 if (
p < glyph_ids ||
1038 else if (
n != num_segs - 1 ||
1039 !(
start == 0xFFFFU &&
end == 0xFFFFU ) )
1041 if (
p < glyph_ids ||
1065 else if (
offset == 0xFFFFU )
1071 n != num_segs - 1 ||
1072 !(
start == 0xFFFFU &&
end == 0xFFFFU ) )
1086 tt_cmap4_char_map_linear(
TT_CMap cmap,
1087 FT_UInt32* pcharcode,
1097 FT_UInt32 charcode = *pcharcode;
1106 num_segs = num_segs2 >> 1;
1114 if ( charcode > 0xFFFFU )
1118 p = cmap->
data + 14;
1119 q = cmap->
data + 16 + num_segs2;
1121 for (
i = 0;
i < num_segs;
i++ )
1126 if ( charcode <
start )
1135 if ( charcode <=
end )
1140 r =
q - 2 + num_segs2;
1147 if (
i >= num_segs - 1 &&
1148 start == 0xFFFFU &&
end == 0xFFFFU )
1187 if ( (
FT_Int)charcode + delta < 0 &&
1189 charcode = (
FT_UInt)( -delta );
1191 else if ( (
FT_Int)charcode + delta < 0x10000L &&
1193 charcode = (
FT_UInt)( 0x10000L - delta );
1200 if (
next && !gindex )
1202 if ( charcode >= 0xFFFFU )
1214 *pcharcode = charcode;
1221 tt_cmap4_char_map_binary(
TT_CMap cmap,
1222 FT_UInt32* pcharcode,
1243 FT_ERROR((
"Bad cmap table number. Probable update font error in file\n"
1244 "'%s'\nPlease reboot and try again.\n", __FILE__ ));
1257 num_segs = num_segs2 >> 1;
1272 mid = (
min +
max ) >> 1;
1273 p = cmap->
data + 14 + mid * 2;
1278 if ( charcode <
start )
1280 else if ( charcode >
end )
1291 if ( mid >= num_segs - 1 &&
1292 start == 0xFFFFU &&
end == 0xFFFFU )
1314 for (
i =
max;
i > 0;
i-- )
1321 p = cmap->
data + 14 + (
i - 1 ) * 2;
1324 if ( charcode > prev_end )
1343 if ( mid ==
max + 1 )
1360 for (
i =
max + 1;
i < num_segs;
i++ )
1365 p = cmap->
data + 14 +
i * 2;
1370 if ( charcode < next_start )
1397 p = cmap->
data + 14 + mid * 2;
1440 if ( (
FT_Int)charcode + delta < 0 &&
1442 charcode = (
FT_UInt)( -delta );
1444 else if ( (
FT_Int)charcode + delta < 0x10000L &&
1446 charcode = (
FT_UInt)( 0x10000L - delta );
1456 TT_CMap4 cmap4 = (TT_CMap4)cmap;
1462 if ( charcode >
end )
1465 if ( mid == num_segs )
1469 if ( tt_cmap4_set_range( cmap4, mid ) )
1472 *pcharcode = charcode;
1476 cmap4->cur_charcode = charcode;
1479 cmap4->cur_gindex = gindex;
1482 cmap4->cur_charcode = charcode;
1483 tt_cmap4_next( cmap4 );
1484 gindex = cmap4->cur_gindex;
1488 *pcharcode = cmap4->cur_charcode;
1497 tt_cmap4_char_index(
TT_CMap cmap,
1498 FT_UInt32 char_code )
1500 if ( char_code >= 0x10000UL )
1504 return tt_cmap4_char_map_linear( cmap, &char_code, 0 );
1506 return tt_cmap4_char_map_binary( cmap, &char_code, 0 );
1511 tt_cmap4_char_next(
TT_CMap cmap,
1512 FT_UInt32 *pchar_code )
1517 if ( *pchar_code >= 0xFFFFU )
1521 gindex = tt_cmap4_char_map_linear( cmap, pchar_code, 1 );
1524 TT_CMap4 cmap4 = (TT_CMap4)cmap;
1528 if ( *pchar_code == cmap4->cur_charcode )
1530 tt_cmap4_next( cmap4 );
1531 gindex = cmap4->cur_gindex;
1533 *pchar_code = cmap4->cur_charcode;
1536 gindex = tt_cmap4_char_map_binary( cmap, pchar_code, 1 );
1544 tt_cmap4_get_info(
TT_CMap cmap,
1560 sizeof ( TT_CMap4Rec ),
1607#ifdef TT_CONFIG_CMAP_FORMAT_6
1648 tt_cmap6_char_index(
TT_CMap cmap,
1649 FT_UInt32 char_code )
1670 tt_cmap6_char_next(
TT_CMap cmap,
1671 FT_UInt32 *pchar_code )
1675 FT_UInt32 char_code = *pchar_code + 1;
1684 if ( char_code >= 0x10000UL )
1687 if ( char_code <
start )
1702 if ( char_code >= 0xFFFFU )
1714 tt_cmap6_get_info(
TT_CMap cmap,
1805#ifdef TT_CONFIG_CMAP_FORMAT_8
1814 FT_UInt32 num_groups;
1829 if ( num_groups > (FT_UInt32)(
valid->limit -
p ) / 12 )
1837 for (
n = 0;
n < num_groups;
n++ )
1864 if (
start & ~0xFFFFU )
1873 if ( (is32[hi >> 3] & ( 0x80 >> ( hi & 7 ) ) ) == 0 )
1876 if ( (is32[lo >> 3] & ( 0x80 >> ( lo & 7 ) ) ) == 0 )
1886 if (
end & ~0xFFFFU )
1893 if ( (is32[lo >> 3] & ( 0x80 >> ( lo & 7 ) ) ) != 0 )
1908 tt_cmap8_char_index(
TT_CMap cmap,
1909 FT_UInt32 char_code )
1918 for ( ; num_groups > 0; num_groups-- )
1924 if ( char_code <
start )
1927 if ( char_code <=
end )
1929 if ( start_id > 0xFFFFFFFFUL - ( char_code -
start ) )
1941 tt_cmap8_char_next(
TT_CMap cmap,
1942 FT_UInt32 *pchar_code )
1946 FT_UInt32 char_code;
1954 if ( *pchar_code >= 0xFFFFFFFFUL )
1957 char_code = *pchar_code + 1;
1961 for ( ; num_groups > 0; num_groups-- )
1967 if ( char_code <
start )
1971 if ( char_code <=
end )
1974 if ( start_id > 0xFFFFFFFFUL - ( char_code -
start ) )
1977 gindex = (
FT_UInt)( start_id + ( char_code -
start ) );
1982 if ( char_code >= 0xFFFFFFFFUL )
2008 tt_cmap8_get_info(
TT_CMap cmap,
2070#ifdef TT_CONFIG_CMAP_FORMAT_10
2112 tt_cmap10_char_index(
TT_CMap cmap,
2113 FT_UInt32 char_code )
2123 if ( char_code <
start )
2139 tt_cmap10_char_next(
TT_CMap cmap,
2140 FT_UInt32 *pchar_code )
2143 FT_UInt32 char_code;
2151 if ( *pchar_code >= 0xFFFFFFFFUL )
2154 char_code = *pchar_code + 1;
2156 if ( char_code <
start )
2168 if ( char_code >= 0xFFFFFFFFUL )
2174 *pchar_code = char_code;
2180 tt_cmap10_get_info(
TT_CMap cmap,
2194 tt_cmap10_class_rec,
2246#ifdef TT_CONFIG_CMAP_FORMAT_12
2248 typedef struct TT_CMap12Rec_
2257 } TT_CMap12Rec, *TT_CMap12;
2261 tt_cmap12_init( TT_CMap12 cmap,
2264 cmap->cmap.data =
table;
2296 (
length - 16 ) / 12 < num_groups )
2304 for (
n = 0;
n < num_groups;
n++ )
2339 tt_cmap12_next( TT_CMap12 cmap )
2348 if ( cmap->cur_charcode >= 0xFFFFFFFFUL )
2351 char_code = cmap->cur_charcode + 1;
2353 for (
n = cmap->cur_group; n < cmap->num_groups;
n++ )
2355 p = cmap->cmap.data + 16 + 12 *
n;
2360 if ( char_code <
start )
2364 if ( char_code <=
end )
2367 if ( start_id > 0xFFFFFFFFUL - ( char_code -
start ) )
2370 gindex = (
FT_UInt)( start_id + ( char_code -
start ) );
2375 if ( char_code >= 0xFFFFFFFFUL )
2387 cmap->cur_charcode = char_code;
2388 cmap->cur_gindex = gindex;
2389 cmap->cur_group =
n;
2401 tt_cmap12_char_map_binary(
TT_CMap cmap,
2402 FT_UInt32* pchar_code,
2408 FT_UInt32 char_code = *pchar_code;
2422 if ( char_code >= 0xFFFFFFFFUL )
2434 mid = (
min +
max ) >> 1;
2435 p = cmap->
data + 16 + 12 * mid;
2440 if ( char_code <
start )
2442 else if ( char_code >
end )
2449 if ( start_id > 0xFFFFFFFFUL - ( char_code -
start ) )
2452 gindex = (
FT_UInt)( start_id + ( char_code -
start ) );
2460 TT_CMap12 cmap12 = (TT_CMap12)cmap;
2466 if ( char_code >
end )
2469 if ( mid == num_groups )
2474 cmap12->cur_charcode = char_code;
2475 cmap12->cur_group = mid;
2482 tt_cmap12_next( cmap12 );
2484 if ( cmap12->valid )
2485 gindex = cmap12->cur_gindex;
2488 cmap12->cur_gindex = gindex;
2490 *pchar_code = cmap12->cur_charcode;
2498 tt_cmap12_char_index(
TT_CMap cmap,
2499 FT_UInt32 char_code )
2501 return tt_cmap12_char_map_binary( cmap, &char_code, 0 );
2506 tt_cmap12_char_next(
TT_CMap cmap,
2507 FT_UInt32 *pchar_code )
2509 TT_CMap12 cmap12 = (TT_CMap12)cmap;
2514 if ( cmap12->valid && cmap12->cur_charcode == *pchar_code )
2516 tt_cmap12_next( cmap12 );
2517 if ( cmap12->valid )
2519 gindex = cmap12->cur_gindex;
2520 *pchar_code = (FT_UInt32)cmap12->cur_charcode;
2526 gindex = tt_cmap12_char_map_binary( cmap, pchar_code, 1 );
2533 tt_cmap12_get_info(
TT_CMap cmap,
2547 tt_cmap12_class_rec,
2549 sizeof ( TT_CMap12Rec ),
2599#ifdef TT_CONFIG_CMAP_FORMAT_13
2601 typedef struct TT_CMap13Rec_
2610 } TT_CMap13Rec, *TT_CMap13;
2614 tt_cmap13_init( TT_CMap13 cmap,
2617 cmap->cmap.data =
table;
2649 (
length - 16 ) / 12 < num_groups )
2657 for (
n = 0;
n < num_groups;
n++ )
2687 tt_cmap13_next( TT_CMap13 cmap )
2696 if ( cmap->cur_charcode >= 0xFFFFFFFFUL )
2699 char_code = cmap->cur_charcode + 1;
2701 for (
n = cmap->cur_group; n < cmap->num_groups;
n++ )
2703 p = cmap->cmap.data + 16 + 12 *
n;
2708 if ( char_code <
start )
2711 if ( char_code <=
end )
2715 if ( gindex && gindex < (
FT_UInt)
face->num_glyphs )
2717 cmap->cur_charcode = char_code;
2718 cmap->cur_gindex = gindex;
2719 cmap->cur_group =
n;
2732 tt_cmap13_char_map_binary(
TT_CMap cmap,
2733 FT_UInt32* pchar_code,
2739 FT_UInt32 char_code = *pchar_code;
2753 if ( char_code >= 0xFFFFFFFFUL )
2765 mid = (
min +
max ) >> 1;
2766 p = cmap->
data + 16 + 12 * mid;
2771 if ( char_code <
start )
2773 else if ( char_code >
end )
2786 TT_CMap13 cmap13 = (TT_CMap13)cmap;
2792 if ( char_code >
end )
2795 if ( mid == num_groups )
2800 cmap13->cur_charcode = char_code;
2801 cmap13->cur_group = mid;
2808 tt_cmap13_next( cmap13 );
2810 if ( cmap13->valid )
2811 gindex = cmap13->cur_gindex;
2814 cmap13->cur_gindex = gindex;
2816 *pchar_code = cmap13->cur_charcode;
2824 tt_cmap13_char_index(
TT_CMap cmap,
2825 FT_UInt32 char_code )
2827 return tt_cmap13_char_map_binary( cmap, &char_code, 0 );
2832 tt_cmap13_char_next(
TT_CMap cmap,
2833 FT_UInt32 *pchar_code )
2835 TT_CMap13 cmap13 = (TT_CMap13)cmap;
2840 if ( cmap13->valid && cmap13->cur_charcode == *pchar_code )
2842 tt_cmap13_next( cmap13 );
2843 if ( cmap13->valid )
2845 gindex = cmap13->cur_gindex;
2846 *pchar_code = cmap13->cur_charcode;
2852 gindex = tt_cmap13_char_map_binary( cmap, pchar_code, 1 );
2859 tt_cmap13_get_info(
TT_CMap cmap,
2873 tt_cmap13_class_rec,
2875 sizeof ( TT_CMap13Rec ),
2958#ifdef TT_CONFIG_CMAP_FORMAT_14
2960 typedef struct TT_CMap14Rec_
2969 FT_UInt32 max_results;
2973 } TT_CMap14Rec, *TT_CMap14;
2977 tt_cmap14_done( TT_CMap14 cmap )
2982 cmap->max_results = 0;
2983 if (
memory && cmap->results )
2989 tt_cmap14_ensure( TT_CMap14 cmap,
2990 FT_UInt32 num_results,
2993 FT_UInt32 old_max = cmap->max_results;
2997 if ( num_results > cmap->max_results )
3004 cmap->max_results = num_results;
3012 tt_cmap14_init( TT_CMap14 cmap,
3015 cmap->cmap.data =
table;
3019 cmap->max_results = 0;
3020 cmap->results =
NULL;
3045 (
length - 10 ) / 11 < num_selectors )
3056 for (
n = 0;
n < num_selectors;
n++ )
3066 if ( varSel < lastVarSel )
3069 lastVarSel = varSel + 1;
3081 if ( defp + 4 >
valid->limit )
3090 for (
i = 0;
i < numRanges;
i++ )
3096 if (
base +
cnt >= 0x110000UL )
3099 if (
base < lastBase )
3107 if ( nondefOff != 0 )
3114 if ( ndp + 4 >
valid->limit )
3120 if ( numMappings > ( (
FT_ULong)(
valid->limit - ndp ) ) / 5 )
3123 for (
i = 0;
i < numMappings;
i++ )
3129 if ( uni >= 0x110000UL )
3132 if ( uni < lastUni )
3150 tt_cmap14_char_index(
TT_CMap cmap,
3151 FT_UInt32 char_code )
3162 tt_cmap14_char_next(
TT_CMap cmap,
3163 FT_UInt32 *pchar_code )
3174 tt_cmap14_get_info(
TT_CMap cmap,
3189 FT_UInt32 char_code )
3203 FT_UInt32 mid = (
min +
max ) >> 1;
3209 if ( char_code <
start )
3211 else if ( char_code >
start +
cnt )
3223 FT_UInt32 char_code )
3237 FT_UInt32 mid = (
min +
max ) >> 1;
3242 if ( char_code < uni )
3244 else if ( char_code > uni )
3256 FT_UInt32 variantCode )
3270 FT_UInt32 mid = (
min +
max ) >> 1;
3275 if ( variantCode < varSel )
3277 else if ( variantCode > varSel )
3288 tt_cmap14_char_var_index(
TT_CMap cmap,
3291 FT_UInt32 variantSelector )
3293 FT_Byte*
p = tt_cmap14_find_variant( cmap->
data + 6, variantSelector );
3305 tt_cmap14_char_map_def_binary( cmap->
data + defOff, charcode ) )
3312 if ( nondefOff != 0 )
3313 return tt_cmap14_char_map_nondef_binary( cmap->
data + nondefOff,
3321 tt_cmap14_char_var_isdefault(
TT_CMap cmap,
3323 FT_UInt32 variantSelector )
3325 FT_Byte*
p = tt_cmap14_find_variant( cmap->
data + 6, variantSelector );
3337 tt_cmap14_char_map_def_binary( cmap->
data + defOff, charcode ) )
3340 if ( nondefOff != 0 &&
3341 tt_cmap14_char_map_nondef_binary( cmap->
data + nondefOff,
3350 tt_cmap14_variants(
TT_CMap cmap,
3353 TT_CMap14 cmap14 = (TT_CMap14)cmap;
3354 FT_UInt32
count = cmap14->num_selectors;
3360 if ( tt_cmap14_ensure( cmap14, (
count + 1 ),
memory ) )
3363 result = cmap14->results;
3376 tt_cmap14_char_variants(
TT_CMap cmap,
3378 FT_UInt32 charCode )
3380 TT_CMap14 cmap14 = (TT_CMap14) cmap;
3381 FT_UInt32
count = cmap14->num_selectors;
3386 if ( tt_cmap14_ensure( cmap14, (
count + 1 ),
memory ) )
3396 if ( ( defOff != 0 &&
3397 tt_cmap14_char_map_def_binary( cmap->
data + defOff,
3400 tt_cmap14_char_map_nondef_binary( cmap->
data + nondefOff,
3409 return cmap14->results;
3414 tt_cmap14_def_char_count(
FT_Byte *
p )
3421 for ( ; numRanges > 0; numRanges-- )
3432 tt_cmap14_get_def_chars(
TT_CMap cmap,
3436 TT_CMap14 cmap14 = (TT_CMap14) cmap;
3437 FT_UInt32 numRanges;
3442 cnt = tt_cmap14_def_char_count(
p );
3445 if ( tt_cmap14_ensure( cmap14, (
cnt + 1 ),
memory ) )
3448 for (
q = cmap14->results; numRanges > 0; numRanges-- )
3460 }
while ( --
cnt != 0 );
3464 return cmap14->results;
3469 tt_cmap14_get_nondef_chars(
TT_CMap cmap,
3473 TT_CMap14 cmap14 = (TT_CMap14) cmap;
3474 FT_UInt32 numMappings;
3481 if ( tt_cmap14_ensure( cmap14, ( numMappings + 1 ),
memory ) )
3484 ret = cmap14->results;
3485 for (
i = 0;
i < numMappings;
i++ )
3497 tt_cmap14_variant_chars(
TT_CMap cmap,
3499 FT_UInt32 variantSelector )
3514 if ( defOff == 0 && nondefOff == 0 )
3518 return tt_cmap14_get_nondef_chars( cmap, cmap->
data + nondefOff,
3520 else if ( nondefOff == 0 )
3521 return tt_cmap14_get_def_chars( cmap, cmap->
data + defOff,
3527 TT_CMap14 cmap14 = (TT_CMap14) cmap;
3528 FT_UInt32 numRanges;
3529 FT_UInt32 numMappings;
3539 p = cmap->
data + nondefOff;
3540 dp = cmap->
data + defOff;
3543 dcnt = tt_cmap14_def_char_count( dp );
3546 if ( numMappings == 0 )
3547 return tt_cmap14_get_def_chars( cmap, cmap->
data + defOff,
3550 return tt_cmap14_get_nondef_chars( cmap, cmap->
data + nondefOff,
3553 if ( tt_cmap14_ensure( cmap14, ( dcnt + numMappings + 1 ),
memory ) )
3556 ret = cmap14->results;
3567 if ( nuni > duni + dcnt )
3569 for (
k = 0;
k <= dcnt;
k++ )
3570 ret[
i++] = duni +
k;
3574 if ( di > numRanges )
3587 if (
ni > numMappings )
3595 if (
ni <= numMappings )
3601 while (
ni < numMappings )
3608 else if ( di <= numRanges )
3613 for (
k = 0;
k <= dcnt;
k++ )
3614 ret[
i++] = duni +
k;
3616 while ( di < numRanges )
3621 for (
k = 0;
k <= dcnt;
k++ )
3622 ret[
i++] = duni +
k;
3635 tt_cmap14_class_rec,
3637 sizeof ( TT_CMap14Rec ),
3669#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
3690 FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)
face->psnames;
3695 if ( !psnames->unicodes_init )
3696 return FT_THROW( Unimplemented_Feature );
3698 return psnames->unicodes_init(
memory,
3700 face->root.num_glyphs,
3721 FT_UInt32 char_code )
3724 FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)
face->psnames;
3727 return psnames->unicodes_char_index( unicodes, char_code );
3733 FT_UInt32 *pchar_code )
3736 FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)
face->psnames;
3739 return psnames->unicodes_char_next( unicodes, pchar_code );
3770#define TTCMAPCITEM( a ) &a,
3791 if ( !
p ||
face->cmap_size < 4 )
3806 FT_TRACE4((
"tt_face_build_cmaps: %d cmaps\n", num_cmaps ));
3809 for ( ; num_cmaps > 0 &&
p + 8 <=
limit; num_cmaps-- )
3818 charmap.
encoding = FT_ENCODING_NONE;
3821 if (
offset && offset <= face->cmap_size - 2 )
3829 for ( ; *pclazz; pclazz++ )
3849 if ( !
valid.validator.error )
3859 cmap, &charmap, &ttcmap ) )
3869 " broken cmap sub-table ignored\n" ));
3878 " unsupported cmap sub-table ignored\n" ));
3897 return FT_THROW( Invalid_CharMap_Format );
static struct _test_info results[8]
basic_ostream< _CharT, _Traits > &_STLP_CALL ends(basic_ostream< _CharT, _Traits > &__os)
#define FT_CALLBACK_DEF(x)
#define FT_ASSERT(condition)
#define FT_TRACE0(varformat)
#define FT_ERROR(varformat)
#define FT_TRACE4(varformat)
#define FT_QRENEW_ARRAY(ptr, curcnt, newcnt)
FT_UInt(* FT_CMap_CharNextFunc)(FT_CMap cmap, FT_UInt32 *achar_code)
#define FT_FACE_LIBRARY(x)
#define FT_PAD_FLOOR(x, n)
FT_UInt(* FT_CMap_CharVarIndexFunc)(FT_CMap cmap, FT_CMap unicode_cmap, FT_UInt32 char_code, FT_UInt32 variant_selector)
FT_UInt32 *(* FT_CMap_CharVariantListFunc)(FT_CMap cmap, FT_Memory mem, FT_UInt32 char_code)
FT_Int(* FT_CMap_CharVarIsDefaultFunc)(FT_CMap cmap, FT_UInt32 char_code, FT_UInt32 variant_selector)
#define FT_FACE_MEMORY(x)
FT_CMap_New(FT_CMap_Class clazz, FT_Pointer init_data, FT_CharMap charmap, FT_CMap *acmap)
struct FT_CMapRec_ * FT_CMap
FT_UInt32 *(* FT_CMap_VariantCharListFunc)(FT_CMap cmap, FT_Memory mem, FT_UInt32 variant_selector)
FT_UInt32 *(* FT_CMap_VariantListFunc)(FT_CMap cmap, FT_Memory mem)
FT_Error(* FT_CMap_InitFunc)(FT_CMap cmap, FT_Pointer init_data)
void(* FT_CMap_DoneFunc)(FT_CMap cmap)
FT_UInt(* FT_CMap_CharIndexFunc)(FT_CMap cmap, FT_UInt32 char_code)
#define FT_NEXT_USHORT(buffer)
#define FT_PEEK_USHORT(p)
#define FT_NEXT_BYTE(buffer)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
FT_BEGIN_HEADER typedef unsigned char FT_Bool
#define FT_INVALID_TOO_SHORT
#define FT_INVALID_OFFSET
ft_validator_init(FT_Validator valid, const FT_Byte *base, const FT_Byte *limit, FT_ValidationLevel level)
typedefFT_BEGIN_HEADER struct FT_ValidatorRec_ volatile * FT_Validator
#define FT_INVALID_GLYPH_ID
static const FxOffsetAndName offsets[]
static struct netconfig_info ni
GLuint GLuint GLsizei count
GLdouble GLdouble GLdouble r
GLdouble GLdouble GLdouble GLdouble q
GLsizei const GLvoid * pointer
GLenum GLuint GLint GLenum face
GLboolean GLenum GLenum GLvoid * values
GLuint GLsizei GLsizei * length
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static char memory[1024 *256]
static unsigned __int64 next
FT_CMap_CharIndexFunc char_index
TT_CMap_ValidateFunc validate
TT_CMap_Info_GetFunc get_cmap_info
const char *(* PS_GetGlyphNameFunc)(FT_Pointer data, FT_UInt string_index)
void(* PS_FreeGlyphNameFunc)(FT_Pointer data, const char *name)
FT_Error(* TT_CMap_Info_GetFunc)(FT_CharMap charmap, TT_CMapInfo *cmap_info)
tt_get_cmap_info(FT_CharMap charmap, TT_CMapInfo *cmap_info)
tt_cmap_init(TT_CMap cmap, FT_Byte *table)
static const TT_CMap_Class tt_cmap_classes[]
tt_face_build_cmaps(TT_Face face)
#define TT_CMAP_FLAG_OVERLAPPING
struct TT_CMapRec_ * TT_CMap
#define TT_VALID_GLYPH_COUNT(x)
FT_CALLBACK_TABLE const TT_CMap_ClassRec tt_cmap_unicode_class_rec
const struct TT_CMap_ClassRec_ * TT_CMap_Class
#define FT_DEFINE_TT_CMAP(class_, size_, init_, done_, char_index_, char_next_, char_var_index_, char_var_default_, variant_list_, charvariant_list_, variantchar_list_, format_, validate_, get_cmap_info_)
FT_Error(* TT_CMap_ValidateFunc)(FT_Byte *data, FT_Validator valid)
#define TT_CMAP_FLAG_UNSORTED
FT_BEGIN_HEADER tt_face_get_ps_name(TT_Face face, FT_UInt idx, FT_String **PSname)
struct TT_FaceRec_ * TT_Face