shithub: freetype+ttf2subf

Download patch

ref: 4e6dd8587e07137d24a3641f69b0654b0fd72e97
parent: 56177261080a288a05fd305e31268c3644777d74
author: Werner Lemberg <[email protected]>
date: Mon Jun 5 01:26:15 EDT 2000

freetype.h: Adding ft_encoding_xxx values for some CJK encodings.

Fixing copyright notice on many files.

Changed some tracing levels.

A lot of formatting, fixing documentation etc. as usual.

git/fs: mount .git/fs: mount/attach disallowed
--- a/include/freetype/freetype.h
+++ b/include/freetype/freetype.h
@@ -310,7 +310,10 @@
     ft_encoding_unicode = FT_MAKE_TAG('u','n','i','c'),
     ft_encoding_latin_2 = FT_MAKE_TAG('l','a','t','2'),
     ft_encoding_sjis    = FT_MAKE_TAG('s','j','i','s'),
+    ft_encoding_gb2312  = FT_MAKE_TAG('g','b',' ',' '),
     ft_encoding_big5    = FT_MAKE_TAG('b','i','g','5'),
+    ft_encoding_wansung = FT_MAKE_TAG('w','a','n','s'),
+    ft_encoding_johab   = FT_MAKE_TAG('j','o','h','a'),
 
     ft_encoding_adobe_standard = FT_MAKE_TAG('a','d','o','b'),
     ft_encoding_adobe_expert   = FT_MAKE_TAG('a','d','b','e'),
--- a/src/base/ftbase.c
+++ b/src/base/ftbase.c
@@ -7,8 +7,8 @@
 /*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -7,8 +7,8 @@
 /*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftdebug.c
+++ b/src/base/ftdebug.c
@@ -7,8 +7,8 @@
 /*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftextend.c
+++ b/src/base/ftextend.c
@@ -7,8 +7,8 @@
 /*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftglyph.c
+++ b/src/base/ftglyph.c
@@ -7,8 +7,8 @@
 /*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftgrays.c
+++ b/src/base/ftgrays.c
@@ -7,8 +7,8 @@
 /*  Copyright 2000 by                                                      */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftinit.c
+++ b/src/base/ftinit.c
@@ -7,8 +7,8 @@
 /*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftlist.c
+++ b/src/base/ftlist.c
@@ -7,8 +7,8 @@
 /*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftmm.c
+++ b/src/base/ftmm.c
@@ -7,8 +7,8 @@
 /*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -5,10 +5,10 @@
 /*    The FreeType private base classes (base).                            */
 /*                                                                         */
 /*  Copyright 1996-2000 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg                       */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftoutln.c
+++ b/src/base/ftoutln.c
@@ -7,8 +7,8 @@
 /*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftraster.c
+++ b/src/base/ftraster.c
@@ -7,8 +7,8 @@
 /*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftstream.c
+++ b/src/base/ftstream.c
@@ -7,8 +7,8 @@
 /*  Copyright 2000 by                                                      */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/ftsystem.c
+++ b/src/base/ftsystem.c
@@ -7,8 +7,8 @@
 /*  Copyright 1996-2000 by                                                 */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
-/*  This file is part of the FreeType project, and may only be used        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
--- a/src/base/rules.mk
+++ b/src/base/rules.mk
@@ -6,7 +6,7 @@
 # Copyright 1996-2000 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
-# This file is part of the FreeType project, and may only be used modified
+# This file is part of the FreeType project, and may only be used, modified,
 # and distributed under the terms of the FreeType project license,
 # LICENSE.TXT.  By continuing to use, modify, or distribute this file you
 # indicate that you have read the license and understand and accept it
--- a/src/psnames/rules.mk
+++ b/src/psnames/rules.mk
@@ -14,8 +14,6 @@
 
 
 ifndef PSNAMES_INCLUDE
-  PSNAMES_INCLUDED := 1
-
   # PSNAMES driver directory
   #
   PSNAMES_DIR  := $(SRC_)psnames
--- a/src/sfnt/rules.mk
+++ b/src/sfnt/rules.mk
@@ -14,18 +14,16 @@
 
 
 ifndef SFNT_INCLUDE
-  SFNT_INCLUDED := 1
-
   # SFNT driver directory
   #
   SFNT_DIR  := $(SRC_)sfnt
   SFNT_DIR_ := $(SFNT_DIR)$(SEP)
 
+
   # additional include flags used when compiling the driver
   #
   SFNT_INCLUDE := $(SHARED) $(SFNT_DIR)
 
-
   # compilation flags for the driver
   #
   SFNT_CFLAGS  := $(SFNT_INCLUDE:%=$I%)
@@ -40,7 +38,6 @@
                   $(SFNT_DIR_)ttpost.c   \
                   $(SFNT_DIR_)sfobjs.c   \
                   $(SFNT_DIR_)sfdriver.c
-
 
   # driver headers
   #
--- a/src/sfnt/sfdriver.c
+++ b/src/sfnt/sfdriver.c
@@ -1,3 +1,21 @@
+/***************************************************************************/
+/*                                                                         */
+/*  sfdriver.c                                                             */
+/*                                                                         */
+/*    High-level SFNT driver interface (body).                             */
+/*                                                                         */
+/*  Copyright 1996-2000 by                                                 */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
 #include <freetype/internal/sfnt.h>
 #include <freetype/internal/ftobjs.h>
 #include <sfdriver.h>
@@ -7,24 +25,48 @@
 #include <ttcmap.h>
 #include <sfobjs.h>
 
+
   static
-  void*  get_sfnt_table( TT_Face  face, FT_Sfnt_Tag  tag )
+  void*  get_sfnt_table( TT_Face      face,
+                         FT_Sfnt_Tag  tag )
   {
     void*  table;
 
-    switch (tag)
+
+    switch ( tag )
     {
-      case ft_sfnt_head: table = &face->header; break;
-      case ft_sfnt_hhea: table = &face->horizontal; break;
-      case ft_sfnt_vhea: table = (face->vertical_info ? &face->vertical : 0 ); break;
-      case ft_sfnt_os2:  table = (face->os2.version == 0xFFFF ? 0 : &face->os2 ); break;
-      case ft_sfnt_post: table = &face->postscript; break;
-      case ft_sfnt_maxp: table = &face->max_profile; break;
-	  case ft_sfnt_pclt: table = face->pclt.Version ? &face->pclt : 0 ; break;
+    case ft_sfnt_head:
+      table = &face->header;
+      break;
 
-      default:
-        table = 0;
+    case ft_sfnt_hhea:
+      table = &face->horizontal;
+      break;
+
+    case ft_sfnt_vhea:
+      table = face->vertical_info ? &face->vertical : 0;
+      break;
+
+    case ft_sfnt_os2:
+      table = face->os2.version == 0xFFFF ? 0 : &face->os2;
+      break;
+
+    case ft_sfnt_post:
+      table = &face->postscript;
+      break;
+
+    case ft_sfnt_maxp:
+      table = &face->max_profile;
+      break;
+
+    case ft_sfnt_pclt:
+      table = face->pclt.Version ? &face->pclt : 0;
+      break;
+
+    default:
+      table = 0;
     }
+
     return table;
   }
 
@@ -33,9 +75,9 @@
   FTDriver_Interface  SFNT_Get_Interface( FT_Driver    driver,
                                           const char*  interface )
   {
-    UNUSED(driver);
+    UNUSED( driver );
 
-    if (strcmp(interface,"get_sfnt")==0)
+    if ( strcmp( interface, "get_sfnt" ) == 0 )
       return (FTDriver_Interface)get_sfnt_table;
 
     return 0;
@@ -70,7 +112,7 @@
 
     TT_Load_Kern,
     TT_Load_Gasp,
-	TT_Load_PCLT,
+    TT_Load_PCLT,
 
 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
     /* see `ttsbit.h' */
@@ -77,20 +119,20 @@
     TT_Load_SBit_Strikes,
     TT_Load_SBit_Image,
     TT_Free_SBit_Strikes,
-#else
+#else /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
     0,
     0,
     0,
-#endif
+#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
 
-    /* see `ttpost.h' */
 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
+    /* see `ttpost.h' */
     TT_Get_PS_Name,
     TT_Free_Post_Names,
-#else
+#else /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
     0,
     0,
-#endif
+#endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
 
     /* see `ttcmap.h' */
     TT_CharMap_Load,
@@ -100,19 +142,20 @@
 
   const FT_DriverInterface  sfnt_driver_interface =
   {
-    sizeof(FT_DriverRec),
-    0,
-    0,
-    0,
+    sizeof ( FT_DriverRec ), 0, 0, 0,
 
-    "sfnt",     /* driver name                         */
-    1,          /* driver version                      */
-    2,          /* driver requires FreeType 2 or above */
+    "sfnt",     /* driver name                          */
+    1,          /* driver version                       */
+    2,          /* driver requires FreeType 2 or higher */
 
     (void*)&sfnt_interface,
+
+    0, 0, 0,
+    0, 0, 0,
     0, 0, 0, 0,
-    0, 0, 0, 0,
-    0, 0, 0, 0,
-    0, 0,
+    0, 0, 0,
+    0,
   };
 
+
+/* END */
--- a/src/sfnt/sfdriver.h
+++ b/src/sfnt/sfdriver.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    High-level SFNT driver interface (specification).                    */
 /*                                                                         */
-/*  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,       */
--- a/src/sfnt/sfnt.c
+++ b/src/sfnt/sfnt.c
@@ -1,3 +1,21 @@
+/***************************************************************************/
+/*                                                                         */
+/*  sfnt.c                                                                 */
+/*                                                                         */
+/*    Single object library component.                                     */
+/*                                                                         */
+/*  Copyright 1996-2000 by                                                 */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
 #define FT_MAKE_OPTION_SINGLE_OBJECT
 
 #include <ttload.c>
@@ -15,3 +33,4 @@
 #include <sfdriver.c>
 
 
+/* END */
--- a/src/sfnt/sfobjs.c
+++ b/src/sfnt/sfobjs.c
@@ -1,7 +1,26 @@
+/***************************************************************************/
+/*                                                                         */
+/*  sfobjs.c                                                               */
+/*                                                                         */
+/*    SFNT object management (base).                                       */
+/*                                                                         */
+/*  Copyright 1996-2000 by                                                 */
+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+/*                                                                         */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+/*  this file you indicate that you have read the license and              */
+/*  understand and accept it fully.                                        */
+/*                                                                         */
+/***************************************************************************/
+
+
 #include <freetype/internal/sfnt.h>
 #include <freetype/internal/psnames.h>
 #include <freetype/ttnameid.h>
 
+
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
@@ -16,7 +35,7 @@
   /*    nameid :: The name id of the name record to return.                */
   /*                                                                       */
   /* <Return>                                                              */
-  /*    Char string.  NULL if no name is present.                          */
+  /*    Character string.  NULL if no name is present.                     */
   /*                                                                       */
   static
   FT_String*  Get_Name( TT_Face    face,
@@ -27,7 +46,7 @@
     TT_NameRec*  rec;
     FT_Bool      wide_chars = 1;
 
-    /* first pass, look for a given name record */
+
     rec = face->name_table.names;
     for ( n = 0; n < face->name_table.numNameRecords; n++, rec++ )
     {
@@ -36,17 +55,18 @@
         /* found the name - now create an ASCII string from it */
         FT_Bool  found = 0;
 
-        /* Test for Microsoft English language */
+
+        /* test for Microsoft English language */
         if ( rec->platformID == TT_PLATFORM_MICROSOFT &&
              rec->encodingID <= TT_MS_ID_UNICODE_CS   &&
-             (rec->languageID & 0x3FF) == 0x009 )
+             ( rec->languageID & 0x3FF ) == 0x009     )
           found = 1;
 
-        /* Test for Apple Unicode encoding */
+        /* test for Apple Unicode encoding */
         else if ( rec->platformID == TT_PLATFORM_APPLE_UNICODE )
           found = 1;
 
-        /* Test for Apple Roman */
+        /* test for Apple Roman */
         else if ( rec->platformID == TT_PLATFORM_MACINTOSH &&
                   rec->languageID == TT_MAC_ID_ROMAN       )
         {
@@ -54,22 +74,24 @@
           wide_chars = 0;
         }
 
-        /* Found a Unicode Name */
+        /* found a Unicode name */
         if ( found )
         {
           FT_String*  string;
           FT_UInt     len;
 
+
           if ( wide_chars )
           {
             TT_UInt   m;
 
+
             len = (TT_UInt)rec->stringLength / 2;
             if ( MEM_Alloc( string, len + 1 ) )
               return NULL;
 
             for ( m = 0; m < len; m ++ )
-              string[m] = rec->string[2*m + 1];
+              string[m] = rec->string[2 * m + 1];
           }
           else
           {
@@ -85,13 +107,14 @@
         }
       }
     }
+
     return NULL;
   }
 
 
   static
