shithub: freetype+ttf2subf

Download patch

ref: 5893c1bb2a9e682ac39107cdce8c7d413c4fe0f9
parent: 573a98d04818dad7625d74b632574a037c48883f
author: David Turner <[email protected]>
date: Thu Oct 18 07:49:26 EDT 2001

add support for new postscript hinter

git/fs: mount .git/fs: mount/attach disallowed
--- a/include/freetype/config/ftmodule.h
+++ b/include/freetype/config/ftmodule.h
@@ -4,6 +4,7 @@
 FT_USE_MODULE(pcf_driver_class)
 FT_USE_MODULE(psaux_module_class)
 FT_USE_MODULE(psnames_module_class)
+FT_USE_MODULE(pshinter_module_class)
 FT_USE_MODULE(ft_raster1_renderer_class)
 FT_USE_MODULE(sfnt_module_class)
 FT_USE_MODULE(ft_smooth_renderer_class)
@@ -10,3 +11,4 @@
 FT_USE_MODULE(tt_driver_class)
 FT_USE_MODULE(t1_driver_class)
 FT_USE_MODULE(winfnt_driver_class)
+
--- a/include/freetype/internal/ftobjs.h
+++ b/include/freetype/internal/ftobjs.h
@@ -171,6 +171,8 @@
   /*    glyph_delta       :: The 2d translation vector corresponding to    */
   /*                         the glyph transformation, if necessary.       */
   /*                                                                       */
+  /*    glyph_hints       :: format-specific glyph hints management        */
+  /*                                                                       */
   typedef struct FT_Slot_InternalRec_
   {
     FT_GlyphLoader*   loader;
@@ -177,7 +179,8 @@
     FT_Bool           glyph_transformed;
     FT_Matrix         glyph_matrix;
     FT_Vector         glyph_delta;
-
+    void*             glyph_hints;
+  
   } FT_GlyphSlot_InternalRec;
 
 
--- a/include/freetype/internal/internal.h
+++ b/include/freetype/internal/internal.h
@@ -40,8 +40,10 @@
 #define FT_INTERNAL_CFF_TYPES_H         <freetype/internal/cfftypes.h>
 #define FT_INTERNAL_FNT_TYPES_H         <freetype/internal/fnttypes.h>
 
-#define FT_INTERNAL_POSTSCRIPT_NAMES_H  <freetype/internal/psnames.h>
-#define FT_INTERNAL_POSTSCRIPT_AUX_H    <freetype/internal/psaux.h>
+#define FT_INTERNAL_POSTSCRIPT_NAMES_H   <freetype/internal/psnames.h>
+#define FT_INTERNAL_POSTSCRIPT_AUX_H     <freetype/internal/psaux.h>
+#define FT_INTERNAL_POSTSCRIPT_HINTS_H   <freetype/internal/pshints.h>
+#define FT_INTERNAL_POSTSCRIPT_GLOBALS_H <freetype/internal/psglobal.h>
 
 #define FT_INTERNAL_AUTOHINT_H          <freetype/internal/autohint.h>
 
--- a/include/freetype/internal/psaux.h
+++ b/include/freetype/internal/psaux.h
@@ -426,19 +426,11 @@
 
   typedef struct  T1_Builder_Funcs_
   {
-<<<<<<< psaux.h
-    void
-    (*init)( T1_Builder*   builder,
-             FT_Face       face,
-             FT_Size       size,
-             FT_GlyphSlot  slot );
-=======
     void      (*init)( T1_Builder*   builder,
                        FT_Face       face,
                        FT_Size       size,
                        FT_GlyphSlot  slot,
                        FT_Bool       hinting );
->>>>>>> 1.14.2.2
 
     void
     (*done)( T1_Builder*   builder );
--- a/include/freetype/internal/t1types.h
+++ b/include/freetype/internal/t1types.h
@@ -24,8 +24,8 @@
 #include<ft2build.h>
 #include FT_TYPE1_TABLES_H
 #include FT_INTERNAL_POSTSCRIPT_NAMES_H
+#include FT_INTERNAL_POSTSCRIPT_HINTS_H
 
-
 FT_BEGIN_HEADER
 
 
@@ -172,6 +172,9 @@
 
     /* support for Multiple Masters fonts */
     T1_Blend*      blend;
+    
+    /* since FT 2.1 - interface to Postscript hinter */
+    void*          pshinter;
 
   } T1_FaceRec;
 
