shithub: freetype+ttf2subf

Download patch

ref: 2e57343f900ed73846a95d898117e5eb3961aa17
parent: 004615e3d0143899e7ba5a37d658ccdd648411cd
author: Werner Lemberg <[email protected]>
date: Wed Apr 23 10:14:06 EDT 2003

* src/pfr/pfrload.c (pfr_extra_item_load_font_id): Use FT_PtrDist
instead of FT_Uint for `len'.

Cleanups.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-04-23  Werner Lemberg  <[email protected]>
+
+	* src/pfr/pfrload.c (pfr_extra_item_load_font_id): Use FT_PtrDist
+	instead of FT_Uint for `len'.
+
 2003-04-22  Werner Lemberg  <[email protected]>
 
 	* src/gzip/ftgzip.c (zcalloc) [!FT_CONFIG_OPTION_SYSTEM_ZLIB]:
@@ -92,7 +97,10 @@
 	Use `ft_glyphslot_*' functions.
 	Don't set `FT_GLYPH_OWN_BITMAP'.
 
-	* src/pfr/pfrsbit.c, src/sfnt/ttsbit.c, src/type42/t42objs.c,
+	* src/pfr/pfrsbit.c (pfr_slot_load_bitmap): Use
+	`ft_glyphslot_alloc_bitmap'.
+
+	* src/sfnt/ttsbit.c, src/type42/t42objs.c,
 	src/winfonts/winfnt.c:
 
 	* src/cache/ftlru.c (FT_LruList_Lookup): Fixed an invalid assertion
@@ -143,8 +151,8 @@
 	* src/cache/ftlru.c: Include FT_INTERNAL_DEBUG_H.
 	(FT_LruList_Lookup): Implement loop.
 
-	* src/pfr/pfrobjs.c, src/pfr/pfrsbits.c: Fixing compiler warnings
-	and a small memory leak.
+	* src/pfr/pfrobjs.c (pfr_face_done): Fix memory leak.
+	(pfr_face_init): Fixing compiler warnings.
 
 	* src/psaux/psobjs.c (t1_reallocate_table): Fixed a bug (memory
 	leak) that only happened when a try to resize an array would end in
@@ -178,8 +186,7 @@
 
 	  touch 0123456789 ; gzip 0123456789 ; ftdump 0123456789.gz
 
-	* src/pfr/pfrobjs.c, src/pfr/pfrload.c, src/pfr/pfrtypes.h: Several
-	fixes to the PFR font driver:
+	Several fixes to the PFR font driver:
 
 	- The list of available embedded bitmaps was not correctly set in
 	  the root FT_FaceRec structure describing the face.
@@ -193,6 +200,20 @@
 
 	NOTE THAT THESE CHANGES THE FAMILY NAME OF MANY PFR FONTS!
 
+	* src/pfr/pfrload.c (pfr_aux_name_load): New function.
+	(pfr_phy_font_done): Free `family_name' and `style_name' also.
+	Remove unused variables.
+	(pfr_phy_font_load): Extract useful information from the auxiliary
+	bytes.
+
+	* src/pfr/pfrobjs.c (pfr_face_done): Set pointers to NULL.
+	(pfr_face_init): Provide fallback values for `family_name' and
+	`style_name'.
+	Handle strikes.
+	(pfr_slot_load): Handle FT_LOAD_SBITS_ONLY.
+	* src/pfr/pfrtypes.h (PFR_PhyFontRec): Add fields `ascent',
+	`descent', `leading', `family_name', and `style_name'.
+
 	* src/truetype/ttdriver.c (Set_Char_Sizes): Fixed a rounding bug
 	when computing the scale factors for a given character size in
 	points with resolution.
@@ -587,7 +608,7 @@
 	* src/sfnt/ttcmap0.c (tt_face_build_cmaps): Removed compiler
 	warnings in optimized mode relative to the "volatile" local
 	variables.  This was not a compiler bug after all, but the fact that
