summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorParth Wazurkar <parthwazurkar@gmail.com>2018-07-12 23:26:48 +0530
committerParth Wazurkar <parthwazurkar@gmail.com>2018-07-12 23:26:48 +0530
commitab86ec699d04eb970e031e1db556cd34dc47fdae (patch)
tree9fcffed8dc42d423a1db0c10432a4cb636754545
parent21d3754b29398abcee40e0a22e506151ba101010 (diff)
downloadfreetype2-ab86ec699d04eb970e031e1db556cd34dc47fdae.tar.gz
[pk] Define `pk_cmap_class' functions.
-rw-r--r--src/pk/pkdrivr.c48
1 files changed, 43 insertions, 5 deletions
diff --git a/src/pk/pkdrivr.c b/src/pk/pkdrivr.c
index 4fbf35106..4ee96bda2 100644
--- a/src/pk/pkdrivr.c
+++ b/src/pk/pkdrivr.c
@@ -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;
}