-  FT_Encoding   find_encoding( int  platform_id,
-                               int  encoding_id )
+  FT_Encoding  find_encoding( int  platform_id,
+                              int  encoding_id )
   {
     typedef struct  TEncoding
     {
@@ -101,40 +124,42 @@
 
     } TEncoding;
 
-    static
-    const TEncoding   tt_encodings[] =
+    static const TEncoding  tt_encodings[] =
     {
-      { TT_PLATFORM_ISO,                         -1, ft_encoding_unicode },
+      { TT_PLATFORM_ISO,           -1,                  ft_encoding_unicode },
 
-      { TT_PLATFORM_APPLE_UNICODE,               -1, ft_encoding_unicode },
+      { TT_PLATFORM_APPLE_UNICODE, -1,                  ft_encoding_unicode },
 
-      { TT_PLATFORM_MACINTOSH,      TT_MAC_ID_ROMAN, ft_encoding_apple_roman },
+      { TT_PLATFORM_MACINTOSH,     TT_MAC_ID_ROMAN,     ft_encoding_apple_roman },
 
-      { TT_PLATFORM_MICROSOFT,  TT_MS_ID_UNICODE_CS, ft_encoding_unicode },
-      { TT_PLATFORM_MICROSOFT,  TT_MS_ID_SJIS,       ft_encoding_sjis },
-      { TT_PLATFORM_MICROSOFT,  TT_MS_ID_BIG_5,      ft_encoding_big5 }
+      { TT_PLATFORM_MICROSOFT,     TT_MS_ID_UNICODE_CS, ft_encoding_unicode },
+      { TT_PLATFORM_MICROSOFT,     TT_MS_ID_SJIS,       ft_encoding_sjis },
+      { TT_PLATFORM_MICROSOFT,     TT_MS_ID_GB2312,     ft_encoding_gb2312 },
+      { TT_PLATFORM_MICROSOFT,     TT_MS_ID_BIG_5,      ft_encoding_big5 },
+      { TT_PLATFORM_MICROSOFT,     TT_MS_ID_WANSUNG,    ft_encoding_wansung },
+      { TT_PLATFORM_MICROSOFT,     TT_MS_ID_JOHAB,      ft_encoding_johab }
     };
 
     const TEncoding  *cur, *limit;
 
+
     cur   = tt_encodings;
-    limit = cur + sizeof(tt_encodings)/sizeof(tt_encodings[0]);
+    limit = cur + sizeof ( tt_encodings ) / sizeof ( tt_encodings[0] );
 
     for ( ; cur < limit; cur++ )
     {
-      if (cur->platform_id == platform_id)
+      if ( cur->platform_id == platform_id )
       {
-        if (cur->encoding_id == encoding_id ||
-            cur->encoding_id == -1          )
+        if ( cur->encoding_id == encoding_id ||
+             cur->encoding_id == -1          )
           return cur->encoding;
       }
     }
+
     return ft_encoding_none;
   }
 
 
-
-
   LOCAL_FUNC
   FT_Error  SFNT_Init_Face( FT_Stream      stream,
                             TT_Face        face,
@@ -142,30 +167,32 @@
                             TT_Int         num_params,
                             FT_Parameter*  params )
   {
-    FT_Error           error;
-    SFNT_Interface*    sfnt;
-    PSNames_Interface* psnames;
-    SFNT_Header        sfnt_header;
+    FT_Error            error;
+    SFNT_Interface*     sfnt;
+    PSNames_Interface*  psnames;
+    SFNT_Header         sfnt_header;
 
     /* for now, parameters are unused */
-    UNUSED(num_params);
-    UNUSED(params);
+    UNUSED( num_params );
+    UNUSED( params );
 
+
     sfnt = (SFNT_Interface*)face->sfnt;
-    if (!sfnt)
+    if ( !sfnt )
     {
       /* look-up the SFNT driver */
       FT_Driver  sfnt_driver;
 
+
       sfnt_driver = FT_Get_Driver( face->root.driver->library, "sfnt" );
-      if (!sfnt_driver)
+      if ( !sfnt_driver )
       {
         error = FT_Err_Invalid_File_Format;
         goto Exit;
       }
 
-      sfnt = (SFNT_Interface*)(sfnt_driver->interface.format_interface);
-      if (!sfnt)
+      sfnt = (SFNT_Interface*)( sfnt_driver->interface.format_interface );
+      if ( !sfnt )
       {
         error = FT_Err_Invalid_File_Format;
         goto Exit;
@@ -176,20 +203,22 @@
     }
 
     psnames = (PSNames_Interface*)face->psnames;
-    if (!psnames)
+    if ( !psnames )
     {
       /* look-up the PSNames driver */
       FT_Driver  psnames_driver;
 
+
       psnames_driver = FT_Get_Driver( face->root.driver->library, "psnames" );
-      if (psnames_driver)
+      if ( psnames_driver )
         face->psnames = (PSNames_Interface*)
-                            (psnames_driver->interface.format_interface);
+                          ( psnames_driver->interface.format_interface );
     }
 
     /* check that we have a valid TrueType file */
     error = sfnt->load_sfnt_header( face, stream, face_index, &sfnt_header );
-    if (error) goto Exit;                                    
+    if ( error )
+      goto Exit;                                    
 
     face->format_tag = sfnt_header.format_tag;
     face->num_tables = sfnt_header.num_tables;
@@ -196,7 +225,8 @@
 
     /* Load font directory */
     error = sfnt->load_directory( face, stream, &sfnt_header );
-    if ( error ) goto Exit;
+    if ( error )
+      goto Exit;
 
     face->root.num_faces = face->ttc_header.DirCount;
     if ( face->root.num_faces < 1 )
@@ -207,9 +237,8 @@
   }
 
 
-
 #undef  LOAD_
-#define LOAD_(x)   ( (error = sfnt->load_##x( face, stream )) != FT_Err_Ok )
+#define LOAD_( x )  ( (error = sfnt->load_##x( face, stream )) != FT_Err_Ok )
 
 
   LOCAL_FUNC
@@ -219,18 +248,19 @@
                             TT_Int         num_params,
                             FT_Parameter*  params )
   {
-    FT_Error   error;
-    SFNT_Interface*    sfnt = (SFNT_Interface*)face->sfnt;
+    FT_Error         error;
+    SFNT_Interface*  sfnt = (SFNT_Interface*)face->sfnt;
 
+
     /* Load tables */
     if ( LOAD_( header )        ||
          LOAD_( max_profile )   ||
 
-         (error = sfnt->load_metrics( face, stream, 0 )) != FT_Err_Ok  ||
          /* load the `hhea' & `hmtx' tables at once */
+         ( error = sfnt->load_metrics( face, stream, 0 ) ) != FT_Err_Ok  ||
 
-         (error = sfnt->load_metrics( face, stream, 1 )) != FT_Err_Ok ||
          /* try to load the `vhea' & `vmtx' at once if present */
+         ( error = sfnt->load_metrics( face, stream, 1 ) ) != FT_Err_Ok  ||
 
          LOAD_( charmaps )      ||
          LOAD_( names )         ||
@@ -240,10 +270,11 @@
 
     /* the optional tables */
 
-    /* embedded bitmap support. */
 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
-    if (sfnt->load_sbits && LOAD_(sbits)) goto Exit;
-#endif
+    /* embedded bitmap support. */
+    if ( sfnt->load_sbits && LOAD_( sbits ) )
+      goto Exit;
+#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
 
     if ( LOAD_( hdmx )          ||
          LOAD_( gasp )          ||
@@ -267,21 +298,22 @@
       TT_Int      n;
       FT_Memory   memory;
 
+
       memory = root->memory;
 
-      /*****************************************************************/
-      /*                                                               */
-      /* Compute face flags.                                           */
-      /*                                                               */
+      /*********************************************************************/
+      /*                                                                   */
+      /* Compute face flags.                                               */
+      /*                                                                   */
       flags = FT_FACE_FLAG_SCALABLE  |    /* scalable outlines */
               FT_FACE_FLAG_SFNT      |    /* SFNT file format  */
               FT_FACE_FLAG_HORIZONTAL;    /* horizontal data   */
 
-      /* fixed width font ? */
+      /* fixed width font? */
       if ( face->postscript.isFixedPitch )
         flags |= FT_FACE_FLAG_FIXED_WIDTH;
 
-      /* vertical information ? */
+      /* vertical information? */
       if ( face->vertical_info )
         flags |= FT_FACE_FLAG_VERTICAL;
 
@@ -291,15 +323,15 @@
 
       root->face_flags = flags;
 
-      /*****************************************************************/
-      /*                                                               */
-      /* Compute style flags.                                          */
-      /*                                                               */
+      /*********************************************************************/
+      /*                                                                   */
+      /* Compute style flags.                                              */
+      /*                                                                   */
       flags = 0;
 
       if ( face->os2.version != 0xFFFF )
       {
-        /* We have an OS/2 table, use the `fsSelection' field */
+        /* we have an OS/2 table; use the `fsSelection' field */
         if ( face->os2.fsSelection & 1 )
           flags |= FT_STYLE_FLAG_ITALIC;
 
@@ -308,7 +340,7 @@
       }
       else
       {
-        /* This is an old Mac font, use the header field */
+        /* this is an old Mac font, use the header field */
         if ( face->header.Mac_Style & 1 )
           flags |= FT_STYLE_FLAG_BOLD;
 
@@ -318,13 +350,13 @@
 
       face->root.style_flags = flags;
 
-      /*****************************************************************/
-      /*                                                               */
-      /* Polish the charmaps.                                          */
-      /*                                                               */
-      /*   Try to set the charmap encoding according to the platform & */
-      /*   encoding ID of each charmap.                                */
-      /*                                                               */
+      /*********************************************************************/
+      /*                                                                   */
+      /* Polish the charmaps.                                              */
+      /*                                                                   */
+      /*   Try to set the charmap encoding according to the platform &     */
+      /*   encoding ID of each charmap.                                    */
+      /*                                                                   */
       charmap            = face->charmaps;
       root->num_charmaps = face->num_charmaps;
 
@@ -337,13 +369,16 @@
         FT_Int  platform = charmap->cmap.platformID;
         FT_Int  encoding = charmap->cmap.platformEncodingID;
 
+
         charmap->root.face        = (FT_Face)face;
         charmap->root.platform_id = platform;
         charmap->root.encoding_id = encoding;
-        charmap->root.encoding    = find_encoding(platform,encoding);
+        charmap->root.encoding    = find_encoding( platform, encoding );
 
-        /* now, set root->charmap with a unicode charmap wherever available */
-        if (!root->charmap && charmap->root.encoding == ft_encoding_unicode)
+        /* now, set root->charmap with a unicode charmap */
+        /* wherever available                            */
+        if ( !root->charmap                                &&
+             charmap->root.encoding == ft_encoding_unicode )
           root->charmap = (FT_CharMap)charmap;
 
         root->charmaps[n] = (FT_CharMap)charmap;
@@ -358,16 +393,16 @@
                          FT_Bitmap_Size ) )
          return error;
 
-       for ( n = 0 ; n < face->num_sbit_strikes ; n++ )
-       {
-         face->root.available_sizes[n].width =
-           face->sbit_strikes[n].x_ppem;
-         face->root.available_sizes[n].height =
-           face->sbit_strikes[n].y_ppem;
-       }
+        for ( n = 0 ; n < face->num_sbit_strikes ; n++ )
+        {
+          face->root.available_sizes[n].width =
+            face->sbit_strikes[n].x_ppem;
+          face->root.available_sizes[n].height =
+            face->sbit_strikes[n].y_ppem;
+        }
       }
       else
-#else
+#else /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
       {
        root->num_fixed_sizes = 0;
        root->available_sizes = 0;
@@ -374,10 +409,10 @@
       }
 #endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
 
-      /*****************************************************************/
-      /*                                                               */
-      /*  Set up metrics.                                              */
-      /*                                                               */
+      /*********************************************************************/
+      /*                                                                   */
+      /*  Set up metrics.                                                  */
+      /*                                                                   */
       root->bbox.xMin    = face->header.xMin;
       root->bbox.yMin    = face->header.yMin;
       root->bbox.xMax    = face->header.xMax;
@@ -384,8 +419,8 @@
       root->bbox.yMax    = face->header.yMax;
       root->units_per_EM = face->header.Units_Per_EM;
 
-      /* The ascender/descender/height are computed from the OS/2 table   */
-      /* when found.  Otherwise, they're taken from the horizontal header */
+      /* The ascender/descender/height are computed from the OS/2 table    */
+      /* when found.  Otherwise, they're taken from the horizontal header. */
       if ( face->os2.version != 0xFFFF )
       {
         root->ascender  =  face->os2.sTypoAscender;
@@ -401,11 +436,11 @@
                           face->horizontal.Line_Gap;
       }
 
-      root->max_advance_width  = face->horizontal.advance_Width_Max;
+      root->max_advance_width   = face->horizontal.advance_Width_Max;
 
-      root->max_advance_height = root->height;
-      if ( face->vertical_info )
-        root->max_advance_height = face->vertical.advance_Height_Max;
+      root->max_advance_height  = face->vertical_info
+                                    ? face->vertical.advance_Height_Max
+                                    : root->height;
 
       root->underline_position  = face->postscript.underlinePosition;
       root->underline_thickness = face->postscript.underlineThickness;
@@ -428,14 +463,15 @@
     FT_Memory        memory = face->root.memory;
     SFNT_Interface*  sfnt   = face->sfnt;
 
-    if (sfnt)
+
+    if ( sfnt )
     {
-      /* destroy the postscript names table if it is supported */
-      if (sfnt->free_psnames)
+      /* destroy the postscript names table if it is loaded */
+      if ( sfnt->free_psnames )
         sfnt->free_psnames( face );
 
-      /* destroy the embedded bitmaps table if it is supported */
-      if (sfnt->free_sbits)
+      /* destroy the embedded bitmaps table if it is loaded */
+      if ( sfnt->free_sbits )
         sfnt->free_sbits( face );
     }
 
@@ -455,6 +491,8 @@
     if (sfnt && sfnt->load_charmaps )
     {
       FT_UShort  n;
+
+
       for ( n = 0; n < face->num_charmaps; n++ )
         sfnt->free_charmap( face, &face->charmaps[n].cmap );
     }
@@ -500,3 +538,5 @@
     face->sfnt = 0;
   }
 
