src/java.desktop/share/native/libfreetype/src/base/ftmac.c
author prr
Thu, 09 May 2019 16:09:39 -0700
changeset 54876 da3834261f0c
parent 49234 3375a8039fde
permissions -rw-r--r--
8222362: Upgrade to Freetype 2.10.0 Reviewed-by: serb, erikj
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     1
/****************************************************************************
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     2
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     3
 * ftmac.c
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     4
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     5
 *   Mac FOND support.  Written by just@letterror.com.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     6
 * Heavily modified by mpsuzuki, George Williams, and Sean McBride.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     7
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     8
 * This file is for Mac OS X only; see builds/mac/ftoldmac.c for
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
     9
 * classic platforms built by MPW.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    10
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    11
 * Copyright (C) 1996-2019 by
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    12
 * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    13
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    14
 * This file is part of the FreeType project, and may only be used,
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    15
 * modified, and distributed under the terms of the FreeType project
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    16
 * license, LICENSE.TXT.  By continuing to use, modify, or distribute
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    17
 * this file you indicate that you have read the license and
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    18
 * understand and accept it fully.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    19
 *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
    20
 */
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    21
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    22
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    23
  /*
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    24
    Notes
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    25
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    26
    Mac suitcase files can (and often do!) contain multiple fonts.  To
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    27
    support this I use the face_index argument of FT_(Open|New)_Face()
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    28
    functions, and pretend the suitcase file is a collection.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    29
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    30
    Warning: fbit and NFNT bitmap resources are not supported yet.  In old
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    31
    sfnt fonts, bitmap glyph data for each size is stored in each `NFNT'
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    32
    resources instead of the `bdat' table in the sfnt resource.  Therefore,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    33
    face->num_fixed_sizes is set to 0, because bitmap data in `NFNT'
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    34
    resource is unavailable at present.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    35
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    36
    The Mac FOND support works roughly like this:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    37
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    38
    - Check whether the offered stream points to a Mac suitcase file.  This
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    39
      is done by checking the file type: it has to be 'FFIL' or 'tfil'.  The
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    40
      stream that gets passed to our init_face() routine is a stdio stream,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    41
      which isn't usable for us, since the FOND resources live in the
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    42
      resource fork.  So we just grab the stream->pathname field.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    43
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    44
    - Read the FOND resource into memory, then check whether there is a
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    45
      TrueType font and/or(!) a Type 1 font available.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    46
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    47
    - If there is a Type 1 font available (as a separate `LWFN' file), read
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    48
      its data into memory, massage it slightly so it becomes PFB data, wrap
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    49
      it into a memory stream, load the Type 1 driver and delegate the rest
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    50
      of the work to it by calling FT_Open_Face().  (XXX TODO: after this
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    51
      has been done, the kerning data from the FOND resource should be
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    52
      appended to the face: On the Mac there are usually no AFM files
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    53
      available.  However, this is tricky since we need to map Mac char
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    54
      codes to ps glyph names to glyph ID's...)
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    55
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    56
    - If there is a TrueType font (an `sfnt' resource), read it into memory,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    57
      wrap it into a memory stream, load the TrueType driver and delegate
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    58
      the rest of the work to it, by calling FT_Open_Face().
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    59
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    60
    - Some suitcase fonts (notably Onyx) might point the `LWFN' file to
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    61
      itself, even though it doesn't contains `POST' resources.  To handle
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    62
      this special case without opening the file an extra time, we just
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    63
      ignore errors from the `LWFN' and fallback to the `sfnt' if both are
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    64
      available.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    65
  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    66
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    67
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    68
#include <ft2build.h>
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    69
#include FT_FREETYPE_H
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    70
#include FT_TRUETYPE_TAGS_H
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    71
#include FT_INTERNAL_STREAM_H
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    72
#include "ftbase.h"
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    73
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    74
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    75
#ifdef FT_MACINTOSH
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    76
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    77
  /* This is for Mac OS X.  Without redefinition, OS_INLINE */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    78
  /* expands to `static inline' which doesn't survive the   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    79
  /* -ansi compilation flag of GCC.                         */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    80
#if !HAVE_ANSI_OS_INLINE
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    81
#undef  OS_INLINE
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    82
#define OS_INLINE  static __inline__
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    83
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    84
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    85
  /* `configure' checks the availability of `ResourceIndex' strictly */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    86
  /* and sets HAVE_TYPE_RESOURCE_INDEX 1 or 0 always.  If it is      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    87
  /* not set (e.g., a build without `configure'), the availability   */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    88
  /* is guessed from the SDK version.                                */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    89
