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

📄 cffdrivr.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 );      if ( !name )        continue;      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 FT_Error  cff_ps_get_font_info( CFF_Face         face,                        PS_FontInfoRec*  afont_info )  {    CFF_Font  cff   = (CFF_Font)face->extra.data;    FT_Error  error = FT_Err_Ok;    if ( cff && cff->font_info == NULL )    {      CFF_FontRecDict  dict = &cff->top_font.font_dict;      PS_FontInfoRec  *font_info;      FT_Memory        memory = face->root.memory;      if ( FT_ALLOC( font_info, sizeof ( *font_info ) ) )        goto Fail;      font_info->version     = cff_index_get_sid_string( &cff->string_index,                                                         dict->version,                                                         cff->psnames );      font_info->notice      = cff_index_get_sid_string( &cff->string_index,                                                         dict->notice,                                                         cff->psnames );      font_info->full_name   = cff_index_get_sid_string( &cff->string_index,                                                         dict->full_name,                                                         cff->psnames );      font_info->family_name = cff_index_get_sid_string( &cff->string_index,                                                         dict->family_name,                                                         cff->psnames );      font_info->weight      = cff_index_get_sid_string( &cff->string_index,                                                         dict->weight,                                                         cff->psnames );      font_info->italic_angle        = dict->italic_angle;      font_info->is_fixed_pitch      = dict->is_fixed_pitch;      font_info->underline_position  = (FT_Short)dict->underline_position;      font_info->underline_thickness = (FT_Short)dict->underline_thickness;      cff->font_info = font_info;    }    *afont_info = *cff->font_info;  Fail:    return error;  }  static const FT_Service_PsInfoRec  cff_service_ps_info =  {    (PS_GetFontInfoFunc)   cff_ps_get_font_info,    (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,#ifdef FT_CONFIG_OPTION_OLD_INTERNALS    ft_stub_set_char_sizes,    ft_stub_set_pixel_sizes,#endif    Load_Glyph,    cff_get_kerning,    0,                      /* FT_Face_AttachFunc      */    0,                      /* FT_Face_GetAdvancesFunc */    cff_size_request,#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS    cff_size_select#else    0                       /* FT_Size_SelectFunc      */#endif  };/* END */

⌨️ 快捷键说明

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