-	a pointer to a volatile variable is not the same than a volatile
+	a pointer to a volatile variable is not the same as a volatile
 	pointer to a variable :-)
 
 	The fix was to change
@@ -595,8 +616,9 @@
 	into
 	  `FT_Byte* volatile p'.
 
-	* src/pfr/pfrload.c, src/pfr/pfrdrivr.c, src/gzip/inftrees.c:
-	Removed compiler warnings in optimized modes.
+	* src/pfr/pfrload.c (pfr_phy_font_load), src/pfr/pfrdrivr.c
+	(pfr_get_metrics), src/gzip/inftrees.c: Removed compiler warnings in
+	optimized modes.
 
 	* src/gzip/*.[hc]: Modified our zlib copy in order to prevent
 	exporting any zlib function names outside of the component.  This
@@ -620,9 +642,15 @@
 	* include/freetype/internal/internal.h (FT_INTERNAL_PFR_H): New
 	macro for pfr.h.
 
-	src/base/ftpfr.c: New file.
-
+	* src/base/ftpfr.c: New file.
 	* src/base/Jamfile, src/base/descrip.mms: Updated.
+
+	* src/pfr/pfrdrivr.c: Include FT_INTERNAL_PFR_H.
+	(pfr_get_kerning, pfr_get_advance, pfr_get_metrics): New functions.
+	(pfr_service_rec): New format interface.
+	(pfr_driver_class): Use `pfr_service_rec'.
+	Replace `pfr_face_get_kerning' with `pfr_get_kerning'.
+	* src/pfr/pfrobjs.c: Remove dead code.
 
 	* src/base/ftobjs.c (ft_glyphslot_clear): Small internal fix to
 	better support bitmap-based font formats.
--- a/src/pfr/pfrdrivr.c
+++ b/src/pfr/pfrdrivr.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    FreeType PFR driver interface (body).                                */
 /*                                                                         */
-/*  Copyright 2002 by                                                      */
+/*  Copyright 2002, 2003 by                                                */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -32,11 +32,13 @@
   {
     FT_Error  error;
 
+
     error = pfr_face_get_kerning( face, left, right, avector );
     if ( !error )
     {
       PFR_PhyFont  phys = &face->phy_font;
 
+
       /* convert from metrics to outline units when necessary */
       if ( phys->outline_resolution != phys->metrics_resolution )
       {
@@ -49,6 +51,7 @@
                                               phys->metrics_resolution );
       }
     }
+
     return error;
   }
 
