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

📄 ttpload.c

📁 Qt/Embedded是一个多平台的C++图形用户界面应用程序框架
💻 C
字号:
/***************************************************************************//*                                                                         *//*  ttpload.h                                                              *//*                                                                         *//*    TrueType glyph data/program tables loader (body).                    *//*                                                                         *//*  Copyright 1996-1999 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 <ftdebug.h>#include <ftobjs.h>#include <ftstream.h>#include <ttpload.h>#include <tttags.h>#include <tterrors.h>#undef  FT_COMPONENT#define FT_COMPONENT  trace_ttload  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    TT_Load_Locations                                                  */  /*                                                                       */  /* <Description>                                                         */  /*    Loads the locations table.                                         */  /*                                                                       */  /* <Input>                                                               */  /*    face   :: A handle to the target face object.                      */  /*    stream :: The input stream.                                        */  /*                                                                       */  /* <Return>                                                              */  /*    TrueType error code.  0 means success.                             */  /*                                                                       */  LOCAL_FUNC  TT_Error  TT_Load_Locations( TT_Face    face,                               FT_Stream  stream )  {    TT_Error   error;    FT_Memory  memory = stream->memory;    TT_Short   LongOffsets;    TT_ULong   table_len;    FT_TRACE2(( "Locations " ));    LongOffsets = face->header.Index_To_Loc_Format;    error = face->goto_table( face, TTAG_loca, stream, &table_len );    if (error)    {      error = TT_Err_Locations_Missing;      goto Exit;    }    if ( LongOffsets != 0 )    {      face->num_locations = (TT_UShort)(table_len >> 2);      FT_TRACE2(( "(32 bits offsets): %12d ", face->num_locations ));      if ( ALLOC_ARRAY( face->glyph_locations,                        face->num_locations,                        TT_Long ) )        goto Exit;      if ( ACCESS_Frame( face->num_locations * 4L ) )        goto Exit;      {        TT_Long*  loc   = face->glyph_locations;        TT_Long*  limit = loc + face->num_locations;        for ( ; loc < limit; loc++ )          *loc = GET_Long();      }      FORGET_Frame();    }    else    {      face->num_locations = (TT_UShort)(table_len >> 1);      FT_TRACE2(( "(16 bits offsets): %12d ",                   face->num_locations ));      if ( ALLOC_ARRAY( face->glyph_locations,                        face->num_locations,                        TT_Long ) )        goto Exit;      if ( ACCESS_Frame( face->num_locations * 2L ) )        goto Exit;      {        TT_Long*  loc   = face->glyph_locations;        TT_Long*  limit = loc + face->num_locations;        for ( ; loc < limit; loc++ )          *loc = (TT_Long)((TT_ULong)GET_UShort() * 2);      }      FORGET_Frame();    }    FT_TRACE2(( "loaded\n" ));  Exit:    return error;  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    TT_Load_CVT                                                        */  /*                                                                       */  /* <Description>                                                         */  /*    Loads the control value table into a face object.                  */  /*                                                                       */  /* <Input>                                                               */  /*    face   :: A handle to the target face object.                      */  /*    stream :: A handle to the input stream.                            */  /*                                                                       */  /* <Return>                                                              */  /*    TrueType error code.  0 means success.                             */  /*                                                                       */  LOCAL_FUNC  TT_Error  TT_Load_CVT( TT_Face    face,                         FT_Stream  stream )  {    TT_Error   error;    FT_Memory  memory = stream->memory;    TT_ULong   table_len;    FT_TRACE2(( "CVT " ));    error = face->goto_table( face, TTAG_cvt, stream, &table_len );    if (error)    {      FT_TRACE2(( "is missing!\n" ));      face->cvt_size = 0;      face->cvt      = NULL;      error          = TT_Err_Ok;      goto Exit;    }    face->cvt_size = table_len / 2;    if ( ALLOC_ARRAY( face->cvt,                      face->cvt_size,                      TT_Short ) )      goto Exit;    if ( ACCESS_Frame( face->cvt_size * 2L ) )      goto Exit;    {      TT_Short*  cur   = face->cvt;      TT_Short*  limit = cur + face->cvt_size;      for ( ; cur <  limit; cur++ )        *cur = GET_Short();    }    FORGET_Frame();    FT_TRACE2(( "loaded\n" ));  Exit:    return error;  }  /*************************************************************************/  /*                                                                       */  /* <Function>                                                            */  /*    TT_Load_Progams                                                    */  /*                                                                       */  /* <Description>                                                         */  /*    Loads the font program and the cvt program.                        */  /*                                                                       */  /* <Input>                                                               */  /*    face   :: A handle to the target face object.                      */  /*    stream :: A handle to the input stream.                            */  /*                                                                       */  /* <Return>                                                              */  /*    TrueType error code.  0 means success.                             */  /*                                                                       */  LOCAL_FUNC  TT_Error  TT_Load_Programs( TT_Face    face,                              FT_Stream  stream )  {    TT_Error   error;    FT_Memory  memory = stream->memory;    TT_ULong   table_len;    FT_TRACE2(( "Font program " ));    /* The font program is optional */    error = face->goto_table( face, TTAG_fpgm, stream, &table_len );    if ( error )    {      face->font_program      = NULL;      face->font_program_size = 0;      FT_TRACE2(( "is missing!\n" ));    }    else    {      face->font_program_size = table_len;      if ( ALLOC( face->font_program,                  face->font_program_size ) ||           FILE_Read( (void*)face->font_program,                      face->font_program_size )   )        goto Exit;      FT_TRACE2(( "loaded, %12d bytes\n", face->font_program_size ));    }    FT_TRACE2(( "Prep program " ));    error = face->goto_table( face, TTAG_prep, stream, &table_len );    if ( error )    {      face->cvt_program      = NULL;      face->cvt_program_size = 0;      error                  = TT_Err_Ok;      FT_TRACE2(( "is missing!\n" ));    }    else    {      face->cvt_program_size = table_len;      if ( ALLOC( face->cvt_program,                  face->cvt_program_size )           ||           FILE_Read( (void*)face->cvt_program,                      face->cvt_program_size ) )        return error;      FT_TRACE2(( "loaded, %12d bytes\n", face->cvt_program_size ));    }  Exit:    return error;  }/* END */

⌨️ 快捷键说明

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