shithub: freetype+ttf2subf

Download patch

ref: 7e3d60135568f3e7a3178dc8e680e6df1ceb110e
parent: 21fd256d20a7b76fdd9987c45ccf279bea16777e
author: Suzuki, Toshiya (鈴木俊哉) <[email protected]>
date: Fri Dec 15 10:23:21 EST 2006

* Simplify src/base/ftmac.c for Mac OS X

git/fs: mount .git/fs: mount/attach disallowed
--- a/builds/unix/configure.raw
+++ b/builds/unix/configure.raw
@@ -182,8 +182,23 @@
   AC_MSG_CHECKING([CoreServices & ApplicationServices of Mac OS X])
   FT2_EXTRA_LIBS="-Wl,-framework,CoreServices,-framework,ApplicationServices"
   LDFLAGS="$LDFLAGS $FT2_EXTRA_LIBS"
-  AC_TRY_LINK([],
-    [],
+  AC_TRY_LINK([
+#if defined(__GNUC__) && defined(__APPLE_CC__)
+# include <Carbon/Carbon.h>
+# include <ApplicationServices/ApplicationServices.h>
+#else
+# include <ConditionalMacros.h>
+# include <Files.h>
+#endif
+    ],
+    [
+
+      short res = 0;
+
+
+      UseResFile( res );
+
+    ],
     [AC_MSG_RESULT([ok])],
     [AC_MSG_RESULT([not found])
      LDFLAGS="${orig_LDFLAGS}"
@@ -206,7 +221,7 @@
                  [use obsolete FSSpec API of MacOS, if available (default=yes)]))
 if test x$with_fsspec = xno; then
   CFLAGS="$CFLAGS -DHAVE_FSSPEC=0"
-elif test x$with_old_mac_fonts = xyes; then
+elif test x$with_old_mac_fonts = xyes -a x$with_fsspec != x; then
   AC_MSG_CHECKING([FSSpec-based FileManager])
   AC_TRY_LINK([
 
@@ -252,7 +267,7 @@
     data-fork fonts on MacOS, except of XXX.dfont.
     ])
   CFLAGS="$CFLAGS -DHAVE_FSREF=0"
-elif test x$with_old_mac_fonts = xyes; then
+elif test x$with_old_mac_fonts = xyes -a x$with_fsref != x; then
   AC_MSG_CHECKING([FSRef-based FileManager])
   AC_TRY_LINK([
 
@@ -310,7 +325,7 @@
                  [use MacOS QuickDraw in ToolBox, if available (default=yes)]))
 if test x$with_quickdraw_toolbox = xno; then
   CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_TOOLBOX=0"
-elif test x$with_old_mac_fonts = xyes; then
+elif test x$with_old_mac_fonts = xyes -a x$with_quickdraw_toolbox != x; then
   AC_MSG_CHECKING([QuickDraw FontManager functions in ToolBox])
   AC_TRY_LINK([
 
@@ -350,7 +365,7 @@
                  [use MacOS QuickDraw in Carbon, if available (default=yes)]))
 if test x$with_quickdraw_carbon = xno; then
   CFLAGS="$CFLAGS -DHAVE_QUICKDRAW_CARBON=0"
-elif test x$with_old_mac_fonts = xyes; then
+elif test x$with_old_mac_fonts = xyes -a x$with_quickdraw_carbon != x; then
   AC_MSG_CHECKING([QuickDraw FontManager functions in Carbon])
   AC_TRY_LINK([
 
@@ -400,7 +415,7 @@
                  [use AppleTypeService, if available (default=yes)]))
 if test x$with_ats = xno; then
   CFLAGS="$CFLAGS -DHAVE_ATS=0"
-elif test x$with_old_mac_fonts = xyes; then
+elif test x$with_old_mac_fonts = xyes -a x$with_ats != x ; then
   AC_MSG_CHECKING([AppleTypeService functions])
   AC_TRY_LINK([
 
@@ -421,6 +436,19 @@
     [AC_MSG_RESULT([not found])
      CFLAGS="$CFLAGS -DHAVE_ATS=0"])
 fi
+
+case "$CFLAGS" in
+  *HAVE_FSSPEC* | *HAVE_FSREF* | *HAVE_QUICKDRAW* | *HAVE_ATS* )
+    AC_MSG_WARN([
+*** WARNING
+    FSSpec/FSRef/QuickDraw/ATS options are explicitly given.
+    use legacy builds/mac/ftmac.c instead of src/base/ftmac.c
+    ])
+    CFLAGS="$CFLAGS "'-I$(TOP_DIR)/builds/mac/'
+    ;;
+  *)
+    ;;
+esac
 
 
 AC_SUBST([LIBZ])
--- a/builds/unix/ftconfig.in
+++ b/builds/unix/ftconfig.in
@@ -100,7 +100,11 @@
   /*                                                                       */
 #if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \
     ( defined( __MWERKS__ ) && defined( macintosh )        )
+#if defined( __ppc64__ ) /* no Carbon for ppc64 */
+#define DARWIN_NO_CARBON 1
+#else
 #define FT_MACINTOSH 1
+#endif
 #endif
 
 
--- a/src/base/ftmac.c
+++ b/src/base/ftmac.c
@@ -4,6 +4,8 @@
 /*                                                                         */
 /*    Mac FOND support.  Written by [email protected].                    */
 /*  Heavily Fixed by mpsuzuki, George Williams and Sean McBride            */
+/*  This file is for Mac OS X only, see builds/mac/ftoldmac.c for          */
+/*  classic platforms built by MPW.                                        */ 
 /*                                                                         */
 /*  Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by                   */
 /*  Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.     */
@@ -66,7 +68,6 @@
 #include FT_FREETYPE_H
 #include FT_INTERNAL_STREAM_H
 
-#if defined( __GNUC__ ) || defined( __IBMC__ )
   /* This is for Mac OS X.  Without redefinition, OS_INLINE */
   /* expands to `static inline' which doesn't survive the   */
   /* -ansi compilation flag of GCC.                         */
@@ -73,63 +74,20 @@
 #undef  OS_INLINE
 #define OS_INLINE   static __inline__
 #include <Carbon/Carbon.h>
-#else
-#include <Resources.h>
-#include <Fonts.h>
-#include <Endian.h>
-#include <Errors.h>
-#include <Files.h>
-#include <TextUtils.h>
-#endif
 
-#if defined( __MWERKS__ ) && !TARGET_RT_MAC_MACHO
-#include <FSp_fopen.h>
-#endif
-
-#include FT_MAC_H
-
-
-  /* FSSpec functions are deprecated since Mac OS X 10.4 */
-#ifndef HAVE_FSSPEC
-#if TARGET_API_MAC_OS8 || TARGET_API_MAC_CARBON
-#define HAVE_FSSPEC  1
-#else
-#define HAVE_FSSPEC  0
-#endif
-#endif
-
-  /* most FSRef functions were introduced since Mac OS 9 */
-#ifndef HAVE_FSREF
-#if TARGET_API_MAC_OSX
-#define HAVE_FSREF  1
-#else
-#define HAVE_FSREF  0
-#endif
-#endif
-
 #ifndef HFS_MAXPATHLEN
 #define HFS_MAXPATHLEN  1024
 #endif
 
 
-  /* QuickDraw is deprecated since Mac OS X 10.4 */
-#ifndef HAVE_QUICKDRAW_CARBON
-#if TARGET_API_MAC_OS8 || TARGET_API_MAC_CARBON
-#define HAVE_QUICKDRAW_CARBON  1
-#else
-#define HAVE_QUICKDRAW_CARBON  0
-#endif
-#endif
+#include FT_MAC_H
 
