From 041889e763fa84eee20f15ef850fccc790294b67 Mon Sep 17 00:00:00 2001 From: David Turner Date: Thu, 28 Feb 2002 19:28:26 +0000 Subject: [PATCH] * 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 --- ChangeLog | 6 +++ include/freetype/freetype.h | 87 ++++++++++++++++++++++++++++++++++++- src/base/ftobjs.c | 41 +++++++++++++++-- 3 files changed, 128 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5d1e159d2..417865c9a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2002-02-28 David Turner + * 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 c36aacbca..57e212b57 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 @@ -2392,6 +2392,89 @@ FT_BEGIN_HEADER FT_ULong charcode ); + /*************************************************************************/ + /* */ + /* */ + /* FT_Get_First_Char */ + /* */ + /* */ + /* 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. */ + /* */ + /* */ + /* face :: A handle to the source face object. */ + /* */ + /* */ + /* agindex :: glyph index of first character code. 0 if charmap */ + /* is empty.. */ + /* */ + /* */ + /* the charmap's first character code. */ + /* */ + /* */ + /* 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 ); + + + /*************************************************************************/ + /* */ + /* */ + /* FT_Get_Next_Char */ + /* */ + /* */ + /* 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 */ + /* */ + /* */ + /* face :: A handle to the source face object. */ + /* char_code :: starting character code */ + /* */ + /* */ + /* agindex :: glyph index of first character code. 0 if charmap */ + /* is empty.. */ + /* */ + /* */ + /* the charmap's next character code. */ + /* */ + /* */ + /* 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 ); + + + /*************************************************************************/ /* */ /* */ diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 27a523385..e347e4b86 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_Next_Char( FT_Face face, - FT_ULong charcode ) + FT_Get_First_Char( FT_Face face, + FT_UInt *agindex ) { - FT_ULong result; + 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_UInt *agindex ) + { + 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; }