shithub: freetype+ttf2subf

Download patch

ref: f13e6333f9724bf254754c843597c686f347fbf9
parent: 026bd17b4138fda38885db9c3986b560072c6c02
author: Werner Lemberg <[email protected]>
date: Tue May 30 12:49:14 EDT 2000

Formatting; minor improvements.

git/fs: mount .git/fs: mount/attach disallowed
--- a/include/freetype/config/ftconfig.h
+++ b/include/freetype/config/ftconfig.h
@@ -98,7 +98,7 @@
 /* UNUSED is a macro used to indicate that a given parameter is not used */
 /* this is only used to get rid of unpleasant compiler warnings..        */
 #ifndef UNUSED
-#define UNUSED( arg )  ( (arg)=(arg) )
+#define UNUSED( arg )  ( (void)(arg)=(arg) )
 #endif
 
 
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -260,7 +260,7 @@
   /*    bytecode interpreter.                                              */
   /*                                                                       */
   /* <Input>                                                               */
-  /*    l :: 64-bit integer                                                */
+  /*    l :: A 64-bit integer.                                             */
   /*                                                                       */
   /* <Return>                                                              */
   /*    The 32-bit square-root.                                            */
--- a/src/base/ftextend.c
+++ b/src/base/ftextend.c
@@ -24,6 +24,7 @@
   /*                                                                       */
   /*************************************************************************/
 
+
 #include <freetype/internal/ftextend.h>
 
 /* required by the tracing mode */
