1 /***************************************************************************/
   2 /*                                                                         */
   3 /*  ftfstype.c                                                             */
   4 /*                                                                         */
   5 /*    FreeType utility file to access FSType data (body).                  */
   6 /*                                                                         */
   7 /*  Copyright 2008-2018 by                                                 */
   8 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
   9 /*                                                                         */
  10 /*  This file is part of the FreeType project, and may only be used,       */
  11 /*  modified, and distributed under the terms of the FreeType project      */
  12 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
  13 /*  this file you indicate that you have read the license and              */
  14 /*  understand and accept it fully.                                        */
  15 /*                                                                         */
  16 /***************************************************************************/
  17 
  18 #include <ft2build.h>
  19 #include FT_TYPE1_TABLES_H
  20 #include FT_TRUETYPE_TABLES_H
  21 #include FT_INTERNAL_SERVICE_H
  22 #include FT_SERVICE_POSTSCRIPT_INFO_H
  23 
  24 
  25   /* documentation is in freetype.h */
  26 
  27   FT_EXPORT_DEF( FT_UShort )
  28   FT_Get_FSType_Flags( FT_Face  face )
  29   {
  30     TT_OS2*  os2;
  31 
  32 
  33     /* first, try to get the fs_type directly from the font */
  34     if ( face )
  35     {
  36       FT_Service_PsInfo  service = NULL;
  37 
  38 
  39       FT_FACE_FIND_SERVICE( face, service, POSTSCRIPT_INFO );
  40 
  41       if ( service && service->ps_get_font_extra )
  42       {
  43         PS_FontExtraRec  extra;
  44 
  45 
  46         if ( !service->ps_get_font_extra( face, &extra ) &&
  47              extra.fs_type != 0                          )
  48           return extra.fs_type;
  49       }
  50     }
  51 
  52     /* look at FSType before fsType for Type42 */
  53 
  54     if ( ( os2 = (TT_OS2*)FT_Get_Sfnt_Table( face, FT_SFNT_OS2 ) ) != NULL &&
  55          os2->version != 0xFFFFU                                           )
  56       return os2->fsType;
  57 
  58     return 0;
  59   }
  60 
  61 
  62 /* END */