--- a/src/Jamfile
+++ b/src/Jamfile
@@ -14,6 +14,7 @@
 #
 HDRMACRO  [ FT2_SubDir  include internal internal.h ] ;
 
+SubInclude  FT2_TOP src pshinter ;
 SubInclude  FT2_TOP src autohint ;
 SubInclude  FT2_TOP src base ;
 SubInclude  FT2_TOP src cache ;
--- a/src/psaux/psobjs.c
+++ b/src/psaux/psobjs.c
@@ -101,7 +101,7 @@
 
   static FT_Error
   reallocate_t1_table( PS_Table*  table,
-                       FT_Long    new_size )
+                       FT_Int     new_size )
   {
     FT_Memory  memory   = table->memory;
     FT_Byte*   old_base = table->block;
@@ -1071,7 +1071,8 @@
   T1_Builder_Init( T1_Builder*   builder,
                    FT_Face       face,
                    FT_Size       size,
-                   FT_GlyphSlot  glyph )
+                   FT_GlyphSlot  glyph,
+                   FT_Bool       hinting )
   {
     builder->path_begun  = 0;
     builder->load_points = 1;
@@ -1085,10 +1086,16 @@
       FT_GlyphLoader*  loader = glyph->internal->loader;
 
 
-      builder->loader  = loader;
-      builder->base    = &loader->base.outline;
-      builder->current = &loader->current.outline;
+      builder->loader     = loader;
+      builder->base       = &loader->base.outline;
+      builder->current    = &loader->current.outline;
       FT_GlyphLoader_Rewind( loader );
+
+      builder->hints_globals = size->internal;
+      builder->hints_funcs   = 0;
+            
+      if (hinting)
+        builder->hints_funcs = glyph->internal->glyph_hints;
     }
 
     if ( size )
--- a/src/psaux/psobjs.h
+++ b/src/psaux/psobjs.h
@@ -147,7 +147,8 @@
   T1_Builder_Init( T1_Builder*   builder,
                    FT_Face       face,
                    FT_Size       size,
-                   FT_GlyphSlot  glyph );
+                   FT_GlyphSlot  glyph,
+                   FT_Bool       hinting );
 
   FT_LOCAL void
   T1_Builder_Done( T1_Builder*  builder );
@@ -175,7 +176,6 @@
   T1_Builder_Start_Point( T1_Builder*  builder,
                           FT_Pos       x,
                           FT_Pos       y );
-
 
   FT_LOCAL void
   T1_Builder_Close_Contour( T1_Builder*  builder );
--- a/src/psaux/t1decode.c
+++ b/src/psaux/t1decode.c
@@ -18,6 +18,7 @@
 
 #include <ft2build.h>
 #include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_POSTSCRIPT_HINTS_H
 #include FT_OUTLINE_H
 
 #include "t1decode.h"
@@ -140,7 +141,7 @@
       FT_String*  name = (FT_String*)decoder->glyph_names[n];
 
 
-      if ( name && strcmp( name,glyph_name ) == 0 )
+      if ( name && name[0] == glyph_name[0] && strcmp( name,glyph_name ) == 0 )
         return n;
     }
 
@@ -244,6 +245,7 @@
       glyph->format        = ft_glyph_format_composite;
 
       loader->current.num_subglyphs = 2;
+      goto Exit;
     }
 
     /* First load `bchar' in builder */
@@ -266,6 +268,9 @@
     decoder->builder.left_bearing.x = 0;
     decoder->builder.left_bearing.y = 0;
 
+    decoder->builder.pos_x = adx - asb;
+    decoder->builder.pos_y = ady;
+
     /* Now load `achar' on top of */
     /* the base outline           */
     error = T1_Decoder_Parse_Glyph( decoder, achar_index );
@@ -278,17 +283,22 @@
     decoder->builder.left_bearing = left_bearing;
     decoder->builder.advance      = advance;
 
