shithub: freetype+ttf2subf

Download patch

ref: 9871b849dd4918507dc80781717d26564bbbe8bf
parent: 9f5dd61bf3deee315da14d3aca7f436bbf9cc76a
author: Werner Lemberg <[email protected]>
date: Mon Nov 22 14:30:41 EST 2010

Some formatting and improvements of comments.

git/fs: mount .git/fs: mount/attach disallowed
--- a/src/truetype/ttobjs.c
+++ b/src/truetype/ttobjs.c
@@ -149,9 +149,12 @@
   static FT_Bool
   tt_check_trickyness_family( FT_String*  name )
   {
+
 #define TRICK_NAMES_MAX_CHARACTERS  16
-#define TRICK_NAMES_COUNT 8
-    static const char trick_names[TRICK_NAMES_COUNT][TRICK_NAMES_MAX_CHARACTERS+1] =
+#define TRICK_NAMES_COUNT            8
+
+    static const char trick_names[TRICK_NAMES_COUNT]
+                                 [TRICK_NAMES_MAX_CHARACTERS + 1] =
     {
       "DFKaiSho-SB",     /* dfkaisb.ttf */
       "DFKaiShu",
@@ -162,7 +165,10 @@
       "PMingLiU",        /* mingliu.ttc */
       "MingLi43",        /* mingli.ttf */
     };
+
     int  nn;
+
+
     for ( nn = 0; nn < TRICK_NAMES_COUNT; nn++ )
       if ( ft_strstr( name, trick_names[nn] ) )
         return TRUE;
@@ -171,11 +177,13 @@
   }
 
 
-  /* XXX: this function should be in sfnt module */
-  /* some PDF generators clear the checksum in TrueType header */
-  /* (Quartz ContextPDF clears all, Bullzip PDF Printer clears */
-  /* for the subsetted subtables), we have to recalculate when */
-  /* it is cleared. */
+  /* XXX: This function should be in the `sfnt' module. */
+
+  /* Some PDF generators clear the checksums in the TrueType header table. */
+  /* For example, Quartz ContextPDF clears all entries, or Bullzip PDF     */
+  /* Printer clears the entries for subsetted subtables.  We thus have to  */
+  /* recalculate the checksums  where necessary.                           */
+
   static FT_UInt32
   tt_synth_sfnt_checksum( FT_Stream  stream,
                           FT_ULong   length )
@@ -200,7 +208,8 @@
   }
 
 
-  /* XXX: this function should be in sfnt module */
+  /* XXX: This function should be in the `sfnt' module. */
+
   static FT_ULong
   tt_get_sfnt_checksum( TT_Face    face,
                         FT_UShort  i )
@@ -207,8 +216,10 @@
   {
     if ( face->dir_tables[i].CheckSum )
       return face->dir_tables[i].CheckSum;
+
     else if ( !face->goto_table )
       return 0;
+
     else if ( !face->goto_table( face,
                                  face->dir_tables[i].Tag,
                                  face->root.stream,
@@ -216,7 +227,7 @@
       return 0;
 
     return (FT_ULong)tt_synth_sfnt_checksum( face->root.stream,
-                                             face->dir_tables[i].Length ); 
+                                             face->dir_tables[i].Length );
   }
 
 
@@ -224,6 +235,7 @@
   {
     FT_ULong  CheckSum;
     FT_ULong  Length;
+
   } tt_sfnt_id_rec;
 
 
@@ -230,13 +242,16 @@
   static FT_Bool
   tt_check_trickyness_sfnt_ids( TT_Face  face )
   {
-#define TRICK_SFNT_IDS_PER_FACE  3
-#define TRICK_SFNT_IDS_NUM_FACES 5
+#define TRICK_SFNT_IDS_PER_FACE   3
+#define TRICK_SFNT_IDS_NUM_FACES  5
+
     static const tt_sfnt_id_rec sfnt_id[TRICK_SFNT_IDS_NUM_FACES]
                                        [TRICK_SFNT_IDS_PER_FACE] = {
-#define TRICK_SFNT_ID_cvt  0
-#define TRICK_SFNT_ID_fpgm 1
-#define TRICK_SFNT_ID_prep 2
+
+#define TRICK_SFNT_ID_cvt   0
+#define TRICK_SFNT_ID_fpgm  1
+#define TRICK_SFNT_ID_prep  2
+
       { /* MingLiU 1995 */
         { 0x05bcf058, 0x000002e4 }, /* cvt  */
         { 0x28233bf1, 0x000087c4 }, /* fpgm */
@@ -263,36 +278,46 @@
         { 0x70020112, 0x00000008 }  /* prep */
       }
     };
+
     FT_ULong  checksum;
     int       num_matched_ids[TRICK_SFNT_IDS_NUM_FACES];
     int       i, j, k;
 
-    FT_MEM_SET( num_matched_ids, 0, sizeof( int ) * TRICK_SFNT_IDS_NUM_FACES );
 
+    FT_MEM_SET( num_matched_ids, 0,
+                sizeof( int ) * TRICK_SFNT_IDS_NUM_FACES );
+
     for ( i = 0; i < face->num_tables; i++ )
     {
       checksum = 0;
+
       switch( face->dir_tables[i].Tag )
       {
       case TTAG_cvt:
         k = TRICK_SFNT_ID_cvt;
         break;
+
       case TTAG_fpgm:
         k = TRICK_SFNT_ID_fpgm;
         break;
+
       case TTAG_prep:
         k = TRICK_SFNT_ID_prep;
         break;
+
       default:
         continue;
       }
+
       for ( j = 0; j < TRICK_SFNT_IDS_NUM_FACES; j++ )
         if ( face->dir_tables[i].Length == sfnt_id[j][k].Length )
         {
           if ( !checksum )
             checksum = tt_get_sfnt_checksum( face, i );
+
           if ( sfnt_id[j][k].CheckSum == checksum )
-            num_matched_ids[j] ++;
+            num_matched_ids[j]++;
+
           if ( num_matched_ids[j] == TRICK_SFNT_IDS_PER_FACE )
             return TRUE;
         }
@@ -308,8 +333,7 @@
     if ( !face )
       return FALSE;
 
-    /* Note that we only check the face name at the moment; it might */
-    /* be worth to do more checks for a few special cases.           */
+    /* First, check the face name. */
     if ( face->family_name )
     {
       if ( tt_check_trickyness_family( face->family_name ) )
@@ -318,9 +342,10 @@
         return FALSE;
     }
 
-    /* Type42 may lack `name' tables, try to identfiy tricky fonts by  */
-    /* the checksums of Type42-persistent sfnt tables; cvt, fpgm, prep */
-    if ( tt_check_trickyness_sfnt_ids( ( TT_Face )face ) )
+    /* Type42 fonts may lack `name' tables, we thus try to identify */
+    /* tricky fonts by checking the checksums of Type42-persistent  */
+    /* sfnt tables (`cvt', `fpgm', and `prep').                     */
+    if ( tt_check_trickyness_sfnt_ids( (TT_Face)face ) )
       return TRUE;
 
     return FALSE;