|
|
|
@ -59,10 +59,14 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap_init( TT_CMap cmap, |
|
|
|
|
FT_Byte* table ) |
|
|
|
|
tt_cmap_init( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
void* table_ ) |
|
|
|
|
{ |
|
|
|
|
cmap->data = table; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* table = (FT_Byte*)table_; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ttcmap->data = table; |
|
|
|
|
return FT_Err_Ok; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -128,10 +132,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap0_char_index( TT_CMap cmap, |
|
|
|
|
tt_cmap0_char_index( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 char_code ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* table = cmap->data; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* table = ttcmap->data; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return char_code < 256 ? table[6 + char_code] : 0; |
|
|
|
@ -139,10 +144,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap0_char_next( TT_CMap cmap, |
|
|
|
|
tt_cmap0_char_next( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 *pchar_code ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* table = cmap->data; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* table = ttcmap->data; |
|
|
|
|
FT_UInt32 charcode = *pchar_code; |
|
|
|
|
FT_UInt32 result = 0; |
|
|
|
|
FT_UInt gindex = 0; |
|
|
|
@ -165,10 +171,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap0_get_info( TT_CMap cmap, |
|
|
|
|
tt_cmap0_get_info( FT_CharMap cmap, /* TT_CMap */ |
|
|
|
|
TT_CMapInfo *cmap_info ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* p = cmap->data + 4; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* p = ttcmap->data + 4; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmap_info->format = 0; |
|
|
|
@ -453,10 +460,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap2_char_index( TT_CMap cmap, |
|
|
|
|
tt_cmap2_char_index( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 char_code ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* table = cmap->data; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* table = ttcmap->data; |
|
|
|
|
FT_UInt result = 0; |
|
|
|
|
FT_Byte* subheader; |
|
|
|
|
|
|
|
|
@ -492,10 +500,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap2_char_next( TT_CMap cmap, |
|
|
|
|
tt_cmap2_char_next( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 *pcharcode ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* table = cmap->data; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* table = ttcmap->data; |
|
|
|
|
FT_UInt gindex = 0; |
|
|
|
|
FT_UInt32 result = 0; |
|
|
|
|
FT_UInt32 charcode = *pcharcode + 1; |
|
|
|
@ -579,10 +588,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap2_get_info( TT_CMap cmap, |
|
|
|
|
tt_cmap2_get_info( FT_CharMap cmap, /* TT_CMap */ |
|
|
|
|
TT_CMapInfo *cmap_info ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* p = cmap->data + 4; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* p = ttcmap->data + 4; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmap_info->format = 2; |
|
|
|
@ -706,18 +716,20 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap4_init( TT_CMap4 cmap, |
|
|
|
|
FT_Byte* table ) |
|
|
|
|
tt_cmap4_init( FT_CMap cmap, /* TT_CMap4 */ |
|
|
|
|
void* table_ ) |
|
|
|
|
{ |
|
|
|
|
TT_CMap4 ttcmap = (TT_CMap4)cmap; |
|
|
|
|
FT_Byte* table = (FT_Byte*)table_; |
|
|
|
|
FT_Byte* p; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmap->cmap.data = table; |
|
|
|
|
ttcmap->cmap.data = table; |
|
|
|
|
|
|
|
|
|
p = table + 6; |
|
|
|
|
cmap->num_ranges = FT_PEEK_USHORT( p ) >> 1; |
|
|
|
|
cmap->cur_charcode = (FT_UInt32)0xFFFFFFFFUL; |
|
|
|
|
cmap->cur_gindex = 0; |
|
|
|
|
p = table + 6; |
|
|
|
|
ttcmap->num_ranges = FT_PEEK_USHORT( p ) >> 1; |
|
|
|
|
ttcmap->cur_charcode = (FT_UInt32)0xFFFFFFFFUL; |
|
|
|
|
ttcmap->cur_gindex = 0; |
|
|
|
|
|
|
|
|
|
return FT_Err_Ok; |
|
|
|
|
} |
|
|
|
@ -755,7 +767,7 @@ |
|
|
|
|
cmap->cur_start == 0xFFFFU && |
|
|
|
|
cmap->cur_end == 0xFFFFU ) |
|
|
|
|
{ |
|
|
|
|
TT_Face face = (TT_Face)cmap->cmap.cmap.charmap.face; |
|
|
|
|
TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); |
|
|
|
|
FT_Byte* limit = face->cmap_table + face->cmap_size; |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -788,7 +800,7 @@ |
|
|
|
|
static void |
|
|
|
|
tt_cmap4_next( TT_CMap4 cmap ) |
|
|
|
|
{ |
|
|
|
|
TT_Face face = (TT_Face)cmap->cmap.cmap.charmap.face; |
|
|
|
|
TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); |
|
|
|
|
FT_Byte* limit = face->cmap_table + face->cmap_size; |
|
|
|
|
|
|
|
|
|
FT_UInt charcode; |
|
|
|
@ -1093,7 +1105,7 @@ |
|
|
|
|
FT_UInt32* pcharcode, |
|
|
|
|
FT_Bool next ) |
|
|
|
|
{ |
|
|
|
|
TT_Face face = (TT_Face)cmap->cmap.charmap.face; |
|
|
|
|
TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); |
|
|
|
|
FT_Byte* limit = face->cmap_table + face->cmap_size; |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1222,7 +1234,7 @@ |
|
|
|
|
FT_UInt32* pcharcode, |
|
|
|
|
FT_Bool next ) |
|
|
|
|
{ |
|
|
|
|
TT_Face face = (TT_Face)cmap->cmap.charmap.face; |
|
|
|
|
TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); |
|
|
|
|
FT_Byte* limit = face->cmap_table + face->cmap_size; |
|
|
|
|
|
|
|
|
|
FT_UInt num_segs2, start, end, offset; |
|
|
|
@ -1468,31 +1480,35 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap4_char_index( TT_CMap cmap, |
|
|
|
|
tt_cmap4_char_index( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 char_code ) |
|
|
|
|
{ |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( char_code >= 0x10000UL ) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
if ( cmap->flags & TT_CMAP_FLAG_UNSORTED ) |
|
|
|
|
return tt_cmap4_char_map_linear( cmap, &char_code, 0 ); |
|
|
|
|
if ( ttcmap->flags & TT_CMAP_FLAG_UNSORTED ) |
|
|
|
|
return tt_cmap4_char_map_linear( ttcmap, &char_code, 0 ); |
|
|
|
|
else |
|
|
|
|
return tt_cmap4_char_map_binary( cmap, &char_code, 0 ); |
|
|
|
|
return tt_cmap4_char_map_binary( ttcmap, &char_code, 0 ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap4_char_next( TT_CMap cmap, |
|
|
|
|
tt_cmap4_char_next( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 *pchar_code ) |
|
|
|
|
{ |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_UInt gindex; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( *pchar_code >= 0xFFFFU ) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
if ( cmap->flags & TT_CMAP_FLAG_UNSORTED ) |
|
|
|
|
gindex = tt_cmap4_char_map_linear( cmap, pchar_code, 1 ); |
|
|
|
|
if ( ttcmap->flags & TT_CMAP_FLAG_UNSORTED ) |
|
|
|
|
gindex = tt_cmap4_char_map_linear( ttcmap, pchar_code, 1 ); |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
TT_CMap4 cmap4 = (TT_CMap4)cmap; |
|
|
|
@ -1507,7 +1523,7 @@ |
|
|
|
|
*pchar_code = cmap4->cur_charcode; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
gindex = tt_cmap4_char_map_binary( cmap, pchar_code, 1 ); |
|
|
|
|
gindex = tt_cmap4_char_map_binary( ttcmap, pchar_code, 1 ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return gindex; |
|
|
|
@ -1515,10 +1531,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap4_get_info( TT_CMap cmap, |
|
|
|
|
tt_cmap4_get_info( FT_CharMap cmap, /* TT_CMap */ |
|
|
|
|
TT_CMapInfo *cmap_info ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* p = cmap->data + 4; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* p = ttcmap->data + 4; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmap_info->format = 4; |
|
|
|
@ -1619,10 +1636,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap6_char_index( TT_CMap cmap, |
|
|
|
|
tt_cmap6_char_index( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 char_code ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* table = cmap->data; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* table = ttcmap->data; |
|
|
|
|
FT_UInt result = 0; |
|
|
|
|
FT_Byte* p = table + 6; |
|
|
|
|
FT_UInt start = TT_NEXT_USHORT( p ); |
|
|
|
@ -1641,10 +1659,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap6_char_next( TT_CMap cmap, |
|
|
|
|
tt_cmap6_char_next( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 *pchar_code ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* table = cmap->data; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* table = ttcmap->data; |
|
|
|
|
FT_UInt32 result = 0; |
|
|
|
|
FT_UInt32 char_code = *pchar_code + 1; |
|
|
|
|
FT_UInt gindex = 0; |
|
|
|
@ -1685,10 +1704,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap6_get_info( TT_CMap cmap, |
|
|
|
|
tt_cmap6_get_info( FT_CharMap cmap, /* TT_CMap */ |
|
|
|
|
TT_CMapInfo *cmap_info ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* p = cmap->data + 4; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* p = ttcmap->data + 4; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmap_info->format = 6; |
|
|
|
@ -1879,10 +1899,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap8_char_index( TT_CMap cmap, |
|
|
|
|
tt_cmap8_char_index( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 char_code ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* table = cmap->data; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* table = ttcmap->data; |
|
|
|
|
FT_UInt result = 0; |
|
|
|
|
FT_Byte* p = table + 8204; |
|
|
|
|
FT_UInt32 num_groups = TT_NEXT_ULONG( p ); |
|
|
|
@ -1912,14 +1933,15 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap8_char_next( TT_CMap cmap, |
|
|
|
|
tt_cmap8_char_next( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 *pchar_code ) |
|
|
|
|
{ |
|
|
|
|
FT_Face face = cmap->cmap.charmap.face; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Face face = FT_CMAP_FACE( cmap ); |
|
|
|
|
FT_UInt32 result = 0; |
|
|
|
|
FT_UInt32 char_code; |
|
|
|
|
FT_UInt gindex = 0; |
|
|
|
|
FT_Byte* table = cmap->data; |
|
|
|
|
FT_Byte* table = ttcmap->data; |
|
|
|
|
FT_Byte* p = table + 8204; |
|
|
|
|
FT_UInt32 num_groups = TT_NEXT_ULONG( p ); |
|
|
|
|
FT_UInt32 start, end, start_id; |
|
|
|
@ -1979,10 +2001,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap8_get_info( TT_CMap cmap, |
|
|
|
|
tt_cmap8_get_info( FT_CharMap cmap, /* TT_CMap */ |
|
|
|
|
TT_CMapInfo *cmap_info ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* p = cmap->data + 8; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* p = ttcmap->data + 8; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmap_info->format = 8; |
|
|
|
@ -2083,10 +2106,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap10_char_index( TT_CMap cmap, |
|
|
|
|
tt_cmap10_char_index( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 char_code ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* table = cmap->data; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* table = ttcmap->data; |
|
|
|
|
FT_UInt result = 0; |
|
|
|
|
FT_Byte* p = table + 12; |
|
|
|
|
FT_UInt32 start = TT_NEXT_ULONG( p ); |
|
|
|
@ -2110,10 +2134,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap10_char_next( TT_CMap cmap, |
|
|
|
|
tt_cmap10_char_next( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 *pchar_code ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* table = cmap->data; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* table = ttcmap->data; |
|
|
|
|
FT_UInt32 char_code; |
|
|
|
|
FT_UInt gindex = 0; |
|
|
|
|
FT_Byte* p = table + 12; |
|
|
|
@ -2151,10 +2176,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap10_get_info( TT_CMap cmap, |
|
|
|
|
tt_cmap10_get_info( FT_CharMap cmap, /* TT_CMap */ |
|
|
|
|
TT_CMapInfo *cmap_info ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* p = cmap->data + 8; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* p = ttcmap->data + 8; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmap_info->format = 10; |
|
|
|
@ -2232,15 +2258,19 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap12_init( TT_CMap12 cmap, |
|
|
|
|
FT_Byte* table ) |
|
|
|
|
tt_cmap12_init( FT_CMap cmap, /* TT_CMap12 */ |
|
|
|
|
void* table_ ) |
|
|
|
|
{ |
|
|
|
|
cmap->cmap.data = table; |
|
|
|
|
TT_CMap12 ttcmap = (TT_CMap12)cmap; |
|
|
|
|
FT_Byte* table = (FT_Byte*)table_; |
|
|
|
|
|
|
|
|
|
table += 12; |
|
|
|
|
cmap->num_groups = FT_PEEK_ULONG( table ); |
|
|
|
|
|
|
|
|
|
cmap->valid = 0; |
|
|
|
|
ttcmap->cmap.data = table; |
|
|
|
|
|
|
|
|
|
table += 12; |
|
|
|
|
ttcmap->num_groups = FT_PEEK_ULONG( table ); |
|
|
|
|
|
|
|
|
|
ttcmap->valid = 0; |
|
|
|
|
|
|
|
|
|
return FT_Err_Ok; |
|
|
|
|
} |
|
|
|
@ -2310,20 +2340,21 @@ |
|
|
|
|
/* cmap->cur_group should be set up properly by caller */ |
|
|
|
|
/* */ |
|
|
|
|
static void |
|
|
|
|
tt_cmap12_next( TT_CMap12 cmap ) |
|
|
|
|
tt_cmap12_next( FT_CMap cmap ) /* TT_CMap12 */ |
|
|
|
|
{ |
|
|
|
|
FT_Face face = cmap->cmap.cmap.charmap.face; |
|
|
|
|
FT_Byte* p; |
|
|
|
|
FT_ULong start, end, start_id, char_code; |
|
|
|
|
FT_ULong n; |
|
|
|
|
FT_UInt gindex; |
|
|
|
|
TT_CMap12 ttcmap = (TT_CMap12)cmap; |
|
|
|
|
FT_Face face = FT_CMAP_FACE( cmap ); |
|
|
|
|
FT_Byte* p; |
|
|
|
|
FT_ULong start, end, start_id, char_code; |
|
|
|
|
FT_ULong n; |
|
|
|
|
FT_UInt gindex; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char_code = cmap->cur_charcode + 1; |
|
|
|
|
char_code = ttcmap->cur_charcode + 1; |
|
|
|
|
|
|
|
|
|
for ( n = cmap->cur_group; n < cmap->num_groups; n++ ) |
|
|
|
|
for ( n = ttcmap->cur_group; n < ttcmap->num_groups; n++ ) |
|
|
|
|
{ |
|
|
|
|
p = cmap->cmap.data + 16 + 12 * n; |
|
|
|
|
p = ttcmap->cmap.data + 16 + 12 * n; |
|
|
|
|
start = TT_NEXT_ULONG( p ); |
|
|
|
|
end = TT_NEXT_ULONG( p ); |
|
|
|
|
start_id = TT_PEEK_ULONG( p ); |
|
|
|
@ -2355,16 +2386,16 @@ |
|
|
|
|
if ( gindex >= (FT_UInt)face->num_glyphs ) |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
cmap->cur_charcode = char_code; |
|
|
|
|
cmap->cur_gindex = gindex; |
|
|
|
|
cmap->cur_group = n; |
|
|
|
|
ttcmap->cur_charcode = char_code; |
|
|
|
|
ttcmap->cur_gindex = gindex; |
|
|
|
|
ttcmap->cur_group = n; |
|
|
|
|
|
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Fail: |
|
|
|
|
cmap->valid = 0; |
|
|
|
|
ttcmap->valid = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -2416,7 +2447,7 @@ |
|
|
|
|
|
|
|
|
|
if ( next ) |
|
|
|
|
{ |
|
|
|
|
FT_Face face = cmap->cmap.charmap.face; |
|
|
|
|
FT_Face face = FT_CMAP_FACE( cmap ); |
|
|
|
|
TT_CMap12 cmap12 = (TT_CMap12)cmap; |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -2435,7 +2466,7 @@ |
|
|
|
|
|
|
|
|
|
if ( !gindex ) |
|
|
|
|
{ |
|
|
|
|
tt_cmap12_next( cmap12 ); |
|
|
|
|
tt_cmap12_next( FT_CMAP( cmap12 ) ); |
|
|
|
|
|
|
|
|
|
if ( cmap12->valid ) |
|
|
|
|
gindex = cmap12->cur_gindex; |
|
|
|
@ -2451,15 +2482,15 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap12_char_index( TT_CMap cmap, |
|
|
|
|
tt_cmap12_char_index( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 char_code ) |
|
|
|
|
{ |
|
|
|
|
return tt_cmap12_char_map_binary( cmap, &char_code, 0 ); |
|
|
|
|
return tt_cmap12_char_map_binary( (TT_CMap)cmap, &char_code, 0 ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap12_char_next( TT_CMap cmap, |
|
|
|
|
tt_cmap12_char_next( FT_CMap cmap, /* TT_CMap12 */ |
|
|
|
|
FT_UInt32 *pchar_code ) |
|
|
|
|
{ |
|
|
|
|
TT_CMap12 cmap12 = (TT_CMap12)cmap; |
|
|
|
@ -2472,7 +2503,7 @@ |
|
|
|
|
/* no need to search */ |
|
|
|
|
if ( cmap12->valid && cmap12->cur_charcode == *pchar_code ) |
|
|
|
|
{ |
|
|
|
|
tt_cmap12_next( cmap12 ); |
|
|
|
|
tt_cmap12_next( FT_CMAP( cmap12 ) ); |
|
|
|
|
if ( cmap12->valid ) |
|
|
|
|
{ |
|
|
|
|
gindex = cmap12->cur_gindex; |
|
|
|
@ -2482,17 +2513,18 @@ |
|
|
|
|
gindex = 0; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
gindex = tt_cmap12_char_map_binary( cmap, pchar_code, 1 ); |
|
|
|
|
gindex = tt_cmap12_char_map_binary( (TT_CMap)cmap, pchar_code, 1 ); |
|
|
|
|
|
|
|
|
|
return gindex; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap12_get_info( TT_CMap cmap, |
|
|
|
|
tt_cmap12_get_info( FT_CharMap cmap, /* TT_CMap */ |
|
|
|
|
TT_CMapInfo *cmap_info ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* p = cmap->data + 8; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* p = ttcmap->data + 8; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmap_info->format = 12; |
|
|
|
@ -2570,15 +2602,19 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap13_init( TT_CMap13 cmap, |
|
|
|
|
FT_Byte* table ) |
|
|
|
|
tt_cmap13_init( FT_CMap cmap, /* TT_CMap13 */ |
|
|
|
|
void* table_ ) |
|
|
|
|
{ |
|
|
|
|
cmap->cmap.data = table; |
|
|
|
|
TT_CMap13 ttcmap = (TT_CMap13)cmap; |
|
|
|
|
FT_Byte* table = (FT_Byte*)table_; |
|
|
|
|
|
|
|
|
|
table += 12; |
|
|
|
|
cmap->num_groups = FT_PEEK_ULONG( table ); |
|
|
|
|
|
|
|
|
|
cmap->valid = 0; |
|
|
|
|
ttcmap->cmap.data = table; |
|
|
|
|
|
|
|
|
|
table += 12; |
|
|
|
|
ttcmap->num_groups = FT_PEEK_ULONG( table ); |
|
|
|
|
|
|
|
|
|
ttcmap->valid = 0; |
|
|
|
|
|
|
|
|
|
return FT_Err_Ok; |
|
|
|
|
} |
|
|
|
@ -2643,20 +2679,21 @@ |
|
|
|
|
/* cmap->cur_group should be set up properly by caller */ |
|
|
|
|
/* */ |
|
|
|
|
static void |
|
|
|
|
tt_cmap13_next( TT_CMap13 cmap ) |
|
|
|
|
tt_cmap13_next( FT_CMap cmap ) /* TT_CMap13 */ |
|
|
|
|
{ |
|
|
|
|
FT_Face face = cmap->cmap.cmap.charmap.face; |
|
|
|
|
FT_Byte* p; |
|
|
|
|
FT_ULong start, end, glyph_id, char_code; |
|
|
|
|
FT_ULong n; |
|
|
|
|
FT_UInt gindex; |
|
|
|
|
TT_CMap13 ttcmap = (TT_CMap13)cmap; |
|
|
|
|
FT_Face face = FT_CMAP_FACE( cmap ); |
|
|
|
|
FT_Byte* p; |
|
|
|
|
FT_ULong start, end, glyph_id, char_code; |
|
|
|
|
FT_ULong n; |
|
|
|
|
FT_UInt gindex; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char_code = cmap->cur_charcode + 1; |
|
|
|
|
char_code = ttcmap->cur_charcode + 1; |
|
|
|
|
|
|
|
|
|
for ( n = cmap->cur_group; n < cmap->num_groups; n++ ) |
|
|
|
|
for ( n = ttcmap->cur_group; n < ttcmap->num_groups; n++ ) |
|
|
|
|
{ |
|
|
|
|
p = cmap->cmap.data + 16 + 12 * n; |
|
|
|
|
p = ttcmap->cmap.data + 16 + 12 * n; |
|
|
|
|
start = TT_NEXT_ULONG( p ); |
|
|
|
|
end = TT_NEXT_ULONG( p ); |
|
|
|
|
glyph_id = TT_PEEK_ULONG( p ); |
|
|
|
@ -2670,16 +2707,16 @@ |
|
|
|
|
|
|
|
|
|
if ( gindex && gindex < (FT_UInt)face->num_glyphs ) |
|
|
|
|
{ |
|
|
|
|
cmap->cur_charcode = char_code; |
|
|
|
|
cmap->cur_gindex = gindex; |
|
|
|
|
cmap->cur_group = n; |
|
|
|
|
ttcmap->cur_charcode = char_code; |
|
|
|
|
ttcmap->cur_gindex = gindex; |
|
|
|
|
ttcmap->cur_group = n; |
|
|
|
|
|
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cmap->valid = 0; |
|
|
|
|
ttcmap->valid = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -2745,7 +2782,7 @@ |
|
|
|
|
|
|
|
|
|
if ( !gindex ) |
|
|
|
|
{ |
|
|
|
|
tt_cmap13_next( cmap13 ); |
|
|
|
|
tt_cmap13_next( FT_CMAP( cmap13 ) ); |
|
|
|
|
|
|
|
|
|
if ( cmap13->valid ) |
|
|
|
|
gindex = cmap13->cur_gindex; |
|
|
|
@ -2761,15 +2798,15 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap13_char_index( TT_CMap cmap, |
|
|
|
|
tt_cmap13_char_index( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 char_code ) |
|
|
|
|
{ |
|
|
|
|
return tt_cmap13_char_map_binary( cmap, &char_code, 0 ); |
|
|
|
|
return tt_cmap13_char_map_binary( (TT_CMap)cmap, &char_code, 0 ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap13_char_next( TT_CMap cmap, |
|
|
|
|
tt_cmap13_char_next( FT_CMap cmap, /* TT_CMap13 */ |
|
|
|
|
FT_UInt32 *pchar_code ) |
|
|
|
|
{ |
|
|
|
|
TT_CMap13 cmap13 = (TT_CMap13)cmap; |
|
|
|
@ -2782,7 +2819,7 @@ |
|
|
|
|
/* no need to search */ |
|
|
|
|
if ( cmap13->valid && cmap13->cur_charcode == *pchar_code ) |
|
|
|
|
{ |
|
|
|
|
tt_cmap13_next( cmap13 ); |
|
|
|
|
tt_cmap13_next( FT_CMAP( cmap13 ) ); |
|
|
|
|
if ( cmap13->valid ) |
|
|
|
|
{ |
|
|
|
|
gindex = cmap13->cur_gindex; |
|
|
|
@ -2792,17 +2829,18 @@ |
|
|
|
|
gindex = 0; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
gindex = tt_cmap13_char_map_binary( cmap, pchar_code, 1 ); |
|
|
|
|
gindex = tt_cmap13_char_map_binary( (TT_CMap)cmap, pchar_code, 1 ); |
|
|
|
|
|
|
|
|
|
return gindex; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap13_get_info( TT_CMap cmap, |
|
|
|
|
tt_cmap13_get_info( FT_CharMap cmap, /* TT_CMap */ |
|
|
|
|
TT_CMapInfo *cmap_info ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* p = cmap->data + 8; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* p = ttcmap->data + 8; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmap_info->format = 13; |
|
|
|
@ -2917,14 +2955,15 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( void ) |
|
|
|
|
tt_cmap14_done( TT_CMap14 cmap ) |
|
|
|
|
tt_cmap14_done( FT_CMap cmap ) /* TT_CMap14 */ |
|
|
|
|
{ |
|
|
|
|
FT_Memory memory = cmap->memory; |
|
|
|
|
TT_CMap14 ttcmap = (TT_CMap14)cmap; |
|
|
|
|
FT_Memory memory = ttcmap->memory; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cmap->max_results = 0; |
|
|
|
|
if ( memory && cmap->results ) |
|
|
|
|
FT_FREE( cmap->results ); |
|
|
|
|
ttcmap->max_results = 0; |
|
|
|
|
if ( memory && ttcmap->results ) |
|
|
|
|
FT_FREE( ttcmap->results ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -2952,15 +2991,19 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap14_init( TT_CMap14 cmap, |
|
|
|
|
FT_Byte* table ) |
|
|
|
|
tt_cmap14_init( FT_CMap cmap, /* TT_CMap14 */ |
|
|
|
|
void* table_ ) |
|
|
|
|
{ |
|
|
|
|
cmap->cmap.data = table; |
|
|
|
|
TT_CMap14 ttcmap = (TT_CMap14)cmap; |
|
|
|
|
FT_Byte* table = (FT_Byte*)table_; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
table += 6; |
|
|
|
|
cmap->num_selectors = FT_PEEK_ULONG( table ); |
|
|
|
|
cmap->max_results = 0; |
|
|
|
|
cmap->results = NULL; |
|
|
|
|
ttcmap->cmap.data = table; |
|
|
|
|
|
|
|
|
|
table += 6; |
|
|
|
|
ttcmap->num_selectors = FT_PEEK_ULONG( table ); |
|
|
|
|
ttcmap->max_results = 0; |
|
|
|
|
ttcmap->results = NULL; |
|
|
|
|
|
|
|
|
|
return FT_Err_Ok; |
|
|
|
|
} |
|
|
|
@ -3090,7 +3133,7 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap14_char_index( TT_CMap cmap, |
|
|
|
|
tt_cmap14_char_index( FT_CMap cmap, |
|
|
|
|
FT_UInt32 char_code ) |
|
|
|
|
{ |
|
|
|
|
FT_UNUSED( cmap ); |
|
|
|
@ -3102,7 +3145,7 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap14_char_next( TT_CMap cmap, |
|
|
|
|
tt_cmap14_char_next( FT_CMap cmap, |
|
|
|
|
FT_UInt32 *pchar_code ) |
|
|
|
|
{ |
|
|
|
|
FT_UNUSED( cmap ); |
|
|
|
@ -3114,7 +3157,7 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap14_get_info( TT_CMap cmap, |
|
|
|
|
tt_cmap14_get_info( FT_CharMap cmap, |
|
|
|
|
TT_CMapInfo *cmap_info ) |
|
|
|
|
{ |
|
|
|
|
FT_UNUSED( cmap ); |
|
|
|
@ -3228,12 +3271,16 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap14_char_var_index( TT_CMap cmap, |
|
|
|
|
TT_CMap ucmap, |
|
|
|
|
tt_cmap14_char_var_index( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_CMap ucmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 charcode, |
|
|
|
|
FT_UInt32 variantSelector ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* p = tt_cmap14_find_variant( cmap->data + 6, variantSelector ); |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
TT_CMap ttucmap = (TT_CMap)ucmap; |
|
|
|
|
|
|
|
|
|
FT_Byte* p = tt_cmap14_find_variant( ttcmap->data + 6, |
|
|
|
|
variantSelector ); |
|
|
|
|
FT_ULong defOff; |
|
|
|
|
FT_ULong nondefOff; |
|
|
|
|
|
|
|
|
@ -3244,16 +3291,16 @@ |
|
|
|
|
defOff = TT_NEXT_ULONG( p ); |
|
|
|
|
nondefOff = TT_PEEK_ULONG( p ); |
|
|
|
|
|
|
|
|
|
if ( defOff != 0 && |
|
|
|
|
tt_cmap14_char_map_def_binary( cmap->data + defOff, charcode ) ) |
|
|
|
|
if ( defOff != 0 && |
|
|
|
|
tt_cmap14_char_map_def_binary( ttcmap->data + defOff, charcode ) ) |
|
|
|
|
{ |
|
|
|
|
/* This is the default variant of this charcode. GID not stored */ |
|
|
|
|
/* here; stored in the normal Unicode charmap instead. */ |
|
|
|
|
return ucmap->cmap.clazz->char_index( &ucmap->cmap, charcode ); |
|
|
|
|
return ttucmap->cmap.clazz->char_index( &ttucmap->cmap, charcode ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ( nondefOff != 0 ) |
|
|
|
|
return tt_cmap14_char_map_nondef_binary( cmap->data + nondefOff, |
|
|
|
|
return tt_cmap14_char_map_nondef_binary( ttcmap->data + nondefOff, |
|
|
|
|
charcode ); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
@ -3261,11 +3308,13 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Int ) |
|
|
|
|
tt_cmap14_char_var_isdefault( TT_CMap cmap, |
|
|
|
|
tt_cmap14_char_var_isdefault( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_UInt32 charcode, |
|
|
|
|
FT_UInt32 variantSelector ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte* p = tt_cmap14_find_variant( cmap->data + 6, variantSelector ); |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte* p = tt_cmap14_find_variant( ttcmap->data + 6, |
|
|
|
|
variantSelector ); |
|
|
|
|
FT_ULong defOff; |
|
|
|
|
FT_ULong nondefOff; |
|
|
|
|
|
|
|
|
@ -3276,13 +3325,13 @@ |
|
|
|
|
defOff = TT_NEXT_ULONG( p ); |
|
|
|
|
nondefOff = TT_NEXT_ULONG( p ); |
|
|
|
|
|
|
|
|
|
if ( defOff != 0 && |
|
|
|
|
tt_cmap14_char_map_def_binary( cmap->data + defOff, charcode ) ) |
|
|
|
|
if ( defOff != 0 && |
|
|
|
|
tt_cmap14_char_map_def_binary( ttcmap->data + defOff, charcode ) ) |
|
|
|
|
return 1; |
|
|
|
|
|
|
|
|
|
if ( nondefOff != 0 && |
|
|
|
|
tt_cmap14_char_map_nondef_binary( cmap->data + nondefOff, |
|
|
|
|
charcode ) != 0 ) |
|
|
|
|
if ( nondefOff != 0 && |
|
|
|
|
tt_cmap14_char_map_nondef_binary( ttcmap->data + nondefOff, |
|
|
|
|
charcode ) != 0 ) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
return -1; |
|
|
|
@ -3290,12 +3339,13 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt32* ) |
|
|
|
|
tt_cmap14_variants( TT_CMap cmap, |
|
|
|
|
tt_cmap14_variants( FT_CMap cmap, /* TT_CMap14 */ |
|
|
|
|
FT_Memory memory ) |
|
|
|
|
{ |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
TT_CMap14 cmap14 = (TT_CMap14)cmap; |
|
|
|
|
FT_UInt32 count = cmap14->num_selectors; |
|
|
|
|
FT_Byte* p = cmap->data + 10; |
|
|
|
|
FT_Byte* p = ttcmap->data + 10; |
|
|
|
|
FT_UInt32* result; |
|
|
|
|
FT_UInt32 i; |
|
|
|
|
|
|
|
|
@ -3316,13 +3366,14 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt32 * ) |
|
|
|
|
tt_cmap14_char_variants( TT_CMap cmap, |
|
|
|
|
tt_cmap14_char_variants( FT_CMap cmap, /* TT_CMap14 */ |
|
|
|
|
FT_Memory memory, |
|
|
|
|
FT_UInt32 charCode ) |
|
|
|
|
{ |
|
|
|
|
TT_CMap14 cmap14 = (TT_CMap14) cmap; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
TT_CMap14 cmap14 = (TT_CMap14)cmap; |
|
|
|
|
FT_UInt32 count = cmap14->num_selectors; |
|
|
|
|
FT_Byte* p = cmap->data + 10; |
|
|
|
|
FT_Byte* p = ttcmap->data + 10; |
|
|
|
|
FT_UInt32* q; |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -3336,12 +3387,12 @@ |
|
|
|
|
FT_ULong nondefOff = TT_NEXT_ULONG( p ); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( ( defOff != 0 && |
|
|
|
|
tt_cmap14_char_map_def_binary( cmap->data + defOff, |
|
|
|
|
charCode ) ) || |
|
|
|
|
( nondefOff != 0 && |
|
|
|
|
tt_cmap14_char_map_nondef_binary( cmap->data + nondefOff, |
|
|
|
|
charCode ) != 0 ) ) |
|
|
|
|
if ( ( defOff != 0 && |
|
|
|
|
tt_cmap14_char_map_def_binary( ttcmap->data + defOff, |
|
|
|
|
charCode ) ) || |
|
|
|
|
( nondefOff != 0 && |
|
|
|
|
tt_cmap14_char_map_nondef_binary( ttcmap->data + nondefOff, |
|
|
|
|
charCode ) != 0 ) ) |
|
|
|
|
{ |
|
|
|
|
q[0] = varSel; |
|
|
|
|
q++; |
|
|
|
@ -3437,15 +3488,16 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt32 * ) |
|
|
|
|
tt_cmap14_variant_chars( TT_CMap cmap, |
|
|
|
|
tt_cmap14_variant_chars( FT_CMap cmap, /* TT_CMap */ |
|
|
|
|
FT_Memory memory, |
|
|
|
|
FT_UInt32 variantSelector ) |
|
|
|
|
{ |
|
|
|
|
FT_Byte *p = tt_cmap14_find_variant( cmap->data + 6, |
|
|
|
|
variantSelector ); |
|
|
|
|
FT_Int i; |
|
|
|
|
FT_ULong defOff; |
|
|
|
|
FT_ULong nondefOff; |
|
|
|
|
TT_CMap ttcmap = (TT_CMap)cmap; |
|
|
|
|
FT_Byte *p = tt_cmap14_find_variant( ttcmap->data + 6, |
|
|
|
|
variantSelector ); |
|
|
|
|
FT_Int i; |
|
|
|
|
FT_ULong defOff; |
|
|
|
|
FT_ULong nondefOff; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( !p ) |
|
|
|
@ -3458,16 +3510,16 @@ |
|
|
|
|
return NULL; |
|
|
|
|
|
|
|
|
|
if ( defOff == 0 ) |
|
|
|
|
return tt_cmap14_get_nondef_chars( cmap, cmap->data + nondefOff, |
|
|
|
|
return tt_cmap14_get_nondef_chars( ttcmap, ttcmap->data + nondefOff, |
|
|
|
|
memory ); |
|
|
|
|
else if ( nondefOff == 0 ) |
|
|
|
|
return tt_cmap14_get_def_chars( cmap, cmap->data + defOff, |
|
|
|
|
return tt_cmap14_get_def_chars( ttcmap, ttcmap->data + defOff, |
|
|
|
|
memory ); |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
/* Both a default and a non-default glyph set? That's probably not */ |
|
|
|
|
/* good font design, but the spec allows for it... */ |
|
|
|
|
TT_CMap14 cmap14 = (TT_CMap14) cmap; |
|
|
|
|
TT_CMap14 cmap14 = (TT_CMap14)cmap; |
|
|
|
|
FT_UInt32 numRanges; |
|
|
|
|
FT_UInt32 numMappings; |
|
|
|
|
FT_UInt32 duni; |
|
|
|
@ -3479,18 +3531,18 @@ |
|
|
|
|
FT_UInt32 *ret; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p = cmap->data + nondefOff; |
|
|
|
|
dp = cmap->data + defOff; |
|
|
|
|
p = ttcmap->data + nondefOff; |
|
|
|
|
dp = ttcmap->data + defOff; |
|
|
|
|
|
|
|
|
|
numMappings = (FT_UInt32)TT_NEXT_ULONG( p ); |
|
|
|
|
dcnt = tt_cmap14_def_char_count( dp ); |
|
|
|
|
numRanges = (FT_UInt32)TT_NEXT_ULONG( dp ); |
|
|
|
|
|
|
|
|
|
if ( numMappings == 0 ) |
|
|
|
|
return tt_cmap14_get_def_chars( cmap, cmap->data + defOff, |
|
|
|
|
return tt_cmap14_get_def_chars( ttcmap, ttcmap->data + defOff, |
|
|
|
|
memory ); |
|
|
|
|
if ( dcnt == 0 ) |
|
|
|
|
return tt_cmap14_get_nondef_chars( cmap, cmap->data + nondefOff, |
|
|
|
|
return tt_cmap14_get_nondef_chars( ttcmap, ttcmap->data + nondefOff, |
|
|
|
|
memory ); |
|
|
|
|
|
|
|
|
|
if ( tt_cmap14_ensure( cmap14, ( dcnt + numMappings + 1 ), memory ) ) |
|
|
|
@ -3612,9 +3664,10 @@ |
|
|
|
|
#ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES |
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( const char * ) |
|
|
|
|
tt_get_glyph_name( TT_Face face, |
|
|
|
|
tt_get_glyph_name( void* face_, /* TT_Face */ |
|
|
|
|
FT_UInt idx ) |
|
|
|
|
{ |
|
|
|
|
TT_Face face = (TT_Face)face_; |
|
|
|
|
FT_String* PSname = NULL; |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -3625,12 +3678,13 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_Error ) |
|
|
|
|
tt_cmap_unicode_init( PS_Unicodes unicodes, |
|
|
|
|
FT_Pointer pointer ) |
|
|
|
|
tt_cmap_unicode_init( FT_CMap cmap, /* PS_Unicodes */ |
|
|
|
|
FT_Pointer pointer ) |
|
|
|
|
{ |
|
|
|
|
TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes ); |
|
|
|
|
FT_Memory memory = FT_FACE_MEMORY( face ); |
|
|
|
|
FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; |
|
|
|
|
PS_Unicodes unicodes = (PS_Unicodes)cmap; |
|
|
|
|
TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); |
|
|
|
|
FT_Memory memory = FT_FACE_MEMORY( face ); |
|
|
|
|
FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; |
|
|
|
|
|
|
|
|
|
FT_UNUSED( pointer ); |
|
|
|
|
|
|
|
|
@ -3641,17 +3695,18 @@ |
|
|
|
|
return psnames->unicodes_init( memory, |
|
|
|
|
unicodes, |
|
|
|
|
face->root.num_glyphs, |
|
|
|
|
(PS_GetGlyphNameFunc)&tt_get_glyph_name, |
|
|
|
|
&tt_get_glyph_name, |
|
|
|
|
(PS_FreeGlyphNameFunc)NULL, |
|
|
|
|
(FT_Pointer)face ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( void ) |
|
|
|
|
tt_cmap_unicode_done( PS_Unicodes unicodes ) |
|
|
|
|
tt_cmap_unicode_done( FT_CMap cmap ) /* PS_Unicodes */ |
|
|
|
|
{ |
|
|
|
|
FT_Face face = FT_CMAP_FACE( unicodes ); |
|
|
|
|
FT_Memory memory = FT_FACE_MEMORY( face ); |
|
|
|
|
PS_Unicodes unicodes = (PS_Unicodes)cmap; |
|
|
|
|
FT_Face face = FT_CMAP_FACE( cmap ); |
|
|
|
|
FT_Memory memory = FT_FACE_MEMORY( face ); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_FREE( unicodes->maps ); |
|
|
|
@ -3660,11 +3715,12 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap_unicode_char_index( PS_Unicodes unicodes, |
|
|
|
|
FT_UInt32 char_code ) |
|
|
|
|
tt_cmap_unicode_char_index( FT_CMap cmap, /* PS_Unicodes */ |
|
|
|
|
FT_UInt32 char_code ) |
|
|
|
|
{ |
|
|
|
|
TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes ); |
|
|
|
|
FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; |
|
|
|
|
PS_Unicodes unicodes = (PS_Unicodes)cmap; |
|
|
|
|
TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); |
|
|
|
|
FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return psnames->unicodes_char_index( unicodes, char_code ); |
|
|
|
@ -3672,11 +3728,12 @@ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FT_CALLBACK_DEF( FT_UInt ) |
|
|
|
|
tt_cmap_unicode_char_next( PS_Unicodes unicodes, |
|
|
|
|
FT_UInt32 *pchar_code ) |
|
|
|
|
tt_cmap_unicode_char_next( FT_CMap cmap, /* PS_Unicodes */ |
|
|
|
|
FT_UInt32 *pchar_code ) |
|
|
|
|
{ |
|
|
|
|
TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes ); |
|
|
|
|
FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; |
|
|
|
|
PS_Unicodes unicodes = (PS_Unicodes)cmap; |
|
|
|
|
TT_Face face = (TT_Face)FT_CMAP_FACE( cmap ); |
|
|
|
|
FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)face->psnames; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return psnames->unicodes_char_next( unicodes, pchar_code ); |
|
|
|
@ -3831,7 +3888,7 @@ |
|
|
|
|
tt_get_cmap_info( FT_CharMap charmap, |
|
|
|
|
TT_CMapInfo *cmap_info ) |
|
|
|
|
{ |
|
|
|
|
FT_CMap cmap = (FT_CMap)charmap; |
|
|
|
|
FT_CMap cmap = FT_CMAP( charmap ); |
|
|
|
|
TT_CMap_Class clazz = (TT_CMap_Class)cmap->clazz; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|