[pk] Define `pk_cmap_class' functions.

This commit is contained in:
Parth Wazurkar 2018-07-12 23:26:48 +05:30
parent 0d109109df
commit 20230216aa
1 changed files with 43 additions and 5 deletions

View File

@ -42,7 +42,8 @@
typedef struct PK_CMapRec_
{
FT_CMapRec cmap;
/* TO-DO */
FT_UInt32 bc; /* Beginning Character */
FT_UInt32 ec; /* End Character */
} PK_CMapRec, *PK_CMap;
@ -50,7 +51,13 @@
pk_cmap_init( FT_CMap pkcmap,
FT_Pointer init_data )
{
/* TO-DO */
PK_CMap cmap = (PK_CMap)pkcmap;
PK_Face face = (PK_Face)FT_CMAP_FACE( cmap );
FT_UNUSED( init_data );
cmap->bc = face->pk_glyph->code_min;
cmap->ec = face->pk_glyph->code_max;
return FT_Err_Ok;
}
@ -58,7 +65,10 @@
FT_CALLBACK_DEF( void )
pk_cmap_done( FT_CMap pkcmap )
{
/* TO-DO */
PK_CMap cmap = (PK_CMap)pkcmap;
cmap->bc = 0;
cmap->ec = -1;
}
@ -66,7 +76,14 @@
pk_cmap_char_index( FT_CMap pkcmap,
FT_UInt32 char_code )
{
/* TO-DO */
FT_UInt gindex = 0;
PK_CMap cmap = (PK_CMap)pkcmap;
char_code -= cmap->bc;
if ( char_code < cmap->ec - cmap->bc + 1 )
gindex = (FT_UInt)( char_code );
return gindex;
}
@ -74,7 +91,28 @@
pk_cmap_char_next( FT_CMap pkcmap,
FT_UInt32 *achar_code )
{
/* To-DO */
PK_CMap cmap = (PK_CMap)pkcmap;
FT_UInt gindex = 0;
FT_UInt32 result = 0;
FT_UInt32 char_code = *achar_code + 1;
if ( char_code <= cmap->bc )
{
result = cmap->bc;
gindex = 1;
}
else
{
char_code -= cmap->bc;
if ( char_code < cmap->ec - cmap->bc + 1 )
{
result = char_code;
gindex = (FT_UInt)( char_code );
}
}
*achar_code = result;
return gindex;
}