]> granicus.if.org Git - libass/commitdiff
Use first Windows charmap as fallback
authorGrigori Goronzy <greg@blackbox>
Sat, 17 Apr 2010 23:28:25 +0000 (01:28 +0200)
committerGrigori Goronzy <greg@blackbox>
Sat, 17 Apr 2010 23:29:18 +0000 (01:29 +0200)
Extend the charmap selection heuristics to select the first Windows
charmap if no Unicode charmap is found.
Fixes one particular font, FGP楷書体NT-M, and possibly others.

libass/ass_font.c

index 5ac2a3101cc999f4c5b0a13457d791dc54f70b24..3d8120273ae1d3874aca9b95fad7ab99a71a6375 100644 (file)
 #define VERTICAL_LOWER_BOUND 0x02f1
 
 /**
- * Select Microfost Unicode CharMap, if the font has one.
+ * Select a good charmap, prefer Microsoft Unicode charmaps.
  * Otherwise, let FreeType decide.
  */
 static void charmap_magic(ASS_Library *library, FT_Face face)
 {
     int i;
+    int ms_cmap = -1;
+
+    // Search for a Microsoft Unicode cmap
     for (i = 0; i < face->num_charmaps; ++i) {
         FT_CharMap cmap = face->charmaps[i];
         unsigned pid = cmap->platform_id;
@@ -54,7 +57,15 @@ static void charmap_magic(ASS_Library *library, FT_Face face)
                 || eid == 10 /*full unicode */ )) {
             FT_Set_Charmap(face, cmap);
             return;
-        }
+        } else if (pid == 3 && ms_cmap < 0)
+            ms_cmap = i;
+    }
+
+    // Try the first Microsoft cmap if no Microsoft Unicode cmap was found
+    if (ms_cmap >= 0) {
+        FT_CharMap cmap = face->charmaps[ms_cmap];
+        FT_Set_Charmap(face, cmap);
+        return;
     }
 
     if (!face->charmap) {