* docs/CHANGES: Updated.

* include/freetype/internal/ftdebug.h: Include FT_FREETYPE_H.


Provide a simple API to control FreeType's tracing levels.

* include/freetype/internal/ftdebug.h (FT_Trace_Get_Count,
FT_Trace_Get_Name): New declarations.

* src/base/ftdebug.c (FT_Trace_Get_Count, FT_Trace_Get_Name): New
functions.
diff --git a/ChangeLog b/ChangeLog
index d3fe975..cb47d95 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,25 @@
+2004-02-23  Werner Lemberg  <wl@gnu.org>
+
+	* docs/CHANGES: Updated.
+
+	* include/freetype/internal/ftdebug.h: Include FT_FREETYPE_H.
+
+2004-02-23  Masatake YAMATO  <jet@gyve.org>
+
+	Provide a simple API to control FreeType's tracing levels.
+
+	* include/freetype/internal/ftdebug.h (FT_Trace_Get_Count,
+	FT_Trace_Get_Name): New declarations.
+
+	* src/base/ftdebug.c (FT_Trace_Get_Count, FT_Trace_Get_Name): New
+	functions.
+
 2004-02-23  David Turner  <david@freetype.org>
 
-        * src/autofit/afhints.c, src/autofit/afhints.h, src/autofit/aflatin.c,
-        src/autofit/afloader.c, src/types.h: grave bugs were fixed. The
-        auto-fitter works, doesn't crashes, but still produces unexpected
-        results !!
+	* src/autofit/afhints.c, src/autofit/afhints.h,
+	src/autofit/aflatin.c, src/autofit/afloader.c, src/types.h: Grave
+	bugs have been fixed.  The auto-fitter works, doesn't crash, but
+	still produces unexpected results...
 
 2004-02-21  Werner Lemberg  <wl@gnu.org>
 
diff --git a/docs/CHANGES b/docs/CHANGES
index 86a227e..3353442 100644
--- a/docs/CHANGES
+++ b/docs/CHANGES
@@ -6,13 +6,15 @@
     - The native  TrueType hinter contained some  bugs which prevented
       some fonts to be rendered correctly, most notably Legendum.otf.
 
+    - The PostScript hinter now produces much improved results.
+
     - The  linear advance  width  and height  values were  incorrectly
       rounded,  making  them virtually  unusable  if  not loaded  with
       FT_LOAD_LINEAR_DESIGN.
 
     - Indexing CID-keyed CFF fonts is  now working: The glyph index is
       correctly  treated as a  CID, similar  to FreeType's  CID driver
-      module.  Note that CID CMaps support is still missing.
+      module.  Note that CID CMap support is still missing.
 
     - The FT_FACE_FLAGS_GLYPH_NAMES is now  set correctly for all font
       formats.
@@ -32,8 +34,8 @@
 
     - The flex operator didn't work for CFF fonts.
 
-    - PS glyphs which use the `hintmask' operator haven't been rendered
-      correctly in some cases.
+    - PS glyphs  which  use  the   `hintmask'  operator  haven't  been
+      rendered correctly in some cases.
 
     - Metrics for BDF and PCF bitmap font formats have been fixed.
 
@@ -57,6 +59,10 @@
       in  file-based   fonts,  it  can   happen  in  document-embedded
       resources of PostScript documents.
 
+    - A simple  API is  now available  to control  FreeType's  tracing
+      mechanism if compiled  with FT_DEBUG_LEVEL_TRACE.   See the file
+      `ftdebug.h' for more details.
+
     - The cache sub-system has been rewritten.
 
       - There is now support for deinstallation of faces.
diff --git a/include/freetype/internal/ftdebug.h b/include/freetype/internal/ftdebug.h
index 129c91f..850eb56 100644
--- a/include/freetype/internal/ftdebug.h
+++ b/include/freetype/internal/ftdebug.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    Debugging and logging component (specification).                     */
 /*                                                                         */
-/*  Copyright 1996-2001, 2002 by                                           */
+/*  Copyright 1996-2001, 2002, 2004 by                                     */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -27,6 +27,7 @@
 
 #include <ft2build.h>
 #include FT_CONFIG_CONFIG_H
+#include FT_FREETYPE_H
 
 
 FT_BEGIN_HEADER
@@ -98,6 +99,53 @@
 
   /*************************************************************************/
   /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Trace_Get_Count                                                 */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Return the number of available trace components.                   */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The number of trace components.  0 if FreeType 2 is not built with */
+  /*    FT_DEBUG_LEVEL_TRACE definition.                                   */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    This function may be useful if you want to access elements of      */
+  /*    the internal `ft_trace_levels' array by an index.                  */
+  /*                                                                       */
+  FT_EXPORT( FT_Int )
+  FT_Trace_Get_Count( void );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Trace_Get_Name                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    Return the name of a trace component.                              */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    The index of the trace component.                                  */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    The name of the trace component.  This is a statically allocated   */
+  /*    C string, so do not free it after use.  NULL if FreeType 2 is not  */
+  /*    built with FT_DEBUG_LEVEL_TRACE definition.                        */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    Use @FT_Trace_Get_Count to get the number of available trace       */
+  /*    components.                                                        */
+  /*                                                                       */
+  /*    This function may be useful if you want to control FreeType 2's    */
+  /*    debug level in your appliaciton.                                   */
+  /*                                                                       */
+  FT_EXPORT( const char * )
+  FT_Trace_Get_Name( FT_Int  index );
+
+
+  /*************************************************************************/
+  /*                                                                       */
   /* You need two opening resp. closing parentheses!                       */
   /*                                                                       */
   /* Example: FT_TRACE0(( "Value is %i", foo ))                            */
