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

📄 t2objs.c

📁 qt-embedded-2.3.8.tar.gz源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************//*                                                                         *//*  t2objs.c                                                               *//*                                                                         *//*    OpenType objects manager (body).                                     *//*                                                                         *//*  Copyright 1996-2000 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 <freetype/internal/ftdebug.h>#include <freetype/internal/ftcalc.h>#include <freetype/internal/ftstream.h>#include <freetype/fterrors.h>#include <freetype/ttnameid.h>#include <freetype/tttags.h>#include <freetype/internal/sfnt.h>#include <freetype/internal/psnames.h>#ifdef FT_FLAT_COMPILE#include "t2objs.h"#include "t2load.h"#else#include <cff/t2objs.h>#include <cff/t2load.h>#endif#include <freetype/internal/t2errors.h>#include <string.h>         /* for strlen() */  /*************************************************************************/  /*                                                                       */  /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */  /* messages during execution.                                            */  /*                                                                       */#undef  FT_COMPONENT#define FT_COMPONENT  trace_t2objs  /*************************************************************************/  /*                                                                       */  /*                           FACE  FUNCTIONS                             */  /*                                                                       */  /*************************************************************************/  static  FT_String*  T2_StrCopy( FT_Memory         memory,                          const FT_String*  source )  {    FT_Error    error;    FT_String*  result = 0;    FT_Int      len = (FT_Int)strlen( source );    if ( !ALLOC( result, len + 1 ) )    {      MEM_Copy( result, source, len );      result[len] = 0;    }    return result;  }#if 0  /* this function is used to build a Unicode charmap from the glyph names */  /* in a file                                                             */  static  FT_Error  CFF_Build_Unicode_Charmap( T2_Face             face,                                       FT_ULong            base_offset,                                       PSNames_Interface*  psnames )  {    CFF_Font*       font = (CFF_Font*)face->extra.data;    FT_Memory       memory = FT_FACE_MEMORY(face);    FT_UInt         n, num_glyphs = face->root.num_glyphs;    const char**    glyph_names;    FT_Error        error;    CFF_Font_Dict*  dict = &font->top_font.font_dict;    FT_ULong        charset_offset;    FT_Byte         format;    FT_Stream       stream = face->root.stream;    charset_offset = dict->charset_offset;    if ( !charset_offset )    {      FT_ERROR(( "CFF.Build_Unicode_Charmap: charset table is missing\n" ));      error = T2_Err_Invalid_File_Format;      goto Exit;    }    /* allocate the charmap */    if ( ALLOC( face->charmap, ...    /* seek to charset table and allocate glyph names table */    if ( FILE_Seek( base_offset + charset_offset )           ||         ALLOC_ARRAY( glyph_names, num_glyphs, const char* ) )      goto Exit;    /* now, read each glyph name and store it in the glyph name table */    if ( READ_Byte( format ) )      goto Fail;    switch ( format )    {      case 0:  /* format 0 - one SID per glyph */        {          const char**  gname = glyph_names;          const char**  limit = gname + num_glyphs;          if ( ACCESS_Frame( num_glyphs*2 ) )            goto Fail;          for ( ; gname < limit; gname++ )            gname[0] = T2_Get_String( &font->string_index,                                      GET_UShort(),                                      psnames );          FORGET_Frame();          break;        }      case 1:  /* format 1 - sequential ranges                    */      case 2:  /* format 2 - sequential ranges with 16-bit counts */        {          const char**  gname = glyph_names;          const char**  limit = gname + num_glyphs;          FT_UInt       len = 3;          if (format == 2)            len++;          while (gname < limit)          {            FT_UInt   first;            FT_UInt   count;            if ( ACCESS_Frame( len ) )              goto Fail;            first = GET_UShort();            if (format == 3)              count = GET_UShort();            else              count = GET_Byte();            FORGET_Frame();            for ( ; count > 0; count-- )            {              gname[0] = T2_Get_String( &font->string_index,                                        first,                                        psnames );              gname++;              first++;            }          }          break;        }      default:   /* unknown charset format! */        FT_ERROR(( "CFF: unknown charset format!\n" ));        error = T2_Err_Invalid_File_Format;        goto Fail;    }    /* all right, the glyph names were loaded, we now need to create */    /* the corresponding unicode charmap..                           */  Fail:    for ( n = 0; n < num_glyphs; n++ )      FREE( glyph_names[n] );    FREE( glyph_names );  Exit:    return error;  }#endif /* 0 */  static  FT_Encoding  find_encoding( int  platform_id,                              int  encoding_id )  {    typedef struct  TEncoding    {      int          platform_id;      int          encoding_id;      FT_Encoding  encoding;    } TEncoding;    static    const TEncoding  tt_encodings[] =    {      { TT_PLATFORM_ISO,           -1,                  ft_encoding_unicode },      { TT_PLATFORM_APPLE_UNICODE, -1,                  ft_encoding_unicode },      { TT_PLATFORM_MACINTOSH,     TT_MAC_ID_ROMAN,     ft_encoding_apple_roman },      { TT_PLATFORM_MICROSOFT,     TT_MS_ID_UNICODE_CS, ft_encoding_unicode },      { TT_PLATFORM_MICROSOFT,     TT_MS_ID_SJIS,       ft_encoding_sjis },      { TT_PLATFORM_MICROSOFT,     TT_MS_ID_GB2312,     ft_encoding_gb2312 },      { TT_PLATFORM_MICROSOFT,     TT_MS_ID_BIG_5,      ft_encoding_big5 },      { TT_PLATFORM_MICROSOFT,     TT_MS_ID_WANSUNG,    ft_encoding_wansung },      { TT_PLATFORM_MICROSOFT,     TT_MS_ID_JOHAB,      ft_encoding_johab }    };    const TEncoding  *cur, *limit;    cur   = tt_encodings;    limit = cur + sizeof ( tt_encodings ) / sizeof ( tt_encodings[0] );    for ( ; cur < limit; cur++ )    {      if ( cur->platform_id == platform_id )      {        if ( cur->encoding_id == encoding_id ||             cur->encoding_id == -1          )          return cur->encoding;      }    }    return ft_encoding_none;  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    T2_Init_Face                                                       */  /*                                                                       */  /* <Description>                                                         */  /*    Initializes a given OpenType face object.                          */  /*                                                                       */  /* <Input>                                                               */  /*    stream     :: The source font stream.                              */  /*                                                                       */  /*    face_index :: The index of the font face in the resource.          */  /*                                                                       */  /*    num_params :: Number of additional generic parameters.  Ignored.   */  /*                                                                       */  /*    params     :: Additional generic parameters.  Ignored.             */  /*                                                                       */  /* <InOut>                                                               */  /*    face       :: The newly built face object.                         */  /*                                                                       */  /* <Return>                                                              */  /*    FreeType error code.  0 means success.                             */  /*                                                                       */  FT_LOCAL  FT_Error  T2_Init_Face( FT_Stream      stream,                          T2_Face        face,                          FT_Int         face_index,                          FT_Int         num_params,                          FT_Parameter*  params )  {    FT_Error            error;    SFNT_Interface*     sfnt;    PSNames_Interface*  psnames;    FT_Bool             pure_cff    = 1;    FT_Bool             sfnt_format = 0;    sfnt = (SFNT_Interface*)FT_Get_Module_Interface(             face->root.driver->root.library, "sfnt" );    if ( !sfnt )      goto Bad_Format;    psnames = (PSNames_Interface*)FT_Get_Module_Interface(                face->root.driver->root.library, "psnames" );    /* create input stream from resource */    if ( FILE_Seek( 0 ) )      goto Exit;    /* check that we have a valid OpenType file */    error = sfnt->init_face( stream, face, face_index, num_params, params );    if ( !error )    {      if ( face->format_tag != 0x4F54544FL )  /* `OTTO'; OpenType/CFF font */      {

⌨️ 快捷键说明

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