⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cffdrivr.c

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 C
📖 第 1 页 / 共 2 页
字号:
      FT_UInt  len = (FT_UInt)ft_strlen( gname );      if ( len >= buffer_max )        len = buffer_max - 1;      FT_MEM_COPY( buffer, gname, len );      ((FT_Byte*)buffer)[len] = 0;    }    FT_FREE( gname );    error = CFF_Err_Ok;    Exit:      return error;  }  static FT_UInt  cff_get_name_index( CFF_Face    face,                      FT_String*  glyph_name )  {    CFF_Font            cff;    CFF_Charset         charset;    FT_Service_PsCMaps  psnames;    FT_Memory           memory = FT_FACE_MEMORY( face );    FT_String*          name;    FT_UShort           sid;    FT_UInt             i;    FT_Int              result;    cff     = (CFF_FontRec *)face->extra.data;    charset = &cff->charset;    FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );    if ( !psnames )      return 0;    for ( i = 0; i < cff->num_glyphs; i++ )    {      sid = charset->sids[i];      if ( sid > 390 )        name = cff_index_get_name( &cff->string_index, sid - 391 );      else        name = (FT_String *)psnames->adobe_std_strings( sid );      result = ft_strcmp( glyph_name, name );      if ( sid > 390 )        FT_FREE( name );      if ( !result )        return i;    }    return 0;  }  static const FT_Service_GlyphDictRec  cff_service_glyph_dict =  {    (FT_GlyphDict_GetNameFunc)  cff_get_glyph_name,    (FT_GlyphDict_NameIndexFunc)cff_get_name_index,  }; /*  *  POSTSCRIPT INFO SERVICE  *  */  static FT_Int  cff_ps_has_glyph_names( FT_Face  face )  {    return ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) > 0;  }  static const FT_Service_PsInfoRec  cff_service_ps_info =  {    (PS_GetFontInfoFunc)   NULL,        /* unsupported with CFF fonts */    (PS_HasGlyphNamesFunc) cff_ps_has_glyph_names,    (PS_GetFontPrivateFunc)NULL         /* unsupported with CFF fonts */  };  /*   * TT CMAP INFO   *   * If the charmap is a synthetic Unicode encoding cmap or    * a Type 1 standard (or expert) encoding cmap, hide TT CMAP INFO    * service defined in SFNT module.   *   * Otherwise call the service function in the sfnt module.   *   */  static FT_Error  cff_get_cmap_info( FT_CharMap    charmap,                     TT_CMapInfo  *cmap_info )  {    FT_CMap   cmap  = FT_CMAP( charmap );    FT_Error  error = CFF_Err_Ok;    cmap_info->language = 0;    if ( cmap->clazz != &cff_cmap_encoding_class_rec &&          cmap->clazz != &cff_cmap_unicode_class_rec  )    {      FT_Face             face    = FT_CMAP_FACE( cmap );      FT_Library          library = FT_FACE_LIBRARY( face );      FT_Module           sfnt    = FT_Get_Module( library, "sfnt" );      FT_Service_TTCMaps  service =        (FT_Service_TTCMaps)ft_module_get_service( sfnt,                                                   FT_SERVICE_ID_TT_CMAP );      if ( service && service->get_cmap_info )        error = service->get_cmap_info( charmap, cmap_info );    }    return error;  }  static const FT_Service_TTCMapsRec  cff_service_get_cmap_info =  {    (TT_CMap_Info_GetFunc)cff_get_cmap_info  };  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /****                                                                 ****/  /****                                                                 ****/  /****                D R I V E R  I N T E R F A C E                   ****/  /****                                                                 ****/  /****                                                                 ****/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  static const FT_ServiceDescRec  cff_services[] =  {    { FT_SERVICE_ID_XF86_NAME,       FT_XF86_FORMAT_CFF },    { FT_SERVICE_ID_POSTSCRIPT_INFO, &cff_service_ps_info },#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES    { FT_SERVICE_ID_GLYPH_DICT,      &cff_service_glyph_dict },#endif    { FT_SERVICE_ID_TT_CMAP,         &cff_service_get_cmap_info },    { NULL, NULL }  };  FT_CALLBACK_DEF( FT_Module_Interface )  cff_get_interface( FT_Module    driver,       /* CFF_Driver */                     const char*  module_interface )  {    FT_Module            sfnt;    FT_Module_Interface  result;    result = ft_service_list_lookup( cff_services, module_interface );    if ( result != NULL )      return  result;    /* we pass our request to the `sfnt' module */    sfnt = FT_Get_Module( driver->library, "sfnt" );    return sfnt ? sfnt->clazz->get_interface( sfnt, module_interface ) : 0;  }  /* The FT_DriverInterface structure is defined in ftdriver.h. */  FT_CALLBACK_TABLE_DEF  const FT_Driver_ClassRec  cff_driver_class =  {    /* begin with the FT_Module_Class fields */    {      FT_MODULE_FONT_DRIVER       |      FT_MODULE_DRIVER_SCALABLE   |      FT_MODULE_DRIVER_HAS_HINTER,      sizeof( CFF_DriverRec ),      "cff",      0x10000L,      0x20000L,      0,   /* module-specific interface */      cff_driver_init,      cff_driver_done,      cff_get_interface,    },    /* now the specific driver fields */    sizeof( TT_FaceRec ),    sizeof( CFF_SizeRec ),    sizeof( CFF_GlyphSlotRec ),    cff_face_init,    cff_face_done,    cff_size_init,    cff_size_done,    cff_slot_init,    cff_slot_done,    cff_point_size_reset,    cff_size_reset,    Load_Glyph,    cff_get_kerning,    0,                      /* FT_Face_AttachFunc      */    0                       /* FT_Face_GetAdvancesFunc */  };/* END */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -