[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[freetype2] gsoc-craig-2023 6650b9ebc: Make find_unicode_charmap public
From: |
Werner Lemberg |
Subject: |
[freetype2] gsoc-craig-2023 6650b9ebc: Make find_unicode_charmap public and use it to choose the best charmap for building the reverse character map |
Date: |
Wed, 28 Jun 2023 21:04:20 -0400 (EDT) |
branch: gsoc-craig-2023
commit 6650b9ebc70a7629efd4f3ddcebe9e51e708e2de
Author: Craig White <gerzytet@gmail.com>
Commit: Craig White <gerzytet@gmail.com>
Make find_unicode_charmap public and use it to choose the best charmap for
building the reverse character map
---
include/freetype/internal/ftobjs.h | 20 ++++++++++++++++++++
src/autofit/afadjust.c | 23 +++++++----------------
src/base/ftobjs.c | 16 +---------------
3 files changed, 28 insertions(+), 31 deletions(-)
diff --git a/include/freetype/internal/ftobjs.h
b/include/freetype/internal/ftobjs.h
index 28bc9b65f..ceb4251df 100644
--- a/include/freetype/internal/ftobjs.h
+++ b/include/freetype/internal/ftobjs.h
@@ -275,6 +275,26 @@ FT_BEGIN_HEADER
FT_GlyphSlot slot,
FT_Render_Mode mode );
+ /**************************************************************************
+ *
+ * @Function:
+ * find_unicode_charmap
+ *
+ * @Description:
+ * This function finds a Unicode charmap, if there is one.
+ * And if there is more than one, it tries to favour the more
+ * extensive one, i.e., one that supports UCS-4 against those which
+ * are limited to the BMP ( UCS-2 encoding.)
+ *
+ * If a unicode charmap is found, face->charmap is set to it.
+ *
+ * This function is called from open_face(),
+ * from FT_Select_Charmap( ..., FT_ENCODING_UNICODE ),
+ * and also from afadjust.c in the autofit module.
+ */
+ FT_BASE( FT_Error )
+ find_unicode_charmap( FT_Face face );
+
#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
typedef void (*FT_Bitmap_LcdFilterFunc)( FT_Bitmap* bitmap,
diff --git a/src/autofit/afadjust.c b/src/autofit/afadjust.c
index 78487f3f4..bf115d2b1 100644
--- a/src/autofit/afadjust.c
+++ b/src/autofit/afadjust.c
@@ -121,27 +121,17 @@ af_reverse_character_map_new( FT_Face face,
AF_ReverseCharacterMap *map, FT_Memo
/* Search for a unicode charmap */
/* If there isn't one, create a blank map */
- /*TODO: change this to logic that searches for a "preferred" unicode
charmap that maps the most codepoints*/
- /*see find_unicode_charmap*/
/*TODO: use GSUB lookups */
FT_TRACE4(( "af_reverse_character_map_new: building reverse character
map\n" ));
- FT_CMap unicode_charmap = NULL;
- for ( FT_UInt i = 0; i < face->num_charmaps; i++ )
- {
- if ( face->charmaps[i]->encoding == FT_ENCODING_UNICODE )
- {
- unicode_charmap = FT_CMAP( face->charmaps[i] );
- }
- }
- if ( unicode_charmap == NULL )
- {
+ FT_Error error;
+ /* backup face->charmap because find_unicode_charmap sets it */
+ FT_CharMap old_charmap = face->charmap;
+ if (( error = find_unicode_charmap( face ) )) {
*map = NULL;
- return FT_Err_Ok;
+ goto Exit;
}
- FT_Error error;
-
if ( FT_NEW( *map ) )
{
goto Exit;
@@ -160,7 +150,7 @@ af_reverse_character_map_new( FT_Face face,
AF_ReverseCharacterMap *map, FT_Memo
for ( FT_Int i = 0; i < AF_ADJUSTMENT_DATABASE_LENGTH; i++ )
{
FT_UInt32 codepoint = adjustment_database[i].codepoint;
- FT_Int glyph = unicode_charmap->clazz->char_index(unicode_charmap,
codepoint);
+ FT_Int glyph = FT_Get_Char_Index( face, codepoint );
if ( glyph == 0 )
{
#ifdef FT_DEBUG_LEVEL_TRACE
@@ -183,6 +173,7 @@ af_reverse_character_map_new( FT_Face face,
AF_ReverseCharacterMap *map, FT_Memo
( *map )->length = size;
Exit:
+ face->charmap = old_charmap;
if ( error )
{
FT_TRACE4(( " error while building reverse character map. Using
blank map.\n" ));
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index b379868ba..38f974473 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -1358,21 +1358,7 @@
driver );
}
- /**************************************************************************
- *
- * @Function:
- * find_unicode_charmap
- *
- * @Description:
- * This function finds a Unicode charmap, if there is one.
- * And if there is more than one, it tries to favour the more
- * extensive one, i.e., one that supports UCS-4 against those which
- * are limited to the BMP (said UCS-2 encoding.)
- *
- * This function is called from open_face() (just below), and also
- * from FT_Select_Charmap( ..., FT_ENCODING_UNICODE ).
- */
- static FT_Error
+ FT_Error
find_unicode_charmap( FT_Face face )
{
FT_CharMap* first;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [freetype2] gsoc-craig-2023 6650b9ebc: Make find_unicode_charmap public and use it to choose the best charmap for building the reverse character map,
Werner Lemberg <=