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

📄 ftdump.c

📁 freetype库的应用demo,里面包含freetype的很多实例
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************//*                                                                          *//*  The FreeType project -- a free and portable quality TrueType renderer.  *//*                                                                          *//*  Copyright 1996-2000, 2003, 2004 by                                      *//*  D. Turner, R.Wilhelm, and W. Lemberg                                    *//*                                                                          *//****************************************************************************/#include <ft2build.h>#include FT_FREETYPE_H#include FT_SFNT_NAMES_H#include FT_TRUETYPE_IDS_H  /* the following header shouldn't be used in normal programs */#include FT_INTERNAL_DEBUG_H  /* showing driver name */#include FT_MODULE_H#include FT_INTERNAL_OBJECTS_H#include FT_INTERNAL_DRIVER_H#include "common.h"#include <stdio.h>#include <stdlib.h>#include <string.h>  FT_Error  error;  int  comma_flag  = 0;  int  debug       = 0;  int  trace_level = 0;  int  name_tables = 0;  /* PanicZ */  static  void  PanicZ( const char*  message )  {    fprintf( stderr, "%s\n  error = 0x%04x\n", message, error );    exit( 1 );  }  void  Print_Comma( const char*  message )  {    if ( comma_flag )      printf( ", " );    printf( "%s", message );    comma_flag = 1;  }  static void  usage( char*  execname )  {    fprintf( stderr, "\n" );    fprintf( stderr, "ftdump: simple font dumper -- part of the FreeType project\n" );    fprintf( stderr, "-----------------------------------------------------------\n" );    fprintf( stderr, "\n" );    fprintf( stderr, "Usage: %s [options] fontname\n", execname );    fprintf( stderr, "\n" );#if FREETYPE_MAJOR == 2 && FREETYPE_MINOR == 0 && FREETYPE_PATCH <= 8    fprintf( stderr, "  -d        enable debug information\n" );#  ifdef FT_DEBUG_LEVEL_TRACE    fprintf( stderr, "  -l level  trace level for debug information\n" );#  endif#endif    fprintf( stderr, "  -n        print SFNT name tables\n" );    fprintf( stderr, "\n" );    exit( 1 );  }  void  Print_Name( FT_Face  face )  {    const char*  ps_name;        printf( "font name entries\n" );    /* XXX: Foundry?  Copyright?  Version? ... */    printf( "   family:     %s\n", face->family_name );    printf( "   style:      %s\n", face->style_name );        ps_name = FT_Get_Postscript_Name( face );    if ( ps_name == NULL )      ps_name = "UNAVAILABLE";        printf( "   postscript: %s\n", ps_name );  }  void  Print_Type( FT_Face  face )  {    FT_ModuleRec*  module;    printf( "font type entries\n" );    module = &face->driver->root;    printf( "   FreeType driver: %s\n", module->clazz->module_name );    /* Is it better to dump all sfnt tag names? */    printf( "   sfnt wrapped:    %s\n",            FT_IS_SFNT( face ) ? (char *)"yes" : (char *)"no" );    /* isScalable? */    comma_flag = 0;    printf( "   type:            " );    if ( FT_IS_SCALABLE( face ) )    {      Print_Comma( "scalable" );      if ( FT_HAS_MULTIPLE_MASTERS( face ) )        Print_Comma( "multiple masters" );    }    if ( FT_HAS_FIXED_SIZES( face ) )      Print_Comma( "fixed size" );    printf( "\n" );    /* Direction */    comma_flag = 0;    printf( "   direction:       " );    if ( FT_HAS_HORIZONTAL( face ) )      Print_Comma( "horizontal" );    if ( FT_HAS_VERTICAL( face ) )      Print_Comma( "vertical" );    printf( "\n" );    printf( "   fixed width:     %s\n",            FT_IS_FIXED_WIDTH( face ) ? (char *)"yes" : (char *)"no" );    printf( "   glyph names:     %s\n",            FT_HAS_GLYPH_NAMES( face ) ? (char *)"yes" : (char *)"no" );        if ( FT_IS_SCALABLE( face ) )    {      printf( "   EM size:         %d\n", face->units_per_EM );      printf( "   global BBox:     (%ld,%ld):(%ld,%ld)\n",              face->bbox.xMin, face->bbox.yMin,              face->bbox.xMax, face->bbox.yMax );      printf( "   ascent:          %d\n", face->ascender );      printf( "   descent:         %d\n", face->descender );      printf( "   text height:     %d\n", face->height );    }  }  static const char*  platform_id( int  id )  {    switch ( id )    {    case TT_PLATFORM_APPLE_UNICODE:      return "Apple (Unicode)";    case TT_PLATFORM_MACINTOSH:      return "Macintosh";    case TT_PLATFORM_ISO:      return "ISO (deprecated)";    case TT_PLATFORM_MICROSOFT:      return "Microsoft";    case TT_PLATFORM_CUSTOM:      return "custom";    case TT_PLATFORM_ADOBE:      return "Adobe";    default:      return "UNKNOWN";    }  }  static const char*  name_id( int  id )  {    switch ( id )    {    case TT_NAME_ID_COPYRIGHT:      return "copyright";    case TT_NAME_ID_FONT_FAMILY:      return "font family";    case TT_NAME_ID_FONT_SUBFAMILY:      return "font subfamily";    case TT_NAME_ID_UNIQUE_ID:      return "unique ID";    case TT_NAME_ID_FULL_NAME:      return "full name";    case TT_NAME_ID_VERSION_STRING:      return "version string";    case TT_NAME_ID_PS_NAME:      return "PostScript name";    case TT_NAME_ID_TRADEMARK:      return "trademark";   /* the following values are from the OpenType spec */    case TT_NAME_ID_MANUFACTURER:      return "manufacturer";    case TT_NAME_ID_DESIGNER:      return "designer";    case TT_NAME_ID_DESCRIPTION:      return "description";    case TT_NAME_ID_VENDOR_URL:      return "vendor URL";    case TT_NAME_ID_DESIGNER_URL:      return "designer URL";    case TT_NAME_ID_LICENSE:      return "license";    case TT_NAME_ID_LICENSE_URL:      return "license URL";    /* number 15 is reserved */    case TT_NAME_ID_PREFERRED_FAMILY:      return "preferred family";    case TT_NAME_ID_PREFERRED_SUBFAMILY:      return "preferred subfamily";    case TT_NAME_ID_MAC_FULL_NAME:      return "Mac full name";   /* The following code is new as of 2000-01-21 */    case TT_NAME_ID_SAMPLE_TEXT:      return "sample text";   /* This is new in OpenType 1.3 */    case TT_NAME_ID_CID_FINDFONT_NAME:      return "CID `findfont' name";    default:      return "UNKNOWN";    }  }  static void  put_ascii( FT_Byte*  string,             FT_UInt   string_len,             FT_UInt   indent )  {    FT_UInt  i, j;    for ( j = 0; j < indent; j++ )      putchar( ' ' );    putchar( '"' );    for ( i = 0; i < string_len; i++ )    {      switch ( string[i] )      {      case '\n':        fputs( "\\n\"", stdout );        if ( i + 1 < string_len )        {          putchar( '\n' );          for ( j = 0; j < indent; j++ )            putchar( ' ' );          putchar( '"' );        }        break;      case '\r':        fputs( "\\r", stdout );        break;      case '\t':        fputs( "\\t", stdout );        break;      case '\\':        fputs( "\\\\", stdout );        break;      case '"':        fputs( "\\\"", stdout );        break;      default:        putchar( string[i] );        break;      }    }    if ( string[i - 1] != '\n' )      putchar( '"' );  }  static void  put_unicode_be16( FT_Byte*  string,                    FT_UInt   string_len,                    FT_UInt   indent )  {    FT_Int   ch = 0;    FT_UInt  i, j;    for ( j = 0; j < indent; j++ )      putchar( ' ' );    putchar( '"' );    for ( i = 0; i < string_len; i += 2 )    {      ch = ( string[i] << 8 ) | string[i + 1];      switch ( ch )      {      case '\n':        fputs( "\\n\"", stdout );        if ( i + 2 < string_len )        {          putchar( '\n' );          for ( j = 0; j < indent; j++ )            putchar( ' ' );          putchar( '"' );        }        break;      case '\r':        fputs( "\\r", stdout );        break;      case '\t':        fputs( "\\t", stdout );        break;      case '\\':        fputs( "\\\\", stdout );        break;      case '"':        fputs( "\\\"", stdout );        break;      case 0x00A9:        fputs( "(c)", stdout );        break;      case 0x00AE:        fputs( "(r)", stdout );        break;

⌨️ 快捷键说明

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