changeset 20637:092cb80a8ba4

Prefer microsoft-specific charmaps to all other. There are some fonts with both 'Unicode' and 'Microsoft/Unicode' charmaps, and the second always seems to be the right choice.
author eugeni
date Fri, 03 Nov 2006 23:11:00 +0000
parents 325db3f2aba3
children d56ce5b63c86
files libass/ass_cache.c
diffstat 1 files changed, 20 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libass/ass_cache.c	Fri Nov 03 22:53:24 2006 +0000
+++ b/libass/ass_cache.c	Fri Nov 03 23:11:00 2006 +0000
@@ -57,6 +57,24 @@
 }
 
 /**
+ * Select Microfost Unicode CharMap, if the font has one.
+ * Otherwise, let FreeType decide.
+ */
+static void charmap_magic(FT_Face face)
+{
+	int i;
+	for (i = 0; i < face->num_charmaps; ++i) {
+		FT_CharMap cmap = face->charmaps[i];
+		unsigned pid = cmap->platform_id;
+		unsigned eid = cmap->encoding_id;
+		if (pid == 3 /*microsoft*/ && (eid == 1 /*unicode bmp*/ || eid == 10 /*full unicode*/)) {
+			FT_Set_Charmap(face, cmap);
+			break;
+		}
+	}
+}
+
+/**
  * \brief Get a face object, either from cache or created through FreeType+FontConfig.
  * \param library FreeType library object
  * \param fontconfig_priv fontconfig private data
@@ -91,6 +109,8 @@
 		no_more_font_messages = 1;
 		return 1;
 	}
+
+	charmap_magic(*face);
 	
 	item = face_cache + face_cache_size;
 	item->path = strdup(path);