shithub: freetype+ttf2subf

Download patch

ref: 52371001d098686fdb227b40c5cf28198f32129f
parent: 236f82dbb29e53628156f92339fafefe33d8521b
author: Tom Kacvinsky <[email protected]>
date: Wed Aug 8 06:51:44 EDT 2001

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.

git/fs: mount .git/fs: mount/attach disallowed
--- 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,8 +318,57 @@
 
 
   /*************************************************************************/
+  /*                                                                       */
+  /* <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;
+  }
+
   /*************************************************************************/
   /*************************************************************************/
+  /*************************************************************************/
   /****                                                                 ****/
   /****                                                                 ****/
   /****                D R I V E R  I N T E R F A C E                   ****/
@@ -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 */