Commit 8d4ccf5384b6a41d0779e99dbdec115a41188750

David Turner 2005-03-06T10:17:28

* src/autofit/aflatin.c (af_latin_metrics_init): fixing bug #12212 (auto-hinter refuses to work if no Unicode charmap in font)

diff --git a/ChangeLog b/ChangeLog
index 3a1edc3..c1c95ce 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,9 @@
 
   * src/otvalid/{otvgsub.c, otvgpos.c}: making static tables constant
 
+  * src/autofit/aflatin.c (af_latin_metrics_init): fixing bug #12212
+  (auto-hinter refuses to work if no Unicode charmap in font)
+
 2005-03-05  Werner Lemberg  <wl@gnu.org>
 
 	* autogen.sh: New script for bootstrapping.
diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c
index 925698c..574ab7d 100644
--- a/src/autofit/aflatin.c
+++ b/src/autofit/aflatin.c
@@ -377,23 +377,38 @@
   af_latin_metrics_init( AF_LatinMetrics  metrics,
                          FT_Face          face )
   {
-    FT_Error    error;
+    FT_Error    error = 0;
     FT_CharMap  oldmap = face->charmap;
+    FT_UInt     ee;
 
+    static const FT_Encoding  latin_encodings[] =
+    {
+      FT_ENCODING_UNICODE,
+      FT_ENCODING_APPLE_ROMAN,
+      FT_ENCODING_ADOBE_STANDARD,
+      FT_ENCODING_ADOBE_LATIN_1,
+      FT_ENCODING_NONE  /* end of list */
+    };
 
-    /* do we have a Unicode charmap in there? */
-    error = FT_Select_Charmap( face, FT_ENCODING_UNICODE );
-    if ( error )
-      goto Exit;
 
     metrics->units_per_em = face->units_per_EM;
 
-    af_latin_metrics_init_widths( metrics, face );
-    af_latin_metrics_init_blues( metrics, face );
+    /* do we have a latin charmap in there? */
+    for ( ee = 0; latin_encodings[ee] != FT_ENCODING_NONE; ee++ )
+    {
+      error = FT_Select_Charmap( face, latin_encodings[ee] );
+      if (!error)
+        break;
+    }
+
+    if ( !error )
+    {
+      af_latin_metrics_init_widths( metrics, face );
+      af_latin_metrics_init_blues( metrics, face );
+    }
 
-  Exit:
     FT_Set_Charmap( face, oldmap );
-    return error;
+    return 0;
   }