-  /* AppleTypeService is available since Mac OS X */
-#ifndef HAVE_ATS
-#if TARGET_API_MAC_OSX
-#define HAVE_ATS  1
-#else
-#define HAVE_ATS  0
-#endif
-#endif
+  /* undefine blocking-macros in ftmac.h */
+#undef FT_GetFile_From_Mac_Name( a, b, c )
+#undef FT_GetFile_From_Mac_ATS_Name( a, b, c )
+#undef FT_New_Face_From_FSSpec( a, b, c, d )
 
+
   /* Set PREFER_LWFN to 1 if LWFN (Type 1) is preferred over
      TrueType in case *both* are available (this is not common,
      but it *is* possible). */
@@ -138,8 +96,6 @@
 #endif
 
 
-#if !HAVE_QUICKDRAW_CARBON  /* QuickDraw is deprecated since Mac OS X 10.4 */
-
   FT_EXPORT_DEF( FT_Error )
   FT_GetFile_From_Mac_Name( const char*  fontName,
                             FSSpec*      pathSpec,
@@ -148,112 +104,12 @@
     return FT_Err_Unimplemented_Feature;
   }
 
-#else
 
   FT_EXPORT_DEF( FT_Error )
-  FT_GetFile_From_Mac_Name( const char*  fontName,
-                            FSSpec*      pathSpec,
-                            FT_Long*     face_index )
-  {
-    OptionBits            options = kFMUseGlobalScopeOption;
-
-    FMFontFamilyIterator  famIter;
-    OSStatus              status = FMCreateFontFamilyIterator( NULL, NULL,
-                                                               options,
-                                                               &famIter );
-    FMFont                the_font = 0;
-    FMFontFamily          family   = 0;
-
-
-    *face_index = 0;
-    while ( status == 0 && !the_font )
-    {
-      status = FMGetNextFontFamily( &famIter, &family );
-      if ( status == 0 )
-      {
-        int                           stat2;
-        FMFontFamilyInstanceIterator  instIter;
-        Str255                        famNameStr;
-        char                          famName[256];
-
-
-        /* get the family name */
-        FMGetFontFamilyName( family, famNameStr );
-        CopyPascalStringToC( famNameStr, famName );
-
-        /* iterate through the styles */
-        FMCreateFontFamilyInstanceIterator( family, &instIter );
-
-        *face_index = 0;
-        stat2       = 0;
-
-        while ( stat2 == 0 && !the_font )
-        {
-          FMFontStyle  style;
-          FMFontSize   size;
-          FMFont       font;
-
-
-          stat2 = FMGetNextFontFamilyInstance( &instIter, &font,
-                                               &style, &size );
-          if ( stat2 == 0 && size == 0 )
-          {
-            char  fullName[256];
-
-
-            /* build up a complete face name */
-            ft_strcpy( fullName, famName );
-            if ( style & bold )
-              ft_strcat( fullName, " Bold" );
-            if ( style & italic )
-              ft_strcat( fullName, " Italic" );
-
-            /* compare with the name we are looking for */
-            if ( ft_strcmp( fullName, fontName ) == 0 )
-            {
-              /* found it! */
-              the_font = font;
-            }
-            else
-              ++(*face_index);
-          }
-        }
-
-        FMDisposeFontFamilyInstanceIterator( &instIter );
-      }
-    }
-
-    FMDisposeFontFamilyIterator( &famIter );
-
-    if ( the_font )
-    {
-      FMGetFontContainer( the_font, pathSpec );
-      return FT_Err_Ok;
-    }
-    else
-      return FT_Err_Unknown_File_Format;
-  }
-
-#endif /* HAVE_QUICKDRAW_CARBON */
-
-
-#if !HAVE_ATS
-
-  FT_EXPORT_DEF( FT_Error )
   FT_GetFile_From_Mac_ATS_Name( const char*  fontName,
                                 FSSpec*      pathSpec,
                                 FT_Long*     face_index )
   {
-    return FT_Err_Unimplemented_Feature;
-  }
-
-#else
-
-  FT_EXPORT_DEF( FT_Error )
-  FT_GetFile_From_Mac_ATS_Name( const char*  fontName,
-                                FSSpec*      pathSpec,
-                                FT_Long*     face_index )
-  {
     CFStringRef  cf_fontName;
     ATSFontRef   ats_font_id;
 
@@ -295,143 +151,11 @@
     return FT_Err_Ok;
   }
 
