shithub: freetype+ttf2subf

Download patch

ref: 8ab0979d6e2d29fe5d489d55ff4adc6a55744308
parent: 356a4d894ce1b1aaf7b7399aadedd65ecc2b7b08
author: Werner Lemberg <[email protected]>
date: Thu Jan 12 03:12:27 EST 2006

Prepare use of pscmap service within CFF module.

* include/freetype/internal/services/svpscmap.h: Include
FT_INTERNAL_OBJECTS_H.
(PS_Unicode_Index_Func): Removed.  Unused.
(PS_Macintosh_Name_Func): Renamed to...
(PS_Macintosh_NameFunc): This.
Update all callers.
(PS_Adobe_Std_Strings_Func): Renamed to...
(PS_Adobe_Std_StringsFunc): This.
Update all callers.
(PS_UnicodesRec): This is the former `PS_Unicodes' structure.
Add `cmap' member.
Update all callers.
(PS_Unicodes): This is now a typedef'd pointer to PS_UnicodesRec.
Update all callers.
(PS_Glyph_NameFunc): New typedef.
(PS_Unicodes_InitFunc): Change arguments to expect a function
and generic data pointer which returns a glyph name from a given
index.

* src/psnames/psmodule.c (ps_unicodes_init, ps_unicodes_char_index,
ps_unicodes_char_next, pscmaps_interface): Updated.

* include/freetype/internal/t1types.h (T1_FaceRec): Updated.

* src/psaux/t1cmap.h (T1_CmapStdRec): Updated.
(T1_CmapUnicode, T1_CmapUnicodeRec): Removed.

* src/psaux/t1cmap.c (t1_get_glyph_name): New callback function.
(t1_cmap_unicode_init, t1_cmap_unicode_done,
t1_cmap_unicode_char_index, t1_cmap_unicode_char_next,
t1_cmap_unicode_class_rec): Updated.

* src/type42/t42types.h (T42_FaceRec): Updated.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,10 +1,48 @@
-2006-01-12  suzuki toshiya  <[email protected]>
+2006-01-12  Werner Lemberg  <[email protected]>
 
+	Prepare use of pscmap service within CFF module.
+
+	* include/freetype/internal/services/svpscmap.h: Include
+	FT_INTERNAL_OBJECTS_H.
+	(PS_Unicode_Index_Func): Removed.  Unused.
+	(PS_Macintosh_Name_Func): Renamed to...
+	(PS_Macintosh_NameFunc): This.
+	Update all callers.
+	(PS_Adobe_Std_Strings_Func): Renamed to...
+	(PS_Adobe_Std_StringsFunc): This.
+	Update all callers.
+	(PS_UnicodesRec): This is the former `PS_Unicodes' structure.
+	Add `cmap' member.
+	Update all callers.
+	(PS_Unicodes): This is now a typedef'd pointer to PS_UnicodesRec.
+	Update all callers.
+	(PS_Glyph_NameFunc): New typedef.
+	(PS_Unicodes_InitFunc): Change arguments to expect a function
+	and generic data pointer which returns a glyph name from a given
+	index.
+
+	* src/psnames/psmodule.c (ps_unicodes_init, ps_unicodes_char_index,
+	ps_unicodes_char_next, pscmaps_interface): Updated.
+
+	* include/freetype/internal/t1types.h (T1_FaceRec): Updated.
+
+	* src/psaux/t1cmap.h (T1_CmapStdRec): Updated.
+	(T1_CmapUnicode, T1_CmapUnicodeRec): Removed.
+
+	* src/psaux/t1cmap.c (t1_get_glyph_name): New callback function.
+	(t1_cmap_unicode_init, t1_cmap_unicode_done,
+	t1_cmap_unicode_char_index, t1_cmap_unicode_char_next,
+	t1_cmap_unicode_class_rec): Updated.
+
+	* src/type42/t42types.h (T42_FaceRec): Updated.
+
+2006-01-11  suzuki toshiya  <[email protected]>
+
 	* include/freetype/ftmac.h: Add declaration of new functions
 	FT_New_Face_From_FSRef and FT_GetFile_From_Mac_ATS_Name that
 	were introduced by the jumbo patch on  2006-01-11.
 
-2006-01-10  Werner Lemberg  <[email protected]>
+2006-01-11  Werner Lemberg  <[email protected]>
 
 	Fix Savannah bug #15056 and use pscmap service in psaux module.
 
--- a/include/freetype/internal/services/svpscmap.h
+++ b/include/freetype/internal/services/svpscmap.h
@@ -19,7 +19,9 @@
 #ifndef __SVPSCMAP_H__
 #define __SVPSCMAP_H__
 
