]> granicus.if.org Git - libass/commitdiff
Prefer microsoft-specific charmaps to all other.
authoreugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>
Fri, 3 Nov 2006 23:11:00 +0000 (23:11 +0000)
committereugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>
Fri, 3 Nov 2006 23:11:00 +0000 (23:11 +0000)
There are some fonts with both 'Unicode' and 'Microsoft/Unicode'
charmaps, and the second always seems to be the right choice.

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@20653 b3059339-0415-0410-9bf9-f77b7e298cf2

libass/ass_cache.c

index a2f5bf28076d89ecb7aadd1edc9eaea915d01fcd..7ed4d7e7c4da5c4c873ed4c1a5425de40dc78251 100644 (file)
@@ -56,6 +56,24 @@ static int font_compare(face_desc_t* a, face_desc_t* b) {
        return 1;
 }
 
+/**
+ * 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
@@ -91,6 +109,8 @@ int ass_new_face(FT_Library library, void* fontconfig_priv, face_desc_t* desc, /
                no_more_font_messages = 1;
                return 1;
        }
+
+       charmap_magic(*face);
        
        item = face_cache + face_cache_size;
        item->path = strdup(path);