-#endif /* HAVE_ATS */
 
-
-#if defined( __MWERKS__ ) && !TARGET_RT_MAC_MACHO
-
-#define STREAM_FILE( stream )  ( (FT_FILE*)stream->descriptor.pointer )
-
-
-  FT_CALLBACK_DEF( void )
-  ft_FSp_stream_close( FT_Stream  stream )
-  {
-    ft_fclose( STREAM_FILE( stream ) );
-
-    stream->descriptor.pointer = NULL;
-    stream->size               = 0;
-    stream->base               = 0;
-  }
-
-
-  FT_CALLBACK_DEF( unsigned long )
-  ft_FSp_stream_io( FT_Stream       stream,
-                    unsigned long   offset,
-                    unsigned char*  buffer,
-                    unsigned long   count )
-  {
-    FT_FILE*  file;
-
-
-    file = STREAM_FILE( stream );
-
-    ft_fseek( file, offset, SEEK_SET );
-
-    return (unsigned long)ft_fread( buffer, 1, count, file );
-  }
-
-#endif  /* __MWERKS__ && !TARGET_RT_MAC_MACHO */
-
-
-#if HAVE_FSSPEC && !HAVE_FSREF
-
   static OSErr
-  FT_FSPathMakeSpec( const UInt8*  pathname,
-                     FSSpec*       spec_p,
-                     Boolean       isDirectory )
-  {
-    const char  *p, *q;
-    short       vRefNum;
-    long        dirID;
-    Str255      nodeName;
-    OSErr       err;
-
-
-    p = q = (const char *)pathname;
-    dirID   = 0;
-    vRefNum = 0;
-
-    while ( 1 )
-    {
-      q = p + FT_MIN( 255, ft_strlen( p ) );
-
-      if ( q == p )
-        return 0;
-
-      if ( 255 < ft_strlen( (char *)pathname ) )
-      {
-        while ( p < q && *q != ':' )
-          q--;
-      }
-
-      if ( p < q )
-        *(char *)nodeName = q - p;
-      else if ( ft_strlen( p ) < 256 )
-        *(char *)nodeName = ft_strlen( p );
-      else
-        return errFSNameTooLong;
-
-      ft_strncpy( (char *)nodeName + 1, (char *)p, *(char *)nodeName );
-      err = FSMakeFSSpec( vRefNum, dirID, nodeName, spec_p );
-      if ( err || '\0' == *q )
-        return err;
-
-      vRefNum = spec_p->vRefNum;
-      dirID   = spec_p->parID;
-
-      p = q;
-    }
-  }
-
-
-  static OSErr
-  FT_FSpMakePath( const FSSpec*  spec_p,
-                  UInt8*         path,
-                  UInt32         maxPathSize )
-  {
-    OSErr   err;
-    FSSpec  spec = *spec_p;
-    short   vRefNum;
-    long    dirID;
-    Str255  parDir_name;
-
-
-    FT_MEM_SET( path, 0, maxPathSize );
-    while ( 1 )
-    {
-      int             child_namelen = ft_strlen( (char *)path );
-      unsigned char   node_namelen  = spec.name[0];
-      unsigned char*  node_name     = spec.name + 1;
-
-
-      if ( node_namelen + child_namelen > maxPathSize )
-        return errFSNameTooLong;
-
-      FT_MEM_MOVE( path + node_namelen + 1, path, child_namelen );
-      FT_MEM_COPY( path, node_name, node_namelen );
-      if ( child_namelen > 0 )
-        path[node_namelen] = ':';
-
-      vRefNum        = spec.vRefNum;
-      dirID          = spec.parID;
-      parDir_name[0] = '\0';
-      err = FSMakeFSSpec( vRefNum, dirID, parDir_name, &spec );
-      if ( noErr != err || dirID == spec.parID )
-        break;
-    }
-    return noErr;
-  }
-
-#endif /* HAVE_FSSPEC && !HAVE_FSREF */
-
-
-  static OSErr
   FT_FSPathMakeRes( const UInt8*  pathname,
                     short*        res )
   {
-
-#if HAVE_FSREF
-
     OSErr  err;
     FSRef  ref;
 
@@ -448,22 +172,6 @@
     *res = FSOpenResFile( &ref, fsRdPerm );
     err  = ResError();
 
-#else
-
-    OSErr   err;
-    FSSpec  spec;
-
-
-    if ( noErr != FT_FSPathMakeSpec( pathname, &spec, FALSE ) )
-      return FT_Err_Cannot_Open_Resource;
-
-    /* at present, no support for dfont format without FSRef */
-    /* (see above), try original resource-fork font          */
-    *res = FSpOpenResFile( &spec, fsRdPerm );
-    err  = ResError();
-
-#endif /* HAVE_FSREF */
-
     return err;
   }
 