+#include FT_INTERNAL_OBJECTS_H
 
+
 FT_BEGIN_HEADER
 
 
@@ -33,25 +35,18 @@
   (*PS_Unicode_ValueFunc)( const char*  glyph_name );
 
   /*
-   *  Unicode value to Adobe glyph name index.  0xFFFF if not found.
-   */
-  typedef FT_UInt
-  (*PS_Unicode_Index_Func)( FT_UInt       num_glyphs,
-                            const char**  glyph_names,
-                            FT_ULong      unicode );
-
-  /*
    *  Macintosh name id to glyph name.  NULL if invalid index.
    */
   typedef const char*
-  (*PS_Macintosh_Name_Func)( FT_UInt  name_index );
+  (*PS_Macintosh_NameFunc)( FT_UInt  name_index );
 
   /*
    *  Adobe standard string ID to glyph name.  NULL if invalid index.
    */
   typedef const char*
-  (*PS_Adobe_Std_Strings_Func)( FT_UInt  string_index );
+  (*PS_Adobe_Std_StringsFunc)( FT_UInt  string_index );
 
+
   /*
    *  Simple unicode -> glyph index charmap built from font glyph names
    *  table.
@@ -64,27 +59,39 @@
   } PS_UniMap;
 
 
-  typedef struct  PS_Unicodes_
+  typedef struct PS_UnicodesRec_*  PS_Unicodes;
+
+  typedef struct  PS_UnicodesRec_
   {
+    FT_CMapRec  cmap;
     FT_UInt     num_maps;
     PS_UniMap*  maps;
 
-  } PS_Unicodes;
+  } PS_UnicodesRec;
 
 
+  /*
+   *  A function which returns a glyph name for a given index.  Returns
+   *  NULL if invalid index.
+   */
+  typedef const char*
+  (*PS_Glyph_NameFunc)( FT_Pointer  data,
+                        FT_UInt     string_index );
+
   typedef FT_Error
-  (*PS_Unicodes_InitFunc)( FT_Memory     memory,
-                           FT_UInt       num_glyphs,
-                           FT_String**   glyph_names,
-                           PS_Unicodes*  unicodes );
+  (*PS_Unicodes_InitFunc)( FT_Memory          memory,
+                           PS_Unicodes        unicodes,
+                           FT_UInt            num_glyphs,
+                           PS_Glyph_NameFunc  get_glyph_name,
+                           FT_Pointer         glyph_data );
 
   typedef FT_UInt
-  (*PS_Unicodes_CharIndexFunc)( PS_Unicodes*  unicodes,
-                                FT_UInt32     unicode );
+  (*PS_Unicodes_CharIndexFunc)( PS_Unicodes  unicodes,
+                                FT_UInt32    unicode );
 
   typedef FT_ULong
-  (*PS_Unicodes_CharNextFunc)( PS_Unicodes*  unicodes,
-                               FT_UInt32    *unicode );
+  (*PS_Unicodes_CharNextFunc)( PS_Unicodes  unicodes,
+                               FT_UInt32   *unicode );
 
 
   FT_DEFINE_SERVICE( PsCMaps )
@@ -95,8 +102,8 @@
     PS_Unicodes_CharIndexFunc  unicodes_char_index;
     PS_Unicodes_CharNextFunc   unicodes_char_next;
 
-    PS_Macintosh_Name_Func     macintosh_name;
-    PS_Adobe_Std_Strings_Func  adobe_std_strings;
+    PS_Macintosh_NameFunc      macintosh_name;
+    PS_Adobe_Std_StringsFunc   adobe_std_strings;
     const unsigned short*      adobe_std_encoding;
     const unsigned short*      adobe_expert_encoding;
   };
--- a/include/freetype/internal/t1types.h
+++ b/include/freetype/internal/t1types.h
@@ -5,7 +5,7 @@
 /*    Basic Type1/Type2 type definitions and interface (specification      */
 /*    only).                                                               */
 /*                                                                         */
-/*  Copyright 1996-2001, 2002, 2003, 2004 by                               */
+/*  Copyright 1996-2001, 2002, 2003, 2004, 2006 by                         */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -148,20 +148,20 @@
 
   typedef struct  T1_FaceRec_
   {
-    FT_FaceRec     root;
-    T1_FontRec     type1;
-    const void*    psnames;
-    const void*    psaux;
-    const void*    afm_data;
-    FT_CharMapRec  charmaprecs[2];
-    FT_CharMap     charmaps[2];
-    PS_Unicodes    unicode_map;
+    FT_FaceRec      root;
+    T1_FontRec      type1;
+    const void*     psnames;
+    const void*     psaux;
+    const void*     afm_data;
+    FT_CharMapRec   charmaprecs[2];
+    FT_CharMap      charmaps[2];
+    PS_UnicodesRec  unicode_map;
 
     /* support for Multiple Masters fonts */
-    PS_Blend       blend;
+    PS_Blend        blend;
 
     /* since FT 2.1 - interface to PostScript hinter */
-    const void*    pshinter;
+    const void*     pshinter;
 
   } T1_FaceRec;
 
