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

📄 sfobjs.c

📁 奇趣公司比较新的qt/emd版本
💻 C
📖 第 1 页 / 共 3 页
字号:
      FT_FRAME_END    };    face->ttc_header.tag     = 0;    face->ttc_header.version = 0;    face->ttc_header.count   = 0;    offset = FT_STREAM_POS();    if ( FT_READ_ULONG( tag ) )      return error;    if ( tag != 0x00010000UL                      &&         tag != TTAG_ttcf                         &&         tag != FT_MAKE_TAG( 'O', 'T', 'T', 'O' ) &&         tag != TTAG_true                         &&         tag != 0x00020000UL                      )      return SFNT_Err_Unknown_File_Format;    face->ttc_header.tag = TTAG_ttcf;    if ( tag == TTAG_ttcf )    {      FT_Int  n;      FT_TRACE3(( "sfnt_open_font: file is a collection\n" ));      if ( FT_STREAM_READ_FIELDS( ttc_header_fields, &face->ttc_header ) )        return error;      /* now read the offsets of each font in the file */      if ( FT_NEW_ARRAY( face->ttc_header.offsets, face->ttc_header.count ) )        return error;      if ( FT_FRAME_ENTER( face->ttc_header.count * 4L ) )        return error;      for ( n = 0; n < face->ttc_header.count; n++ )        face->ttc_header.offsets[n] = FT_GET_ULONG();      FT_FRAME_EXIT();    }    else    {      FT_TRACE3(( "sfnt_open_font: synthesize TTC\n" ));      face->ttc_header.version = 1 << 16;      face->ttc_header.count   = 1;      if ( FT_NEW( face->ttc_header.offsets) )        return error;      face->ttc_header.offsets[0] = offset;    }    return error;  }  FT_LOCAL_DEF( FT_Error )  sfnt_init_face( FT_Stream      stream,                  TT_Face        face,                  FT_Int         face_index,                  FT_Int         num_params,                  FT_Parameter*  params )  {    FT_Error        error;    FT_Library      library = face->root.driver->root.library;    SFNT_Service    sfnt;    /* for now, parameters are unused */    FT_UNUSED( num_params );    FT_UNUSED( params );    sfnt = (SFNT_Service)face->sfnt;    if ( !sfnt )    {      sfnt = (SFNT_Service)FT_Get_Module_Interface( library, "sfnt" );      if ( !sfnt )        return SFNT_Err_Invalid_File_Format;      face->sfnt       = sfnt;      face->goto_table = sfnt->goto_table;    }    FT_FACE_FIND_GLOBAL_SERVICE( face, face->psnames, POSTSCRIPT_CMAPS );    error = sfnt_open_font( stream, face );    if ( error )      return error;    FT_TRACE2(( "sfnt_init_face: %08p, %ld\n", face, face_index ));    if ( face_index < 0 )      face_index = 0;    if ( face_index >= face->ttc_header.count )        return SFNT_Err_Bad_Argument;    if ( FT_STREAM_SEEK( face->ttc_header.offsets[face_index] ) )      return error;    /* check that we have a valid TrueType file */    error = sfnt->load_font_dir( face, stream );    if ( error )      return error;    face->root.num_faces = face->ttc_header.count;    return error;  }#define LOAD_( x )                                            \  do {                                                        \    FT_TRACE2(( "`" #x "' " ));                               \    FT_TRACE3(( "-->\n" ));                                   \                                                              \    error = sfnt->load_##x( face, stream );                   \                                                              \    FT_TRACE2(( "%s\n", ( !error )                            \                        ? "loaded"                            \                        : ( error == SFNT_Err_Table_Missing ) \                          ? "missing"                         \                          : "failed to load" ));              \    FT_TRACE3(( "\n" ));                                      \  } while ( 0 )#define LOADM_( x, vertical )                                 \  do {                                                        \    FT_TRACE2(( "`%s" #x "' ",                                \                vertical ? "vertical " : "" ));               \    FT_TRACE3(( "-->\n" ));                                   \                                                              \    error = sfnt->load_##x( face, stream, vertical );         \                                                              \    FT_TRACE2(( "%s\n", ( !error )                            \                        ? "loaded"                            \                        : ( error == SFNT_Err_Table_Missing ) \                          ? "missing"                         \                          : "failed to load" ));              \    FT_TRACE3(( "\n" ));                                      \  } while ( 0 )  FT_LOCAL_DEF( FT_Error )  sfnt_load_face( FT_Stream      stream,                  TT_Face        face,                  FT_Int         face_index,                  FT_Int         num_params,                  FT_Parameter*  params )  {    FT_Error      error, psnames_error;    FT_Bool       has_outline;    FT_Bool       is_apple_sbit;    SFNT_Service  sfnt = (SFNT_Service)face->sfnt;    FT_UNUSED( face_index );    FT_UNUSED( num_params );    FT_UNUSED( params );    /* Load tables */    /* We now support two SFNT-based bitmapped font formats.  They */    /* are recognized easily as they do not include a `glyf'       */    /* table.                                                      */    /*                                                             */    /* The first format comes from Apple, and uses a table named   */    /* `bhed' instead of `head' to store the font header (using    */    /* the same format).  It also doesn't include horizontal and   */    /* vertical metrics tables (i.e. `hhea' and `vhea' tables are  */    /* missing).                                                   */    /*                                                             */    /* The other format comes from Microsoft, and is used with     */    /* WinCE/PocketPC.  It looks like a standard TTF, except that  */    /* it doesn't contain outlines.                                */    /*                                                             */    FT_TRACE2(( "sfnt_load_face: %08p\n\n", face ));    /* do we have outlines in there? */#ifdef FT_CONFIG_OPTION_INCREMENTAL    has_outline   = FT_BOOL( face->root.internal->incremental_interface != 0 ||                             tt_face_lookup_table( face, TTAG_glyf )    != 0 ||                             tt_face_lookup_table( face, TTAG_CFF )     != 0 );#else    has_outline   = FT_BOOL( tt_face_lookup_table( face, TTAG_glyf ) != 0 ||                             tt_face_lookup_table( face, TTAG_CFF )  != 0 );#endif    is_apple_sbit = 0;    /* if this font doesn't contain outlines, we try to load */    /* a `bhed' table                                        */    if ( !has_outline && sfnt->load_bhed )    {      LOAD_( bhed );      is_apple_sbit = FT_BOOL( !error );    }    /* load the font header (`head' table) if this isn't an Apple */    /* sbit font file                                             */    if ( !is_apple_sbit )    {      LOAD_( head );      if ( error )        goto Exit;    }    if ( face->header.Units_Per_EM == 0 )    {      error = SFNT_Err_Invalid_Table;      goto Exit;    }    /* the following tables are often not present in embedded TrueType */    /* fonts within PDF documents, so don't check for them.            */    LOAD_( maxp );    LOAD_( cmap );    /* the following tables are optional in PCL fonts -- */    /* don't check for errors                            */    LOAD_( name );    LOAD_( post );    psnames_error = error;    /* do not load the metrics headers and tables if this is an Apple */    /* sbit font file                                                 */    if ( !is_apple_sbit )    {      /* load the `hhea' and `hmtx' tables */      LOADM_( hhea, 0 );      if ( !error )      {        LOADM_( hmtx, 0 );        if ( error == SFNT_Err_Table_Missing )        {          error = SFNT_Err_Hmtx_Table_Missing;#ifdef FT_CONFIG_OPTION_INCREMENTAL          /* If this is an incrementally loaded font and there are */          /* overriding metrics, tolerate a missing `hmtx' table.  */          if ( face->root.internal->incremental_interface          &&               face->root.internal->incremental_interface->funcs->                 get_glyph_metrics                                 )          {            face->horizontal.number_Of_HMetrics = 0;            error = SFNT_Err_Ok;          }#endif        }      }      else if ( error == SFNT_Err_Table_Missing )      {        /* No `hhea' table necessary for SFNT Mac fonts. */        if ( face->format_tag == TTAG_true )        {          FT_TRACE2(( "This is an SFNT Mac font.\n" ));          has_outline = 0;          error = SFNT_Err_Ok;        }        else          error = SFNT_Err_Horiz_Header_Missing;      }      if ( error )        goto Exit;      /* try to load the `vhea' and `vmtx' tables */      LOADM_( hhea, 1 );      if ( !error )      {        LOADM_( hmtx, 1 );        if ( !error )          face->vertical_info = 1;      }      if ( error && error != SFNT_Err_Table_Missing )        goto Exit;      LOAD_( os2 );      if ( error )      {        if ( error != SFNT_Err_Table_Missing )          goto Exit;        face->os2.version = 0xFFFFU;      }    }    /* the optional tables */    /* embedded bitmap support. */    if ( sfnt->load_eblc )    {      LOAD_( eblc );      if ( error )      {        /* return an error if this font file has no outlines */        if ( error == SFNT_Err_Table_Missing && has_outline )          error = SFNT_Err_Ok;        else          goto Exit;      }    }    LOAD_( pclt );    if ( error )    {      if ( error != SFNT_Err_Table_Missing )        goto Exit;      face->pclt.Version = 0;    }    /* consider the kerning and gasp tables as optional */    LOAD_( gasp );    LOAD_( kern );    error = SFNT_Err_Ok;    face->root.num_glyphs = face->max_profile.numGlyphs;    face->root.family_name = tt_face_get_name( face,                                               TT_NAME_ID_PREFERRED_FAMILY );    if ( !face->root.family_name )      face->root.family_name = tt_face_get_name( face,                                                 TT_NAME_ID_FONT_FAMILY );    face->root.style_name = tt_face_get_name( face,                                              TT_NAME_ID_PREFERRED_SUBFAMILY );    if ( !face->root.style_name )      face->root.style_name  = tt_face_get_name( face,                                                 TT_NAME_ID_FONT_SUBFAMILY );    /* now set up root fields */    {      FT_Face    root = &face->root;      FT_Int32   flags = root->face_flags;      /*********************************************************************/      /*                                                                   */      /* Compute face flags.                                               */

⌨️ 快捷键说明

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