shithub: purgatorio

ref: a8083462e62459b2ae8a243dc4ba88416eba03b1

View raw version
/***************************************************************************/
/*                                                                         */
/*  fttype1.c                                                              */
/*                                                                         */
/*    FreeType utility file for PS names support (body).                   */
/*                                                                         */
/*  Copyright 2002 by                                                      */
/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
/*                                                                         */
/*  This file is part of the FreeType project, and may only be used,       */
/*  modified, and distributed under the terms of the FreeType project      */
/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
/*  this file you indicate that you have read the license and              */
/*  understand and accept it fully.                                        */
/*                                                                         */
/***************************************************************************/


#include <ft2build.h>
#include FT_INTERNAL_TYPE1_TYPES_H
#include FT_INTERNAL_TYPE42_TYPES_H
#include FT_INTERNAL_OBJECTS_H


  /* documentation is in t1tables.h */

  FT_EXPORT_DEF( FT_Error )
  FT_Get_PS_Font_Info( FT_Face          face,
                       PS_FontInfoRec*  afont_info )
  {
    PS_FontInfo  font_info = NULL;
    FT_Error     error     = FT_Err_Invalid_Argument;
    const char*  driver_name;


    if ( face && face->driver && face->driver->root.clazz )
    {
      driver_name = face->driver->root.clazz->module_name;
      if ( ft_strcmp( driver_name, "type1" ) == 0 )
        font_info = &((T1_Face)face)->type1.font_info;
      else if ( ft_strcmp( driver_name, "t1cid" ) == 0 )
        font_info = &((CID_Face)face)->cid.font_info;
      else if ( ft_strcmp( driver_name, "type42" ) == 0 )
        font_info = &((T42_Face)face)->type1.font_info;
    }
    if ( font_info != NULL )
    {
      *afont_info = *font_info;
      error = FT_Err_Ok;
    }

    return error;
  }


  /* XXX: Bad hack, but I didn't want to change several drivers here. */

  /* documentation is in t1tables.h */

  FT_EXPORT_DEF( FT_Int )
  FT_Has_PS_Glyph_Names( FT_Face  face )
  {
    FT_Int       result = 0;
    const char*  driver_name;


    if ( face && face->driver && face->driver->root.clazz )
    {
      /* Currently, only the type1, type42, and cff drivers provide */
      /* reliable glyph names...                                    */

      /* We could probably hack the TrueType driver to recognize    */
      /* certain cases where the glyph names are most certainly     */
      /* correct (e.g. using a 20 or 22 format `post' table), but   */
      /* this will probably happen later...                         */

      driver_name = face->driver->root.clazz->module_name;
      result      = ( ft_strcmp( driver_name, "type1"  ) == 0 ||
                      ft_strcmp( driver_name, "type42" ) == 0 ||
                      ft_strcmp( driver_name, "cff"    ) == 0 );
    }

    return result;
  }


/* END */