--- a/src/psaux/t1cmap.c
+++ b/src/psaux/t1cmap.c
@@ -257,54 +257,63 @@
   /*************************************************************************/
   /*************************************************************************/
 
+  const char *
+  t1_get_glyph_name( T1_Face  face,
+                     FT_UInt  idx )
+  {
+    return face->type1.glyph_names[idx];
+  }
+
+
   FT_CALLBACK_DEF( FT_Error )
-  t1_cmap_unicode_init( T1_CMapUnicode  cmap )
+  t1_cmap_unicode_init( PS_Unicodes  unicodes )
   {
-    T1_Face             face    = (T1_Face)FT_CMAP_FACE( cmap );
+    T1_Face             face    = (T1_Face)FT_CMAP_FACE( unicodes );
     FT_Memory           memory  = FT_FACE_MEMORY( face );
     FT_Service_PsCMaps  psnames = (FT_Service_PsCMaps)face->psnames;
 
 
     return psnames->unicodes_init( memory,
+                                   unicodes,
                                    face->type1.num_glyphs,
-                                   face->type1.glyph_names,
-                                   &cmap->unicodes );
+                                   (PS_Glyph_NameFunc)&t1_get_glyph_name,
+                                   (FT_Pointer)face );
   }
 
 
   FT_CALLBACK_DEF( void )
-  t1_cmap_unicode_done( T1_CMapUnicode  cmap )
+  t1_cmap_unicode_done( PS_Unicodes  unicodes )
   {
-    FT_Face    face   = FT_CMAP_FACE( cmap );
+    FT_Face    face   = FT_CMAP_FACE( unicodes );
     FT_Memory  memory = FT_FACE_MEMORY( face );
 
 
-    FT_FREE( cmap->unicodes.maps );
-    cmap->unicodes.num_maps = 0;
+    FT_FREE( unicodes->maps );
+    unicodes->num_maps = 0;
   }
 
 
   FT_CALLBACK_DEF( FT_UInt )
-  t1_cmap_unicode_char_index( T1_CMapUnicode  cmap,
-                              FT_UInt32       char_code )
+  t1_cmap_unicode_char_index( PS_Unicodes  unicodes,
+                              FT_UInt32    char_code )
   {
-    T1_Face             face    = (T1_Face)FT_CMAP_FACE( cmap );
+    T1_Face             face    = (T1_Face)FT_CMAP_FACE( unicodes );
     FT_Service_PsCMaps  psnames = (FT_Service_PsCMaps)face->psnames;
 
 
-    return psnames->unicodes_char_index( &cmap->unicodes, char_code );
+    return psnames->unicodes_char_index( unicodes, char_code );
   }
 
 
   FT_CALLBACK_DEF( FT_UInt )
-  t1_cmap_unicode_char_next( T1_CMapUnicode  cmap,
-                             FT_UInt32      *pchar_code )
+  t1_cmap_unicode_char_next( PS_Unicodes  unicodes,
+                             FT_UInt32   *pchar_code )
   {
-    T1_Face             face    = (T1_Face)FT_CMAP_FACE( cmap );
+    T1_Face             face    = (T1_Face)FT_CMAP_FACE( unicodes );
     FT_Service_PsCMaps  psnames = (FT_Service_PsCMaps)face->psnames;
 
 
-    return psnames->unicodes_char_next( &cmap->unicodes, pchar_code );
+    return psnames->unicodes_char_next( unicodes, pchar_code );
   }
 
 