@@ -114,8 +115,9 @@
   /* <Return>                                                              */
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
-  FT_EXPORT_FUNC(FT_Error)  FT_Register_Extension( FT_Driver            driver,
-                                                   FT_Extension_Class*  class )
+  FT_EXPORT_FUNC( FT_Error )  FT_Register_Extension(
+                                FT_Driver            driver,
+                                FT_Extension_Class*  class )
   {
     FT_Extension_Registry*  registry;
 
@@ -162,9 +164,10 @@
   /* <Return>                                                              */
   /*    A pointer to the extension block.                                  */
   /*                                                                       */
-  FT_EXPORT_FUNC(void*)  FT_Get_Extension( FT_Face      face,
-                                           const char*  extension_id,
-                                           void*       *extension_interface )
+  FT_EXPORT_FUNC( void* )  FT_Get_Extension(
+                             FT_Face      face,
+                             const char*  extension_id,
+                             void*       *extension_interface )
   {
     FT_Extension_Registry*  registry;
 
--- a/src/base/ftglyph.c
+++ b/src/base/ftglyph.c
@@ -2,9 +2,9 @@
 /*                                                                         */
 /*  ftglyph.c                                                              */
 /*                                                                         */
-/*    FreeType convenience functions to handle glyphs..                    */
+/*    FreeType convenience functions to handle glyphs (body).              */
 /*                                                                         */
-/*  Copyright 1996-1999 by                                                 */
+/*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used        */
@@ -13,31 +13,38 @@
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
 /*                                                                         */
-/*  This file contains the definition of several convenience functions     */
-/*  that can be used by client applications to easily retrieve glyph       */
-/*  bitmaps and outlines from a given face.                                */
-/*                                                                         */
-/*  These functions should be optional if you're writing a font server     */
-/*  or text layout engine on top of FreeType. However, they are pretty     */
-/*  handy for many other simple uses of the library..                      */
-/*                                                                         */
 /***************************************************************************/
 
+  /*************************************************************************/
+  /*                                                                       */
+  /*  This file contains the definition of several convenience functions   */
+  /*  that can be used by client applications to easily retrieve glyph     */
+  /*  bitmaps and outlines from a given face.                              */
+  /*                                                                       */
+  /*  These functions should be optional if you are writing a font server  */
+  /*  or text layout engine on top of FreeType.  However, they are pretty  */
+  /*  handy for many other simple uses of the library.                     */
+  /*                                                                       */
+  /*************************************************************************/
+
+
 #include <freetype/ftglyph.h>
 #include <freetype/internal/ftobjs.h>
 
+
   static
-  void ft_prepare_glyph( FT_Glyph  glyph,
-                         FT_Face   face,
-                         FT_Bool   vertical )
+  void  ft_prepare_glyph( FT_Glyph  glyph,
+                          FT_Face   face,
+                          FT_Bool   vertical )
   {
     FT_Glyph_Metrics*  metrics = &face->glyph->metrics;
 
-    glyph->memory   = face->memory;
-    glyph->width    = metrics->width;
-    glyph->height   = metrics->height;
 
-    if (vertical)
+    glyph->memory = face->memory;
+    glyph->width  = metrics->width;
+    glyph->height = metrics->height;
+
+    if ( vertical )
     {
       glyph->bearingX = metrics->vertBearingX;
       glyph->bearingY = metrics->vertBearingY;
@@ -51,74 +58,80 @@
     }
   }
 
- /***********************************************************************
-  *
-  * <Function>
-  *    FT_Get_Glyph_Bitmap
-  *
-  * <Description>
-  *    A function used to directly return a monochrome bitmap glyph image
-  *    from a face.
-  *
-  * <Input>
-  *    face        :: handle to source face object
-  *    glyph_index :: glyph index in face
-  *    load_flags  :: load flags, see FT_LOAD_FLAG_XXXX constants..
-  *    grays       :: number of gray levels for anti-aliased bitmaps,
-  *                   set to 0 if you want to render a monochrome bitmap
-  *    origin      :: a pointer to the origin's position. Set to 0
-  *                   if the current transform is the identity..
-  *
-  * <Output>
-  *    bitglyph :: pointer to the new bitmap glyph
-  *
-  * <Return>
-  *    Error code. 0 means success.
-  *
-  * <Note>
-  *    If the font contains glyph outlines, these will be automatically
-  *    converted to a bitmap according to the value of "grays"
-  *
-  *    If "grays" is set to 0, the result is a 1-bit monochrome bitmap
-  *    otherwise, it is an 8-bit gray-level bitmap
-  *
-  *    The number of gray levels in the result anti-aliased bitmap might
-  *    not be "grays", depending on the current scan-converter implementation
-  *
-  *    Note that it is not possible to generate 8-bit monochrome bitmaps
-  *    with this function. Rather, use FT_Get_Glyph_Outline, then
-  *    FT_Glyph_Render_Outline and provide your own span callbacks..
-  *
-  *    When the face doesn't contain scalable outlines, this function will
-  *    fail if the current transform is not the identity, or if the glyph
-  *    origin's phase to the pixel grid is not 0 in both directions !!
-  *
-  ***********************************************************************/
 
-  FT_EXPORT_FUNC(FT_Error)  FT_Get_Glyph_Bitmap( FT_Face         face,
-                                                 FT_UInt         glyph_index,
-                                                 FT_UInt         load_flags,
-                                                 FT_Int          grays,
-                                                 FT_Vector*      origin,
-                                                 FT_BitmapGlyph  *abitglyph )
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Glyph_Bitmap                                                */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used to directly return a monochrome bitmap glyph image */
+  /*    from a face.                                                       */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face        :: A handle to source face object.                     */
+  /*    glyph_index :: A glyph index into the face.                        */
+  /*    load_flags  :: Load flags (see FT_LOAD_FLAG_XXXX constants).       */
+  /*    grays       :: The number of gray levels for anti-aliased bitmaps. */
+  /*                   Set it to 0 if you want to render a monochrome      */
+  /*                   bitmap.                                             */
+  /*    origin      :: A pointer to the origin's position.  Set it to 0    */
+  /*                   if the current transform is the identity.           */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    abitglyph   :: A pointer to the new bitmap glyph.                  */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    If the font contains glyph outlines, these will be automatically   */
+  /*    converted to a bitmap according to the value of `grays'            */
+  /*                                                                       */
+  /*    If `grays' is set to 0, the result is a 1-bit monochrome bitmap    */
+  /*    otherwise, it is an 8-bit gray-level bitmap.                       */
+  /*                                                                       */
+  /*    The number of gray levels in the result anti-aliased bitmap might  */
+  /*    not be `grays', depending on the current scan-converter            */
+  /*    implementation.                                                    */
+  /*                                                                       */
+  /*    Note that it is not possible to generate 8-bit monochrome bitmaps  */
+  /*    with this function.  Rather, use FT_Get_Glyph_Outline(), then      */
+  /*    FT_Glyph_Render_Outline(), and provide your own span callbacks.    */
+  /*                                                                       */
+  /*    If the face doesn't contain scalable outlines, this function will  */
+  /*    fail if the current transformation is not the identity, or if the  */
+  /*    glyph origin's phase to the pixel grid is not 0 in both            */
+  /*    directions!                                                        */
+  /*                                                                       */
+  FT_EXPORT_FUNC( FT_Error )  FT_Get_Glyph_Bitmap(
+                                FT_Face          face,
+                                FT_UInt          glyph_index,
+                                FT_UInt          load_flags,
+                                FT_Int           grays,
+                                FT_Vector*       origin,
+                                FT_BitmapGlyph*  abitglyph )
   {
     FT_Error         error;
     FT_Memory        memory;
+
     FT_BitmapGlyph   bitglyph;
     FT_Glyph         glyph;
     FT_Pos           origin_x = 0;
     FT_Pos           origin_y = 0;
 
+
     *abitglyph = 0;
 
-    if (origin)
+    if ( origin )
     {
       origin_x = origin->x & 63;
       origin_y = origin->y & 63;
     }
 
-    /* check arguments if the face's format is not scalable */
-    if ( !(face->face_flags & FT_FACE_FLAG_SCALABLE) && face->transform_flags )
+    /* check arguments whether the face's format is not scalable */
+    if ( !( face->face_flags & FT_FACE_FLAG_SCALABLE ) &&
+         face->transform_flags )
     {
       /* we can't transform bitmaps, so return an error */
       error = FT_Err_Unimplemented_Feature;
@@ -126,7 +139,7 @@
     }
 
     /* check that NO_SCALE and NO_RECURSE are not set */
-    if (load_flags & (FT_LOAD_NO_SCALE|FT_LOAD_NO_RECURSE))
+    if ( load_flags & ( FT_LOAD_NO_SCALE | FT_LOAD_NO_RECURSE ) )
     {
       error = FT_Err_Invalid_Argument;
       goto Exit;
@@ -137,104 +150,115 @@
       load_flags |= FT_LOAD_NO_BITMAP;
 
     error = FT_Load_Glyph( face, glyph_index, load_flags );
-    if (error) goto Exit;
+    if ( error )
+      goto Exit;
 
     /* now, handle bitmap and outline glyph images */
     memory = face->memory;
     switch ( face->glyph->format )
     {
-      case ft_glyph_format_bitmap:
-        {
-          FT_Long     size;
-          FT_Bitmap*  source;
+    case ft_glyph_format_bitmap:
+      {
+        FT_Long     size;
+        FT_Bitmap*  source;
 
-          if ( ALLOC( bitglyph, sizeof(*bitglyph) ) )
-            goto Exit;
 
-          glyph             = (FT_Glyph)bitglyph;
-          glyph->glyph_type = ft_glyph_type_bitmap;
-          ft_prepare_glyph( glyph, face, 0 );
+        if ( ALLOC( bitglyph, sizeof ( *bitglyph ) ) )
+          goto Exit;
 
-          source = &face->glyph->bitmap;
-          size   = source->rows * source->pitch;
-          if (size < 0) size = -size;
+        glyph             = (FT_Glyph)bitglyph;
+        glyph->glyph_type = ft_glyph_type_bitmap;
+        ft_prepare_glyph( glyph, face, 0 );
 
-          bitglyph->bitmap = *source;
-          if ( ALLOC( bitglyph->bitmap.buffer, size ) )
-            goto Fail;
+        source = &face->glyph->bitmap;
+        size   = source->rows * source->pitch;
+        if ( size < 0 )
+          size = -size;
 
-          /* copy the content of the source glyph */
-          MEM_Copy( bitglyph->bitmap.buffer, source->buffer, size );
-        }
-        break;
+        bitglyph->bitmap = *source;
+        if ( ALLOC( bitglyph->bitmap.buffer, size ) )
+          goto Fail;
 
-      case ft_glyph_format_outline:
-        {
-          FT_BBox  cbox;
-          FT_Int   width, height, pitch;
-          FT_Long  size;
+        /* copy the content of the source glyph */
+        MEM_Copy( bitglyph->bitmap.buffer, source->buffer, size );
+      }
+      break;
 
-          /* transform the outline - note that the original metrics are NOT */
-          /* transformed by this.. only the outline points themselves..     */
-          FT_Outline_Transform( &face->glyph->outline, &face->transform_matrix );
-          FT_Outline_Translate( &face->glyph->outline,
-                                face->transform_delta.x + origin_x,
-                                face->transform_delta.y + origin_y );
+    case ft_glyph_format_outline:
+      {
+        FT_BBox  cbox;
+        FT_Int   width, height, pitch;
+        FT_Long  size;
 
-          /* compute the size in pixels of the outline */
-          FT_Outline_Get_CBox( &face->glyph->outline, &cbox );
-          cbox.xMin &= -64;
-          cbox.yMin &= -64;
-          cbox.xMax  = (cbox.xMax+63) & -64;
-          cbox.yMax  = (cbox.yMax+63) & -64;
 
-          width  = (cbox.xMax - cbox.xMin) >> 6;
-          height = (cbox.yMax - cbox.yMin) >> 6;
+        /* transform the outline -- note that the original metrics are NOT */
+        /* transformed by this, only the outline points themselves...      */
+        FT_Outline_Transform( &face->glyph->outline,
+                              &face->transform_matrix );
+        FT_Outline_Translate( &face->glyph->outline,
+                              face->transform_delta.x + origin_x,
+                              face->transform_delta.y + origin_y );
 
-          /* allocate the pixel buffer for the glyph bitmap */
-          if (grays) pitch = (width+3) & -4;  /* some raster implementation need this */
-                else pitch = (width+7) >> 3;
+        /* compute the size in pixels of the outline */
+        FT_Outline_Get_CBox( &face->glyph->outline, &cbox );
+        cbox.xMin &= -64;
+        cbox.yMin &= -64;
+        cbox.xMax  = ( cbox.xMax + 63 ) & -64;
+        cbox.yMax  = ( cbox.yMax + 63 ) & -64;
 
-          size  = pitch * height;
-          if ( ALLOC( bitglyph, sizeof(*bitglyph) ) )
-            goto Exit;
+        width  = ( cbox.xMax - cbox.xMin ) >> 6;
+        height = ( cbox.yMax - cbox.yMin ) >> 6;
 
-          glyph             = (FT_Glyph)bitglyph;
-          glyph->glyph_type = ft_glyph_type_bitmap;
-          ft_prepare_glyph( glyph, face, 0 );
+        /* allocate the pixel buffer for the glyph bitmap */
+        if ( grays )
+          /* some raster implementation need this */
+          pitch = ( width + 3 ) & -4;
+        else
+          pitch = ( width + 7 ) >> 3;
 
-          if ( ALLOC( bitglyph->bitmap.buffer, size ) )
-            goto Fail;
+        size  = pitch * height;
+        if ( ALLOC( bitglyph, sizeof ( *bitglyph ) ) )
+          goto Exit;
 
-          bitglyph->bitmap.width      = width;
-          bitglyph->bitmap.rows       = height;
-          bitglyph->bitmap.pitch      = pitch;
-          bitglyph->bitmap.pixel_mode = grays ? ft_pixel_mode_grays
-                                              : ft_pixel_mode_mono;
-          bitglyph->bitmap.num_grays  = (short)grays;
+        glyph             = (FT_Glyph)bitglyph;
+        glyph->glyph_type = ft_glyph_type_bitmap;
+        ft_prepare_glyph( glyph, face, 0 );
 
-          bitglyph->left = (cbox.xMin >> 6);
-          bitglyph->top  = (cbox.yMax >> 6);
+        if ( ALLOC( bitglyph->bitmap.buffer, size ) )
+          goto Fail;
 
-          /* render the monochrome outline into the target buffer */
-          FT_Outline_Translate( &face->glyph->outline, -cbox.xMin, -cbox.yMin );
-          error = FT_Outline_Get_Bitmap( face->driver->library,
-                                         &face->glyph->outline,
-                                         &bitglyph->bitmap );
-          if (error)
-          {
-            FREE( bitglyph->bitmap.buffer );
-            goto Fail;
-          }
+        bitglyph->bitmap.width      = width;
+        bitglyph->bitmap.rows       = height;
+        bitglyph->bitmap.pitch      = pitch;
+        bitglyph->bitmap.pixel_mode = grays ? ft_pixel_mode_grays
+                                            : ft_pixel_mode_mono;
+        bitglyph->bitmap.num_grays  = (short)grays;
+
+        bitglyph->left = cbox.xMin >> 6;
+        bitglyph->top  = cbox.yMax >> 6;
+
+        /* render the monochrome outline into the target buffer */
+        FT_Outline_Translate( &face->glyph->outline,
+                              -cbox.xMin,
+                              -cbox.yMin );
+        error = FT_Outline_Get_Bitmap( face->driver->library,
+                                       &face->glyph->outline,
+                                       &bitglyph->bitmap );
+        if ( error )
+        {
+          FREE( bitglyph->bitmap.buffer );
+          goto Fail;
         }
-        break;
+      }
+      break;
 
-      default:
-        error = FT_Err_Invalid_Glyph_Index;
-        goto Exit;
+    default:
+      error = FT_Err_Invalid_Glyph_Index;
+      goto Exit;
     }
 
     *abitglyph = bitglyph;
+
   Exit:
     return error;
 
@@ -244,45 +268,46 @@
   }
 
 
- /***********************************************************************
-  *
-  * <Function>
-  *    FT_Get_Glyph_Outline
-  *
-  * <Description>
-  *    A function used to directly return a bitmap glyph image from a
-  *    face. This is faster than calling FT_Load_Glyph+FT_Get_Outline_Bitmap..
-  *
-  * <Input>
-  *    face        :: handle to source face object
-  *    glyph_index :: glyph index in face
-  *    load_flags  :: load flags, see FT_LOAD_FLAG_XXXX constants..
-  *
-  * <Output>
-  *    vecglyph :: pointer to the new outline glyph
-  *
-  * <Return>
-  *    Error code. 0 means success.
-  *
-  * <Note>
-  *    This function will fail if the load flags FT_LOAD_NO_OUTLINE and
-  *    FT_LOAD_NO_RECURSE are set..
-  *
-  ***********************************************************************/
-
-  FT_EXPORT_FUNC(FT_Error)  FT_Get_Glyph_Outline( FT_Face           face,
-                                                  FT_UInt           glyph_index,
-                                                  FT_UInt           load_flags,
-                                                  FT_OutlineGlyph  *vecglyph )
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Glyph_Outline                                               */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used to directly return a bitmap glyph image from a     */
+  /*    face.  This is faster than calling FT_Load_Glyph() +               */
+  /*    FT_Get_Outline_Bitmap().                                           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face        :: A handle to the source face object.                 */
+  /*    glyph_index :: A glyph index into face                             */
+  /*    load_flags  :: Load flags (see FT_LOAD_FLAG_XXXX constants).       */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    vecglyph    :: A pointer to the new outline glyph.                 */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    FreeType error code.  0 means success.                             */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function will fail if the load flags FT_LOAD_NO_OUTLINE and   */
+  /*    FT_LOAD_NO_RECURSE are set.                                        */
+  /*                                                                       */
+  FT_EXPORT_FUNC( FT_Error )  FT_Get_Glyph_Outline(
+                                FT_Face           face,
+                                FT_UInt           glyph_index,
+                                FT_UInt           load_flags,
+                                FT_OutlineGlyph*  vecglyph )
   {
     FT_Error         error;
     FT_Memory        memory;
     FT_OutlineGlyph  glyph;
 
+
     *vecglyph = 0;
 
     /* check that NO_OUTLINE and NO_RECURSE are not set */
-    if (load_flags & (FT_LOAD_NO_OUTLINE|FT_LOAD_NO_RECURSE))
+    if ( load_flags & ( FT_LOAD_NO_OUTLINE | FT_LOAD_NO_RECURSE ) )
     {
       error = FT_Err_Invalid_Argument;
       goto Exit;
@@ -292,7 +317,8 @@
     load_flags |= FT_LOAD_NO_BITMAP;
 
     error = FT_Load_Glyph( face, glyph_index, load_flags );
-    if (error) goto Exit;
+    if ( error )
+      goto Exit;
 
     /* check that we really loaded an outline */
     if ( face->glyph->format != ft_glyph_format_outline )
@@ -301,8 +327,8 @@
       goto Exit;
     }
 
-    /* transform the outline - note that the original metrics are NOT */
-    /* transformed by this.. only the outline points themselves..     */
+    /* transform the outline -- note that the original metrics are NOT */
+    /* transformed by this, only the outline points themselves...      */
     if ( face->transform_flags )
     {
       FT_Outline_Transform( &face->glyph->outline, &face->transform_matrix );
@@ -311,9 +337,9 @@
                             face->transform_delta.y );
     }
 
-    /* now, create a new outline glyph and copy everything there */
+    /* now, create a new outline glyph and copy everything */
     memory = face->memory;
-    if ( ALLOC( glyph, sizeof(*glyph) ) )
+    if ( ALLOC( glyph, sizeof ( *glyph ) ) )
       goto Exit;
 
     ft_prepare_glyph( (FT_Glyph)glyph, face, 0 );
@@ -323,12 +349,13 @@
                             face->glyph->outline.n_points,
                             face->glyph->outline.n_contours,
                             &glyph->outline );
-    if (!error)
+    if ( !error )
       error = FT_Outline_Copy( &face->glyph->outline, &glyph->outline );
+    if ( error )
+      goto Fail;
 
-    if (error) goto Fail;
-
     *vecglyph = glyph;
+
   Exit:
     return error;
 
@@ -337,37 +364,42 @@
     goto Exit;
   }
 
- /***********************************************************************
-  *
-  * <Function>
-  *    FT_Set_Transform
-  *
-  * <Description>
-  *    A function used to set the transform that is applied to glyph images
-  *    just after they're loaded in the face's glyph slot, and before they're
-  *    returned by either FT_Get_Glyph_Bitmap or FT_Get_Glyph_Outline
-  *
-  * <Input>
-  *    face   :: handle to source face object
-  *    matrix :: pointer to the transform's 2x2 matrix. 0 for identity
-  *    delta  :: pointer to the transform's translation. 0 for null vector
-  *
-  * <Note>
-  *    The transform is only applied to glyph outlines when they are found
-  *    in a font face. It is unable to transform embedded glyph bitmaps
-  *
-  ***********************************************************************/
 
-  FT_EXPORT_FUNC(void) FT_Set_Transform( FT_Face     face,
-                                         FT_Matrix*  matrix,
-                                         FT_Vector*  delta )
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Set_Transform                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    A function used to set the transformation that is applied to glyph */
+  /*    images just after they are loaded in the face's glyph slot, and    */
+  /*    before they are returned by either FT_Get_Glyph_Bitmap() or        */
+  /*    FT_Get_Glyph_Outline().                                            */
+  /*                                                                       */
+  /* <InOut>                                                               */
+  /*    face   :: A handle to the source face object.                      */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    matrix :: A pointer to the transformation's 2x2 matrix.  Use 0 for */
+  /*              the identity matrix.                                     */
+  /*    delta  :: A pointer to the translation vector.  Use 0 for the null */
+  /*              vector.                                                  */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    The transformation is only applied to glyph outlines if they are   */
+  /*    found in a font face.  It is unable to transform embedded glyph    */
+  /*    bitmaps.                                                           */
+  /*                                                                       */
+  FT_EXPORT_FUNC( void )  FT_Set_Transform( FT_Face     face,
+                                            FT_Matrix*  matrix,
+                                            FT_Vector*  delta )
   {
     face->transform_flags = 0;
 
-    if (!matrix)
+    if ( !matrix )
     {
       face->transform_matrix.xx = 0x10000L;
-      face->transform_matrix.xy = 0;
+      face->transform_matrix.xy = 0L;
       face->transform_matrix.yx = 0L;
       face->transform_matrix.yy = 0x10000L;
       matrix = &face->transform_matrix;
@@ -375,13 +407,13 @@
     else
       face->transform_matrix = *matrix;
 
-    /* set transform_flags bit flag 0 if delta isn't the null vector */
-    if ( (matrix->xy | matrix->yx) ||
-         matrix->xx != 0x10000L    ||
-         matrix->yy != 0x10000L    )
+    /* set transform_flags bit flag 0 if `matrix' isn't the identity */
+    if ( ( matrix->xy | matrix->yx ) ||
+         matrix->xx != 0x10000L      ||
+         matrix->yy != 0x10000L      )
       face->transform_flags |= 1;
 
-    if (!delta)
+    if ( !delta )
     {
       face->transform_delta.x = 0;
       face->transform_delta.y = 0;
@@ -390,39 +422,43 @@
     else
       face->transform_delta = *delta;
 
-    /* set transform_flags bit flag 1 if delta isn't the null vector */
+    /* set transform_flags bit flag 1 if `delta' isn't the null vector */
     if ( delta->x | delta->y )
       face->transform_flags |= 2;
   }
 
- /***********************************************************************
-  *
-  * <Function>
-  *    FT_Done_Glyph
-  *
-  * <Description>
-  *    Destroys a given glyph..
-  *
-  * <Input>
-  *    glyph  :: handle to target glyph object
-  *
-  ***********************************************************************/
 
-  FT_EXPORT_FUNC(void)  FT_Done_Glyph( FT_Glyph  glyph )
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Done_Glyph                                                      */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Destroys a given glyph.                                            */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    glyph :: A handle to the target glyph object.                      */
+  /*                                                                       */
+  FT_EXPORT_FUNC( void )  FT_Done_Glyph( FT_Glyph  glyph )
   {
-    if (glyph)
+    if ( glyph )
     {
       FT_Memory  memory = glyph->memory;
 
+
       if ( glyph->glyph_type == ft_glyph_type_bitmap )
       {
         FT_BitmapGlyph  bit = (FT_BitmapGlyph)glyph;
+
+
         FREE( bit->bitmap.buffer );
       }
       else if ( glyph->glyph_type == ft_glyph_type_outline )
       {
         FT_OutlineGlyph  out = (FT_OutlineGlyph)glyph;
-        if (out->outline.flags & ft_outline_owner)
+
+
+        if ( out->outline.flags & ft_outline_owner )
         {
           FREE( out->outline.points );
           FREE( out->outline.contours );
@@ -435,41 +471,42 @@
   }
 
 
- /***********************************************************************
-  *
-  * <Function>
-  *    FT_Glyph_Get_Box
-  *
-  * <Description>
-  *    Returns the glyph image's bounding box in pixels.
-  *
-  * <Input>
-  *    glyph :: handle to target glyph object
-  *
-  * <Output>
-  *    box   :: the glyph bounding box. Coordinates are expressed in
-  *             _integer_ pixels, with exclusive max bounds
-  *
-  * <Note>
-  *    Coordinates are relative to the glyph origin, using the Y-upwards
-  *    convention..
-  *
-  *    The width of the box in pixels is box.xMax-box.xMin
-  *    The height is box.yMax - box.yMin
-  *
-  ***********************************************************************/
-
-  FT_EXPORT_FUNC(void)  FT_Glyph_Get_Box( FT_Glyph  glyph,
-                                          FT_BBox  *box )
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Glyph_Get_Box                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Returns the glyph image's bounding box in pixels.                  */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    glyph :: A handle to the target glyph object.                      */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    box   :: The glyph bounding box.  Coordinates are expressed in     */
+  /*             _integer_ pixels, with exclusive maximal bounding values. */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    Coordinates are relative to the glyph origin, using the Y-upwards  */
+  /*    convention.                                                        */
+  /*                                                                       */
+  /*    The width of the box in pixels is `box.xMax-box.xMin'; the height  */
+  /*    is `box.yMax-box.yMin'.                                            */
+  /*                                                                       */
+  FT_EXPORT_FUNC( void )  FT_Glyph_Get_Box( FT_Glyph  glyph,
+                                            FT_BBox*  box )
   {
     box->xMin = box->xMax = 0;
     box->yMin = box->yMax = 0;
 
-    if (glyph) switch (glyph->glyph_type)
-    {
+    if ( glyph )
+      switch ( glyph->glyph_type )
+      {
       case ft_glyph_type_bitmap:
         {
           FT_BitmapGlyph  bit = (FT_BitmapGlyph)glyph;
+  
+  
           box->xMin = bit->left;
           box->xMax = box->xMin + bit->bitmap.width;
           box->yMax = bit->top;
@@ -481,11 +518,12 @@
         {
           FT_OutlineGlyph  out = (FT_OutlineGlyph)glyph;
 
+
           FT_Outline_Get_CBox( &out->outline, box );
           box->xMin >>= 6;
           box->yMin >>= 6;
-          box->xMax  = (box->xMax+63) >> 6;
-          box->yMax  = (box->yMax+63) >> 6;
+          box->xMax  = ( box->xMax + 63 ) >> 6;
+          box->yMax  = ( box->yMax + 63 ) >> 6;
         }
         break;
 
@@ -495,29 +533,35 @@
   }
 
 
- /***************************************************************************/
- /***************************************************************************/
- /****                                                                   ****/
- /****   EXPERIMENTAL EMBOLDENING/OUTLINING SUPPORT                      ****/
- /****                                                                   ****/
- /***************************************************************************/
- /***************************************************************************/
+  /*************************************************************************/
+  /*************************************************************************/
+  /****                                                                 ****/
+  /****   EXPERIMENTAL EMBOLDENING/OUTLINING SUPPORT                    ****/
+  /****                                                                 ****/
+  /*************************************************************************/
+  /*************************************************************************/
 
 #if 0
 
-/* Compute the norm of a vector */
+  /* Compute the norm of a vector */
+
 #ifdef FT_CONFIG_OPTION_OLD_CALCS
+
   static
-  FT_Pos   ft_norm( FT_Vector*  vec )
+  FT_Pos  ft_norm( FT_Vector*  vec )
   {
-	FT_Int64  t1, t2;
+    FT_Int64  t1, t2;
 
-	MUL_64( vec->x, vec->x, t1 );
-	MUL_64( vec->y, vec->y, t2 );
-	ADD_64( t1, t2, t1 );
-	return (FT_Pos)SQRT_64(t1);
+
+    MUL_64( vec->x, vec->x, t1 );
+    MUL_64( vec->y, vec->y, t2 );
+    ADD_64( t1, t2, t1 );
+
+    return (FT_Pos)SQRT_64( t1 );
   }
-#else
+
+#else /* FT_CONFIG_OPTION_OLD_CALCS */
+
   static
   FT_Pos  ft_norm( FT_Vector*  vec )
   {
@@ -525,10 +569,11 @@
     FT_Int      shift;
     FT_ULong    H, L, L2, hi, lo, med;
 
-    u = vec->x; if (u < 0) u = -u;
-    v = vec->y; if (v < 0) v = -v;
 
-    if (u < v)
+    u = vec->x; if ( u < 0 ) u = -u;
+    v = vec->y; if ( v < 0 ) v = -v;
+
+    if ( u < v )
     {
       d = u;
       u = v;
@@ -535,66 +580,73 @@
       v = d;
     }
 
-    /* check that we're not trying to normalise zero !! */
-    if (u==0) return 0;
+    /* check that we're not trying to normalize zero! */
+    if ( u == 0 )
+      return 0;
 
-    /* compute (u*u+v*v) on 64 bits with two 32-bit registers [H:L] */
+    /* compute (u*u + v*v) on 64 bits with two 32-bit registers [H:L] */
     hi  = (FT_ULong)u >> 16;
     lo  = (FT_ULong)u & 0xFFFF;
-    med = hi*lo;
+    med = hi * lo;
 
-    H     = hi*hi + (med >> 15);
+    H     = hi * hi + ( med >> 15 );
     med <<= 17;
-    L     = lo*lo + med;
-    if (L < med) H++;
+    L     = lo * lo + med;
+    if ( L < med )
+      H++;
 
     hi  = (FT_ULong)v >> 16;
     lo  = (FT_ULong)v & 0xFFFF;
-    med = hi*lo;
+    med = hi * lo;
 
-    H    += hi*hi + (med >> 15);
+    H    += hi * hi + ( med >> 15 );
     med <<= 17;
-    L2    = lo*lo + med;
-    if (L2 < med) H++;
+    L2    = lo * lo + med;
+    if ( L2 < med )
+      H++;
 
     L += L2;
-    if (L < L2) H++;
+    if ( L < L2 )
+      H++;
 
-    /* if the value is smaller than 32-bits */
+    /* if the value is smaller than 32 bits */
     shift = 0;
-    if (H == 0)
+    if ( H == 0 )
     {
-      while ((L & 0xC0000000) == 0)
+      while ( ( L & 0xC0000000UL ) == 0 )
       {
         L <<= 2;
         shift++;
       }
-      return (FT_Sqrt32(L) >> shift);
+      return ( FT_Sqrt32( L ) >> shift );
     }
     else
     {
-      while (H)
+      while ( H )
       {
-        L   = (L >> 2) | (H << 30);
+        L   = ( L >> 2 ) | ( H << 30 );
         H >>= 2;
         shift++;
       }
-      return (FT_Sqrt32(L) << shift);
+      return ( FT_Sqrt32( L ) << shift );
     }
   }
-#endif
 
+#endif /* FT_CONFIG_OPTION_OLD_CALCS */
+
+
   static
   int  ft_test_extrema( FT_Outline*  outline,
                         int          n )
   {
-	FT_Vector  *prev, *cur, *next;
-	FT_Pos      product;
+    FT_Vector  *prev, *cur, *next;
+    FT_Pos      product;
     FT_Int      first, last;
 
-    /* we need to compute the "previous" and "next" point */
-    /* for this extrema..                                 */
-	cur   = outline->points + n;
+
+    /* we need to compute the `previous' and `next' point */
+    /* for these extrema.                                 */
+    cur   = outline->points + n;
     prev  = cur - 1;
     next  = cur + 1;
 
@@ -612,186 +664,194 @@
       first = last + 1;
     }
 
-	product = FT_MulDiv( cur->x - prev->x,   /* in.x  */
+    product = FT_MulDiv( cur->x - prev->x,   /* in.x  */
                          next->y - cur->y,   /* out.y */
-                         0x40 ) -
-
+                         0x40 )
+              -
               FT_MulDiv( cur->y - prev->y,   /* in.y  */
                          next->x - cur->x,   /* out.x */
                          0x40 );
 
-	if (product)
-		product = ( product > 0 ? 1 : -1 );
+    if ( product )
+      product = product > 0 ? 1 : -1;
 
-	return product;
+    return product;
   }
 
 
-/* Compute the orientation of path filling. It differs between TrueType   */
-/* and Type1 formats. We could use the 'ft_outline_reverse_fill' flag,    */
-/* but it's better to re-compute it directly (it seems that this flag     */
-/* isn't correctly set for some weird composite glyphs for now)..         */
-/*                                                                        */
-/* We do this by computing bounding box points, and computing their       */
-/* curvature.. the function returns either 1 or -1                        */
-/*                                                                        */
+  /* Compute the orientation of path filling.  It differs between TrueType */
+  /* and Type1 formats.  We could use the `ft_outline_reverse_fill' flag,  */
+  /* but it's better to re-compute it directly (it seems that this flag    */
+  /* isn't correctly set for some weird composite glyphs for now).         */
+  /*                                                                       */
+  /* We do this by computing bounding box points, and computing their      */
+  /* curvature.                                                            */
+  /*                                                                       */
+  /* The function returns either 1 or -1.                                  */
+  /*                                                                       */
   static
   int  ft_get_orientation( FT_Outline*  outline )
   {
-	FT_BBox    box;
-	FT_BBox    indexes;
-	int	       n, last;
+    FT_BBox  box;
+    FT_BBox  indices;
+    int      n, last;
 
-	indexes.xMin = -1;
-	indexes.yMin = -1;
-	indexes.xMax = -1;
-	indexes.yMax = -1;
+    indices.xMin = -1;
+    indices.yMin = -1;
+    indices.xMax = -1;
+    indices.yMax = -1;
 
-	box.xMin = box.yMin = 32767;
-	box.xMax = box.yMax = -32768;
+    box.xMin = box.yMin = 32767;
+    box.xMax = box.yMax = -32768;
 
-	/* is it empty ? */
-	if ( outline->n_contours < 1 )
-	  return 1;
+    /* is it empty ? */
+    if ( outline->n_contours < 1 )
+      return 1;
 
-	last = outline->contours[outline->n_contours-1];
+    last = outline->contours[outline->n_contours - 1];
 
-	for ( n = 0; n <= last; n++ )
-	{
-	  FT_Pos  x, y;
+    for ( n = 0; n <= last; n++ )
+    {
+      FT_Pos  x, y;
 
-	  x = outline->points[n].x;
-	  if ( x < box.xMin )
-	  {
-		box.xMin     = x;
-		indexes.xMin = n;
-	  }
 
-	  if ( x > box.xMax )
-	  {
-		box.xMax     = x;
-		indexes.xMax = n;
-	  }
+      x = outline->points[n].x;
+      if ( x < box.xMin )
+      {
+        box.xMin     = x;
+        indices.xMin = n;
+      }
+      if ( x > box.xMax )
+      {
+        box.xMax     = x;
+        indices.xMax = n;
+      }
 
-	  y = outline->points[n].y;
-	  if ( y < box.yMin )
-	  {
-		box.yMin     = y;
-		indexes.yMin = n;
-	  }
+      y = outline->points[n].y;
+      if ( y < box.yMin )
+      {
+        box.yMin     = y;
+        indices.yMin = n;
+      }
+      if ( y > box.yMax )
+      {
+        box.yMax     = y;
+        indices.yMax = n;
+      }
+    }
 
-	  if ( y > box.yMax )
-	  {
-		box.yMax     = y;
-		indexes.yMax = n;
-	  }
-	}
-
-	/* test orientation of the xmin */
-	return ft_test_extrema( outline, indexes.xMin ) ||
-           ft_test_extrema( outline, indexes.yMin ) ||
-           ft_test_extrema( outline, indexes.xMax ) ||
-           ft_test_extrema( outline, indexes.yMax ) ||
-           1;  /* this is an empty glyph ?? */
+    /* test orientation of the xmin */
+    return ft_test_extrema( outline, indices.xMin ) ||
+           ft_test_extrema( outline, indices.yMin ) ||
+           ft_test_extrema( outline, indices.xMax ) ||
+           ft_test_extrema( outline, indices.yMax ) ||
+           1;  /* this is an empty glyph? */
   }
 
 
   static
-  FT_Error  ft_embolden( FT_Face       original,
-                         FT_Outline*   outline,
-                         FT_Pos*       advance )
+  FT_Error  ft_embolden( FT_Face      original,
+                         FT_Outline*  outline,
+                         FT_Pos*      advance )
   {
-	FT_Vector  u, v;
-	FT_Vector* points;
-	FT_Vector  cur, prev, next;
-	FT_Pos     distance;
-	int        c, n, first, orientation;
+    FT_Vector  u, v;
+    FT_Vector* points;
+    FT_Vector  cur, prev, next;
+    FT_Pos     distance;
+    int        c, n, first, orientation;
 
-	(void)advance;
+    UNUSED( advance );
 
-	/* compute control distance */
-	distance = FT_MulFix( original->em_size/60,
-						  original->size->metrics.y_scale );
 
-	orientation = ft_get_orientation( &original->glyph->outline );
+    /* compute control distance */
+    distance = FT_MulFix( original->em_size / 60,
+                          original->size->metrics.y_scale );
 
-	points = original->glyph->outline.points;
+    orientation = ft_get_orientation( &original->glyph->outline );
 
-	first = 0;
-	for ( c = 0; c < outline->n_contours; c++ )
-	{
-	  int  last = outline->contours[c];
+    points = original->glyph->outline.points;
 
-	  prev = points[last];
+    first = 0;
+    for ( c = 0; c < outline->n_contours; c++ )
+    {
+      int  last = outline->contours[c];
 
-	  for ( n = first; n <= last; n++ )
-	  {
-		FT_Pos     norme, delta, d;
-		FT_Vector  in, out;
 
-		cur = points[n];
-		if ( n < last ) next = points[n+1];
-		           else next = points[first];
+      prev = points[last];
 
-		/* compute the in and out vectors */
-		in.x  = cur.x - prev.x;
-		in.y  = cur.y - prev.y;
+      for ( n = first; n <= last; n++ )
+      {
+        FT_Pos     norm, delta, d;
+        FT_Vector  in, out;
 
-		out.x = next.x - cur.x;
-		out.y = next.y - cur.y;
 
-		/* compute U and V */
-		norme = ft_norm( &in );
-		u.x   = orientation *   FT_DivFix( in.y, norme );
-		u.y   = orientation * - FT_DivFix( in.x, norme );
+        cur = points[n];
+        if ( n < last ) next = points[n + 1];
+        else            next = points[first];
 
-		norme = ft_norm( &out );
-		v.x   = orientation *   FT_DivFix( out.y, norme );
-		v.y   = orientation * - FT_DivFix( out.x, norme );
+        /* compute the in and out vectors */
+        in.x  = cur.x - prev.x;
+        in.y  = cur.y - prev.y;
 
-		d = distance;
+        out.x = next.x - cur.x;
+        out.y = next.y - cur.y;
 
-		if ( (outline->flags[n] & FT_Curve_Tag_On) == 0 )
-			d *= 2;
+        /* compute U and V */
+        norm = ft_norm( &in );
+        u.x = orientation *  FT_DivFix( in.y, norm );
+        u.y = orientation * -FT_DivFix( in.x, norm );
 
-		/* Check discriminant for parallel vectors */
-		delta = FT_MulFix( u.x, v.y ) - FT_MulFix( u.y, v.x );
-		if ( delta > FT_BOLD_THRESHOLD || delta < - FT_BOLD_THRESHOLD )
-		{
-		  /* Move point - compute A and B */
-	      FT_Pos  x, y, A, B;
+        norm = ft_norm( &out );
+        v.x = orientation *  FT_DivFix( out.y, norm );
+        v.y = orientation * -FT_DivFix( out.x, norm );
 
-		  A = d + FT_MulFix( cur.x, u.x ) + FT_MulFix( cur.y, u.y );
-		  B = d + FT_MulFix( cur.x, v.x ) + FT_MulFix( cur.y, v.y );
+        d = distance;
 
-		  x = FT_MulFix( A, v.y ) - FT_MulFix( B, u.y );
-		  y = FT_MulFix( B, u.x ) - FT_MulFix( A, v.x );
+        if ( (outline->flags[n] & FT_Curve_Tag_On) == 0 )
+          d *= 2;
 
-		  outline->points[n].x = distance + FT_DivFix( x, delta );
-		  outline->points[n].y = distance + FT_DivFix( y, delta );
-		}
-		else
-		{
-		  /* Vectors are nearly parallel */
-		  FT_Pos  x, y;
+        /* Check discriminant for parallel vectors */
+        delta = FT_MulFix( u.x, v.y ) - FT_MulFix( u.y, v.x );
+        if ( delta > FT_BOLD_THRESHOLD || delta < -FT_BOLD_THRESHOLD )
+        {
+          /* Move point -- compute A and B */
+          FT_Pos  x, y, A, B;
 
-		  x = distance + cur.x + FT_MulFix( d, u.x + v.x )/2;
-		  y = distance + cur.y + FT_MulFix( d, u.y + v.y )/2;
 
-		  outline->points[n].x = x;
-		  outline->points[n].y = y;
-		}
+          A = d + FT_MulFix( cur.x, u.x ) + FT_MulFix( cur.y, u.y );
+          B = d + FT_MulFix( cur.x, v.x ) + FT_MulFix( cur.y, v.y );
 
-		prev = cur;
-	  }
+          x = FT_MulFix( A, v.y ) - FT_MulFix( B, u.y );
+          y = FT_MulFix( B, u.x ) - FT_MulFix( A, v.x );
 
-	  first = last+1;
-	}
+          outline->points[n].x = distance + FT_DivFix( x, delta );
+          outline->points[n].y = distance + FT_DivFix( y, delta );
+        }
+        else
+        {
+          /* Vectors are nearly parallel */
+          FT_Pos  x, y;
 
-    if (advance)
-      *advance = (*advance + distance*4) & -64;
+          x = distance + cur.x + FT_MulFix( d, u.x + v.x ) / 2;
+          y = distance + cur.y + FT_MulFix( d, u.y + v.y ) / 2;
 
-	return 0;
+          outline->points[n].x = x;
+          outline->points[n].y = y;
+        }
+
+        prev = cur;
+      }
+
+      first = last + 1;
+    }
+
+    if ( advance )
+      *advance = ( *advance + distance * 4 ) & -64;
+
+    return 0;
   }
 
-#endif /* 0 - EXPERIMENTAL STUFF !! */
+#endif /* 0 -- EXPERIMENTAL STUFF! */
+
+
+/* END */