+    /* XXX: old code doesn't work with postscript hinter */
+#if 0    
     /* Finally, move the accent */
     if ( decoder->builder.load_points )
     {
       FT_Outline  dummy;
 
-
       dummy.n_points = (short)( base->n_points - n_base_points );
       dummy.points   = base->points + n_base_points;
 
       FT_Outline_Translate( &dummy, adx - asb, ady );
     }
+#else    
+    decoder->builder.pos_x = 0;
+    decoder->builder.pos_y = 0;
+#endif
 
   Exit:
     return error;
@@ -323,8 +333,9 @@
     FT_Byte*          ip;
     FT_Byte*          limit;
     T1_Builder*       builder = &decoder->builder;
-    FT_Pos            x, y;
+    FT_Pos            x, y, orig_x, orig_y;
 
+    T1_Hints_Funcs    hinter;
 
     /* we don't want to touch the source code -- use macro trick */
 #define start_point    T1_Builder_Start_Point
@@ -341,6 +352,8 @@
 
     builder->path_begun  = 0;
 
+    hinter = (T1_Hints_Funcs) builder->hints_funcs;
+
     zone->base           = charstring_base;
     limit = zone->limit  = charstring_base + charstring_len;
     ip    = zone->cursor = zone->base;
@@ -347,9 +360,13 @@
 
     error = PSaux_Err_Ok;
 
-    x = builder->pos_x;
-    y = builder->pos_y;
+    x = orig_x = builder->pos_x;
+    y = orig_y = builder->pos_y;
 
+    /* begin hints recording session, if any */
+    if ( hinter )
+      hinter->open( hinter->hints );
+
     /* now, execute loop */
     while ( ip < limit )
     {
@@ -613,6 +630,10 @@
             goto Syntax_Error;
           }
           ip += 2;
+          
+          if ( hinter )
+            hinter->reset( hinter->hints, builder->current->n_points );
+            
           break;
 
         case 12:
@@ -707,7 +728,19 @@
           FT_TRACE4(( " endchar" ));
 
           close_contour( builder );
-
+          
+          /* close hints recording session */
+          if ( hinter )
+          {
+            if (hinter->close( hinter->hints, builder->current->n_points ))
+              goto Syntax_Error;
+            
+            /* apply hints to the loaded glyph outline now */
+            hinter->apply( hinter->hints,
+                           builder->current,
+                           (PSH_Globals) builder->hints_globals );
+          }
+          
           /* add current outline to the glyph slot */
           FT_GlyphLoader_Add( builder->loader );
 
@@ -722,8 +755,8 @@
           builder->advance.x       = top[1];
           builder->advance.y       = 0;
 
-          builder->last.x = x = top[0];
-          builder->last.y = y = 0;
+          orig_x = builder->last.x = x = builder->pos_x + top[0];
+          orig_y = builder->last.y = y = builder->pos_y;
 
           /* the `metrics_only' indicates that we only want to compute */
           /* the glyph's metrics (lsb + advance width), not load the   */
@@ -746,8 +779,8 @@
           builder->advance.x       = top[2];
           builder->advance.y       = top[3];
 
-          builder->last.x = x = top[0];
-          builder->last.y = y = top[1];
+          builder->last.x = x = builder->pos_x + top[0];
+          builder->last.y = y = builder->pos_y + top[1];
 
           /* the `metrics_only' indicates that we only want to compute */
           /* the glyph's metrics (lsb + advance width), not load the   */
@@ -973,6 +1006,13 @@
 
         case op_hstem:
           FT_TRACE4(( " hstem" ));
+          
+          /* record horizontal hint */
+          if ( hinter )
+          {
+            /* top[0] += builder->left_bearing.y; */
+            hinter->stem( hinter->hints, 0, top );
+          }
 
           break;
 
@@ -979,16 +1019,37 @@
         case op_hstem3:
           FT_TRACE4(( " hstem3" ));
 
+          /* record horizontal counter-controlled hints */
+          if ( hinter )
+            hinter->stem3( hinter->hints, 0, top );
+                           
           break;
 
         case op_vstem:
           FT_TRACE4(( " vstem" ));
 