+
+/* END */
--- a/src/sfnt/sfobjs.h
+++ b/src/sfnt/sfobjs.h
@@ -2,9 +2,9 @@
 /*                                                                         */
 /*  sfobjs.h                                                               */
 /*                                                                         */
-/*    SFNT object management                                               */
+/*    SFNT object management (specification).                              */
 /*                                                                         */
-/*  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,       */
@@ -15,11 +15,13 @@
 /*                                                                         */
 /***************************************************************************/
 
+
 #ifndef SFOBJS_H
 #define SFOBJS_H
 
 #include <freetype/internal/sfnt.h>
 #include <freetype/internal/ftobjs.h>
+
 
   LOCAL_DEF
   FT_Error  SFNT_Init_Face( FT_Stream      stream,
--- a/src/sfnt/ttcmap.c
+++ b/src/sfnt/ttcmap.c
@@ -4,11 +4,11 @@
 /*                                                                         */
 /*    TrueType character mapping table (cmap) support (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        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
@@ -22,16 +22,27 @@
 #include <ttload.h>
 #include <ttcmap.h>
 
-/* required by the tracing mode */
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
+  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */
+  /* messages during execution.                                            */
+  /*                                                                       */
 #undef  FT_COMPONENT
-#define FT_COMPONENT      trace_ttcmap
+#define FT_COMPONENT  trace_ttcmap
 
 
-  static TT_UInt  code_to_index0( TT_CMapTable*  charmap, TT_ULong  char_code );
-  static TT_UInt  code_to_index2( TT_CMapTable*  charmap, TT_ULong  char_code );
-  static TT_UInt  code_to_index4( TT_CMapTable*  charmap, TT_ULong  char_code );
-  static TT_UInt  code_to_index6( TT_CMapTable*  charmap, TT_ULong  char_code );
+  static TT_UInt  code_to_index0( TT_CMapTable*  charmap,
+                                  TT_ULong       char_code );
+  static TT_UInt  code_to_index2( TT_CMapTable*  charmap,
+                                  TT_ULong       char_code );
+  static TT_UInt  code_to_index4( TT_CMapTable*  charmap,
+                                  TT_ULong       char_code );
+  static TT_UInt  code_to_index6( TT_CMapTable*  charmap,
+                                  TT_ULong       char_code );
 
+
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
@@ -48,7 +59,7 @@
   /*    table  :: A pointer to a cmap object.                              */
   /*                                                                       */
   /* <Return>                                                              */
-  /*    Error code.  0 means success.                                      */
+  /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   /* <Note>                                                                */
   /*    The function assumes that the stream is already in use (i.e.,      */
@@ -119,7 +130,7 @@
       /* load subheaders */
 
       cmap2->numGlyphId = l =
-        ( ( cmap->length - 2L*(256+3) - num_SH*8L ) & 0xffff ) / 2;
+        ( ( cmap->length - 2L * ( 256 + 3 ) - num_SH * 8L ) & 0xffff ) / 2;
 
       if ( ALLOC_ARRAY( cmap2->subHeaders,
                         num_SH + 1,
@@ -177,8 +188,8 @@
 
       if ( ALLOC_ARRAY( cmap4->segments,
                         num_Seg,
-                        TT_CMap4Segment )         ||
-           ACCESS_Frame( (num_Seg * 4 + 1) * 2L ) )
+                        TT_CMap4Segment )           ||
+           ACCESS_Frame( ( num_Seg * 4 + 1 ) * 2L ) )
         goto Fail;
 
       segments = cmap4->segments;
@@ -200,12 +211,12 @@
       FORGET_Frame();
 
       cmap4->numGlyphId = l =
-        ( ( cmap->length - ( 16L + 8L * num_Seg ) ) & 0xFFFF ) /2;
+        ( ( cmap->length - ( 16L + 8L * num_Seg ) ) & 0xFFFF ) / 2;
 
       /* load IDs */
 
       if ( ALLOC_ARRAY( cmap4->glyphIdArray, l, TT_UShort ) ||
-           ACCESS_Frame( l*2L )                             )
+           ACCESS_Frame( l * 2L )                           )
         goto Fail;
 
       for ( i = 0; i < l; i++ )
@@ -248,6 +259,7 @@
       return TT_Err_Invalid_CharMap_Format;
 
     }
+
     return TT_Err_Ok;
 
   Fail:
@@ -269,7 +281,7 @@
   /*    cmap :: A handle to a cmap object.                                 */
   /*                                                                       */
   /* <Return>                                                              */
-  /*    Error code.  0 means success.                                      */
+  /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   LOCAL_FUNC
   TT_Error  TT_CharMap_Free( TT_Face        face,
@@ -316,7 +328,6 @@
   }
 
 
-
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
@@ -332,8 +343,7 @@
   /*    cmap0    :: A pointer to a cmap table in format 0.                 */
   /*                                                                       */
   /* <Return>                                                              */