@@ -472,9 +180,6 @@
   static OSType
   get_file_type_from_path( const UInt8*  pathname )
   {
-
-#if HAVE_FSREF
-
     FSRef          ref;
     FSCatalogInfo  info;
 
@@ -487,23 +192,6 @@
       return ( OSType ) 0;
 
     return ((FInfo *)(info.finderInfo))->fdType;
-
-#else
-
-    FSSpec  spec;
-    FInfo  finfo;
-
-
-    if ( noErr != FT_FSPathMakeSpec( pathname, &spec, FALSE ) )
-      return ( OSType ) 0;
-
-    if ( noErr != FSpGetFInfo( &spec, &finfo ) )
-      return ( OSType ) 0;
-
-    return finfo.fdType;
-
-#endif /* HAVE_FSREF */
-
   }
 
 
@@ -689,9 +377,6 @@
                        UInt8*           path_lwfn,
                        int              path_size )
   {
-
-#if HAVE_FSREF
-
     FSRef  ref, par_ref;
     int    dirname_len;
 
@@ -730,44 +415,6 @@
       return FT_Err_Cannot_Open_Resource;
 
     return FT_Err_Ok;
-
-#else
-
-    int     i;
-    FSSpec  spec;
-
-
-    /* pathname for FSSpec is always HFS format */
-    if ( ft_strlen( (char *)path_fond ) > path_size )
-      return FT_Err_Invalid_Argument;
-
-    ft_strcpy( (char *)path_lwfn, (char *)path_fond );
-
-    i = ft_strlen( (char *)path_lwfn ) - 1;
-    while ( i > 0 && ':' != path_lwfn[i] )
-      i--;
-
-    if ( i + 1 + base_lwfn[0] > path_size )
-      return FT_Err_Invalid_Argument;
-
-    if ( ':' == path_lwfn[i] )
-    {
-      ft_strcpy( (char *)path_lwfn + i + 1, (char *)base_lwfn + 1 );
-      path_lwfn[i + 1 + base_lwfn[0]] = '\0';
-    }
-    else
-    {
-      ft_strcpy( (char *)path_lwfn, (char *)base_lwfn + 1 );
-      path_lwfn[base_lwfn[0]] = '\0';
-    }
-
-    if ( noErr != FT_FSPathMakeSpec( path_lwfn, &spec, FALSE ) )
-      return FT_Err_Cannot_Open_Resource;
-
-    return FT_Err_Ok;
-
-#endif /* HAVE_FSREF */
-
   }
 
 
