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

📄 cffdrivr.c

📁 source code: Covert TXT to PDF
💻 C
📖 第 1 页 / 共 2 页
字号:
    Exit:      return error;  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    cff_get_char_index                                                 */  /*                                                                       */  /* <Description>                                                         */  /*    Uses a charmap to return a given character code's glyph index.     */  /*                                                                       */  /* <Input>                                                               */  /*    charmap  :: A handle to the source charmap object.                 */  /*    charcode :: The character code.                                    */  /*                                                                       */  /* <Return>                                                              */  /*    Glyph index.  0 means `undefined character code'.                  */  /*                                                                       */  static FT_UInt  cff_get_char_index( TT_CharMap  charmap,                      FT_Long     charcode )  {    FT_Error       error;    CFF_Face       face;    TT_CMapTable*  cmap;    cmap = &charmap->cmap;    face = (CFF_Face)charmap->root.face;    /* Load table if needed */    if ( !cmap->loaded )    {      SFNT_Interface*  sfnt = (SFNT_Interface*)face->sfnt;      error = sfnt->load_charmap( face, cmap, face->root.stream );      if ( error )        return 0;      cmap->loaded = TRUE;    }    return ( cmap->get_index ? cmap->get_index( cmap, charcode ) : 0 );  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    cff_get_next_char                                                  */  /*                                                                       */  /* <Description>                                                         */  /*    Uses a charmap to return the next encoded charcode.                */  /*                                                                       */  /* <Input>                                                               */  /*    charmap  :: A handle to the source charmap object.                 */  /*    charcode :: The character code.                                    */  /*                                                                       */  /* <Return>                                                              */  /*    Char code.  0 means `no encoded chars above the given one'.        */  /*                                                                       */  static FT_Long  cff_get_next_char( TT_CharMap  charmap,                     FT_Long     charcode )  {    FT_Error       error;    CFF_Face       face;    TT_CMapTable*  cmap;    cmap = &charmap->cmap;    face = (CFF_Face)charmap->root.face;    /* Load table if needed */    if ( !cmap->loaded )    {      SFNT_Interface*  sfnt = (SFNT_Interface*)face->sfnt;      error = sfnt->load_charmap( face, cmap, face->root.stream );      if ( error )        return 0;      cmap->loaded = TRUE;    }    return ( cmap->get_next_char ? cmap->get_next_char( cmap, charcode ) : 0 );  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    cff_get_name_index                                                 */  /*                                                                       */  /* <Description>                                                         */  /*    Uses the psnames module and the CFF font's charset to to return a  */  /*    a given glyph name's glyph index.                                  */  /*                                                                       */  /* <Input>                                                               */  /*    face       :: A handle to the source face object.                  */  /*                                                                       */  /*    glyph_name :: The glyph name.                                      */  /*                                                                       */  /* <Return>                                                              */  /*    Glyph index.  0 means `undefined character code'.                  */  /*                                                                       */  static FT_UInt  cff_get_name_index( CFF_Face    face,                      FT_String*  glyph_name )  {    CFF_Font*           cff;    CFF_Charset*        charset;    PSNames_Interface*  psnames;    FT_Memory           memory = FT_FACE_MEMORY( face );    FT_String*          name;    FT_UShort           sid;    FT_UInt             i;    FT_Int              result;    cff     = (CFF_Font *)face->extra.data;    charset = &cff->charset;    psnames = (PSNames_Interface*)FT_Get_Module_Interface(                face->root.driver->root.library, "psnames" );    for ( i = 0; i < cff->num_glyphs; i++ )    {      sid = charset->sids[i];      if ( sid > 390 )        name = CFF_Get_Name( &cff->string_index, sid - 391 );      else        name = (FT_String *)psnames->adobe_std_strings( sid );      result = strcmp( glyph_name, name );      if ( sid > 390 )        FREE( name );      if ( !result )        return i;    }    return 0;  }  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  /****                                                                 ****/  /****                                                                 ****/  /****                D R I V E R  I N T E R F A C E                   ****/  /****                                                                 ****/  /****                                                                 ****/  /*************************************************************************/  /*************************************************************************/  /*************************************************************************/  static FT_Module_Interface  cff_get_interface( CFF_Driver   driver,                     const char*  interface )  {    FT_Module  sfnt;#ifndef FT_CONFIG_OPTION_NO_GLYPH_NAMES    if ( strcmp( (const char*)interface, "glyph_name" ) == 0 )      return (FT_Module_Interface)cff_get_glyph_name;    if ( strcmp( (const char*)interface, "name_index" ) == 0 )      return (FT_Module_Interface)cff_get_name_index;#endif    /* we simply pass our request to the `sfnt' module */    sfnt = FT_Get_Module( driver->root.root.library, "sfnt" );    return sfnt ? sfnt->clazz->get_interface( sfnt, interface ) : 0;  }  /* The FT_DriverInterface structure is defined in ftdriver.h. */  FT_CALLBACK_TABLE_DEF  const FT_Driver_Class  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 */      (FT_Module_Constructor)CFF_Driver_Init,      (FT_Module_Destructor) CFF_Driver_Done,      (FT_Module_Requester)  cff_get_interface,    },    /* now the specific driver fields */    sizeof( TT_FaceRec ),    sizeof( FT_SizeRec ),    sizeof( CFF_GlyphSlotRec ),    (FTDriver_initFace)     CFF_Face_Init,    (FTDriver_doneFace)     CFF_Face_Done,    (FTDriver_initSize)     CFF_Size_Init,    (FTDriver_doneSize)     CFF_Size_Done,    (FTDriver_initGlyphSlot)CFF_GlyphSlot_Init,    (FTDriver_doneGlyphSlot)CFF_GlyphSlot_Done,    (FTDriver_setCharSizes) CFF_Size_Reset,    (FTDriver_setPixelSizes)CFF_Size_Reset,    (FTDriver_loadGlyph)    Load_Glyph,    (FTDriver_getCharIndex) cff_get_char_index,    (FTDriver_getKerning)   Get_Kerning,    (FTDriver_attachFile)   0,    (FTDriver_getAdvances)  0,        (FTDriver_getNextChar)  cff_get_next_char  };#ifdef FT_CONFIG_OPTION_DYNAMIC_DRIVERS  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    getDriverClass                                                     */  /*                                                                       */  /* <Description>                                                         */  /*    This function is used when compiling the TrueType driver as a      */  /*    shared library (`.DLL' or `.so').  It will be used by the          */  /*    high-level library of FreeType to retrieve the address of the      */  /*    driver's generic interface.                                        */  /*                                                                       */  /*    It shouldn't be implemented in a static build, as each driver must */  /*    have the same function as an exported entry point.                 */  /*                                                                       */  /* <Return>                                                              */  /*    The address of the TrueType's driver generic interface.  The       */  /*    format-specific interface can then be retrieved through the method */  /*    interface->get_format_interface.                                   */  /*                                                                       */  FT_EXPORT_DEF( const FT_Driver_Class* )  getDriverClass( void )  {    return &cff_driver_class;  }#endif /* CONFIG_OPTION_DYNAMIC_DRIVERS *//* END */

⌨️ 快捷键说明

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