Added function cff_get_name_index, used as a requestor function for FT_Get_Name_Index. Also, modified cff_get_interface so that it returns the function cff_get_name_index when the "name_index" function is requested.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
diff --git a/src/cff/cffdrivr.c b/src/cff/cffdrivr.c
index 19ec5db..559a6c9 100644
--- a/src/cff/cffdrivr.c
+++ b/src/cff/cffdrivr.c
@@ -276,7 +276,7 @@
/*************************************************************************/
/* */
/* <Function> */
- /* Get_Char_Index */
+ /* cff_get_char_index */
/* */
/* <Description> */
/* Uses a charmap to return a given character code's glyph index. */
@@ -318,6 +318,55 @@
/*************************************************************************/
+ /* */
+ /* <Function> */
+ /* cff_get_name_index */
+ /* */
+ /* <Description> */
+ /* Uses the psnames module and the CFF font's charset to to return a */
+ /* a given glyph name's glyph index. */
+ /* */
+ /* <Input> */
+ /* charmap :: A handle to the source face object. */
+ /* glyph_name :: The glyph name. */
+ /* */
+ /* <Return> */
+ /* Glyph index. 0 means `undefined character code'. */
+ /* */
+ static FT_UInt
+ cff_get_name_index( CFF_Face face,
+ FT_String* glyph_name )
+ {
+ CFF_Font* cff;
+ CFF_Charset* charset;
+ PSNames_Interface* psnames;
+ FT_String* name;
+ FT_UShort sid;
+ FT_UInt i;
+
+ cff = face->extra.data;
+ charset = &cff->charset;
+
+ psnames = (PSNames_Interface*)FT_Get_Module_Interface(
+ face->root.driver->root.library, "psnames" );
+
+ for ( i = 0; i < cff->num_glyphs; i++ )
+ {
+ sid = charset->sids[i];
+
+ if (sid > 390)
+ name = CFF_Get_Name( &cff->string_index, sid - 391 );
+ else
+ name = (FT_String *)psnames->adobe_std_strings( sid );
+
+ if ( !strcmp( glyph_name, name ) )
+ return i;
+ }
+
+ return 0;
+ }
+
+ /*************************************************************************/
/*************************************************************************/
/*************************************************************************/
/**** ****/
@@ -336,8 +385,13 @@
FT_Module sfnt;
#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES
+
if ( strcmp( (const char*)interface, "glyph_name" ) == 0 )
return (FT_Module_Interface)get_cff_glyph_name;
+
+ if ( strcmp( (const char*)interface, "name_index" ) == 0 )
+ return (FT_Module_Interface)cff_get_name_index;
+
#endif
/* we simply pass our request to the `sfnt' module */