#ifndef HAVE_TYPE_RESOURCE_INDEX
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    90
#if !defined( MAC_OS_X_VERSION_10_5 ) || \
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    91
    ( MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    92
#define HAVE_TYPE_RESOURCE_INDEX 0
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    93
#else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    94
#define HAVE_TYPE_RESOURCE_INDEX 1
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    95
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    96
#endif /* !HAVE_TYPE_RESOURCE_INDEX */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    97
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    98
#if ( HAVE_TYPE_RESOURCE_INDEX == 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
    99
  typedef short  ResourceIndex;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   100
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   101
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   102
#include <CoreServices/CoreServices.h>
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   103
#include <ApplicationServices/ApplicationServices.h>
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   104
#include <sys/syslimits.h> /* PATH_MAX */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   105
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   106
  /* Don't want warnings about our own use of deprecated functions. */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   107
#define FT_DEPRECATED_ATTRIBUTE
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   108
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   109
#include FT_MAC_H
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   110
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   111
#ifndef kATSOptionFlagsUnRestrictedScope /* since Mac OS X 10.1 */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   112
#define kATSOptionFlagsUnRestrictedScope kATSOptionFlagsDefault
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   113
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   114
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   115
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   116
  /* Set PREFER_LWFN to 1 if LWFN (Type 1) is preferred over
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   117
     TrueType in case *both* are available (this is not common,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   118
     but it *is* possible). */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   119
#ifndef PREFER_LWFN
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   120
#define PREFER_LWFN  1
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   121
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   122
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   123
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   124
  /* This function is deprecated because FSSpec is deprecated in Mac OS X  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   125
  FT_EXPORT_DEF( FT_Error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   126
  FT_GetFile_From_Mac_Name( const char*  fontName,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   127
                            FSSpec*      pathSpec,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   128
                            FT_Long*     face_index )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   129
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   130
    FT_UNUSED( fontName );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   131
    FT_UNUSED( pathSpec );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   132
    FT_UNUSED( face_index );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   133
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   134
    return FT_THROW( Unimplemented_Feature );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   135
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   136
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   137
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   138
  /* Private function.                                         */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   139
  /* The FSSpec type has been discouraged for a long time,     */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   140
  /* unfortunately an FSRef replacement API for                */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   141
  /* ATSFontGetFileSpecification() is only available in        */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   142
  /* Mac OS X 10.5 and later.                                  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   143
  static OSStatus
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   144
  FT_ATSFontGetFileReference( ATSFontRef  ats_font_id,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   145
                              FSRef*      ats_font_ref )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   146
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   147
#if defined( MAC_OS_X_VERSION_10_5 ) && \
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   148
    ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   149
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   150
    OSStatus  err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   151
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   152
    err = ATSFontGetFileReference( ats_font_id, ats_font_ref );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   153
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   154
    return err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   155
#elif __LP64__ /* No 64bit Carbon API on legacy platforms */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   156
    FT_UNUSED( ats_font_id );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   157
    FT_UNUSED( ats_font_ref );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   158
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   159
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   160
    return fnfErr;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   161
#else /* 32bit Carbon API on legacy platforms */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   162
    OSStatus  err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   163
    FSSpec    spec;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   164
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   165
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   166
    err = ATSFontGetFileSpecification( ats_font_id, &spec );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   167
    if ( noErr == err )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   168
      err = FSpMakeFSRef( &spec, ats_font_ref );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   169
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   170
    return err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   171
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   172
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   173
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   174
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   175
  static FT_Error
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   176
  FT_GetFileRef_From_Mac_ATS_Name( const char*  fontName,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   177
                                   FSRef*       ats_font_ref,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   178
                                   FT_Long*     face_index )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   179
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   180
    CFStringRef  cf_fontName;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   181
    ATSFontRef   ats_font_id;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   182
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   183
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   184
    *face_index = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   185
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   186
    cf_fontName = CFStringCreateWithCString( NULL, fontName,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   187
                                             kCFStringEncodingMacRoman );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   188
    ats_font_id = ATSFontFindFromName( cf_fontName,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   189
                                       kATSOptionFlagsUnRestrictedScope );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   190
    CFRelease( cf_fontName );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   191
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   192
    if ( ats_font_id == 0 || ats_font_id == 0xFFFFFFFFUL )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   193
      return FT_THROW( Unknown_File_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   194
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   195
    if ( noErr != FT_ATSFontGetFileReference( ats_font_id, ats_font_ref ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   196
      return FT_THROW( Unknown_File_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   197
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   198
    /* face_index calculation by searching preceding fontIDs */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   199
    /* with same FSRef                                       */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   200
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   201
      ATSFontRef  id2 = ats_font_id - 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   202
      FSRef       ref2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   203
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   204
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   205
      while ( id2 > 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   206
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   207
        if ( noErr != FT_ATSFontGetFileReference( id2, &ref2 ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   208
          break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   209
        if ( noErr != FSCompareFSRefs( ats_font_ref, &ref2 ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   210
          break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   211
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   212
        id2 --;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   213
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   214
      *face_index = ats_font_id - ( id2 + 1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   215
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   216
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   217
    return FT_Err_Ok;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   218
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   219
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   220
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   221
  FT_EXPORT_DEF( FT_Error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   222
  FT_GetFilePath_From_Mac_ATS_Name( const char*  fontName,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   223
                                    UInt8*       path,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   224
                                    UInt32       maxPathSize,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   225
                                    FT_Long*     face_index )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   226
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   227
    FSRef     ref;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   228
    FT_Error  err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   229
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   230
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   231
    if ( !fontName || !face_index )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   232
      return FT_THROW( Invalid_Argument);
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   233
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   234
    err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   235
    if ( err )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   236
      return err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   237
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   238
    if ( noErr != FSRefMakePath( &ref, path, maxPathSize ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   239
      return FT_THROW( Unknown_File_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   240
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   241
    return FT_Err_Ok;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   242
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   243
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   244
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   245
  /* This function is deprecated because FSSpec is deprecated in Mac OS X  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   246
  FT_EXPORT_DEF( FT_Error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   247
  FT_GetFile_From_Mac_ATS_Name( const char*  fontName,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   248
                                FSSpec*      pathSpec,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   249
                                FT_Long*     face_index )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   250
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   251
#if ( __LP64__ ) || ( defined( MAC_OS_X_VERSION_10_5 ) && \
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   252
      ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   253
    FT_UNUSED( fontName );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   254
    FT_UNUSED( pathSpec );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   255
    FT_UNUSED( face_index );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   256
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   257
    return FT_THROW( Unimplemented_Feature );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   258
#else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   259
    FSRef     ref;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   260
    FT_Error  err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   261
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   262
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   263
    if ( !fontName || !face_index )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   264
      return FT_THROW( Invalid_Argument );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   265
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   266
    err = FT_GetFileRef_From_Mac_ATS_Name( fontName, &ref, face_index );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   267
    if ( err )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   268
      return err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   269
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   270
    if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone, NULL, NULL,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   271
                                    pathSpec, NULL ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   272
      return FT_THROW( Unknown_File_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   273
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   274
    return FT_Err_Ok;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   275
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   276
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   277
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   278
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   279
  static OSErr
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   280
  FT_FSPathMakeRes( const UInt8*    pathname,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   281
                    ResFileRefNum*  res )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   282
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   283
    OSErr  err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   284
    FSRef  ref;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   285
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   286
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   287
    if ( noErr != FSPathMakeRef( pathname, &ref, FALSE ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   288
      return FT_THROW( Cannot_Open_Resource );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   289
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   290
    /* at present, no support for dfont format */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   291
    err = FSOpenResourceFile( &ref, 0, NULL, fsRdPerm, res );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   292
    if ( noErr == err )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   293
      return err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   294
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   295
    /* fallback to original resource-fork font */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   296
    *res = FSOpenResFile( &ref, fsRdPerm );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   297
    err  = ResError();
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   298
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   299
    return err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   300
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   301
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   302
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   303
  /* Return the file type for given pathname */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   304
  static OSType
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   305
  get_file_type_from_path( const UInt8*  pathname )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   306
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   307
    FSRef          ref;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   308
    FSCatalogInfo  info;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   309
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   310
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   311
    if ( noErr != FSPathMakeRef( pathname, &ref, FALSE ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   312
      return ( OSType ) 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   313
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   314
    if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoFinderInfo, &info,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   315
                                    NULL, NULL, NULL ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   316
      return ( OSType ) 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   317
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   318
    return ((FInfo *)(info.finderInfo))->fdType;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   319
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   320
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   321
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   322
  /* Given a PostScript font name, create the Macintosh LWFN file name. */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   323
  static void
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   324
  create_lwfn_name( char*   ps_name,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   325
                    Str255  lwfn_file_name )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   326
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   327
    int       max = 5, count = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   328
    FT_Byte*  p = lwfn_file_name;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   329
    FT_Byte*  q = (FT_Byte*)ps_name;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   330
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   331
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   332
    lwfn_file_name[0] = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   333
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   334
    while ( *q )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   335
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   336
      if ( ft_isupper( *q ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   337
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   338
        if ( count )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   339
          max = 3;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   340
        count = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   341
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   342
      if ( count < max && ( ft_isalnum( *q ) || *q == '_' ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   343
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   344
        *++p = *q;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   345
        lwfn_file_name[0]++;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   346
        count++;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   347
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   348
      q++;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   349
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   350
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   351
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   352
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   353
  static short
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   354
  count_faces_sfnt( char*  fond_data )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   355
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   356
    /* The count is 1 greater than the value in the FOND.  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   357
    /* Isn't that cute? :-)                                */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   358
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   359
    return EndianS16_BtoN( *( (short*)( fond_data +
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   360
                                        sizeof ( FamRec ) ) ) ) + 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   361
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   362
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   363
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   364
  static short
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   365
  count_faces_scalable( char*  fond_data )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   366
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   367
    AsscEntry*  assoc;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   368
    short       i, face, face_all;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   369
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   370
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   371
    face_all = EndianS16_BtoN( *( (short *)( fond_data +
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   372
                                             sizeof ( FamRec ) ) ) ) + 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   373
    assoc    = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   374
    face     = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   375
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   376
    for ( i = 0; i < face_all; i++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   377
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   378
      if ( 0 == EndianS16_BtoN( assoc[i].fontSize ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   379
        face++;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   380
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   381
    return face;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   382
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   383
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   384
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   385
  /* Look inside the FOND data, answer whether there should be an SFNT
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   386
     resource, and answer the name of a possible LWFN Type 1 file.
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   387
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   388
     Thanks to Paul Miller (paulm@profoundeffects.com) for the fix
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   389
     to load a face OTHER than the first one in the FOND!
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   390
  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   391
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   392
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   393
  static void
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   394
  parse_fond( char*   fond_data,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   395
              short*  have_sfnt,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   396
              ResID*  sfnt_id,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   397
              Str255  lwfn_file_name,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   398
              short   face_index )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   399
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   400
    AsscEntry*  assoc;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   401
    AsscEntry*  base_assoc;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   402
    FamRec*     fond;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   403
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   404
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   405
    *sfnt_id          = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   406
    *have_sfnt        = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   407
    lwfn_file_name[0] = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   408
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   409
    fond       = (FamRec*)fond_data;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   410
    assoc      = (AsscEntry*)( fond_data + sizeof ( FamRec ) + 2 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   411
    base_assoc = assoc;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   412
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   413
    /* the maximum faces in a FOND is 48, size of StyleTable.indexes[] */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   414
    if ( 47 < face_index )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   415
      return;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   416
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   417
    /* Let's do a little range checking before we get too excited here */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   418
    if ( face_index < count_faces_sfnt( fond_data ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   419
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   420
      assoc += face_index;        /* add on the face_index! */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   421
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   422
      /* if the face at this index is not scalable,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   423
         fall back to the first one (old behavior) */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   424
      if ( EndianS16_BtoN( assoc->fontSize ) == 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   425
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   426
        *have_sfnt = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   427
        *sfnt_id   = EndianS16_BtoN( assoc->fontID );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   428
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   429
      else if ( base_assoc->fontSize == 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   430
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   431
        *have_sfnt = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   432
        *sfnt_id   = EndianS16_BtoN( base_assoc->fontID );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   433
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   434
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   435
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   436
    if ( EndianS32_BtoN( fond->ffStylOff ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   437
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   438
      unsigned char*  p = (unsigned char*)fond_data;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   439
      StyleTable*     style;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   440
      unsigned short  string_count;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   441
      char            ps_name[256];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   442
      unsigned char*  names[64];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   443
      int             i;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   444
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   445
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   446
      p += EndianS32_BtoN( fond->ffStylOff );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   447
      style = (StyleTable*)p;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   448
      p += sizeof ( StyleTable );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   449
      string_count = EndianS16_BtoN( *(short*)(p) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   450
      string_count = FT_MIN( 64, string_count );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   451
      p += sizeof ( short );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   452
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   453
      for ( i = 0; i < string_count; i++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   454
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   455
        names[i] = p;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   456
        p       += names[i][0];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   457
        p++;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   458
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   459
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   460
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   461
        size_t  ps_name_len = (size_t)names[0][0];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   462
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   463
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   464
        if ( ps_name_len != 0 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   465
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   466
          ft_memcpy(ps_name, names[0] + 1, ps_name_len);
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   467
          ps_name[ps_name_len] = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   468
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   469
        if ( style->indexes[face_index] > 1 &&
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   470
             style->indexes[face_index] <= string_count )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   471
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   472
          unsigned char*  suffixes = names[style->indexes[face_index] - 1];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   473
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   474
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   475
          for ( i = 1; i <= suffixes[0]; i++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   476
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   477
            unsigned char*  s;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   478
            size_t          j = suffixes[i] - 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   479
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   480
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   481
            if ( j < string_count && ( s = names[j] ) != NULL )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   482
            {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   483
              size_t  s_len = (size_t)s[0];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   484
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   485
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   486
              if ( s_len != 0 && ps_name_len + s_len < sizeof ( ps_name ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   487
              {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   488
                ft_memcpy( ps_name + ps_name_len, s + 1, s_len );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   489
                ps_name_len += s_len;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   490
                ps_name[ps_name_len] = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   491
              }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   492
            }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   493
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   494
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   495
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   496
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   497
      create_lwfn_name( ps_name, lwfn_file_name );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   498
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   499
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   500
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   501
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   502
  static  FT_Error
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   503
  lookup_lwfn_by_fond( const UInt8*      path_fond,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   504
                       ConstStr255Param  base_lwfn,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   505
                       UInt8*            path_lwfn,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   506
                       size_t            path_size )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   507
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   508
    FSRef   ref, par_ref;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   509
    size_t  dirname_len;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   510
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   511
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   512
    /* Pathname for FSRef can be in various formats: HFS, HFS+, and POSIX. */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   513
    /* We should not extract parent directory by string manipulation.      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   514
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   515
    if ( noErr != FSPathMakeRef( path_fond, &ref, FALSE ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   516
      return FT_THROW( Invalid_Argument );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   517
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   518
    if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   519
                                    NULL, NULL, NULL, &par_ref ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   520
      return FT_THROW( Invalid_Argument );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   521
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   522
    if ( noErr != FSRefMakePath( &par_ref, path_lwfn, path_size ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   523
      return FT_THROW( Invalid_Argument );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   524
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   525
    if ( ft_strlen( (char *)path_lwfn ) + 1 + base_lwfn[0] > path_size )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   526
      return FT_THROW( Invalid_Argument );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   527
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   528
    /* now we have absolute dirname in path_lwfn */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   529
    ft_strcat( (char *)path_lwfn, "/" );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   530
    dirname_len = ft_strlen( (char *)path_lwfn );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   531
    ft_strcat( (char *)path_lwfn, (char *)base_lwfn + 1 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   532
    path_lwfn[dirname_len + base_lwfn[0]] = '\0';
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   533
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   534
    if ( noErr != FSPathMakeRef( path_lwfn, &ref, FALSE ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   535
      return FT_THROW( Cannot_Open_Resource );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   536
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   537
    if ( noErr != FSGetCatalogInfo( &ref, kFSCatInfoNone,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   538
                                    NULL, NULL, NULL, NULL ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   539
      return FT_THROW( Cannot_Open_Resource );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   540
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   541
    return FT_Err_Ok;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   542
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   543
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   544
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   545
  static short
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   546
  count_faces( Handle        fond,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   547
               const UInt8*  pathname )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   548
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   549
    ResID     sfnt_id;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   550
    short     have_sfnt, have_lwfn;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   551
    Str255    lwfn_file_name;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   552
    UInt8     buff[PATH_MAX];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   553
    FT_Error  err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   554
    short     num_faces;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   555
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   556
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   557
    have_sfnt = have_lwfn = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   558
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   559
    parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, 0 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   560
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   561
    if ( lwfn_file_name[0] )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   562
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   563
      err = lookup_lwfn_by_fond( pathname, lwfn_file_name,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   564
                                 buff, sizeof ( buff )  );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   565
      if ( !err )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   566
        have_lwfn = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   567
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   568
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   569
    if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   570
      num_faces = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   571
    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   572
      num_faces = count_faces_scalable( *fond );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   573
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   574
    return num_faces;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   575
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   576
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   577
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   578
  /* Read Type 1 data from the POST resources inside the LWFN file,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   579
     return a PFB buffer.  This is somewhat convoluted because the FT2
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   580
     PFB parser wants the ASCII header as one chunk, and the LWFN
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   581
     chunks are often not organized that way, so we glue chunks
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   582
     of the same type together. */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   583
  static FT_Error
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   584
  read_lwfn( FT_Memory      memory,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   585
             ResFileRefNum  res,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   586
             FT_Byte**      pfb_data,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   587
             FT_ULong*      size )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   588
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   589
    FT_Error       error = FT_Err_Ok;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   590
    ResID          res_id;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   591
    unsigned char  *buffer, *p, *size_p = NULL;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   592
    FT_ULong       total_size = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   593
    FT_ULong       old_total_size = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   594
    FT_ULong       post_size, pfb_chunk_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   595
    Handle         post_data;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   596
    char           code, last_code;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   597
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   598
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   599
    UseResFile( res );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   600
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   601
    /* First pass: load all POST resources, and determine the size of */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   602
    /* the output buffer.                                             */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   603
    res_id    = 501;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   604
    last_code = -1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   605
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   606
    for (;;)
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   607
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   608
      post_data = Get1Resource( TTAG_POST, res_id++ );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   609
      if ( !post_data )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   610
        break;  /* we are done */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   611
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   612
      code = (*post_data)[0];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   613
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   614
      if ( code != last_code )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   615
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   616
        if ( code == 5 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   617
          total_size += 2; /* just the end code */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   618
        else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   619
          total_size += 6; /* code + 4 bytes chunk length */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   620
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   621
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   622
      total_size += (FT_ULong)GetHandleSize( post_data ) - 2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   623
      last_code = code;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   624
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   625
      /* detect resource fork overflow */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   626
      if ( FT_MAC_RFORK_MAX_LEN < total_size )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   627
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   628
        error = FT_THROW( Array_Too_Large );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   629
        goto Error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   630
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   631
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   632
      old_total_size = total_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   633
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   634
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   635
    if ( FT_ALLOC( buffer, (FT_Long)total_size ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   636
      goto Error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   637
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   638
    /* Second pass: append all POST data to the buffer, add PFB fields. */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   639
    /* Glue all consecutive chunks of the same type together.           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   640
    p              = buffer;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   641
    res_id         = 501;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   642
    last_code      = -1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   643
    pfb_chunk_size = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   644
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   645
    for (;;)
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   646
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   647
      post_data = Get1Resource( TTAG_POST, res_id++ );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   648
      if ( !post_data )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   649
        break;  /* we are done */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   650
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   651
      post_size = (FT_ULong)GetHandleSize( post_data ) - 2;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   652
      code = (*post_data)[0];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   653
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   654
      if ( code != last_code )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   655
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   656
        if ( last_code != -1 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   657
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   658
          /* we are done adding a chunk, fill in the size field */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   659
          if ( size_p )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   660
          {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   661
            *size_p++ = (FT_Byte)(   pfb_chunk_size         & 0xFF );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   662
            *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 8  ) & 0xFF );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   663
            *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 16 ) & 0xFF );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   664
            *size_p++ = (FT_Byte)( ( pfb_chunk_size >> 24 ) & 0xFF );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   665
          }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   666
          pfb_chunk_size = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   667
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   668
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   669
        *p++ = 0x80;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   670
        if ( code == 5 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   671
          *p++ = 0x03;  /* the end */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   672
        else if ( code == 2 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   673
          *p++ = 0x02;  /* binary segment */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   674
        else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   675
          *p++ = 0x01;  /* ASCII segment */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   676
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   677
        if ( code != 5 )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   678
        {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   679
          size_p = p;   /* save for later */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   680
          p += 4;       /* make space for size field */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   681
        }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   682
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   683
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   684
      ft_memcpy( p, *post_data + 2, post_size );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   685
      pfb_chunk_size += post_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   686
      p += post_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   687
      last_code = code;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   688
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   689
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   690
    *pfb_data = buffer;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   691
    *size = total_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   692
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   693
  Error:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   694
    CloseResFile( res );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   695
    return error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   696
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   697
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   698
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   699
  /* Create a new FT_Face from a file path to an LWFN file. */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   700
  static FT_Error
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   701
  FT_New_Face_From_LWFN( FT_Library    library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   702
                         const UInt8*  pathname,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   703
                         FT_Long       face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   704
                         FT_Face*      aface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   705
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   706
    FT_Byte*       pfb_data;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   707
    FT_ULong       pfb_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   708
    FT_Error       error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   709
    ResFileRefNum  res;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   710
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   711
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   712
    if ( noErr != FT_FSPathMakeRes( pathname, &res ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   713
      return FT_THROW( Cannot_Open_Resource );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   714
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   715
    pfb_data = NULL;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   716
    pfb_size = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   717
    error = read_lwfn( library->memory, res, &pfb_data, &pfb_size );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   718
    CloseResFile( res ); /* PFB is already loaded, useless anymore */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   719
    if ( error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   720
      return error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   721
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   722
    return open_face_from_buffer( library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   723
                                  pfb_data,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   724
                                  pfb_size,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   725
                                  face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   726
                                  "type1",
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   727
                                  aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   728
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   729
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   730
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   731
  /* Create a new FT_Face from an SFNT resource, specified by res ID. */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   732
  static FT_Error
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   733
  FT_New_Face_From_SFNT( FT_Library  library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   734
                         ResID       sfnt_id,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   735
                         FT_Long     face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   736
                         FT_Face*    aface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   737
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   738
    Handle     sfnt = NULL;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   739
    FT_Byte*   sfnt_data;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   740
    size_t     sfnt_size;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   741
    FT_Error   error  = FT_Err_Ok;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   742
    FT_Memory  memory = library->memory;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   743
    int        is_cff, is_sfnt_ps;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   744
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   745
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   746
    sfnt = GetResource( TTAG_sfnt, sfnt_id );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   747
    if ( !sfnt )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   748
      return FT_THROW( Invalid_Handle );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   749
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   750
    sfnt_size = (FT_ULong)GetHandleSize( sfnt );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   751
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   752
    /* detect resource fork overflow */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   753
    if ( FT_MAC_RFORK_MAX_LEN < sfnt_size )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   754
      return FT_THROW( Array_Too_Large );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   755
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   756
    if ( FT_ALLOC( sfnt_data, (FT_Long)sfnt_size ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   757
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   758
      ReleaseResource( sfnt );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   759
      return error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   760
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   761
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   762
    ft_memcpy( sfnt_data, *sfnt, sfnt_size );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   763
    ReleaseResource( sfnt );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   764
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   765
    is_cff     = sfnt_size > 4 && !ft_memcmp( sfnt_data, "OTTO", 4 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   766
    is_sfnt_ps = sfnt_size > 4 && !ft_memcmp( sfnt_data, "typ1", 4 );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   767
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   768
    if ( is_sfnt_ps )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   769
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   770
      FT_Stream  stream;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   771
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   772
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   773
      if ( FT_NEW( stream ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   774
        goto Try_OpenType;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   775
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   776
      FT_Stream_OpenMemory( stream, sfnt_data, sfnt_size );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   777
      if ( !open_face_PS_from_sfnt_stream( library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   778
                                           stream,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   779
                                           face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   780
                                           0, NULL,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   781
                                           aface ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   782
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   783
        FT_Stream_Close( stream );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   784
        FT_FREE( stream );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   785
        FT_FREE( sfnt_data );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   786
        goto Exit;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   787
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   788
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   789
      FT_FREE( stream );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   790
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   791
  Try_OpenType:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   792
    error = open_face_from_buffer( library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   793
                                   sfnt_data,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   794
                                   sfnt_size,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   795
                                   face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   796
                                   is_cff ? "cff" : "truetype",
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   797
                                   aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   798
  Exit:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   799
    return error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   800
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   801
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   802
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   803
  /* Create a new FT_Face from a file path to a suitcase file. */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   804
  static FT_Error
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   805
  FT_New_Face_From_Suitcase( FT_Library    library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   806
                             const UInt8*  pathname,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   807
                             FT_Long       face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   808
                             FT_Face*      aface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   809
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   810
    FT_Error       error = FT_ERR( Cannot_Open_Resource );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   811
    ResFileRefNum  res_ref;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   812
    ResourceIndex  res_index;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   813
    Handle         fond;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   814
    short          num_faces_in_res;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   815
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   816
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   817
    if ( noErr != FT_FSPathMakeRes( pathname, &res_ref ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   818
      return FT_THROW( Cannot_Open_Resource );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   819
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   820
    UseResFile( res_ref );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   821
    if ( ResError() )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   822
      return FT_THROW( Cannot_Open_Resource );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   823
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   824
    num_faces_in_res = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   825
    for ( res_index = 1; ; res_index++ )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   826
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   827
      short  num_faces_in_fond;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   828
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   829
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   830
      fond = Get1IndResource( TTAG_FOND, res_index );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   831
      if ( ResError() )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   832
        break;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   833
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   834
      num_faces_in_fond  = count_faces( fond, pathname );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   835
      num_faces_in_res  += num_faces_in_fond;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   836
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   837
      if ( 0 <= face_index && face_index < num_faces_in_fond && error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   838
        error = FT_New_Face_From_FOND( library, fond, face_index, aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   839
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   840
      face_index -= num_faces_in_fond;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   841
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   842
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   843
    CloseResFile( res_ref );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   844
    if ( !error && aface && *aface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   845
      (*aface)->num_faces = num_faces_in_res;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   846
    return error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   847
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   848
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   849
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   850
  /* documentation is in ftmac.h */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   851
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   852
  FT_EXPORT_DEF( FT_Error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   853
  FT_New_Face_From_FOND( FT_Library  library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   854
                         Handle      fond,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   855
                         FT_Long     face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   856
                         FT_Face*    aface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   857
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   858
    short     have_sfnt, have_lwfn = 0;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   859
    ResID     sfnt_id, fond_id;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   860
    OSType    fond_type;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   861
    Str255    fond_name;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   862
    Str255    lwfn_file_name;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   863
    UInt8     path_lwfn[PATH_MAX];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   864
    OSErr     err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   865
    FT_Error  error = FT_Err_Ok;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   866
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   867
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   868
    /* check of `library' and `aface' delayed to `FT_New_Face_From_XXX' */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   869
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   870
    GetResInfo( fond, &fond_id, &fond_type, fond_name );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   871
    if ( ResError() != noErr || fond_type != TTAG_FOND )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   872
      return FT_THROW( Invalid_File_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   873
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   874
    parse_fond( *fond, &have_sfnt, &sfnt_id, lwfn_file_name, face_index );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   875
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   876
    if ( lwfn_file_name[0] )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   877
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   878
      ResFileRefNum  res;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   879
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   880
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   881
      res = HomeResFile( fond );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   882
      if ( noErr != ResError() )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   883
        goto found_no_lwfn_file;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   884
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   885
      {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   886
        UInt8  path_fond[PATH_MAX];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   887
        FSRef  ref;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   888
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   889
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   890
        err = FSGetForkCBInfo( res, kFSInvalidVolumeRefNum,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   891
                               NULL, NULL, NULL, &ref, NULL );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   892
        if ( noErr != err )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   893
          goto found_no_lwfn_file;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   894
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   895
        err = FSRefMakePath( &ref, path_fond, sizeof ( path_fond ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   896
        if ( noErr != err )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   897
          goto found_no_lwfn_file;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   898
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   899
        error = lookup_lwfn_by_fond( path_fond, lwfn_file_name,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   900
                                     path_lwfn, sizeof ( path_lwfn ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   901
        if ( !error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   902
          have_lwfn = 1;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   903
      }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   904
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   905
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   906
    if ( have_lwfn && ( !have_sfnt || PREFER_LWFN ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   907
      error = FT_New_Face_From_LWFN( library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   908
                                     path_lwfn,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   909
                                     face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   910
                                     aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   911
    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   912
      error = FT_THROW( Unknown_File_Format );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   913
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   914
  found_no_lwfn_file:
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   915
    if ( have_sfnt && error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   916
      error = FT_New_Face_From_SFNT( library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   917
                                     sfnt_id,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   918
                                     face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   919
                                     aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   920
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   921
    return error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   922
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   923
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   924
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   925
  /* Common function to load a new FT_Face from a resource file. */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   926
  static FT_Error
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   927
  FT_New_Face_From_Resource( FT_Library    library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   928
                             const UInt8*  pathname,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   929
                             FT_Long       face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   930
                             FT_Face*      aface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   931
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   932
    OSType    file_type;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   933
    FT_Error  error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   934
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   935
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   936
    /* LWFN is a (very) specific file format, check for it explicitly */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   937
    file_type = get_file_type_from_path( pathname );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   938
    if ( file_type == TTAG_LWFN )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   939
      return FT_New_Face_From_LWFN( library, pathname, face_index, aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   940
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   941
    /* Otherwise the file type doesn't matter (there are more than  */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   942
    /* `FFIL' and `tfil').  Just try opening it as a font suitcase; */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   943
    /* if it works, fine.                                           */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   944
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   945
    error = FT_New_Face_From_Suitcase( library, pathname, face_index, aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   946
    if ( error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   947
    {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   948
      /* let it fall through to normal loader (.ttf, .otf, etc.); */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   949
      /* we signal this by returning no error and no FT_Face      */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   950
      *aface = NULL;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   951
    }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   952
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   953
    return FT_Err_Ok;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   954
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   955
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   956
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   957
  /**************************************************************************
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   958
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   959
   * @Function:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   960
   *   FT_New_Face
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   961
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   962
   * @Description:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   963
   *   This is the Mac-specific implementation of FT_New_Face.  In
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   964
   *   addition to the standard FT_New_Face() functionality, it also
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   965
   *   accepts pathnames to Mac suitcase files.  For further
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   966
   *   documentation see the original FT_New_Face() in freetype.h.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   967
   */
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   968
  FT_EXPORT_DEF( FT_Error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   969
  FT_New_Face( FT_Library   library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   970
               const char*  pathname,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   971
               FT_Long      face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   972
               FT_Face*     aface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   973
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   974
    FT_Open_Args  args;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   975
    FT_Error      error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   976
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   977
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   978
    /* test for valid `library' and `aface' delayed to FT_Open_Face() */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   979
    if ( !pathname )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   980
      return FT_THROW( Invalid_Argument );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   981
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   982
    *aface = NULL;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   983
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   984
    /* try resourcefork based font: LWFN, FFIL */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   985
    error = FT_New_Face_From_Resource( library, (UInt8 *)pathname,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   986
                                       face_index, aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   987
    if ( error || *aface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   988
      return error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   989
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   990
    /* let it fall through to normal loader (.ttf, .otf, etc.) */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   991
    args.flags    = FT_OPEN_PATHNAME;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   992
    args.pathname = (char*)pathname;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   993
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   994
    return FT_Open_Face( library, &args, face_index, aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   995
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   996
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
   997
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   998
  /**************************************************************************
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
   999
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1000
   * @Function:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1001
   *   FT_New_Face_From_FSRef
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1002
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1003
   * @Description:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1004
   *   FT_New_Face_From_FSRef is identical to FT_New_Face except it
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1005
   *   accepts an FSRef instead of a path.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1006
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1007
   * This function is deprecated because Carbon data types (FSRef)
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1008
   * are not cross-platform, and thus not suitable for the FreeType API.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1009
   */
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1010
  FT_EXPORT_DEF( FT_Error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1011
  FT_New_Face_From_FSRef( FT_Library    library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1012
                          const FSRef*  ref,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1013
                          FT_Long       face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1014
                          FT_Face*      aface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1015
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1016
    FT_Error      error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1017
    FT_Open_Args  args;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1018
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1019
    OSErr  err;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1020
    UInt8  pathname[PATH_MAX];
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1021
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1022
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1023
    /* check of `library' and `aface' delayed to */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1024
    /* `FT_New_Face_From_Resource'               */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1025
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1026
    if ( !ref )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1027
      return FT_THROW( Invalid_Argument );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1028
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1029
    err = FSRefMakePath( ref, pathname, sizeof ( pathname ) );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1030
    if ( err )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1031
      error = FT_THROW( Cannot_Open_Resource );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1032
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1033
    error = FT_New_Face_From_Resource( library, pathname, face_index, aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1034
    if ( error || *aface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1035
      return error;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1036
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1037
    /* fallback to datafork font */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1038
    args.flags    = FT_OPEN_PATHNAME;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1039
    args.pathname = (char*)pathname;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1040
    return FT_Open_Face( library, &args, face_index, aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1041
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1042
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1043
54876
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1044
  /**************************************************************************
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1045
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1046
   * @Function:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1047
   *   FT_New_Face_From_FSSpec
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1048
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1049
   * @Description:
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1050
   *   FT_New_Face_From_FSSpec is identical to FT_New_Face except it
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1051
   *   accepts an FSSpec instead of a path.
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1052
   *
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1053
   * This function is deprecated because FSSpec is deprecated in Mac OS X
da3834261f0c 8222362: Upgrade to Freetype 2.10.0
prr
parents: 49234
diff changeset
  1054
   */
49234
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1055
  FT_EXPORT_DEF( FT_Error )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1056
  FT_New_Face_From_FSSpec( FT_Library     library,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1057
                           const FSSpec*  spec,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1058
                           FT_Long        face_index,
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1059
                           FT_Face*       aface )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1060
  {
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1061
#if ( __LP64__ ) || ( defined( MAC_OS_X_VERSION_10_5 ) && \
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1062
      ( MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 ) )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1063
    FT_UNUSED( library );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1064
    FT_UNUSED( spec );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1065
    FT_UNUSED( face_index );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1066
    FT_UNUSED( aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1067
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1068
    return FT_THROW( Unimplemented_Feature );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1069
#else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1070
    FSRef  ref;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1071
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1072
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1073
    /* check of `library' and `aface' delayed to `FT_New_Face_From_FSRef' */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1074
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1075
    if ( !spec || FSpMakeFSRef( spec, &ref ) != noErr )
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1076
      return FT_THROW( Invalid_Argument );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1077
    else
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1078
      return FT_New_Face_From_FSRef( library, &ref, face_index, aface );
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1079
#endif
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1080
  }
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1081
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1082
#else /* !FT_MACINTOSH */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1083
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1084
  /* ANSI C doesn't like empty source files */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1085
  typedef int  _ft_mac_dummy;
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1086
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1087
#endif /* !FT_MACINTOSH */
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1088
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1089
3375a8039fde 8193017: Import freetype sources into OpenJDK source tree
prr
parents:
diff changeset
  1090
/* END */