* src/sfnt/ttcmap: Signature fixes.
This commit is contained in:
parent
60c11919e0
commit
365eb10dd4
@ -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;
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user