shithub: freetype+ttf2subf

Download patch

ref: 745ff2c29f4c56a26f39a2742ab45cb94b374c0c
parent: f9644559a885fd61e3896cab5d6bd57fe2ed6a1a
author: Werner Lemberg <[email protected]>
date: Tue Sep 19 01:48:02 EDT 2006

* src/base/ftmac.c (FT_New_Face_From_FOND): Fall back to SFNT if
LWFN fails and both are available.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-09-18  Garrick Meeker  <[email protected]>
+
+	* src/base/ftmac.c (FT_New_Face_From_FOND): Fall back to SFNT if
+	LWFN fails and both are available.
+
 2006-09-11  David Turner  <[email protected]>
 
 	* src/sfnt/sfobjs.c (tt_face_get_name): Support some fonts which
--- a/src/base/ftmac.c
+++ b/src/base/ftmac.c
@@ -53,6 +53,12 @@
     - If there is a TrueType font (an `sfnt' resource), read it into memory,
       wrap it into a memory stream, load the TrueType driver and delegate
       the rest of the work to it, by calling FT_Open_Face().
+
+    - Some suitcase fonts (notably Onyx) might point the `LWFN' file to
+      itself, even though it doesn't contains `POST' resources.  To handle
+      this special case without opening the file an extra time, we just
+      ignore errors from the `LWFN' and fallback to the `sfnt' if both are
+      available.
   */
 
 
@@ -1242,19 +1248,21 @@
     }
 
     if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
-      return FT_New_Face_From_LWFN( library,
-                                    path_lwfn,
-                                    face_index,
-                                    aface );
+      error = FT_New_Face_From_LWFN( library,
+                                     path_lwfn,
+                                     face_index,
+                                     aface );
+    else
+      error = FT_Err_Unknown_File_Format;
 
   found_no_lwfn_file:
-    if ( have_sfnt )
-      return FT_New_Face_From_SFNT( library,
-                                    sfnt_id,
-                                    face_index,
-                                    aface );
+    if ( have_sfnt && FT_Err_Ok != error )
+      error = FT_New_Face_From_SFNT( library,
+                                     sfnt_id,
+                                     face_index,
+                                     aface );
 
-    return FT_Err_Unknown_File_Format;
+    return error;
   }