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.
This commit is contained in:
Tom Kacvinsky 2001-08-08 10:51:44 +00:00
parent 236f82dbb2
commit 52371001d0
1 changed files with 55 additions and 1 deletions

View File

@ -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. */
@ -317,6 +317,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 */