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

📄 pfrcmap.c

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 C
字号:
/***************************************************************************//*                                                                         *//*  pfrcmap.c                                                              *//*                                                                         *//*    FreeType PFR cmap handling (body).                                   *//*                                                                         *//*  Copyright 2002 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 "pfrcmap.h" #include "pfrobjs.h"#include FT_INTERNAL_DEBUG_H  FT_CALLBACK_DEF( FT_Error )  pfr_cmap_init( PFR_CMap  cmap )  {    PFR_Face  face = (PFR_Face)FT_CMAP_FACE( cmap );    cmap->num_chars = face->phy_font.num_chars;    cmap->chars     = face->phy_font.chars;        /* just for safety, check that the character entries are correctly */    /* sorted in increasing character code order                       */    {      FT_UInt  n;            for ( n = 1; n < cmap->num_chars; n++ )      {        if ( cmap->chars[n - 1].char_code >= cmap->chars[n].char_code )          FT_ASSERT( 0 );      }    }        return 0;  }  FT_CALLBACK_DEF( void )  pfr_cmap_done( PFR_CMap  cmap )  {    cmap->chars     = NULL;    cmap->num_chars = 0;  }  FT_CALLBACK_DEF( FT_UInt )  pfr_cmap_char_index( PFR_CMap   cmap,                       FT_UInt32  char_code )  {    FT_UInt   min = 0;    FT_UInt   max = cmap->num_chars;    FT_UInt   mid;    PFR_Char  gchar;    while ( min < max )    {      mid   = min + ( max - min ) / 2;      gchar = cmap->chars + mid;      if ( gchar->char_code == char_code )        return mid + 1;      if ( gchar->char_code < char_code )        min = mid + 1;      else        max = mid;    }    return 0;  }  FT_CALLBACK_DEF( FT_UInt )  pfr_cmap_char_next( PFR_CMap    cmap,                      FT_UInt32  *pchar_code )  {    FT_UInt    result    = 0;    FT_UInt32  char_code = *pchar_code + 1;  Restart:    {      FT_UInt   min = 0;      FT_UInt   max = cmap->num_chars;      FT_UInt   mid;      PFR_Char  gchar;      while ( min < max )      {        mid   = min + ( ( max - min ) >> 1 );        gchar = cmap->chars + mid;        if ( gchar->char_code == char_code )        {          result = mid;          if ( result != 0 )          {            result++;            goto Exit;          }          char_code++;          goto Restart;        }        if ( gchar->char_code < char_code )          min = mid+1;        else          max = mid;      }      /* we didn't find it, but we have a pair just above it */      char_code = 0;      if ( min < cmap->num_chars )      {        gchar  = cmap->chars + min;        result = min;        if ( result != 0 )        {          result++;          char_code = gchar->char_code;        }      }    }  Exit:    *pchar_code = char_code;    return result;  }  FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec  pfr_cmap_class_rec =  {    sizeof ( PFR_CMapRec ),    (FT_CMap_InitFunc)     pfr_cmap_init,    (FT_CMap_DoneFunc)     pfr_cmap_done,    (FT_CMap_CharIndexFunc)pfr_cmap_char_index,    (FT_CMap_CharNextFunc) pfr_cmap_char_next  };/* END */

⌨️ 快捷键说明

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