@@ -311,7 +320,7 @@
   FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
   t1_cmap_unicode_class_rec =
   {
-    sizeof ( T1_CMapUnicodeRec ),
+    sizeof ( PS_UnicodesRec ),
 
     (FT_CMap_InitFunc)     t1_cmap_unicode_init,
     (FT_CMap_DoneFunc)     t1_cmap_unicode_done,
--- a/src/psaux/t1cmap.h
+++ b/src/psaux/t1cmap.h
@@ -39,13 +39,13 @@
 
   typedef struct  T1_CMapStdRec_
   {
-    FT_CMapRec                 cmap;
+    FT_CMapRec                cmap;
 
-    const FT_UShort*           code_to_sid;
-    PS_Adobe_Std_Strings_Func  sid_to_string;
+    const FT_UShort*          code_to_sid;
+    PS_Adobe_Std_StringsFunc  sid_to_string;
 
-    FT_UInt                    num_glyphs;
-    const char* const*         glyph_names;
+    FT_UInt                   num_glyphs;
+    const char* const*        glyph_names;
 
   } T1_CMapStdRec;
 
@@ -90,15 +90,6 @@
   /*************************************************************************/
 
   /* unicode (synthetic) cmaps */
-  typedef struct T1_CMapUnicodeRec_*  T1_CMapUnicode;
-
-  typedef struct  T1_CMapUnicodeRec_
-  {
-    FT_CMapRec   cmap;
-    PS_Unicodes  unicodes;
-
-  } T1_CMapUnicodeRec;
-
 
   FT_CALLBACK_TABLE const FT_CMap_ClassRec
   t1_cmap_unicode_class_rec;
--- a/src/psnames/psmodule.c
+++ b/src/psnames/psmodule.c
@@ -182,10 +182,11 @@
 
   /* Build a table that maps Unicode values to glyph indices. */
   static FT_Error
-  ps_unicodes_init( FT_Memory     memory,
-                    FT_UInt       num_glyphs,
-                    FT_String**   glyph_names,
-                    PS_Unicodes*  table )
+  ps_unicodes_init( FT_Memory          memory,
+                    PS_Unicodes        table,
+                    FT_UInt            num_glyphs,
+                    PS_Glyph_NameFunc  get_glyph_name,
+                    FT_Pointer         glyph_data )
   {
     FT_Error  error;
 
@@ -206,7 +207,7 @@
 
       for ( n = 0; n < num_glyphs; n++ )
       {
-        const char*  gname = glyph_names[n];
+        const char*  gname = get_glyph_name( glyph_data, n );
 
 
         if ( gname )
@@ -253,8 +254,8 @@
 
 
   static FT_UInt
-  ps_unicodes_char_index( PS_Unicodes*  table,
-                          FT_UInt32     unicode )
+  ps_unicodes_char_index( PS_Unicodes  table,
+                          FT_UInt32    unicode )
   {
     PS_UniMap  *min, *max, *mid, *result = NULL;
 
@@ -299,8 +300,8 @@
 
 
   static FT_ULong
-  ps_unicodes_char_next( PS_Unicodes*  table,
-                         FT_UInt32    *unicode )
+  ps_unicodes_char_next( PS_Unicodes  table,
+                         FT_UInt32   *unicode )
   {
     FT_UInt    result    = 0;
     FT_UInt32  char_code = *unicode + 1;
@@ -398,8 +399,8 @@
 
 #endif /* FT_CONFIG_OPTION_ADOBE_GLYPH_LIST */
 
-    (PS_Macintosh_Name_Func)   ps_get_macintosh_name,
-    (PS_Adobe_Std_Strings_Func)ps_get_standard_strings,
+    (PS_Macintosh_NameFunc)    ps_get_macintosh_name,
+    (PS_Adobe_Std_StringsFunc) ps_get_standard_strings,
 
     t1_standard_encoding,
     t1_expert_encoding
--- a/src/type42/t42types.h
+++ b/src/type42/t42types.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    Type 42 font data types (specification only).                        */
 /*                                                                         */
-/*  Copyright 2002, 2003 by Roberto Alameda.                               */
+/*  Copyright 2002, 2003, 2006 by Roberto Alameda.                         */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
 /*  modified, and distributed under the terms of the FreeType project      */
@@ -31,17 +31,17 @@
 
   typedef struct  T42_FaceRec_
   {
-    FT_FaceRec     root;
-    T1_FontRec     type1;
-    const void*    psnames;
-    const void*    psaux;
-    const void*    afm_data;
-    FT_Byte*       ttf_data;
-    FT_ULong       ttf_size;
-    FT_Face        ttf_face;
-    FT_CharMapRec  charmaprecs[2];
-    FT_CharMap     charmaps[2];
-    PS_Unicodes    unicode_map;
+    FT_FaceRec      root;
+    T1_FontRec      type1;
+    const void*     psnames;
+    const void*     psaux;
+    const void*     afm_data;
+    FT_Byte*        ttf_data;
+    FT_ULong        ttf_size;
+    FT_Face         ttf_face;
+    FT_CharMapRec   charmaprecs[2];
+    FT_CharMap      charmaps[2];
+    PS_UnicodesRec  unicode_map;
 
   } T42_FaceRec, *T42_Face;