-  /*    Glyph index into the glyphs array.  0 if the glyph does not        */
-  /*    exist.                                                             */
+  /*    Glyph index into the glyphs array.  0 if the glyph does not exist. */
   /*                                                                       */
   static
   TT_UInt code_to_index0( TT_CMapTable*  cmap,
@@ -341,6 +351,7 @@
   {
     TT_CMap0*  cmap0 = &cmap->c.cmap0;
 
+
     return ( charCode <= 0xFF ? cmap0->glyphIdArray[charCode] : 0 );
   }
 
@@ -358,54 +369,53 @@
   /*    cmap2    :: A pointer to a cmap table in format 2.                 */
   /*                                                                       */
   /* <Return>                                                              */
-  /*    Glyph index into the glyphs array.  0 if the glyph does not        */
-  /*    exist.                                                             */
+  /*    Glyph index into the glyphs array.  0 if the glyph does not exist. */
   /*                                                                       */
   static
   TT_UInt  code_to_index2( TT_CMapTable*  cmap,
                            TT_ULong       charCode )
   {
-    TT_UInt            result, index1, offset;
-    TT_UInt            char_lo;
-    TT_ULong           char_hi;
-    TT_CMap2SubHeader* sh2;
-    TT_CMap2*          cmap2;
+    TT_UInt             result, index1, offset;
+    TT_UInt             char_lo;
+    TT_ULong            char_hi;
+    TT_CMap2SubHeader*  sh2;
+    TT_CMap2*           cmap2;
 
+
     cmap2   = &cmap->c.cmap2;
     result  = 0;
-    char_lo = (TT_UInt)(charCode & 0xFF);
+    char_lo = (TT_UInt)( charCode & 0xFF );
     char_hi = charCode >> 8;
 
     if ( char_hi == 0 )
     {
       /* an 8-bit character code - we use the subHeader 0 in this case */
-      /* to test wether the character code is in the charmap           */
+      /* to test whether the character code is in the charmap          */
       if ( cmap2->subHeaderKeys[char_lo] == 0 )
-      {
         result = cmap2->glyphIdArray[char_lo];
-      }
     }
     else
     {
       /* a 16-bit character code */
-      index1 = cmap2->subHeaderKeys[ char_hi & 0xFF ];
-      if (index1)
+      index1 = cmap2->subHeaderKeys[char_hi & 0xFF];
+      if ( index1 )
       {
         sh2      = cmap2->subHeaders + index1;
         char_lo -= sh2->firstCode;
 
-        if (char_lo < sh2->entryCount)
+        if ( char_lo < sh2->entryCount )
         {
-          offset = sh2->idRangeOffset/2 + char_lo;
-          if (offset < cmap2->numGlyphId)
+          offset = sh2->idRangeOffset / 2 + char_lo;
+          if ( offset < cmap2->numGlyphId )
           {
             result = cmap2->glyphIdArray[offset];
-            if (result)
-              result = (result + sh2->idDelta) & 0xFFFF;
+            if ( result )
+              result = ( result + sh2->idDelta ) & 0xFFFF;
           }
         }
       }
     }
+
     return result;
   }
 
@@ -423,8 +433,7 @@
   /*    cmap4    :: A pointer to a cmap table in format 4.                 */
   /*                                                                       */
   /* <Return>                                                              */
-  /*    Glyph index into the glyphs array.  0 if the glyph does not        */
-  /*    exist.                                                             */
+  /*    Glyph index into the glyphs array.  0 if the glyph does not exist. */
   /*                                                                       */
   static
   TT_UInt  code_to_index4( TT_CMapTable*  cmap,
@@ -434,6 +443,7 @@
     TT_CMap4*        cmap4;
     TT_CMap4Segment  *seg4, *limit;
 
+
     cmap4    = &cmap->c.cmap4;
     result   = 0;
     segCount = cmap4->segCountX2 / 2;
@@ -448,8 +458,8 @@
 
     for ( seg4 = cmap4->segments; seg4 < limit; seg4++, segCount-- )
     {
-      /* the ranges are sorted in increasing order, if we're out of  */
-      /* the range here, the char code isn't in the charmap, so exit */
+      /* the ranges are sorted in increasing order.  If we are out of */
+      /* the range here, the char code isn't in the charmap, so exit. */
       if ( charCode > seg4->endCount )
         continue;
         
@@ -461,24 +471,23 @@
  Found:    
     cmap4->last_segment = seg4;
     
-    /* when the idRangeOffset is 0, we can compute the glyph index */
-    /* directly..                                                  */
+    /* if the idRangeOffset is 0, we can compute the glyph index */
+    /* directly                                                  */
     
     if ( seg4->idRangeOffset == 0 )
-      result = (charCode + seg4->idDelta) & 0xFFFF;
-      
+      result = ( charCode + seg4->idDelta ) & 0xFFFF;
     else
-    /* otherwise, we must use the glyphIdArray to do it            */
     {
-      index1 = seg4->idRangeOffset/2 + (charCode - seg4->startCount)
+      /* otherwise, we must use the glyphIdArray to do it */
+      index1 = seg4->idRangeOffset / 2
+               + ( charCode - seg4->startCount )
                - segCount;
 
       if ( index1 < cmap4->numGlyphId       &&
            cmap4->glyphIdArray[index1] != 0 )
-      {
-        result = (cmap4->glyphIdArray[index1] + seg4->idDelta) & 0xFFFF;
-      }
+        result = ( cmap4->glyphIdArray[index1] + seg4->idDelta ) & 0xFFFF;
     }
+
     return result;
   }
 
@@ -496,15 +505,15 @@
   /*    cmap6    :: A pointer to a cmap table in format 6.                 */
   /*                                                                       */
   /* <Return>                                                              */
-  /*    Glyph index into the glyphs array.  0 if the glyph does not        */
-  /*    exist.                                                             */
+  /*    Glyph index into the glyphs array.  0 if the glyph does not exist. */
   /*                                                                       */
   static
   TT_UInt  code_to_index6( TT_CMapTable*  cmap,
-                           TT_ULong   charCode )
+                           TT_ULong       charCode )
   {
     TT_CMap6*  cmap6;
     TT_UInt    result = 0;
+
 
     cmap6     = &cmap->c.cmap6;
     result    = 0;
--- a/src/sfnt/ttcmap.h
+++ b/src/sfnt/ttcmap.h
@@ -4,11 +4,11 @@
 /*                                                                         */
 /*    TrueType character mapping table (cmap) support (specification).     */
 /*                                                                         */
-/*  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        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
@@ -26,50 +26,11 @@
 #endif
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    TT_CharMap_Load                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Loads a given TrueType character map into memory.                  */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face   :: A handle to the parent face object.                      */
-  /*    stream :: A handle to the current stream object.                   */
-  /*                                                                       */
-  /* <InOut>                                                               */
-  /*    cmap   :: A pointer to a cmap object.                              */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    Error code.  0 means success.                                      */
-  /*                                                                       */
-  /* <Note>                                                                */
-  /*    The function assumes that the stream is already in use (i.e.,      */
-  /*    opened).  In case of error, all partially allocated tables are     */
-  /*    released.                                                          */
-  /*                                                                       */
   LOCAL_DEF
   TT_Error  TT_CharMap_Load( TT_Face        face,
                              TT_CMapTable*  cmap,
                              FT_Stream      input );
 
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Function>                                                            */
-  /*    TT_CharMap_Free                                                    */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    Destroys a character mapping table.                                */
-  /*                                                                       */
-  /* <Input>                                                               */
-  /*    face :: A handle to the parent face object.                        */
-  /*    cmap :: A handle to a cmap object.                                 */
-  /*                                                                       */
-  /* <Return>                                                              */
-  /*    Error code.  0 means success.                                      */
-  /*                                                                       */
   LOCAL_DEF
   TT_Error  TT_CharMap_Free( TT_Face        face,
                              TT_CMapTable*  cmap );
--- a/src/sfnt/ttload.c
+++ b/src/sfnt/ttload.c
@@ -2,22 +2,18 @@
 /*                                                                         */
 /*  ttload.c                                                               */
 /*                                                                         */
-/*    TrueType tables loader (body).                                       */
+/*    Load the basic TrueType tables, i.e., tables that can be either in   */
+/*    TTF or OTF fonts (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        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
 /*                                                                         */
-/*                                                                         */
-/*  WARNING: This file should not be compiled directly; it is meant to be  */
-/*           included in the source of several font drivers (i.e., the TTF */
-/*           and OTF drivers).                                             */
-/*                                                                         */
 /***************************************************************************/
 
 
@@ -28,13 +24,17 @@
 #include <ttload.h>
 #include <ttcmap.h>
 
-/* required by the tracing mode */
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */
+  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */
+  /* messages during execution.                                            */
+  /*                                                                       */
 #undef  FT_COMPONENT
-#define FT_COMPONENT      trace_ttload
+#define FT_COMPONENT  trace_ttload
 
-#define READ_FIELDS
 
-
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
@@ -45,10 +45,10 @@
   /*                                                                       */
   /* <Input>                                                               */
   /*    face :: A face object handle.                                      */
-  /*    tag  :: The  searched tag.                                         */
+  /*    tag  :: The searched tag.                                          */
   /*                                                                       */
   /* <Return>                                                              */
-  /*    pointer to table directory entry. 0 if not found..                 */
+  /*    A pointer to the table directory entry.  0 if not found.           */
   /*                                                                       */
   LOCAL_FUNC
   TT_Table*  TT_LookUp_Table( TT_Face   face,
@@ -57,24 +57,28 @@
     TT_Table*  entry;
     TT_Table*  limit;
 
-    FT_TRACE4(( "TT_LookUp_Table( %08p, %c%c%c%c )\n",
+
+    FT_TRACE3(( "TT_LookUp_Table: %08p, `%c%c%c%c' )\n",
                   face,
-                  (TT_Char)(tag >> 24),
-                  (TT_Char)(tag >> 16),
-                  (TT_Char)(tag >> 8),
-                  (TT_Char)(tag) ));
+                  (TT_Char)( tag >> 24 ),
+                  (TT_Char)( tag >> 16 ),
+                  (TT_Char)( tag >> 8  ),
+                  (TT_Char)( tag )     ));
 
     entry = face->dir_tables;
     limit = entry + face->num_tables;
+
     for ( ; entry < limit; entry++ )
     {
       if ( entry->Tag == tag )
         return entry;
     }
-    FT_TRACE4(( "    Could not find table!\n" ));
+
+    FT_TRACE3(( "    Could not find table!\n" ));
     return 0;
   }
 
+
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
@@ -84,26 +88,30 @@
   /*    Looks for a TrueType table by name, then seek a stream to it.      */
   /*                                                                       */
   /* <Input>                                                               */
-  /*    face   :: a face object handle.                                    */
-  /*    tag    :: the  searched tag.                                       */
-  /*    stream :: the stream to seek when the table is found               */
+  /*    face   :: A face object handle.                                    */
+  /*    tag    :: The searched tag.                                        */
+  /*    stream :: The stream to seek when the table is found.              */
   /*                                                                       */
+  /* <Output>                                                              */
+  /*    length :: The length of the table if found, undefined otherwise.   */
+  /*                                                                       */
   /* <Return>                                                              */
-  /*    pointer to table directory entry. 0 if not found..                 */
+  /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   LOCAL_FUNC
-  TT_Error   TT_Goto_Table( TT_Face    face,
-                            TT_ULong   tag,
-                            FT_Stream  stream,
-                            TT_ULong  *length )
+  TT_Error  TT_Goto_Table( TT_Face    face,
+                           TT_ULong   tag,
+                           FT_Stream  stream,
+                           TT_ULong*  length )
   {
     TT_Table*  table;
     TT_Error   error;
 
+
     table = TT_LookUp_Table( face, tag );
-    if (table)
+    if ( table )
     {
-      if (length)
+      if ( length )
         *length = table->Length;
 
       (void)FILE_Seek( table->Offset );
@@ -117,54 +125,61 @@
 
   /*************************************************************************/
   /*                                                                       */
-  /* <FuncType>                                                            */
+  /* <Function>                                                            */
   /*    TT_Load_SFNT_Header                                                */
   /*                                                                       */
   /* <Description>                                                         */
-  /*    Loads the header of a SFNT font file. Supports collections..       */
+  /*    Loads the header of a SFNT font file.  Supports collections.       */
   /*                                                                       */
   /* <Input>                                                               */
-  /*    face      :: A handle to the target face object.                   */
-  /*    stream    :: The input stream.                                     */
+  /*    face       :: A handle to the target face object.                  */
+  /*    stream     :: The input stream.                                    */
+  /*    face_index :: If the font is a collection, the number of the font  */
+  /*                  in the collection, ignored otherwise.                */
   /*                                                                       */
   /* <Output>                                                              */
-  /*    sfnt      :: the sfnt header                                       */
+  /*    sfnt       :: The SFNT header.                                     */
   /*                                                                       */
   /* <Return>                                                              */
   /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   /* <Note>                                                                */
-  /*    The stream cursor must be at the font file's origin                */
-  /*    This function recognizes fonts embedded in a "TrueType collection" */
+  /*    The stream cursor must be at the font file's origin.               */
   /*                                                                       */
-  /*    This function checks that the header is valid by looking at the    */
-  /*    values of "search_range", "entry_selector" and "range_shift"..     */
+  /*    This function recognizes fonts embedded in a `TrueType collection' */
   /*                                                                       */
+  /*    The header will be checked whether it is valid by looking at the   */
+  /*    values of `search_range', `entry_selector', and `range_shift'.     */
+  /*                                                                       */
   LOCAL_FUNC
-  TT_Error   TT_Load_SFNT_Header( TT_Face       face,
-                                  FT_Stream     stream,
-                                  TT_Long       face_index,
-                                  SFNT_Header*  sfnt )
+  TT_Error  TT_Load_SFNT_Header( TT_Face       face,
+                                 FT_Stream     stream,
+                                 TT_Long       face_index,
+                                 SFNT_Header*  sfnt )
   {
     TT_Error  error;
     TT_ULong  format_tag;
     FT_Memory memory = stream->memory;
     
-    const FT_Frame_Field  sfnt_header_fields[] = {
-                  FT_FRAME_START(8),
-                    FT_FRAME_USHORT( SFNT_Header, num_tables ),
-                    FT_FRAME_USHORT( SFNT_Header, search_range ),
-                    FT_FRAME_USHORT( SFNT_Header, entry_selector ),
-                    FT_FRAME_USHORT( SFNT_Header, range_shift ),
-                  FT_FRAME_END };
+    const FT_Frame_Field  sfnt_header_fields[] =
+    {
+      FT_FRAME_START( 8 ),
+        FT_FRAME_USHORT( SFNT_Header, num_tables ),
+        FT_FRAME_USHORT( SFNT_Header, search_range ),
+        FT_FRAME_USHORT( SFNT_Header, entry_selector ),
+        FT_FRAME_USHORT( SFNT_Header, range_shift ),
+      FT_FRAME_END
+    };
                   
-    const FT_Frame_Field  ttc_header_fields[] = {
-           FT_FRAME_START(8),  /* frame of 8 bytes */
-             FT_FRAME_LONG( TTC_Header, version  ),
-             FT_FRAME_LONG( TTC_Header, DirCount ),
-           FT_FRAME_END };
+    const FT_Frame_Field  ttc_header_fields[] =
+    {
+      FT_FRAME_START( 8 ),
+        FT_FRAME_LONG( TTC_Header, version  ),
+        FT_FRAME_LONG( TTC_Header, DirCount ),
+      FT_FRAME_END };
 
-    FT_TRACE2(( "TT_Load_SFNT_Header(%08p, %ld )\n",
+
+    FT_TRACE2(( "TT_Load_SFNT_Header: %08p, %ld\n",
                 face, face_index ));
 
     face->ttc_header.Tag      = 0;
@@ -173,25 +188,25 @@
 
     face->num_tables = 0;
 
-    /* first of all, read the  first 4 bytes. If it's `ttcf', then the */
+    /* first of all, read the first 4 bytes.  If it's `ttcf', then the */
     /* file is a TrueType collection, otherwise it can be any other    */
-    /* kind of font..                                                  */
-    if ( READ_ULong(format_tag) ) goto Exit;
+    /* kind of font.                                                   */
+    if ( READ_ULong( format_tag ) )
+      goto Exit;
 
     if ( format_tag == TTAG_ttcf )
     {
       TT_Int  n;
 
-      FT_TRACE4(( "TT_Load_SFNT_Header: file is a collection\n" ));
 
+      FT_TRACE3(( "TT_Load_SFNT_Header: file is a collection\n" ));
+
       /* it's a TrueType collection, i.e. a file containing several */
-      /* font files. Read the font directory now                    */
-      /*                                                            */
+      /* font files.  Read the font directory now                   */
       if ( READ_Fields( ttc_header_fields, &face->ttc_header ) )
         goto Exit;
 
-      /* now read the offsets of each font in the file         */
-      /*                                                       */
+      /* now read the offsets of each font in the file */
       if ( ALLOC_ARRAY( face->ttc_header.TableDirectory,
                         face->ttc_header.DirCount,
                         TT_ULong )                        ||
@@ -204,7 +219,7 @@
       FORGET_Frame();
 
       /* check face index */
-      if (face_index >= face->ttc_header.DirCount)
+      if ( face_index >= face->ttc_header.DirCount )
       {
         error = TT_Err_Bad_Argument;
         goto Exit;
@@ -221,19 +236,20 @@
     if ( READ_Fields( sfnt_header_fields, sfnt ) )
       goto Exit;
       
-    /* now, check the values of "num_tables", "seach_range", etc.. */
+    /* now, check the values of `num_tables', `seach_range', etc. */
     {
       TT_UInt  num_tables     = sfnt->num_tables;
       TT_ULong entry_selector = 1L << sfnt->entry_selector;
 
-      /* IMPORTANT: Many fonts have an incorrect "search_range" value, so    */
-      /*            we only check the "entry_selector" correctness here..    */
-      /*                                                                     */
-      if ( num_tables == 0                ||
-           entry_selector > num_tables    ||
-           entry_selector*2 <= num_tables )
+
+      /* IMPORTANT: Many fonts have an incorrect `search_range' value, so */
+      /*            we only check the `entry_selector' correctness here.  */
+      /*                                                                  */
+      if ( num_tables == 0                  ||
+           entry_selector > num_tables      ||
+           entry_selector * 2 <= num_tables )
       {
-        FT_TRACE2(( "TT_Load_SFNT_Header: file is not SFNT !\n" ));
+        FT_TRACE2(( "TT_Load_SFNT_Header: file is not SFNT!\n" ));
         error = FT_Err_Unknown_File_Format;
       }
     }
@@ -243,7 +259,6 @@
   }                                  
 
 
-
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
@@ -252,16 +267,18 @@
   /* <Description>                                                         */
   /*    Loads the table directory into a face object.                      */
   /*                                                                       */
+  /* <InOut>                                                               */
+  /*    face   :: A handle to the target face object.                      */
+  /*                                                                       */
   /* <Input>                                                               */
-  /*    face      :: A handle to the target face object.                   */
-  /*    stream    :: The input stream.                                     */
-  /*    sfnt      :: sfnt directory header                                 */
+  /*    stream :: The input stream.                                        */
+  /*    sfnt   :: The SFNT directory header.                               */
   /*                                                                       */
   /* <Return>                                                              */
   /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   /* <Note>                                                                */
-  /*    The stream cursor must be at the font file's origin                */
+  /*    The stream cursor must be at the font file's origin.               */
   /*                                                                       */
   LOCAL_FUNC
   TT_Error  TT_Load_Directory( TT_Face       face,
@@ -273,12 +290,12 @@
 
     TT_Table *entry, *limit;
 
-    FT_TRACE2(( "TT_Load_Directory( %08p )\n",
-                face ));
 
-    FT_TRACE2(( "-- Tables count   : %12u\n",  sfnt->num_tables ));
-    FT_TRACE2(( "-- Format version : %08lx\n", sfnt->format_tag ));
+    FT_TRACE2(( "TT_Load_Directory: %08p\n", face ));
 
+    FT_TRACE2(( "-- Tables count:   %12u\n",  sfnt->num_tables ));
+    FT_TRACE2(( "-- Format version: %08lx\n", sfnt->format_tag ));
+
     face->num_tables = sfnt->num_tables;
 
     if ( ALLOC_ARRAY( face->dir_tables,
@@ -300,12 +317,12 @@
       entry->Length   = GET_Long();
 
       FT_TRACE2(( "  %c%c%c%c  -  %08lx  -  %08lx\n",
-                (TT_Char)(entry->Tag >> 24),
-                (TT_Char)(entry->Tag >> 16),
-                (TT_Char)(entry->Tag >> 8 ),
-                (TT_Char)(entry->Tag),
-                entry->Offset,
-                entry->Length ));
+                  (TT_Char)( entry->Tag >> 24 ),
+                  (TT_Char)( entry->Tag >> 16 ),
+                  (TT_Char)( entry->Tag >> 8  ),
+                  (TT_Char)( entry->Tag       ),
+                  entry->Offset,
+                  entry->Length ));
     }
 
     FORGET_Frame();
@@ -329,7 +346,7 @@
   /* <Input>                                                               */
   /*    face   :: The face object to look for.                             */
   /*                                                                       */
-  /*    tag    :: The tag of table to load.  Use the value 0 if you  want  */
+  /*    tag    :: The tag of table to load.  Use the value 0 if you want   */
   /*              to access the whole font file, else set this parameter   */
   /*              to a valid TrueType table tag that you can forge with    */
   /*              the MAKE_TT_TAG macro.                                   */
@@ -370,6 +387,7 @@
     TT_Table*  table;
     TT_ULong   size;
 
+
     if ( tag != 0 )
     {
       /* look for tag in font directory */
@@ -384,14 +402,13 @@
       size    = table->Length;
     }
     else
-    /* tag = 0 -- the use want to access the font file directly */
-    {
+      /* tag == 0 -- the user wants to access the font file directly */
       size = face->root.stream->size;
-    }
 
     if ( length && *length == 0 )
     {
       *length = size;
+
       return TT_Err_Ok;
     }
 
@@ -428,31 +445,34 @@
     TT_Error    error;
     TT_Header*  header;
 
-    static const FT_Frame_Field  header_fields[] = {
-            FT_FRAME_START(54),
-              FT_FRAME_ULONG(  TT_Header, Table_Version ),
-              FT_FRAME_ULONG(  TT_Header, Font_Revision ),
-              FT_FRAME_LONG(   TT_Header, CheckSum_Adjust ),
-              FT_FRAME_LONG(   TT_Header, Magic_Number ),
-              FT_FRAME_USHORT( TT_Header, Flags ),
-              FT_FRAME_USHORT( TT_Header, Units_Per_EM ),
-              FT_FRAME_LONG(   TT_Header, Created[0] ),
-              FT_FRAME_LONG(   TT_Header, Created[1] ),
-              FT_FRAME_LONG(   TT_Header, Modified[0] ),
-              FT_FRAME_LONG(   TT_Header, Modified[1] ),
-              FT_FRAME_SHORT(  TT_Header, xMin ),
-              FT_FRAME_SHORT(  TT_Header, yMin ),
-              FT_FRAME_SHORT(  TT_Header, xMax ),
-              FT_FRAME_SHORT(  TT_Header, yMax ),
-              FT_FRAME_USHORT( TT_Header, Mac_Style ),
-              FT_FRAME_USHORT( TT_Header, Lowest_Rec_PPEM ),
-              FT_FRAME_SHORT(  TT_Header, Font_Direction ),
-              FT_FRAME_SHORT(  TT_Header, Index_To_Loc_Format ),
-              FT_FRAME_SHORT(  TT_Header, Glyph_Data_Format ),
-            FT_FRAME_END };
+    static const FT_Frame_Field  header_fields[] =
+    {
+      FT_FRAME_START( 54 ),
+        FT_FRAME_ULONG(  TT_Header, Table_Version ),
+        FT_FRAME_ULONG(  TT_Header, Font_Revision ),
+        FT_FRAME_LONG(   TT_Header, CheckSum_Adjust ),
+        FT_FRAME_LONG(   TT_Header, Magic_Number ),
+        FT_FRAME_USHORT( TT_Header, Flags ),
+        FT_FRAME_USHORT( TT_Header, Units_Per_EM ),
+        FT_FRAME_LONG(   TT_Header, Created[0] ),
+        FT_FRAME_LONG(   TT_Header, Created[1] ),
+        FT_FRAME_LONG(   TT_Header, Modified[0] ),
+        FT_FRAME_LONG(   TT_Header, Modified[1] ),
+        FT_FRAME_SHORT(  TT_Header, xMin ),
+        FT_FRAME_SHORT(  TT_Header, yMin ),
+        FT_FRAME_SHORT(  TT_Header, xMax ),
+        FT_FRAME_SHORT(  TT_Header, yMax ),
+        FT_FRAME_USHORT( TT_Header, Mac_Style ),
+        FT_FRAME_USHORT( TT_Header, Lowest_Rec_PPEM ),
+        FT_FRAME_SHORT(  TT_Header, Font_Direction ),
+        FT_FRAME_SHORT(  TT_Header, Index_To_Loc_Format ),
+        FT_FRAME_SHORT(  TT_Header, Glyph_Data_Format ),
+      FT_FRAME_END
+    };
 
-    FT_TRACE2(( "Load_TT_Header( %08p )\n", face ));
 
+    FT_TRACE2(( "Load_TT_Header: %08p\n", face ));
+
     error = face->goto_table( face, TTAG_head, stream, 0 );
     if ( error )
     {
@@ -465,8 +485,8 @@
     if ( READ_Fields( header_fields, header ) )
       goto Exit;
 
-    FT_TRACE2(( "    Units per EM : %8u\n", header->Units_Per_EM ));
-    FT_TRACE2(( "    IndexToLoc   : %8d\n", header->Index_To_Loc_Format ));
+    FT_TRACE2(( "    Units per EM: %8u\n", header->Units_Per_EM ));
+    FT_TRACE2(( "    IndexToLoc:   %8d\n", header->Index_To_Loc_Format ));
     FT_TRACE2(( "Font Header Loaded.\n" ));
 
   Exit:
@@ -496,31 +516,35 @@
     TT_Error        error;
     TT_MaxProfile*  maxProfile = &face->max_profile;
 
-    const FT_Frame_Field  maxp_fields[] = {
-              FT_FRAME_START(32),
-                FT_FRAME_ULONG(  TT_MaxProfile, version ),
-                FT_FRAME_USHORT( TT_MaxProfile, numGlyphs ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxPoints ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxContours ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxCompositePoints ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxCompositeContours ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxZones ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxTwilightPoints ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxStorage ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxFunctionDefs ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxInstructionDefs ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxStackElements ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxSizeOfInstructions ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxComponentElements ),
-                FT_FRAME_USHORT( TT_MaxProfile, maxComponentDepth ),
-              FT_FRAME_END };
+    const FT_Frame_Field  maxp_fields[] =
+    {
+      FT_FRAME_START( 32 ),
+        FT_FRAME_ULONG(  TT_MaxProfile, version ),
+        FT_FRAME_USHORT( TT_MaxProfile, numGlyphs ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxPoints ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxContours ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxCompositePoints ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxCompositeContours ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxZones ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxTwilightPoints ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxStorage ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxFunctionDefs ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxInstructionDefs ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxStackElements ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxSizeOfInstructions ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxComponentElements ),
+        FT_FRAME_USHORT( TT_MaxProfile, maxComponentDepth ),
+      FT_FRAME_END };
 
-    FT_TRACE2(( "Load_TT_MaxProfile( %08p )\n", face ));
 
+    FT_TRACE2(( "Load_TT_MaxProfile: %08p\n", face ));
+
     error = face->goto_table( face, TTAG_maxp, stream, 0 );
-    if (error) goto Exit;
+    if ( error )
+      goto Exit;
 
-    if ( READ_Fields( maxp_fields, maxProfile ) ) goto Exit;
+    if ( READ_Fields( maxp_fields, maxProfile ) )
+      goto Exit;
 
     /* XXX: an adjustment that is necessary to load certain */
     /*       broken fonts like `Keystrokes MT' :-(          */
@@ -553,6 +577,7 @@
     face->root.max_contours += 4;
 
     FT_TRACE2(( "MAXP loaded.\n" ));
+
   Exit:
     return error;
   }
@@ -588,8 +613,8 @@
     TT_LongMetrics**   longs;
     TT_ShortMetrics**  shorts;
 
-    FT_TRACE2(( "TT_Load_%s_Metrics( %08p )\n",
-              vertical ? "Vertical" : "Horizontal", face ));
+    FT_TRACE2(( "TT_Load_%s_Metrics: %08p\n",
+                  vertical ? "Vertical" : "Horizontal", face ));
 
     if ( vertical )
     {
@@ -603,7 +628,7 @@
       error = face->goto_table( face, TTAG_vmtx, stream, &table_len );
       if ( error )
       {
-        /* Set the number_Of_VMetrics to 0! */
+        /* Set number_Of_VMetrics to 0! */
         FT_TRACE2(( "  no vertical header in file.\n" ));
         face->vertical.number_Of_VMetrics = 0;
         error = TT_Err_Ok;
@@ -617,7 +642,7 @@
     else
     {
       error = face->goto_table( face, TTAG_hmtx, stream, &table_len );
-      if (error)
+      if ( error )
       {
         FT_ERROR(( " no horizontal metrics in file!\n" ));
         error = TT_Err_Hmtx_Table_Missing;
@@ -632,17 +657,18 @@
     /* never trust derived values */
 
     num_shorts         = face->max_profile.numGlyphs - num_longs;
-    num_shorts_checked = ( table_len - num_longs*4L )/2;
+    num_shorts_checked = ( table_len - num_longs * 4L ) / 2;
 
     if ( num_shorts < 0 )
     {
       FT_ERROR(( "!! more metrics than glyphs!\n" ));
-      error = ( vertical ? TT_Err_Invalid_Vert_Metrics
-                         : TT_Err_Invalid_Horiz_Metrics );
+
+      error = vertical ? TT_Err_Invalid_Vert_Metrics
+                       : TT_Err_Invalid_Horiz_Metrics;
       goto Exit;
     }
 
-    if ( ALLOC_ARRAY( *longs,  num_longs,  TT_LongMetrics ) ||
+    if ( ALLOC_ARRAY( *longs,  num_longs,  TT_LongMetrics )  ||
          ALLOC_ARRAY( *shorts, num_shorts, TT_ShortMetrics ) )
       goto Exit;
 
@@ -653,6 +679,7 @@
       TT_LongMetrics*  cur   = *longs;
       TT_LongMetrics*  limit = cur + num_longs;
 
+
       for ( ; cur < limit; cur++ )
       {
         cur->advance = GET_UShort();
@@ -660,21 +687,23 @@
       }
     }
 
-    /* do we have an inconsistent number of metric values ? */
+    /* do we have an inconsistent number of metric values? */
     {
       TT_ShortMetrics*  cur   = *shorts;
       TT_ShortMetrics*  limit = cur + MIN( num_shorts, num_shorts_checked );
 
+
       for ( ; cur < limit; cur++ )
         *cur = GET_Short();
 
-      /* we fill up the missing left side bearings with the    */
-      /* last valid value. Since this will occur for buggy CJK */
-      /* fonts usually, nothing serious will happen            */
+      /* we fill up the missing left side bearings with the     */
+      /* last valid value.  Since this will occur for buggy CJK */
+      /* fonts usually only, nothing serious will happen        */
       if ( num_shorts > num_shorts_checked && num_shorts_checked > 0 )
       {
-        TT_Short  val = *(shorts)[num_shorts_checked-1];
+        TT_Short  val = *(shorts)[num_shorts_checked - 1];
 
+
         limit = *shorts + num_shorts;
         for ( ; cur < limit; cur++ )
           *cur = val;
@@ -714,27 +743,30 @@
     TT_Error        error;
     TT_HoriHeader*  header;
 
-    const FT_Frame_Field  metrics_header_fields[] = {
-              FT_FRAME_START(36),
-                FT_FRAME_ULONG(  TT_HoriHeader, Version ),
-                FT_FRAME_SHORT(  TT_HoriHeader, Ascender ),
-                FT_FRAME_SHORT(  TT_HoriHeader, Descender ),
-                FT_FRAME_SHORT(  TT_HoriHeader, Line_Gap ),
-                FT_FRAME_USHORT( TT_HoriHeader, advance_Width_Max ),
-                FT_FRAME_SHORT(  TT_HoriHeader, min_Left_Side_Bearing ),
-                FT_FRAME_SHORT(  TT_HoriHeader, min_Right_Side_Bearing ),
-                FT_FRAME_SHORT(  TT_HoriHeader, xMax_Extent ),
-                FT_FRAME_SHORT(  TT_HoriHeader, caret_Slope_Rise ),
-                FT_FRAME_SHORT(  TT_HoriHeader, caret_Slope_Run ),
-                FT_FRAME_SHORT(  TT_HoriHeader, Reserved[0] ),
-                FT_FRAME_SHORT(  TT_HoriHeader, Reserved[1] ),
-                FT_FRAME_SHORT(  TT_HoriHeader, Reserved[2] ),
-                FT_FRAME_SHORT(  TT_HoriHeader, Reserved[3] ),
-                FT_FRAME_SHORT(  TT_HoriHeader, Reserved[4] ),
-                FT_FRAME_SHORT(  TT_HoriHeader, metric_Data_Format ),
-                FT_FRAME_USHORT( TT_HoriHeader, number_Of_HMetrics ),
-              FT_FRAME_END };
+    const FT_Frame_Field  metrics_header_fields[] =
+    {
+      FT_FRAME_START( 36 ),
+        FT_FRAME_ULONG(  TT_HoriHeader, Version ),
+        FT_FRAME_SHORT(  TT_HoriHeader, Ascender ),
+        FT_FRAME_SHORT(  TT_HoriHeader, Descender ),
+        FT_FRAME_SHORT(  TT_HoriHeader, Line_Gap ),
+        FT_FRAME_USHORT( TT_HoriHeader, advance_Width_Max ),
+        FT_FRAME_SHORT(  TT_HoriHeader, min_Left_Side_Bearing ),
+        FT_FRAME_SHORT(  TT_HoriHeader, min_Right_Side_Bearing ),
+        FT_FRAME_SHORT(  TT_HoriHeader, xMax_Extent ),
+        FT_FRAME_SHORT(  TT_HoriHeader, caret_Slope_Rise ),
+        FT_FRAME_SHORT(  TT_HoriHeader, caret_Slope_Run ),
+        FT_FRAME_SHORT(  TT_HoriHeader, Reserved[0] ),
+        FT_FRAME_SHORT(  TT_HoriHeader, Reserved[1] ),
+        FT_FRAME_SHORT(  TT_HoriHeader, Reserved[2] ),
+        FT_FRAME_SHORT(  TT_HoriHeader, Reserved[3] ),
+        FT_FRAME_SHORT(  TT_HoriHeader, Reserved[4] ),
+        FT_FRAME_SHORT(  TT_HoriHeader, metric_Data_Format ),
+        FT_FRAME_USHORT( TT_HoriHeader, number_Of_HMetrics ),
+      FT_FRAME_END
+    };
 
+
     FT_TRACE2(( vertical ? "Vertical header " : "Horizontal header " ));
 
     if ( vertical )
@@ -744,7 +776,7 @@
       /* The vertical header table is optional, so return quietly if */
       /* we don't find it.                                           */
       error = face->goto_table( face, TTAG_vhea, stream, 0 );
-      if (error)
+      if ( error )
       {
         error = TT_Err_Ok;
         goto Exit;
@@ -758,7 +790,7 @@
       /* The horizontal header is mandatory, return an error if we */
       /* don't find it.                                            */
       error = face->goto_table( face, TTAG_hhea, stream, 0 );
-      if (error)
+      if ( error )
       {
         error = TT_Err_Horiz_Header_Missing;
         goto Exit;
@@ -767,7 +799,8 @@
       header = &face->horizontal;
     }
 
-    if ( READ_Fields( metrics_header_fields, header ) ) goto Exit;
+    if ( READ_Fields( metrics_header_fields, header ) )
+      goto Exit;
 
     header->long_metrics  = NULL;
     header->short_metrics = NULL;
@@ -777,6 +810,7 @@
     /* Now try to load the corresponding metrics */
 
     error = TT_Load_Metrics( face, stream, vertical );
+
   Exit:
     return error;
   }
@@ -798,7 +832,8 @@
   /*    TrueType error code.  0 means success.                             */
   /*                                                                       */
   LOCAL_FUNC
-  TT_Error  TT_Load_Names( TT_Face  face, FT_Stream  stream )
+  TT_Error  TT_Load_Names( TT_Face    face,
+                           FT_Stream  stream )
   {
     TT_Error   error;
     FT_Memory  memory = stream->memory;
@@ -808,27 +843,32 @@
 
     TT_NameTable*  names;
 
-    const FT_Frame_Field  name_table_fields[] = {
-              FT_FRAME_START(6),
-                FT_FRAME_USHORT( TT_NameTable, format ),
-                FT_FRAME_USHORT( TT_NameTable, numNameRecords ),
-                FT_FRAME_USHORT( TT_NameTable, storageOffset ),
-              FT_FRAME_END };
+    const FT_Frame_Field  name_table_fields[] =
+    {
+      FT_FRAME_START( 6 ),
+        FT_FRAME_USHORT( TT_NameTable, format ),
+        FT_FRAME_USHORT( TT_NameTable, numNameRecords ),
+        FT_FRAME_USHORT( TT_NameTable, storageOffset ),
+      FT_FRAME_END
+    };
 
-    const FT_Frame_Field  name_record_fields[] = {
-                FT_FRAME_USHORT( TT_NameRec, platformID ),
-                FT_FRAME_USHORT( TT_NameRec, encodingID ),
-                FT_FRAME_USHORT( TT_NameRec, languageID ),
-                FT_FRAME_USHORT( TT_NameRec, nameID ),
-                FT_FRAME_USHORT( TT_NameRec, stringLength ),
-                FT_FRAME_USHORT( TT_NameRec, stringOffset ),
-              FT_FRAME_END };
+    const FT_Frame_Field  name_record_fields[] =
+    {
+      /* no FT_FRAME_START */
+        FT_FRAME_USHORT( TT_NameRec, platformID ),
+        FT_FRAME_USHORT( TT_NameRec, encodingID ),
+        FT_FRAME_USHORT( TT_NameRec, languageID ),
+        FT_FRAME_USHORT( TT_NameRec, nameID ),
+        FT_FRAME_USHORT( TT_NameRec, stringLength ),
+        FT_FRAME_USHORT( TT_NameRec, stringOffset ),
+      FT_FRAME_END
+    };
 
 
     FT_TRACE2(( "Names " ));
 
     error = face->goto_table( face, TTAG_name, stream, &table_len );
-    if (error)
+    if ( error )
     {
       /* The name table is required so indicate failure. */
       FT_TRACE2(( "is missing!\n" ));
@@ -840,7 +880,8 @@
 
     names = &face->name_table;
 
-    if ( READ_Fields( name_table_fields, names ) ) goto Exit;
+    if ( READ_Fields( name_table_fields, names ) )
+      goto Exit;
 
     /* Allocate the array of name records. */
     if ( ALLOC_ARRAY( names->names,
@@ -852,9 +893,10 @@
     /* Load the name records and determine how much storage is needed */
     /* to hold the strings themselves.                                */
     {
-      TT_NameRec*    cur   = names->names;
-      TT_NameRec*    limit = cur + names->numNameRecords;
+      TT_NameRec*  cur   = names->names;
+      TT_NameRec*  limit = cur + names->numNameRecords;
 
+
       storageSize = 0;
 
       for ( ; cur < limit; cur ++ )
@@ -861,19 +903,21 @@
       {
         TT_ULong  upper;
 
+
         (void)READ_Fields( name_record_fields, cur );
 
-        upper = (TT_ULong)(cur->stringOffset + cur->stringLength);
-        if ( upper > storageSize ) storageSize = upper;
+        upper = (TT_ULong)( cur->stringOffset + cur->stringLength );
+        if ( upper > storageSize )
+          storageSize = upper;
       }
     }
 
     FORGET_Frame();
 
-    if (storageSize > 0)
+    if ( storageSize > 0 )
     {
       /* allocate the name storage area in memory, then read it */
-      if ( ALLOC( names->storage, storageSize )  ||
+      if ( ALLOC( names->storage, storageSize )               ||
            FILE_Read_At( table_pos + names->storageOffset,
                          (void*)names->storage, storageSize ) )
         goto Exit;
@@ -883,21 +927,25 @@
         TT_NameRec*  cur   = names->names;
         TT_NameRec*  limit = cur + names->numNameRecords;
 
+
         for ( ; cur < limit; cur++ )
           cur->string = names->storage + cur->stringOffset;
       }
 
 #ifdef FT_DEBUG_LEVEL_TRACE
+
       /* Print Name Record Table in case of debugging */
       {
         TT_NameRec*  cur   = names->names;
         TT_NameRec*  limit = cur + names->numNameRecords;
 
+
         for ( ; cur < limit; cur++ )
         {
           TT_UInt  j;
 
-          FT_TRACE2(( "%d %d %x %d ",
+
+          FT_TRACE3(( "%d %d %x %d\n  ",
                        cur->platformID,
                        cur->encodingID,
                        cur->languageID,
@@ -910,13 +958,16 @@
             {
               TT_Char  c = *(cur->string + j);
 
+
               if ( (TT_Byte)c < 128 )
-                FT_TRACE2(( "%c", c ));
+                FT_TRACE3(( "%c", c ));
             }
         }
       }
-      FT_TRACE2(( "\n" ));
-#endif
+      FT_TRACE3(( "\n" ));
+
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
     }
     FT_TRACE2(( "loaded\n" ));
 
@@ -965,8 +1016,8 @@
   /*    loaded on demand in the `ttcmap.c' module.                         */
   /*                                                                       */
   /* <Input>                                                               */
-  /*    face    :: A handle to the target face object.                     */
-  /*    stream  :: A handle to the input stream.                           */
+  /*    face   :: A handle to the target face object.                      */
+  /*    stream :: A handle to the input stream.                            */
   /*                                                                       */
   /* <Return>                                                              */
   /*     TrueType error code.  0 means success.                            */
@@ -980,23 +1031,28 @@
     TT_Long     table_start;
     TT_CMapDir  cmap_dir;
 
-    const FT_Frame_Field  cmap_fields[] = {
-              FT_FRAME_START(4),
-                FT_FRAME_USHORT( TT_CMapDir, tableVersionNumber ),
-                FT_FRAME_USHORT( TT_CMapDir, numCMaps ),
-              FT_FRAME_END };
+    const FT_Frame_Field  cmap_fields[] =
+    {
+      FT_FRAME_START( 4 ),
+        FT_FRAME_USHORT( TT_CMapDir, tableVersionNumber ),
+        FT_FRAME_USHORT( TT_CMapDir, numCMaps ),
+      FT_FRAME_END
+    };
 
-    const FT_Frame_Field  cmap_rec_fields[] = {
-              FT_FRAME_START(6),
-                FT_FRAME_USHORT( TT_CMapTable, format ),
-                FT_FRAME_USHORT( TT_CMapTable, length ),
-                FT_FRAME_USHORT( TT_CMapTable, version ),
-              FT_FRAME_END };
+    const FT_Frame_Field  cmap_rec_fields[] =
+    {
+      FT_FRAME_START( 6 ),
+        FT_FRAME_USHORT( TT_CMapTable, format ),
+        FT_FRAME_USHORT( TT_CMapTable, length ),
+        FT_FRAME_USHORT( TT_CMapTable, version ),
+      FT_FRAME_END
+    };
 
+
     FT_TRACE2(( "CMaps " ));
 
     error = face->goto_table( face, TTAG_cmap, stream, 0 );
-    if (error)
+    if ( error )
     {
       error = TT_Err_CMap_Table_Missing;
       goto Exit;
@@ -1004,7 +1060,8 @@
 
     table_start = FILE_Pos();
 
-    if ( READ_Fields( cmap_fields, &cmap_dir ) ) goto Exit;
+    if ( READ_Fields( cmap_fields, &cmap_dir ) )
+      goto Exit;
 
     /* save space in face table for cmap tables */
     if ( ALLOC_ARRAY( face->charmaps,
@@ -1017,12 +1074,16 @@
       TT_CharMap  charmap = face->charmaps;
       TT_CharMap  limit   = charmap + face->num_charmaps;
 
+
       /* read the header of each charmap first */
-      if ( ACCESS_Frame( face->num_charmaps*8L ) ) goto Exit;
+      if ( ACCESS_Frame( face->num_charmaps * 8L ) )
+        goto Exit;
+
       for ( ; charmap < limit; charmap++ )
       {
         TT_CMapTable*  cmap;
 
+
         charmap->root.face = (FT_Face)face;
         cmap               = &charmap->cmap;
 
@@ -1031,6 +1092,7 @@
         cmap->platformEncodingID = GET_UShort();
         cmap->offset             = (TT_ULong)GET_Long();
       }
+
       FORGET_Frame();
 
       /* now read the rest of each table */
@@ -1038,6 +1100,7 @@
       {
         TT_CMapTable* cmap = &charmap->cmap;
 
+
         if ( FILE_Seek( table_start + (TT_Long)cmap->offset ) ||
              READ_Fields( cmap_rec_fields, cmap )             )
           goto Exit;
@@ -1047,6 +1110,7 @@
     }
 
     FT_TRACE2(( "loaded\n" ));
+
   Exit:
     return error;
   }
@@ -1074,68 +1138,75 @@
     TT_Error  error;
     TT_OS2*   os2;
 
-    const FT_Frame_Field  os2_fields[] = {
-              FT_FRAME_START(78),
-                FT_FRAME_USHORT( TT_OS2, version ),
-                FT_FRAME_SHORT(  TT_OS2, xAvgCharWidth ),
-                FT_FRAME_USHORT( TT_OS2, usWeightClass ),
-                FT_FRAME_USHORT( TT_OS2, usWidthClass ),
-                FT_FRAME_SHORT(  TT_OS2, fsType ),
-                FT_FRAME_SHORT(  TT_OS2, ySubscriptXSize ),
-                FT_FRAME_SHORT(  TT_OS2, ySubscriptYSize ),
-                FT_FRAME_SHORT(  TT_OS2, ySubscriptXOffset ),
-                FT_FRAME_SHORT(  TT_OS2, ySubscriptYOffset ),
-                FT_FRAME_SHORT(  TT_OS2, ySuperscriptXSize ),
-                FT_FRAME_SHORT(  TT_OS2, ySuperscriptYSize ),
-                FT_FRAME_SHORT(  TT_OS2, ySuperscriptXOffset ),
-                FT_FRAME_SHORT(  TT_OS2, ySuperscriptYOffset ),
-                FT_FRAME_SHORT(  TT_OS2, yStrikeoutSize ),
-                FT_FRAME_SHORT(  TT_OS2, yStrikeoutPosition ),
-                FT_FRAME_SHORT(  TT_OS2, sFamilyClass ),
-                FT_FRAME_BYTE(   TT_OS2, panose[0] ),
-                FT_FRAME_BYTE(   TT_OS2, panose[1] ),
-                FT_FRAME_BYTE(   TT_OS2, panose[2] ),
-                FT_FRAME_BYTE(   TT_OS2, panose[3] ),
-                FT_FRAME_BYTE(   TT_OS2, panose[4] ),
-                FT_FRAME_BYTE(   TT_OS2, panose[5] ),
-                FT_FRAME_BYTE(   TT_OS2, panose[6] ),
-                FT_FRAME_BYTE(   TT_OS2, panose[7] ),
-                FT_FRAME_BYTE(   TT_OS2, panose[8] ),
-                FT_FRAME_BYTE(   TT_OS2, panose[9] ),
-                FT_FRAME_ULONG(  TT_OS2, ulUnicodeRange1 ),
-                FT_FRAME_ULONG(  TT_OS2, ulUnicodeRange2 ),
-                FT_FRAME_ULONG(  TT_OS2, ulUnicodeRange3 ),
-                FT_FRAME_ULONG(  TT_OS2, ulUnicodeRange4 ),
-                FT_FRAME_BYTE(   TT_OS2, achVendID[0] ),
-                FT_FRAME_BYTE(   TT_OS2, achVendID[1] ),
-                FT_FRAME_BYTE(   TT_OS2, achVendID[2] ),
-                FT_FRAME_BYTE(   TT_OS2, achVendID[3] ),
+    const FT_Frame_Field  os2_fields[] =
+    {
+      FT_FRAME_START( 78 ),
+        FT_FRAME_USHORT( TT_OS2, version ),
+        FT_FRAME_SHORT(  TT_OS2, xAvgCharWidth ),
+        FT_FRAME_USHORT( TT_OS2, usWeightClass ),
+        FT_FRAME_USHORT( TT_OS2, usWidthClass ),
+        FT_FRAME_SHORT(  TT_OS2, fsType ),
+        FT_FRAME_SHORT(  TT_OS2, ySubscriptXSize ),
+        FT_FRAME_SHORT(  TT_OS2, ySubscriptYSize ),
+        FT_FRAME_SHORT(  TT_OS2, ySubscriptXOffset ),
+        FT_FRAME_SHORT(  TT_OS2, ySubscriptYOffset ),
+        FT_FRAME_SHORT(  TT_OS2, ySuperscriptXSize ),
+        FT_FRAME_SHORT(  TT_OS2, ySuperscriptYSize ),
+        FT_FRAME_SHORT(  TT_OS2, ySuperscriptXOffset ),
+        FT_FRAME_SHORT(  TT_OS2, ySuperscriptYOffset ),
+        FT_FRAME_SHORT(  TT_OS2, yStrikeoutSize ),
+        FT_FRAME_SHORT(  TT_OS2, yStrikeoutPosition ),
+        FT_FRAME_SHORT(  TT_OS2, sFamilyClass ),
+        FT_FRAME_BYTE(   TT_OS2, panose[0] ),
+        FT_FRAME_BYTE(   TT_OS2, panose[1] ),
+        FT_FRAME_BYTE(   TT_OS2, panose[2] ),
+        FT_FRAME_BYTE(   TT_OS2, panose[3] ),
+        FT_FRAME_BYTE(   TT_OS2, panose[4] ),
+        FT_FRAME_BYTE(   TT_OS2, panose[5] ),
+        FT_FRAME_BYTE(   TT_OS2, panose[6] ),
+        FT_FRAME_BYTE(   TT_OS2, panose[7] ),
+        FT_FRAME_BYTE(   TT_OS2, panose[8] ),
+        FT_FRAME_BYTE(   TT_OS2, panose[9] ),
+        FT_FRAME_ULONG(  TT_OS2, ulUnicodeRange1 ),
+        FT_FRAME_ULONG(  TT_OS2, ulUnicodeRange2 ),
+        FT_FRAME_ULONG(  TT_OS2, ulUnicodeRange3 ),
+        FT_FRAME_ULONG(  TT_OS2, ulUnicodeRange4 ),
+        FT_FRAME_BYTE(   TT_OS2, achVendID[0] ),
+        FT_FRAME_BYTE(   TT_OS2, achVendID[1] ),
+        FT_FRAME_BYTE(   TT_OS2, achVendID[2] ),
+        FT_FRAME_BYTE(   TT_OS2, achVendID[3] ),
 
-                FT_FRAME_USHORT( TT_OS2, fsSelection ),
-                FT_FRAME_USHORT( TT_OS2, usFirstCharIndex ),
-                FT_FRAME_USHORT( TT_OS2, usLastCharIndex ),
-                FT_FRAME_SHORT(  TT_OS2, sTypoAscender ),
-                FT_FRAME_SHORT(  TT_OS2, sTypoDescender ),
-                FT_FRAME_SHORT(  TT_OS2, sTypoLineGap ),
-                FT_FRAME_USHORT( TT_OS2, usWinAscent ),
-                FT_FRAME_USHORT( TT_OS2, usWinDescent ),
-              FT_FRAME_END };
+        FT_FRAME_USHORT( TT_OS2, fsSelection ),
+        FT_FRAME_USHORT( TT_OS2, usFirstCharIndex ),
+        FT_FRAME_USHORT( TT_OS2, usLastCharIndex ),
+        FT_FRAME_SHORT(  TT_OS2, sTypoAscender ),
+        FT_FRAME_SHORT(  TT_OS2, sTypoDescender ),
+        FT_FRAME_SHORT(  TT_OS2, sTypoLineGap ),
+        FT_FRAME_USHORT( TT_OS2, usWinAscent ),
+        FT_FRAME_USHORT( TT_OS2, usWinDescent ),
+      FT_FRAME_END
+    };
 
-    const FT_Frame_Field  os2_fields_extra[] = {
-              FT_FRAME_START(8),
-                FT_FRAME_ULONG( TT_OS2, ulCodePageRange1 ),
-                FT_FRAME_ULONG( TT_OS2, ulCodePageRange2 ),
-              FT_FRAME_END };
+    const FT_Frame_Field  os2_fields_extra[] =
+    {
+      FT_FRAME_START( 8 ),
+        FT_FRAME_ULONG( TT_OS2, ulCodePageRange1 ),
+        FT_FRAME_ULONG( TT_OS2, ulCodePageRange2 ),
+      FT_FRAME_END
+    };
 
-    const FT_Frame_Field  os2_fields_extra2[] = {
-              FT_FRAME_START(10),
-                FT_FRAME_SHORT( TT_OS2,  sxHeight ),
-                FT_FRAME_SHORT( TT_OS2,  sCapHeight ),
-                FT_FRAME_USHORT( TT_OS2, usDefaultChar ),
-                FT_FRAME_USHORT( TT_OS2, usBreakChar ),
-                FT_FRAME_USHORT( TT_OS2, usMaxContext ),
-              FT_FRAME_END };
+    const FT_Frame_Field  os2_fields_extra2[] =
+    {
+      FT_FRAME_START( 10 ),
+        FT_FRAME_SHORT( TT_OS2,  sxHeight ),
+        FT_FRAME_SHORT( TT_OS2,  sCapHeight ),
+        FT_FRAME_USHORT( TT_OS2, usDefaultChar ),
+        FT_FRAME_USHORT( TT_OS2, usBreakChar ),
+        FT_FRAME_USHORT( TT_OS2, usMaxContext ),
+      FT_FRAME_END
+    };
 
+
     FT_TRACE2(( "OS/2 Table " ));
 
     /* We now support old Mac fonts where the OS/2 table doesn't  */
@@ -1142,7 +1213,7 @@
     /* exist.  Simply put, we set the `version' field to 0xFFFF   */
     /* and test this value each time we need to access the table. */
     error = face->goto_table( face, TTAG_OS2, stream, 0 );
-    if (error)
+    if ( error )
     {
       FT_TRACE2(( "is missing\n!" ));
       face->os2.version = 0xFFFF;
@@ -1152,7 +1223,8 @@
 
     os2 = &face->os2;
 
-    if ( READ_Fields( os2_fields, os2 ) ) goto Exit;
+    if ( READ_Fields( os2_fields, os2 ) )
+      goto Exit;
 
     os2->ulCodePageRange1 = 0;
     os2->ulCodePageRange2 = 0;
@@ -1160,12 +1232,14 @@
     if ( os2->version >= 0x0001 )
     {
       /* only version 1 tables */
-      if ( READ_Fields( os2_fields_extra, os2 ) ) goto Exit;
+      if ( READ_Fields( os2_fields_extra, os2 ) )
+        goto Exit;
 
       if ( os2->version >= 0x0002 )
       {
         /* only version 2 tables */
-        if ( READ_Fields( os2_fields_extra2, os2 ) ) goto Exit;
+        if ( READ_Fields( os2_fields_extra2, os2 ) )
+          goto Exit;
       }
     }
 
@@ -1198,26 +1272,30 @@
     TT_Error        error;
     TT_Postscript*  post = &face->postscript;
 
-    static const FT_Frame_Field  post_fields[] = {
-              FT_FRAME_START(32),
-                FT_FRAME_ULONG( TT_Postscript, FormatType ),
-                FT_FRAME_ULONG( TT_Postscript, italicAngle ),
-                FT_FRAME_SHORT( TT_Postscript, underlinePosition ),
-                FT_FRAME_SHORT( TT_Postscript, underlineThickness ),
-                FT_FRAME_ULONG( TT_Postscript, isFixedPitch ),
-                FT_FRAME_ULONG( TT_Postscript, minMemType42 ),
-                FT_FRAME_ULONG( TT_Postscript, maxMemType42 ),
-                FT_FRAME_ULONG( TT_Postscript, minMemType1 ),
-                FT_FRAME_ULONG( TT_Postscript, maxMemType1 ),
-              FT_FRAME_END };
+    static const FT_Frame_Field  post_fields[] =
+    {
+      FT_FRAME_START( 32 ),
+        FT_FRAME_ULONG( TT_Postscript, FormatType ),
+        FT_FRAME_ULONG( TT_Postscript, italicAngle ),
+        FT_FRAME_SHORT( TT_Postscript, underlinePosition ),
+        FT_FRAME_SHORT( TT_Postscript, underlineThickness ),
+        FT_FRAME_ULONG( TT_Postscript, isFixedPitch ),
+        FT_FRAME_ULONG( TT_Postscript, minMemType42 ),
+        FT_FRAME_ULONG( TT_Postscript, maxMemType42 ),
+        FT_FRAME_ULONG( TT_Postscript, minMemType1 ),
+        FT_FRAME_ULONG( TT_Postscript, maxMemType1 ),
+      FT_FRAME_END
+    };
 
+
     FT_TRACE2(( "PostScript " ));
 
     error = face->goto_table( face, TTAG_post, stream, 0 );
-    if (error)
+    if ( error )
       return TT_Err_Post_Table_Missing;
 
-    if ( READ_Fields( post_fields, post ) ) return error;
+    if ( READ_Fields( post_fields, post ) )
+      return error;
 
     /* we don't load the glyph names, we do that in another */
     /* module (ttpost).                                     */
@@ -1246,51 +1324,58 @@
   TT_Error  TT_Load_PCLT( TT_Face    face,
                           FT_Stream  stream )
   {
-    static const FT_Frame_Field  pclt_fields[] = {
-	               FT_FRAME_START( 20 ),
-				      FT_FRAME_ULONG ( TT_PCLT, Version ),
-					  FT_FRAME_ULONG ( TT_PCLT, FontNumber ),
-					  FT_FRAME_USHORT( TT_PCLT, Pitch ),
-					  FT_FRAME_USHORT( TT_PCLT, xHeight ),
-					  FT_FRAME_USHORT( TT_PCLT, Style ),
-					  FT_FRAME_USHORT( TT_PCLT, TypeFamily ),
-					  FT_FRAME_USHORT( TT_PCLT, CapHeight ),
-				   FT_FRAME_END };
+    static const FT_Frame_Field  pclt_fields[] =
+    {
+      FT_FRAME_START( 20 ),
+        FT_FRAME_ULONG ( TT_PCLT, Version ),
+        FT_FRAME_ULONG ( TT_PCLT, FontNumber ),
+        FT_FRAME_USHORT( TT_PCLT, Pitch ),
+        FT_FRAME_USHORT( TT_PCLT, xHeight ),
+        FT_FRAME_USHORT( TT_PCLT, Style ),
+        FT_FRAME_USHORT( TT_PCLT, TypeFamily ),
+        FT_FRAME_USHORT( TT_PCLT, CapHeight ),
+      FT_FRAME_END
+    };
   
-    static const FT_Frame_Field  pclt_fields2[] = {
-	               FT_FRAME_START( 4 ),
-				     FT_FRAME_CHAR( TT_PCLT, StrokeWeight ),
-					 FT_FRAME_CHAR( TT_PCLT, WidthType ),
-					 FT_FRAME_BYTE( TT_PCLT, SerifStyle ),
-					 FT_FRAME_BYTE( TT_PCLT, Reserved ),
-	               FT_FRAME_END };
+    static const FT_Frame_Field  pclt_fields2[] =
+    {
+      FT_FRAME_START( 4 ),
+        FT_FRAME_CHAR( TT_PCLT, StrokeWeight ),
+        FT_FRAME_CHAR( TT_PCLT, WidthType ),
+        FT_FRAME_BYTE( TT_PCLT, SerifStyle ),
+        FT_FRAME_BYTE( TT_PCLT, Reserved ),
+      FT_FRAME_END
+    };
   
-    TT_Error    error;
-	TT_PCLT*    pclt = &face->pclt;
-	
+    TT_Error  error;
+    TT_PCLT*  pclt = &face->pclt;
+
+    
     FT_TRACE2(( "PCLT " ));
 
-	/* optional table */
-	error = face->goto_table( face, TTAG_PCLT, stream, 0 );
-	if (error)
-	{
-	  FT_TRACE2(( "missing (optional)\n" ));
-	  pclt->Version = 0;
-	  return 0;
-	}
-	
-	if ( READ_Fields( pclt_fields, pclt )            ||
-	     FILE_Read  ( pclt->TypeFace, 16 )           ||
-		 FILE_Read  ( pclt->CharacterComplement, 8 ) ||
-		 FILE_Read  ( pclt->FileName, 6 )            ||
-		 READ_Fields( pclt_fields2, pclt )           )
+    /* optional table */
+    error = face->goto_table( face, TTAG_PCLT, stream, 0 );
+    if ( error )
+    {
+      FT_TRACE2(( "missing (optional)\n" ));
+      pclt->Version = 0;
+      return TT_Err_Ok;
+    }
+    
+    if ( READ_Fields( pclt_fields, pclt )            ||
+         FILE_Read  ( pclt->TypeFace, 16 )           ||
+         FILE_Read  ( pclt->CharacterComplement, 8 ) ||
+         FILE_Read  ( pclt->FileName, 6 )            ||
+         READ_Fields( pclt_fields2, pclt )           )
       goto Exit;
-	
-	FT_TRACE2(( "loaded\n" ));
-  Exit:	
-	return error;
-  }						  
+    
+    FT_TRACE2(( "loaded\n" ));
 
+  Exit:    
+    return error;
+  }
+
+
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
@@ -1317,11 +1402,12 @@
     TT_GaspRange*  gaspranges;
 
 
-    FT_TRACE2(( "TT_Load_Gasp( %08p )\n", face ));
+    FT_TRACE2(( "TT_Load_Gasp: %08p\n", face ));
 
     /* the gasp table is optional */
     error = face->goto_table( face, TTAG_gasp, stream, 0 );
-    if (error) return TT_Err_Ok;
+    if ( error )
+      return TT_Err_Ok;
 
     if ( ACCESS_Frame( 4L ) )
       goto Exit;
@@ -1335,7 +1421,7 @@
     FT_TRACE3(( "number of ranges = %d\n", num_ranges ));
 
     if ( ALLOC_ARRAY( gaspranges, num_ranges, TT_GaspRange ) ||
-         ACCESS_Frame( num_ranges * 4L ) )
+         ACCESS_Frame( num_ranges * 4L )                     )
       goto Exit;
 
     face->gasp.gaspRanges = gaspranges;
@@ -1346,8 +1432,8 @@
       gaspranges[j].gaspFlag = GET_UShort();
 
       FT_TRACE3(( " [max:%d flag:%d]",
-                gaspranges[j].maxPPEM,
-                gaspranges[j].gaspFlag ));
+                    gaspranges[j].maxPPEM,
+                    gaspranges[j].gaspFlag ));
     }
     FT_TRACE3(( "\n" ));
 
@@ -1386,11 +1472,14 @@
 
     TT_UInt    n, num_tables, version;
 
-    /* the kern table is optional. exit silently if it's missing */
+
+    /* the kern table is optional. exit silently if it is missing */
     error = face->goto_table( face, TTAG_kern, stream, 0 );
-    if ( error ) return TT_Err_Ok;
+    if ( error )
+      return TT_Err_Ok;
 
-    if ( ACCESS_Frame( 4L ) ) goto Exit;
+    if ( ACCESS_Frame( 4L ) )
+      goto Exit;
 
     version    = GET_UShort();
     num_tables = GET_UShort();
@@ -1402,8 +1491,10 @@
       TT_UInt  coverage;
       TT_UInt  length;
 
-      if ( ACCESS_Frame( 6L ) ) goto Exit;
 
+      if ( ACCESS_Frame( 6L ) )
+        goto Exit;
+
       version  = GET_UShort();      /* version                 */
       length   = GET_UShort() - 6;  /* substract header length */
       coverage = GET_UShort();
@@ -1416,11 +1507,13 @@
         TT_Kern_0_Pair*  pair;
         TT_Kern_0_Pair*  limit;
 
-        /* found a horizontal format 0 kerning table ! */
-        if ( ACCESS_Frame(8L) )
+
+        /* found a horizontal format 0 kerning table! */
+        if ( ACCESS_Frame( 8L ) )
           goto Exit;
 
         num_pairs = GET_UShort();
+
         /* skip the rest */
 
         FORGET_Frame();
@@ -1482,10 +1575,11 @@
     TT_Error  error;
     FT_Memory memory = stream->memory;
 
-    TT_Hdmx*     hdmx = &face->hdmx;
-    TT_Long      num_glyphs;
-    TT_Long      record_size;
+    TT_Hdmx*  hdmx = &face->hdmx;
+    TT_Long   num_glyphs;
+    TT_Long   record_size;
 
+
     hdmx->version     = 0;
     hdmx->num_records = 0;
     hdmx->records     = 0;
@@ -1492,9 +1586,11 @@
 
     /* this table is optional */
     error = face->goto_table( face, TTAG_hdmx, stream, 0 );
-    if (error) return TT_Err_Ok;
+    if ( error )
+      return TT_Err_Ok;
 
-    if ( ACCESS_Frame( 8L ) ) goto Exit;
+    if ( ACCESS_Frame( 8L ) )
+      goto Exit;
 
     hdmx->version     = GET_UShort();
     hdmx->num_records = GET_Short();
@@ -1516,6 +1612,7 @@
       TT_HdmxRec*  cur   = hdmx->records;
       TT_HdmxRec*  limit = cur + hdmx->num_records;
 
+
       for ( ; cur < limit; cur++ )
       {
         /* read record */
@@ -1523,12 +1620,12 @@
              READ_Byte( cur->max_width ) )
           goto Exit;
 
-        if ( ALLOC( cur->widths, num_glyphs )  ||
+        if ( ALLOC( cur->widths, num_glyphs )     ||
              FILE_Read( cur->widths, num_glyphs ) )
           goto Exit;
 
         /* skip padding bytes */
-        if ( record_size > 0 && FILE_Skip(record_size) )
+        if ( record_size > 0 && FILE_Skip( record_size ) )
             goto Exit;
       }
     }
@@ -1556,6 +1653,7 @@
     {
       TT_Int     n;
       FT_Memory  memory = face->root.driver->memory;
+
 
       for ( n = 0; n < face->hdmx.num_records; n++ )
         FREE( face->hdmx.records[n].widths );
--- a/src/sfnt/ttload.h
+++ b/src/sfnt/ttload.h
@@ -5,11 +5,11 @@
 /*    Load the basic TrueType tables, i.e., tables that can be either in   */
 /*    TTF or OTF font (specification).                                     */
 /*                                                                         */
-/*  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        */
-/*  modified and distributed under the terms of the FreeType project       */
+/*  This file is part of the FreeType project, and may only be used,       */
+/*  modified, and distributed under the terms of the FreeType project      */
 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
 /*  this file you indicate that you have read the license and              */
 /*  understand and accept it fully.                                        */
@@ -23,9 +23,10 @@
 
 #include <freetype/internal/ftstream.h>
 #include <freetype/internal/tttypes.h>
-/*
+
+#if 0
 #include <ttobjs.h>
-*/
+#endif
 
 #ifdef __cplusplus
   extern "C" {
@@ -37,17 +38,17 @@
                               TT_ULong  tag );
 
   LOCAL_DEF
-  TT_Error   TT_Goto_Table( TT_Face    face,
-                            TT_ULong   tag,
-                            FT_Stream  stream,
-                            TT_ULong  *length );
+  TT_Error  TT_Goto_Table( TT_Face    face,
+                           TT_ULong   tag,
+                           FT_Stream  stream,
+                           TT_ULong*  length );
 
 
   LOCAL_DEF
-  TT_Error   TT_Load_SFNT_Header( TT_Face       face,
-                                  FT_Stream     stream,
-                                  TT_Long       face_index,
-                                  SFNT_Header*  sfnt );
+  TT_Error  TT_Load_SFNT_Header( TT_Face       face,
+                                 FT_Stream     stream,
+                                 TT_Long       face_index,
+                                 SFNT_Header*  sfnt );
   LOCAL_DEF
   TT_Error  TT_Load_Directory( TT_Face       face,
                                FT_Stream     stream,