ref: 041889e763fa84eee20f15ef850fccc790294b67
parent: 1c9a3d335f682380ff423b05a788b563957e019c
author: David Turner <[email protected]>
date: Thu Feb 28 14:28:26 EST 2002
* 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
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2002-02-28 David Turner <[email protected]>
+ * 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:
--- 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>
@@ -2390,6 +2390,89 @@
FT_EXPORT( FT_UInt )
FT_Get_Char_Index( FT_Face face,
FT_ULong charcode );
+
+
+ /*************************************************************************/
+ /* */
+ /* <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 );
+
/*************************************************************************/
--- 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;
}