1044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/***************************************************************************/
2044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*                                                                         */
3044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*  ftfstype.c                                                             */
4044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*                                                                         */
5044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*    FreeType utility file to access FSType data (body).                  */
6044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*                                                                         */
7044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*  Copyright 2008, 2009 by                                                */
8044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*                                                                         */
10044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*  This file is part of the FreeType project, and may only be used,       */
11044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*  modified, and distributed under the terms of the FreeType project      */
12044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*  this file you indicate that you have read the license and              */
14044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*  understand and accept it fully.                                        */
15044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/*                                                                         */
16044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/***************************************************************************/
17044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
18044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger#include <ft2build.h>
19044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger#include FT_TYPE1_TABLES_H
20044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger#include FT_TRUETYPE_TABLES_H
21044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger#include FT_INTERNAL_SERVICE_H
22044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger#include FT_SERVICE_POSTSCRIPT_INFO_H
23044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
24044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
25044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger  /* documentation is in freetype.h */
26044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
27044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger  FT_EXPORT_DEF( FT_UShort )
28044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger  FT_Get_FSType_Flags( FT_Face  face )
29044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger  {
30044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger    TT_OS2*  os2;
31044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
32044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
33044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger    /* first, try to get the fs_type directly from the font */
34044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger    if ( face )
35044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger    {
36044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger      FT_Service_PsInfo  service = NULL;
37044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
38044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
39044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger      FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO );
40044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
41044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger      if ( service && service->ps_get_font_extra )
42044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger      {
43044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger        PS_FontExtraRec  extra;
44044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
45044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
46044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger        if ( !service->ps_get_font_extra( face, &extra ) &&
47044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger             extra.fs_type != 0                          )
48044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger          return extra.fs_type;
49044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger      }
50044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger    }
51044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
52044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger    /* look at FSType before fsType for Type42 */
53044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
54044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger    if ( ( os2 = (TT_OS2*)FT_Get_Sfnt_Table( face, ft_sfnt_os2 ) ) != NULL &&
55044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger         os2->version != 0xFFFFU                                           )
56044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger      return os2->fsType;
57044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
58044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger    return 0;
59044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger  }
60044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
61044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger
62044c6dceb826c2dbcdb9c3ea54436ff73a271e34Derek Sollenberger/* END */
63