Commit 041889e763fa84eee20f15ef850fccc790294b67

David Turner 2002-02-28T19:28:26

* include/freetype/freetype.h: changing version to 2.1.0 to indicate an unstable branch. Added the declarations of FT_Get_First_Char and FT_Get_Next_Char * src/base/ftobjs.c: implemented FT_Get_First_Char and FT_Get_Next_Char

diff --git a/ChangeLog b/ChangeLog
index 5d1e159..417865c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2002-02-28  David Turner   <david@freetype.org>
 
+        * include/freetype/freetype.h: changing version to 2.1.0 to indicate
+        an unstable branch. Added the declarations of FT_Get_First_Char and
+        FT_Get_Next_Char
+        
+        * src/base/ftobjs.c: implemented FT_Get_First_Char and FT_Get_Next_Char
+
         * include/freetype/t1tables.h: re-naming structure types. This done
         basically:
         
diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h
index c36aacb..57e212b 100644
--- a/include/freetype/freetype.h
+++ b/include/freetype/freetype.h
@@ -34,8 +34,8 @@
   /* drivers.  It starts at 2.0.                                           */
   /*                                                                       */
 #define FREETYPE_MAJOR 2
-#define FREETYPE_MINOR 0
-#define FREETYPE_PATCH 8
+#define FREETYPE_MINOR 1
+#define FREETYPE_PATCH 0
 
 
 #include <ft2build.h>
@@ -2395,6 +2395,89 @@ FT_BEGIN_HEADER
   /*************************************************************************/
   /*                                                                       */
   /* <Function>                                                            */
+  /*    FT_Get_First_Char                                                  */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This function is used to return the first character code in the    */
+  /*    current charmap of a given face. It will also return the           */
+  /*    corresponding glyph index.                                         */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face     :: A handle to the source face object.                    */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    agindex  :: glyph index of first character code. 0 if charmap      */
+  /*                is empty..                                             */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    the charmap's first character code.                                */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    you should use this function with @FT_Get_Next_Char to be able     */
+  /*    to parse all character codes available in a given charmap.         */
+  /*    the code should look like:                                         */
+  /*                                                                       */
+  /*    {                                                                  */
+  /*      FT_ULong  charcode;                                              */
+  /*      FT_UInt   gindex;                                                */
+  /*                                                                       */
+  /*      charcode = FT_Get_First_Char( face, &gindex );                   */
+  /*      while ( gindex != 0 )                                            */
+  /*      {                                                                */
+  /*        .. do something with (charcode,gindex) pair                    */
+  /*                                                                       */
+  /*        charcode = FT_Get_Next_Char( face, charcode, &gindex );        */
+  /*      }                                                                */
+  /*    }                                                                  */
+  /*                                                                       */
+  /*    note that '*agindex' will be set to 0 if the charmap is empty.     */
+  /*    the result itself can be 0 in two cases: if the charmap is empty   */
+  /*    or when the value 0 is the first valid character code.             */
+  /*                                                                       */
+  FT_EXPORT( FT_ULong )
+  FT_Get_First_Char( FT_Face   face,
+                     FT_UInt  *agindex );
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
+  /*    FT_Get_Next_Char                                                   */
+  /*                                                                       */
+  /* <Description>                                                         */
+  /*    This function is used to return the next character code in the     */
+  /*    current charmap of a given face following the value 'char_code',   */
+  /*    as well as the corresponding glyph index                           */
+  /*                                                                       */
+  /* <Input>                                                               */
+  /*    face      :: A handle to the source face object.                   */
+  /*    char_code :: starting character code                               */
+  /*                                                                       */
+  /* <Output>                                                              */
+  /*    agindex  :: glyph index of first character code. 0 if charmap      */
+  /*                is empty..                                             */
+  /*                                                                       */
+  /* <Return>                                                              */
+  /*    the charmap's next character code.                                 */
+  /*                                                                       */
+  /* <Note>                                                                */
+  /*    you should use this function with @FT_Get_First_Char to be able    */
+  /*    to parse all character codes available in a given charmap. see     */
+  /*    the note for this function for a simple code example..             */
+  /*                                                                       */
+  /*    note that '*agindex' will be set to 0 when there are no more       */
+  /*    codes in the charmap..                                             */
+  /*                                                                       */
+  FT_EXPORT( FT_ULong )
+  FT_Get_Next_Char( FT_Face    face,
+                    FT_ULong   char_code,
+                    FT_UInt   *agindex );
+
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* <Function>                                                            */
   /*    FT_Get_Name_Index                                                  */
   /*                                                                       */
   /* <Description>                                                         */
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 27a5233..e347e4b 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -1466,19 +1466,52 @@
   /* documentation is in freetype.h */
 
   FT_EXPORT_DEF( FT_ULong )
+  FT_Get_First_Char( FT_Face   face,
+                     FT_UInt  *agindex )
+  {
+    FT_ULong   result = 0;
+    FT_UInt    gindex = 0;
+    
+    if ( face && face->charmap )
+    {
+      gindex = FT_Get_Char_Index( face, 0 );
+      if ( gindex == 0 )
+        result = FT_Get_Next_Char( face, 0, &gindex );
+    }
+    
+    if ( agindex  )
+      *agindex = gindex;
+      
+    return result;
+  }
+
+  /* documentation is in freetype.h */
+
+  FT_EXPORT_DEF( FT_ULong )
   FT_Get_Next_Char( FT_Face   face,
-                    FT_ULong  charcode )
+                    FT_ULong  charcode,
+                    FT_UInt  *agindex )
   {
-    FT_ULong   result;
+    FT_ULong   result = 0;
+    FT_UInt    gindex = 0;
     FT_Driver  driver;
 
 
-    result = 0;
     if ( face && face->charmap )
     {
       driver = face->driver;
       result = driver->clazz->get_next_char( face->charmap, charcode );
+      if ( result != 0 )
+      {
+        gindex = driver->clazz->get_char_index( face->charmap, result );
+        if ( gindex == 0 )
+          result = 0;
+      }
     }
+    
+    if ( agindex )
+      *agindex = gindex;
+      
     return result;
   }