@@ -58,13 +61,15 @@
                    FT_UInt    gindex,
                    FT_Pos    *aadvance )
   {
-    FT_Error     error = FT_Err_Bad_Argument;
+    FT_Error  error = FT_Err_Bad_Argument;
 
+
     *aadvance = 0;
     if ( face )
     {
       PFR_PhyFont  phys  = &face->phy_font;
 
+
       if ( gindex < phys->num_chars )
       {
         *aadvance = phys->chars[ gindex ].advance;
@@ -86,6 +91,7 @@
     PFR_PhyFont  phys  = &face->phy_font;
     FT_Fixed     x_scale, y_scale;
     FT_Size      size = face->root.size;
+
 
     if ( aoutline_resolution )
       *aoutline_resolution = phys->outline_resolution;
--- a/src/pfr/pfrload.c
+++ b/src/pfr/pfrload.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    FreeType PFR loader (body).                                          */
 /*                                                                         */
-/*  Copyright 2002 by                                                      */
+/*  Copyright 2002, 2003 by                                                */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -153,7 +153,7 @@
   pfr_header_load( PFR_Header  header,
                    FT_Stream   stream )
   {
-    FT_Error   error;
+    FT_Error  error;
 
 
     /* read header directly */
@@ -201,9 +201,9 @@
                       FT_UInt32  section_offset,
                       FT_UInt   *acount )
   {
-    FT_Error   error;
-    FT_UInt    count;
-    FT_UInt    result = 0;
+    FT_Error  error;
+    FT_UInt   count;
+    FT_UInt   result = 0;
 
 
     if ( FT_STREAM_SEEK( section_offset ) || FT_READ_USHORT( count ) )
@@ -239,8 +239,8 @@
       return PFR_Err_Invalid_Argument;
 
     if ( FT_STREAM_SKIP( idx * 5 ) ||
-         FT_READ_USHORT( size )      ||
-         FT_READ_UOFF3 ( offset )    )
+         FT_READ_USHORT( size )    ||
+         FT_READ_UOFF3 ( offset )  )
       goto Exit;
 
     /* save logical font size and offset */
@@ -365,8 +365,9 @@
     /* re-allocate when needed */
     if ( phy_font->num_strikes + count > phy_font->max_strikes )
     {
-      FT_UInt  new_max = (phy_font->num_strikes + count + 3) & -4;
+      FT_UInt  new_max = ( phy_font->num_strikes + count + 3 ) & -4;
 
+
       if ( FT_RENEW_ARRAY( phy_font->strikes,
                            phy_font->num_strikes,
                            new_max ) )
@@ -432,30 +433,30 @@
   }
 
 
- /* load font ID, this is a so-called "unique" name that is rather
-  * long and descriptive (like "Tiresias ScreenFont v7.51").
-  *
-  * note that a PFR font's family name is contained in an *undocumented*
-  * string of the "auxiliary data" portion of a physical font record. this
-  * may also contain the "real" style name !
-  *
-  * if no family name is present, the font id is used instead for the
-  * family
-  */
+  /* Load font ID.  This is a so-called "unique" name that is rather
+   * long and descriptive (like "Tiresias ScreenFont v7.51").
+   *
+   * Note that a PFR font's family name is contained in an *undocumented*
+   * string of the "auxiliary data" portion of a physical font record.  This
+   * may also contain the "real" style name!
+   *
+   * If no family name is present, the font ID is used instead for the
+   * family.
+   */
   FT_CALLBACK_DEF( FT_Error )
   pfr_extra_item_load_font_id( FT_Byte*     p,
                                FT_Byte*     limit,
                                PFR_PhyFont  phy_font )
   {
-    FT_Error   error  = 0;
-    FT_Memory  memory = phy_font->memory;
-    FT_UInt    len    = (FT_UInt)( limit - p );
+    FT_Error    error  = 0;
+    FT_Memory   memory = phy_font->memory;
+    FT_PtrDist  len    = limit - p;
 
 
     if ( phy_font->font_id != NULL )
       goto Exit;
 
-    if ( FT_ALLOC( phy_font->font_id, len+1 ) )
+    if ( FT_ALLOC( phy_font->font_id, len + 1 ) )
       goto Exit;
 
     /* copy font ID name, and terminate it for safety */
@@ -702,9 +703,9 @@
   };
 
 
- /* loads a name from the auxiliary data. Since this extracts undocumented
-  * strings from the font file, we need to be careful here
-  */
+  /* Loads a name from the auxiliary data.  Since this extracts undocumented
+   * strings from the font file, we need to be careful here.
+   */
   static FT_Error
   pfr_aux_name_load( FT_Byte*     p,
                      FT_UInt      len,
@@ -715,13 +716,14 @@
     FT_String*  result = NULL;
     FT_UInt     n, ok;
 
-    if ( len > 0 && p[len-1] == 0 )
+
+    if ( len > 0 && p[len - 1] == 0 )
       len--;
 
-   /* check that each character is ASCII, that's to be sure
-    * to not load garbage..
-    */
-    ok = (len > 0);
+    /* check that each character is ASCII for making sure not to
+       load garbage
+     */
+    ok = ( len > 0 );
     for ( n = 0; n < len; n++ )
       if ( p[n] < 32 || p[n] > 127 )
       {
@@ -731,7 +733,7 @@
 
     if ( ok )
     {
-      if ( FT_ALLOC( result, len+1 ) )
+      if ( FT_ALLOC( result, len + 1 ) )
         goto Exit;
 
       FT_MEM_COPY( result, p, len );
@@ -787,7 +789,6 @@
   }
 
 
-
   FT_LOCAL_DEF( FT_Error )
   pfr_phy_font_load( PFR_PhyFont  phy_font,
                      FT_Stream    stream,
@@ -842,9 +843,9 @@
         goto Fail;
     }
 
-    /* in certain fonts, the auxiliary bytes contain interesting  */
+    /* In certain fonts, the auxiliary bytes contain interesting  */
     /* information. These are not in the specification but can be */
-    /* guessed by looking at the content of a few PFR0 fonts      */
+    /* guessed by looking at the content of a few PFR0 fonts.     */
     PFR_CHECK( 3 );
     num_aux = PFR_NEXT_ULONG( p );
 
@@ -853,6 +854,7 @@
       FT_Byte*  q = p;
       FT_Byte*  q2;
 
+
       PFR_CHECK( num_aux );
       p += num_aux;
 
@@ -860,58 +862,54 @@
       {
         FT_UInt  length, type;
 
+
         if ( q + 4 > p )
           break;
 
-        length = PFR_NEXT_USHORT(q);
+        length = PFR_NEXT_USHORT( q );
         if ( length < 4 || length > num_aux )
           break;
 
         q2   = q + length - 2;
-        type = PFR_NEXT_USHORT(q);
+        type = PFR_NEXT_USHORT( q );
 
         switch ( type )
         {
-          case 1:
-            {
-             /* this seems to correspond to the font's family name,
-              * padded to 16-bits with one zero when necessary
-              */
-              error = pfr_aux_name_load( q, length-4U, memory,
-                                         &phy_font->family_name );
-              if ( error )
-                goto Exit;
-            }
-            break;
+        case 1:
+          /* this seems to correspond to the font's family name,
+           * padded to 16-bits with one zero when necessary
+           */
+          error = pfr_aux_name_load( q, length - 4U, memory,
+                                     &phy_font->family_name );
+          if ( error )
+            goto Exit;
+          break;
 
-          case 2:
-            {
-              if ( q + 32 > q2 )
-                break;
-
-              q += 10;
-              phy_font->ascent  = PFR_NEXT_SHORT(q);
-              phy_font->descent = PFR_NEXT_SHORT(q);
-              phy_font->leading = PFR_NEXT_SHORT(q);
-              q += 16;
-            }
+        case 2:
+          if ( q + 32 > q2 )
             break;
 
-          case 3:
-            {
-             /* this seems to correspond to the font's style name,
-              * padded to 16-bits with one zero when necessary
-              */
-              error = pfr_aux_name_load( q, length-4U, memory,
-                                         &phy_font->style_name );
-              if ( error )
-                goto Exit;
-            }
-            break;
+          q += 10;
+          phy_font->ascent  = PFR_NEXT_SHORT( q );
+          phy_font->descent = PFR_NEXT_SHORT( q );
+          phy_font->leading = PFR_NEXT_SHORT( q );
+          q += 16;
+          break;
 
-          default:
-            ;
+        case 3:
+          /* this seems to correspond to the font's style name,
+           * padded to 16-bits with one zero when necessary
+           */
+          error = pfr_aux_name_load( q, length - 4U, memory,
+                                     &phy_font->style_name );
+          if ( error )
+            goto Exit;
+          break;
+
+        default:
+          ;
         }
+
         q        = q2;
         num_aux -= length;
       }
@@ -921,6 +919,7 @@
     {
       FT_UInt  n, count;
 
+
       PFR_CHECK( 1 );
       phy_font->num_blue_values = count = PFR_NEXT_BYTE( p );
 
@@ -1000,7 +999,8 @@
       }
     }
 
-    /* that's it !! */
+    /* that's it! */
+
   Fail:
     FT_FRAME_EXIT();
 
--- a/src/pfr/pfrobjs.c
+++ b/src/pfr/pfrobjs.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    FreeType PFR object methods (body).                                  */
 /*                                                                         */
-/*  Copyright 2002 by                                                      */
+/*  Copyright 2002, 2003 by                                                */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -41,8 +41,9 @@
   FT_LOCAL_DEF( void )
   pfr_face_done( PFR_Face  face )
   {
-    FT_Memory   memory = face->root.driver->root.memory;
+    FT_Memory  memory = face->root.driver->root.memory;
 
+
     /* we don't want dangling pointers */
     face->root.family_name = NULL;
     face->root.style_name  = NULL;
@@ -143,18 +144,18 @@
        if ( phy_font->num_kern_pairs > 0 )
          root->face_flags |= FT_FACE_FLAG_KERNING;
 
-      /* if no family name was found in the "undocumented" auxiliary
-       * data, use the font ID instead. This sucks but is better than
-       * nothing
-       */
+       /* If no family name was found in the "undocumented" auxiliary
+        * data, use the font ID instead.  This sucks but is better than
+        * nothing.
+        */
        root->family_name = phy_font->family_name;
        if ( root->family_name == NULL )
          root->family_name = phy_font->font_id;
 
-      /* note that the style name can be NULL in certain PFR fonts,
-       * probably meaning "Regular"
-       */
-       root->style_name  = phy_font->style_name;
+       /* note that the style name can be NULL in certain PFR fonts,
+        * probably meaning "Regular"
+        */
+       root->style_name = phy_font->style_name;
 
        root->num_fixed_sizes = 0;
        root->available_sizes = 0;
@@ -182,8 +183,8 @@
          strike = phy_font->strikes;
          for ( n = 0; n < count; n++, size++, strike++ )
          {
-           size->height = (FT_UShort) strike->y_ppm;
-           size->width  = (FT_UShort) strike->x_ppm;
+           size->height = (FT_UShort)strike->y_ppm;
+           size->width  = (FT_UShort)strike->x_ppm;
          }
          root->num_fixed_sizes = count;
        }
@@ -279,7 +280,8 @@
     FT_Outline*  outline = &slot->root.outline;
     FT_ULong     gps_offset;
 
-    if (gindex > 0)
+
+    if ( gindex > 0 )
       gindex--;
 
     /* check that the glyph index is correct */
--- a/src/pfr/pfrsbit.c
+++ b/src/pfr/pfrsbit.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    FreeType PFR bitmap loader (body).                                   */
 /*                                                                         */
-/*  Copyright 2002 by                                                      */
+/*  Copyright 2002, 2003 by                                                */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -115,7 +115,7 @@
     }
 
     if ( mask != 0x80 )
-      cur[0] = (FT_Byte) c;
+      cur[0] = (FT_Byte)c;
   }
 
 
@@ -185,7 +185,7 @@
       }
       else if ( mask == 0 )
       {
-        cur[0] = (FT_Byte) c;
+        cur[0] = (FT_Byte)c;
         mask   = 0x80;
         c      = 0;
         cur ++;
@@ -249,7 +249,7 @@
       }
       else if ( mask == 0 )
       {
-        cur[0] = (FT_Byte) c;
+        cur[0] = (FT_Byte)c;
         c      = 0;
         mask   = 0x80;
         cur ++;
@@ -583,7 +583,7 @@
       pfr_lookup_bitmap_data( stream->cursor,
                               stream->limit,
                               strike->num_bitmaps,
-                              (FT_Byte) strike->flags,
+                              (FT_Byte)strike->flags,
                               character->char_code,
                               &gps_offset,
                               &gps_size );
@@ -645,7 +645,8 @@
 
         /* Allocate and read bitmap data */
         {
-          FT_ULong    len    = glyph->root.bitmap.pitch * ysize;
+          FT_ULong  len = glyph->root.bitmap.pitch * ysize;
+
 
           error = ft_glyphslot_alloc_bitmap( &glyph->root, len );
           if ( !error )
--- a/src/pfr/pfrtypes.h
+++ b/src/pfr/pfrtypes.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    FreeType PFR data structures (specification only).                   */
 /*                                                                         */
-/*  Copyright 2002 by                                                      */
+/*  Copyright 2002, 2003 by                                                */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */