shithub: freetype+ttf2subf

Download patch

ref: 17cd687266dadb4bd371c2c74e3298a8ccf87da5
parent: f47d263f1bb01fe7701249fe5df4ac2e1534bd51
author: David Turner <[email protected]>
date: Mon Sep 1 22:34:29 EDT 2008

* include/freetype/ftcache.h, src/cache/ftccmap.c:
    modify FTC_CMapCache_Lookup to accept a negative cmap index
    to mean "use default cached FT_Face's charmap". This fixes
    Savannah issue #22625

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2008-09-01  david turner <[email protected]>
 
+	* include/freetype/ftcache.h, src/cache/ftccmap.c:
+	modify FTC_CMapCache_Lookup to accept a negative cmap index
+	to mean "use default cached FT_Face's charmap". This fixes
+	Savannah issue #22625
+
 	* include/freetype/ftoption.h, include/freetype/ftconfig.h,
 	builds/unix/ftconfig.in, include/freetype/freetype.h,
 	src/base/ftcalc.c:
--- a/include/freetype/ftcache.h
+++ b/include/freetype/ftcache.h
@@ -610,6 +610,7 @@
    *
    *   cmap_index ::
    *     The index of the charmap in the source face.
+   *     Any negative value means to use the cache FT_Face's default charmap.
    *
    *   char_code ::
    *     The character code (in the corresponding charmap).
--- a/src/cache/ftccmap.c
+++ b/src/cache/ftccmap.c
@@ -288,7 +288,19 @@
     FT_Error          error;
     FT_UInt           gindex = 0;
     FT_UInt32         hash;
+    FT_Int            no_cmap_change = 0;
 
+    if (cmap_index < 0)
+    {
+      /* treat a negative cmap index as a special value that
+       * means you don't want to change the FT_Face's character
+       * map through this call. this can be useful when the
+       * face requester callback already set the face's charmap
+       * to the appropriate value.
+       */
+      no_cmap_change = 1;
+      cmap_index     = 0;
+    }
 
     if ( !cache )
     {
@@ -311,7 +323,7 @@
      *        Adobe Acrobat Reader Pack, named `KozMinProVI-Regular.otf',
      *        which contains more than 5 charmaps.
      */
-    if ( cmap_index >= 16 )
+    if ( cmap_index >= 16 && !no_cmap_change )
     {
       FTC_OldCMapDesc  desc = (FTC_OldCMapDesc) face_id;
 
@@ -393,12 +405,12 @@
         old  = face->charmap;
         cmap = face->charmaps[cmap_index];
 
-        if ( old != cmap )
+        if ( old != cmap && !no_cmap_change )
           FT_Set_Charmap( face, cmap );
 
         gindex = FT_Get_Char_Index( face, char_code );
 
-        if ( old != cmap )
+        if ( old != cmap && !no_cmap_change )
           FT_Set_Charmap( face, old );
       }