@@ -1185,8 +832,6 @@
       if ( noErr != ResError() )
         goto found_no_lwfn_file;
 
-#if HAVE_FSREF
-
       {
         UInt8  path_fond[HFS_MAXPATHLEN];
         FSRef  ref;
@@ -1206,45 +851,6 @@
         if ( FT_Err_Ok == error )
           have_lwfn = 1;
       }
-
-#elif HAVE_FSSPEC
-
-      {
-        UInt8     path_fond[HFS_MAXPATHLEN];
-        FCBPBRec  pb;
-        Str255    fond_file_name;
-        FSSpec    spec;
-
-
-        FT_MEM_SET( &spec, 0, sizeof ( FSSpec ) );
-        FT_MEM_SET( &pb,   0, sizeof ( FCBPBRec ) );
-
-        pb.ioNamePtr = fond_file_name;
-        pb.ioVRefNum = 0;
-        pb.ioRefNum  = res;
-        pb.ioFCBIndx = 0;
-
-        err = PBGetFCBInfoSync( &pb );
-        if ( noErr != err )
-          goto found_no_lwfn_file;
-
-        err = FSMakeFSSpec( pb.ioFCBVRefNum, pb.ioFCBParID,
-                            fond_file_name, &spec );
-        if ( noErr != err )
-          goto found_no_lwfn_file;
-
-        err = FT_FSpMakePath( &spec, path_fond, sizeof ( path_fond ) );
-        if ( noErr != err )
-          goto found_no_lwfn_file;
-
-        error = lookup_lwfn_by_fond( path_fond, lwfn_file_name,
-                                     path_lwfn, sizeof ( path_lwfn ) );
-        if ( FT_Err_Ok == error )
-          have_lwfn = 1;
-      }
-
-#endif /* HAVE_FSREF, HAVE_FSSPEC */
-
     }
 
     if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
@@ -1353,13 +959,6 @@
                           FT_Long       face_index,
                           FT_Face*      aface )
   {
-
-#if !HAVE_FSREF
-
-    return FT_Err_Unimplemented_Feature;
-
-#else
-
     FT_Error      error;
     FT_Open_Args  args;
     OSErr   err;
@@ -1381,9 +980,6 @@
     args.flags    = FT_OPEN_PATHNAME;
     args.pathname = (char*)pathname;
     return FT_Open_Face( library, &args, face_index, aface );
-
-#endif /* HAVE_FSREF */
-
   }
 
 
@@ -1402,9 +998,6 @@
                            FT_Long        face_index,
                            FT_Face*       aface )
   {
-
-#if HAVE_FSREF
-
     FSRef  ref;
 
 
@@ -1412,37 +1005,6 @@
       return FT_Err_Invalid_Argument;
     else
       return FT_New_Face_From_FSRef( library, &ref, face_index, aface );
-
-#elif HAVE_FSSPEC
-
-    FT_Error      error;
-    FT_Open_Args  args;
-    OSErr         err;
-    UInt8         pathname[HFS_MAXPATHLEN];
-
-
-    if ( !spec )
-      return FT_Err_Invalid_Argument;
-
-    err = FT_FSpMakePath( spec, pathname, sizeof ( pathname ) );
-    if ( err )
-      error = FT_Err_Cannot_Open_Resource;
-
-    error = FT_New_Face_From_Resource( library, pathname, face_index, aface );
-    if ( error != 0 || *aface != NULL )
-      return error;
-
-    /* fallback to datafork font */
-    args.flags    = FT_OPEN_PATHNAME;
-    args.pathname = (char*)pathname;
-    return FT_Open_Face( library, &args, face_index, aface );
-
-#else
-
-    return FT_Err_Unimplemented_Feature;
-
-#endif /* HAVE_FSREF, HAVE_FSSPEC */
-
   }