diff --git a/src/base/ftdebug.c b/src/base/ftdebug.c
index 48a2143..d8ccd80 100644
--- a/src/base/ftdebug.c
+++ b/src/base/ftdebug.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    Debugging and logging component (body).                              */
 /*                                                                         */
-/*  Copyright 1996-2001 by                                                 */
+/*  Copyright 1996-2001, 2002, 2004 by                                     */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -82,8 +82,9 @@
   /* array of trace levels, initialized to 0 */
   int  ft_trace_levels[trace_count];
 
+
   /* define array of trace toggle names */
-#define FT_TRACE_DEF(x)  #x ,
+#define FT_TRACE_DEF( x )  #x ,
 
   static const char*  ft_trace_toggles[trace_count + 1] =
   {
@@ -94,19 +95,43 @@
 #undef FT_TRACE_DEF
 
 
+  /* documentation is in ftdebug.h */
+
+  FT_EXPORT_DEF( FT_Int )
+  FT_Trace_Get_Count( void )
+  {
+    return trace_count;
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_EXPORT_DEF( const char * )
+  FT_Trace_Get_Name( FT_Int  index )
+  {
+    int  max = FT_Trace_Get_Count();
+
+
+    if ( index < max )
+      return ft_trace_toggles[index];
+    else
+      return NULL;
+  }
+
+
   /*************************************************************************/
   /*                                                                       */
   /* Initialize the tracing sub-system.  This is done by retrieving the    */
-  /* value of the "FT2_DEBUG" environment variable.  It must be a list of  */
-  /* toggles, separated by spaces, `;' or `,'.  Example:                   */
+  /* value of the `FT2_DEBUG' environment variable.  It must be a list of  */
+  /* toggles, separated by spaces, `;', or `,'.  Example:                  */
   /*                                                                       */
-  /*    "any:3 memory:6 stream:5"                                          */
+  /*    export FT2_DEBUG="any:3 memory:6 stream:5"                         */
   /*                                                                       */
-  /* This will request that all levels be set to 3, except the trace level */
-  /* for the memory and stream components which are set to 6 and 5,        */
+  /* This requests that all levels be set to 3, except the trace level for */
+  /* the memory and stream components which are set to 6 and 5,            */
   /* respectively.                                                         */
   /*                                                                       */
-  /* See the file <freetype/internal/fttrace.h> for details of the         */
+  /* See the file <include/freetype/internal/fttrace.h> for details of the */
   /* available toggle names.                                               */
   /*                                                                       */
   /* The level must be between 0 and 6; 0 means quiet (except for serious  */
@@ -117,6 +142,7 @@
   {
     const char*  ft2_debug = getenv( "FT2_DEBUG" );
 
+
     if ( ft2_debug )
     {
       const char*  p = ft2_debug;
@@ -136,7 +162,7 @@
           
         if ( *p == ':' && p > q )
         {
-          FT_Int  n, i, len = (FT_Int)(p - q);
+          FT_Int  n, i, len = (FT_Int)( p - q );
           FT_Int  level = -1, found = -1;
 
 
@@ -171,7 +197,7 @@
           {
             if ( found == trace_any )
             {
-              /* special case for "any" */
+              /* special case for `any' */
               for ( n = 0; n < trace_count; n++ )
                 ft_trace_levels[n] = level;
             }
@@ -183,14 +209,31 @@
     }
   }
 
+
 #else  /* !FT_DEBUG_LEVEL_TRACE */
 
+
   FT_BASE_DEF( void )
   ft_debug_init( void )
   {
     /* nothing */
   }
 
+
+  FT_EXPORT_DEF( FT_Int )
+  FT_Trace_Get_Count( void ) 
+  {
+    return 0; 
+  }
+
+
+  FT_EXPORT_DEF( const char * )
+  FT_Trace_Get_Name( FT_Int  index ) 
+  { 
+    return NULL; 
+  }
+
+
 #endif /* !FT_DEBUG_LEVEL_TRACE */