+          /* record vertical  hint */
+          if ( hinter )
+          {
+            top[0] += orig_x;
+            hinter->stem( hinter->hints, 1, top );
+          }
+
           break;
 
         case op_vstem3:
           FT_TRACE4(( " vstem3" ));
 
+          /* record vertical counter-controlled hints */
+          if ( hinter )
+          {
+            FT_Pos  dx = orig_x;
+            
+            top[0] += dx;
+            top[2] += dx;
+            top[4] += dx;
+            hinter->stem3( hinter->hints, 1, top );
+          }
           break;
 
         case op_setcurrentpoint:
@@ -1011,6 +1072,7 @@
     } /* while ip < limit */
 
     FT_TRACE4(( "..end..\n\n" ));
+
     return error;
 
   Syntax_Error:
@@ -1024,6 +1086,7 @@
   }
 
 
+ /* parse a single Type 1 glyph */
   FT_LOCAL_DEF FT_Error
   T1_Decoder_Parse_Glyph( T1_Decoder*  decoder,
                           FT_UInt      glyph )
@@ -1032,6 +1095,7 @@
   }
 
 
+ /* initialise T1 decoder */
   FT_LOCAL_DEF FT_Error
   T1_Decoder_Init( T1_Decoder*          decoder,
                    FT_Face              face,
@@ -1039,6 +1103,7 @@
                    FT_GlyphSlot         slot,
                    FT_Byte**            glyph_names,
                    T1_Blend*            blend,
+                   FT_Bool              hinting,
                    T1_Decoder_Callback  parse_callback )
   {
     MEM_Set( decoder, 0, sizeof ( *decoder ) );
@@ -1059,7 +1124,7 @@
 
       decoder->psnames = psnames;
     }
-    T1_Builder_Init( &decoder->builder, face, size, slot );
+    T1_Builder_Init( &decoder->builder, face, size, slot, hinting );
 
     decoder->num_glyphs     = face->num_glyphs;
     decoder->glyph_names    = glyph_names;
@@ -1072,6 +1137,7 @@
   }
 
 
+ /* finalize T1 decoder */
   FT_LOCAL_DEF void
   T1_Decoder_Done( T1_Decoder*  decoder )
   {
--- a/src/psaux/t1decode.h
+++ b/src/psaux/t1decode.h
@@ -49,6 +49,7 @@
                    FT_GlyphSlot         slot,
                    FT_Byte**            glyph_names,
                    T1_Blend*            blend,
+                   FT_Bool              hinting,
                    T1_Decoder_Callback  parse_glyph );
 
   FT_LOCAL void
--- a/src/type1/t1driver.c
+++ b/src/type1/t1driver.c
@@ -331,7 +331,10 @@
   const FT_Driver_Class  t1_driver_class =
   {
     {
-      ft_module_font_driver | ft_module_driver_scalable,
+      ft_module_font_driver      |
+      ft_module_driver_scalable  | 
+      ft_module_driver_has_hinter,
+      
       sizeof( FT_DriverRec ),
 
       "type1",
@@ -340,8 +343,8 @@
 
       0,   /* format interface */
 
-      (FT_Module_Constructor)T1_Init_Driver,
-      (FT_Module_Destructor) T1_Done_Driver,
+      (FT_Module_Constructor)T1_Driver_Init,
+      (FT_Module_Destructor) T1_Driver_Done,
       (FT_Module_Requester)  Get_Interface,
     },
 
@@ -349,15 +352,15 @@
     sizeof( T1_SizeRec ),
     sizeof( T1_GlyphSlotRec ),
 
-    (FTDriver_initFace)     T1_Init_Face,
-    (FTDriver_doneFace)     T1_Done_Face,
-    (FTDriver_initSize)     0,
-    (FTDriver_doneSize)     0,
-    (FTDriver_initGlyphSlot)0,
-    (FTDriver_doneGlyphSlot)0,
+    (FTDriver_initFace)     T1_Face_Init,
+    (FTDriver_doneFace)     T1_Face_Done,
+    (FTDriver_initSize)     T1_Size_Init,
+    (FTDriver_doneSize)     T1_Size_Done,
+    (FTDriver_initGlyphSlot)T1_GlyphSlot_Init,
+    (FTDriver_doneGlyphSlot)T1_GlyphSlot_Done,
 
-    (FTDriver_setCharSizes) 0,
-    (FTDriver_setPixelSizes)0,
+    (FTDriver_setCharSizes) T1_Size_Reset,
+    (FTDriver_setPixelSizes)T1_Size_Reset,
     (FTDriver_loadGlyph)    T1_Load_Glyph,
     (FTDriver_getCharIndex) Get_Char_Index,
 
--- a/src/type1/t1gload.c
+++ b/src/type1/t1gload.c
@@ -93,6 +93,7 @@
                                            0, /* glyph slot */
                                            (FT_Byte**)type1->glyph_names,
                                            face->blend,
+                                           0,
                                            T1_Parse_Glyph );
     if ( error )
       return error;
