summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorParth Wazurkar <parthwazurkar@gmail.com>2018-06-29 17:19:52 +0530
committerParth Wazurkar <parthwazurkar@gmail.com>2018-07-03 01:57:10 +0530
commit39375424d99d4e302be27934cf9ca412f6b9b5d0 (patch)
tree171a433a399e83cfd7da305b4e27669152353add
parent90624af017ea5ba709a8543fff6be0886cfd8bb4 (diff)
downloadfreetype2-39375424d99d4e302be27934cf9ca412f6b9b5d0.tar.gz
[tfm] Define tfm_cmap_class functions.
* Define structure TFM_CMapRec for TeX tfm font format. * src/tfm/tfmdrivr.c: Define tfm_cmap_init, tfm_cmap_done, tfm_cmap_char_index, tfm_cmap_char_next.
-rw-r--r--src/tfm/tfmdrivr.c51
1 files changed, 46 insertions, 5 deletions
diff --git a/src/tfm/tfmdrivr.c b/src/tfm/tfmdrivr.c
index 563d01af4..aa7b9600d 100644
--- a/src/tfm/tfmdrivr.c
+++ b/src/tfm/tfmdrivr.c
@@ -42,7 +42,8 @@
typedef struct TFM_CMapRec_
{
FT_CMapRec cmap;
- /* TO-DO */
+ FT_UInt32 begin_char; /* Beginning Character */
+ FT_UInt32 end_char ; /* End Character */
} TFM_CMapRec, *TFM_CMap;
@@ -50,14 +51,24 @@
tfm_cmap_init( FT_CMap tfmcmap,
FT_Pointer init_data )
{
- /* TO-DO */
+ TFM_CMap cmap = (TFM_CMap)tfmcmap;
+ TFM_Face face = (TFM_Face)FT_CMAP_FACE( cmap );
+ FT_UNUSED( init_data );
+
+ cmap->begin_char = ;
+ cmap->end_char = ;
+
+ return FT_Err_Ok;
}
FT_CALLBACK_DEF( void )
tfm_cmap_done( FT_CMap tfmcmap )
{
- /* TO-DO */
+ TFM_CMap cmap = (TFM_CMap)tfmcmap;
+
+ cmap->begin_char = ;
+ cmap->end_char = ;
}
@@ -65,14 +76,44 @@
tfm_cmap_char_index( FT_CMap tfmcmap,
FT_UInt32 char_code )
{
- /* TO-DO */
+ FT_UInt gindex = 0;
+ TFM_CMap cmap = (TFM_CMap)tfmcmap;
+
+ char_code -= cmap->begin_char;
+
+ if ( char_code < cmap->end_char - cmap->begin_char + 1 )
+ gindex = (FT_UInt)( char_code );
+
+ return gindex;
}
FT_CALLBACK_DEF( FT_UInt )
tfm_cmap_char_next( FT_CMap tfmcmap,
FT_UInt32 *achar_code )
{
- /* TO-DO */
+ TFM_CMap cmap = (TFM_CMap)tfmcmap;
+ FT_UInt gindex = 0;
+ FT_UInt32 result = 0;
+ FT_UInt32 char_code = *achar_code + 1;
+
+
+ if ( char_code <= cmap->begin_char )
+ {
+ result = cmap->bc;
+ gindex = 1;
+ }
+ else
+ {
+ char_code -= cmap->begin_char;
+ if ( char_code < cmap->end_char - cmap->begin_char + 1 )
+ {
+ result = char_code;
+ gindex = (FT_UInt)( char_code );
+ }
+ }
+
+ *achar_code = result;
+ return gindex;
}