diff options
author | Grigori Goronzy <greg@blackbox> | 2011-04-09 21:48:08 +0200 |
---|---|---|
committer | Grigori Goronzy <greg@blackbox> | 2011-04-09 21:48:08 +0200 |
commit | 1e246a4a242afd2ddc4e9dea698ce8ec02e3538a (patch) | |
tree | 40907d4ec1af6ae345b2a131e8e24bc84a759cea | |
parent | 08033ad0caa6c2ff54944064157ed0b72a858042 (diff) | |
download | libass-1e246a4a242afd2ddc4e9dea698ce8ec02e3538a.tar.bz2 libass-1e246a4a242afd2ddc4e9dea698ce8ec02e3538a.tar.xz |
Improved "last resort" charmap matching
After font reselection, loop through all charmaps if no glyph can't be
found until we hopefully find one that works. If we get here at all, the
font is seriously broken, so this is unlikely to harm anything.
This improves the last resort charmap fallback introduced in 96057d.
-rw-r--r-- | libass/ass_font.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/libass/ass_font.c b/libass/ass_font.c index 74467df6..d732dfed 100644 --- a/libass/ass_font.c +++ b/libass/ass_font.c @@ -446,12 +446,13 @@ FT_Glyph ass_font_get_glyph(void *fontconfig_priv, ASS_Font *font, face = font->faces[face_idx]; index = FT_Get_Char_Index(face, ch); if (index == 0 && face->num_charmaps > 0) { + int i; ass_msg(font->library, MSGL_WARN, - "Glyph 0x%X not found, falling back to first charmap", ch); - FT_CharMap cur = face->charmap; - FT_Set_Charmap(face, face->charmaps[0]); - index = FT_Get_Char_Index(face, ch); - FT_Set_Charmap(face, cur); + "Glyph 0x%X not found, broken font? Trying all charmaps", ch); + for (i = 0; i < face->num_charmaps; i++) { + FT_Set_Charmap(face, face->charmaps[i]); + if ((index = FT_Get_Char_Index(face, ch)) != 0) break; + } } if (index == 0) { ass_msg(font->library, MSGL_ERR, |