@@ -172,6 +173,7 @@
                                  (FT_GlyphSlot)glyph,
                                  (FT_Byte**)type1->glyph_names,
                                  face->blend,
+                                 FT_BOOL(hinting),
                                  T1_Parse_Glyph );
     if ( error )
       goto Exit;
@@ -239,21 +241,16 @@
         if ( size && size->root.metrics.y_ppem < 24 )
           glyph->root.outline.flags |= ft_outline_high_precision;
 
-        /* apply the font matrix */
+/* XXXX: the following needs serious work to work properly with hinting !! */
+#if 0
+        /* apply the font matrix, if any.. */
         FT_Outline_Transform( &glyph->root.outline, &font_matrix );
 
         FT_Outline_Translate( &glyph->root.outline,
                               font_offset.x,
                               font_offset.y );
+#endif
 
-#if 0
-
-        glyph->root.outline.second_pass    = TRUE;
-        glyph->root.outline.high_precision = size->root.metrics.y_ppem < 24;
-        glyph->root.outline.dropout_mode   = 2;
-
-#endif /* 0 */
-
         if ( ( load_flags & FT_LOAD_NO_SCALE ) == 0 )
         {
           /* scale the outline and the metrics */
@@ -264,12 +261,13 @@
           FT_Fixed     y_scale = glyph->y_scale;
 
 
-          /* First of all, scale the points */
-          for ( n = cur->n_points; n > 0; n--, vec++ )
-          {
-            vec->x = FT_MulFix( vec->x, x_scale );
-            vec->y = FT_MulFix( vec->y, y_scale );
-          }
+          /* First of all, scale the points, fi we're not hinting */
+          if ( !hinting )
+            for ( n = cur->n_points; n > 0; n--, vec++ )
+            {
+              vec->x = FT_MulFix( vec->x, x_scale );
+              vec->y = FT_MulFix( vec->y, y_scale );
+            }
 
           FT_Outline_Get_CBox( &glyph->root.outline, &cbox );
 
--- a/src/type1/t1objs.c
+++ b/src/type1/t1objs.c
@@ -47,6 +47,121 @@
 
   /*************************************************************************/
   /*                                                                       */
+  /*                            SIZE  FUNCTIONS                            */
+  /*                                                                       */
+  /*  note that we store the global hints in the size's "internal" root    */
+  /*  field..                                                              */
+  /*                                                                       */
+  /*************************************************************************/
+
+  static PSH_Globals_Funcs
+  T1_Size_Get_Globals_Funcs( T1_Size  size )
+  {
+    T1_Face              face     = (T1_Face) size->root.face;
+    PSHinter_Interface*  pshinter = face->pshinter;
+    FT_Module            module;
+    
+    module = FT_Get_Module( size->root.face->driver->root.library, "pshinter" );
+    return ( module && pshinter && pshinter->get_globals_funcs )
+           ? pshinter->get_globals_funcs( module )
+           : 0 ;
+  }
+
+
+  FT_LOCAL_DEF
+  void T1_Size_Done( T1_Size   size )
+  {
+    if ( size->root.internal )
+    {
+      PSH_Globals_Funcs    funcs;
+    
+      funcs = T1_Size_Get_Globals_Funcs(size);
+      if (funcs)
+        funcs->destroy( (PSH_Globals) size->root.internal );
+
+      size->root.internal = 0;
+    }
+  }
+
+
+
+  FT_LOCAL_DEF
+  FT_Error  T1_Size_Init( T1_Size  size )
+  {
+    FT_Error           error = 0;
+    PSH_Globals_Funcs  funcs = T1_Size_Get_Globals_Funcs( size );
+    
+    if ( funcs )
+    {
+      PSH_Globals    globals;
+      T1_Face        face = (T1_Face) size->root.face;
+      
+      error = funcs->create( size->root.face->memory, 
+                             &face->type1.private_dict, &globals );
+      if (!error)
+        size->root.internal = (FT_Size_Internal)(void*) globals;
+    }
+    
+    return error;
+  }
+
+
+
+  FT_LOCAL_DEF
+  FT_Error  T1_Size_Reset( T1_Size  size )
+  {
+    PSH_Globals_Funcs  funcs = T1_Size_Get_Globals_Funcs(size);
+    FT_Error           error = 0;
+    
+    if (funcs)
+      error = funcs->set_scale( (PSH_Globals) size->root.internal,
+                                 size->root.metrics.x_scale,
+                                 size->root.metrics.y_scale,
+                                 0, 0 );
+    return error;                                
+  }
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*                            SLOT  FUNCTIONS                            */
+  /*                                                                       */
+  /*************************************************************************/
+
+  FT_LOCAL_DEF void
+  T1_GlyphSlot_Done( T1_GlyphSlot  slot )
+  {
+    slot->root.internal->glyph_hints = 0;
+  }
+
+
+  FT_LOCAL_DEF FT_Error
+  T1_GlyphSlot_Init( T1_GlyphSlot   slot )
+  {  
+    T1_Face              face;
+    PSHinter_Interface*  pshinter;
+    
+    face     = (T1_Face) slot->root.face;
+    pshinter = face->pshinter;
+    if (pshinter)
+    {
+      FT_Module  module;
+      
+      module = FT_Get_Module( slot->root.face->driver->root.library, "pshinter" );
+      if (module)
+      {
+        T1_Hints_Funcs  funcs;
+        
+        funcs = pshinter->get_t1_funcs( module );
+        slot->root.internal->glyph_hints = (void*)funcs;
+      }
+    }
+    return 0;
+  }
+  
+  
+  /*************************************************************************/
+  /*                                                                       */
   /*                            FACE  FUNCTIONS                            */
   /*                                                                       */
   /*************************************************************************/
@@ -55,7 +170,7 @@
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
-  /*    T1_Done_Face                                                       */
+  /*    T1_Face_Done                                                       */
   /*                                                                       */
   /* <Description>                                                         */
   /*    The face object destructor.                                        */
@@ -63,8 +178,8 @@
   /* <Input>                                                               */
   /*    face :: A typeless pointer to the face object to destroy.          */
   /*                                                                       */
-  FT_LOCAL_DEF void
-  T1_Done_Face( T1_Face  face )
+  FT_LOCAL_DEF
+  void  T1_Face_Done( T1_Face  face )
   {
     FT_Memory  memory;
     T1_Font*   type1 = &face->type1;
@@ -124,10 +239,11 @@
   }
 
 
+
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
-  /*    T1_Init_Face                                                       */
+  /*    T1_Face_Init                                                       */
   /*                                                                       */
   /* <Description>                                                         */
   /*    The face object constructor.                                       */
@@ -148,15 +264,16 @@
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
   FT_LOCAL_DEF FT_Error
-  T1_Init_Face( FT_Stream      stream,
+  T1_Face_Init( FT_Stream      stream,
                 T1_Face        face,
                 FT_Int         face_index,
                 FT_Int         num_params,
                 FT_Parameter*  params )
   {
-    FT_Error            error;
-    PSNames_Interface*  psnames;
-    PSAux_Interface*    psaux;
+    FT_Error             error;
+    PSNames_Interface*   psnames;
+    PSAux_Interface*     psaux;
+    PSHinter_Interface*  pshinter;
 
     FT_UNUSED( num_params );
     FT_UNUSED( params );
@@ -183,7 +300,16 @@
 
       face->psaux = psaux;
     }
+    
+    pshinter = (PSHinter_Interface*)face->pshinter;
+    if ( !pshinter )
+    {
+      pshinter = (PSHinter_Interface*)
+                 FT_Get_Module_Interface( FT_FACE_LIBRARY( face ), "pshinter" );
 
+      face->pshinter = pshinter;
+    }
+
     /* open the tokenizer, this will also check the font format */
     error = T1_Open_Face( face );
     if ( error )
@@ -196,7 +322,7 @@
     /* check the face index */
     if ( face_index != 0 )
     {
-      FT_ERROR(( "T1_Init_Face: invalid face index\n" ));
+      FT_ERROR(( "T1_Face_Init: invalid face index\n" ));
       error = T1_Err_Invalid_Argument;
       goto Exit;
     }
@@ -375,7 +501,7 @@
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
-  /*    T1_Init_Driver                                                     */
+  /*    T1_Driver_Init                                                     */
   /*                                                                       */
   /* <Description>                                                         */
   /*    Initializes a given Type 1 driver object.                          */
@@ -387,7 +513,7 @@
   /*    FreeType error code.  0 means success.                             */
   /*                                                                       */
   FT_LOCAL_DEF FT_Error
-  T1_Init_Driver( T1_Driver  driver )
+  T1_Driver_Init( T1_Driver  driver )
   {
     FT_UNUSED( driver );
 
@@ -398,7 +524,7 @@
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
-  /*    T1_Done_Driver                                                     */
+  /*    T1_Driver_Done                                                     */
   /*                                                                       */
   /* <Description>                                                         */
   /*    Finalizes a given Type 1 driver.                                   */
@@ -407,7 +533,7 @@
   /*    driver  :: A handle to the target Type 1 driver.                   */
   /*                                                                       */
   FT_LOCAL_DEF void
-  T1_Done_Driver( T1_Driver  driver )
+  T1_Driver_Done( T1_Driver  driver )
   {
     FT_UNUSED( driver );
   }
--- a/src/type1/t1objs.h
+++ b/src/type1/t1objs.h
@@ -100,15 +100,20 @@
   /*                                                                       */
   typedef struct  T1_SizeRec_
   {
-    FT_SizeRec      root;
-    FT_Bool         valid;
-    T1_Size_Hints*  hints;  /* defined in the hinter. This allows */
-                            /* us to experiment with different    */
-                            /* hinting schemes without having to  */
-                            /* change `t1objs' each time.         */
+    FT_SizeRec  root;
+
   } T1_SizeRec;
 
 
+  FT_LOCAL
+  void T1_Size_Done( T1_Size   size );
+
+  FT_LOCAL
+  FT_Error  T1_Size_Reset( T1_Size  size );
+
+  FT_LOCAL
+  FT_Error  T1_Size_Init( T1_Size  size );
+
   /*************************************************************************/
   /*                                                                       */
   /* <Type>                                                                */
@@ -130,13 +135,11 @@
     FT_Fixed         x_scale;
     FT_Fixed         y_scale;
 
-    T1_Glyph_Hints*  hints;  /* defined in the hinter */
-
   } T1_GlyphSlotRec;
 
 
   FT_LOCAL FT_Error
-  T1_Init_Face( FT_Stream      stream,
+  T1_Face_Init( FT_Stream      stream,
                 T1_Face        face,
                 FT_Int         face_index,
                 FT_Int         num_params,
@@ -143,13 +146,25 @@
                 FT_Parameter*  params );
 
   FT_LOCAL void
-  T1_Done_Face( T1_Face  face );
+  T1_Face_Done( T1_Face  face );
 
   FT_LOCAL FT_Error
-  T1_Init_Driver( T1_Driver  driver );
+  T1_Size_Init( T1_Size  size );
+  
+  FT_LOCAL void
+  T1_Size_Done( T1_Size  size );
 
+  FT_LOCAL FT_Error
+  T1_GlyphSlot_Init( T1_GlyphSlot  slot );
+  
   FT_LOCAL void
-  T1_Done_Driver( T1_Driver  driver );
+  T1_GlyphSlot_Done( T1_GlyphSlot  slot );
+
+  FT_LOCAL FT_Error
+  T1_Driver_Init( T1_Driver  driver );
+
+  FT_LOCAL void
+  T1_Driver_Done( T1_Driver  driver );
 
 
 FT_END_HEADER