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

📄 otlgdef.c

📁 下载来的一个看图软件的源代码
💻 C
字号:
#include "otlgdef.h"#include "otlcommn.h" /************************************************************************/ /************************************************************************/ /*****                                                              *****/ /*****                      ATTACHMENTS LIST                        *****/ /*****                                                              *****/ /************************************************************************/ /************************************************************************/  static void  otl_attach_point_validate( OTL_Bytes      table,                             OTL_Validator  valid )  {    OTL_Bytes  p = table;    OTL_UInt   count;    if ( p + 2 > valid->limit )      OTL_INVALID_TOO_SHORT;    count = OTL_NEXT_USHORT( p );    if ( table + count*2 > valid->limit )      OTL_INVALID_TOO_SHORT;  }  static void  otl_attach_list_validate( OTL_Bytes      table,                            OTL_Validator  valid )  {    OTL_Bytes  p = table;    OTL_Bytes  coverage;    OTL_UInt   count;    if ( p + 4 > valid->limit )      OTL_INVALID_TOO_SHORT;    coverage = table + OTL_NEXT_USHORT( p );    count    = OTL_NEXT_USHORT( p );    otl_coverage_validate( coverage, valid );    if ( count != otl_coverage_get_count( coverage ) )      OTL_INVALID_DATA;    if ( p + count*2 > valid->limit )      OTL_INVALID_TOO_SHORT;    for ( ; count > 0; count-- )      otl_attach_point_validate( table + OTL_NEXT_USHORT( p ) );  } /************************************************************************/ /************************************************************************/ /*****                                                              *****/ /*****                      LIGATURE CARETS                         *****/ /*****                                                              *****/ /************************************************************************/ /************************************************************************/  static void  otl_caret_value_validate( OTL_Bytes      table,                            OTL_Validator  valid )  {    OTL_Bytes  p = table;    if ( p + 4 > valid->limit )      OTL_INVALID_TOO_SHORT;    format = OTL_NEXT_USHORT( p );    switch ( format )    {      case 1:      case 2:        break;      case 3:        {          OTL_Bytes  device;          p += 2;          if ( p + 2 > valid->limit )            OTL_INVALID_TOO_SHORT;          otl_device_table_validate( table + OTL_PEEK_USHORT( p ) );        }        break;      default:        OTL_INVALID_DATA;    }  }  static void  otl_ligature_glyph_validate( OTL_Bytes      table,                               OTL_Validator  valid )  {    OTL_Bytes  p = table;    OTL_UInt   count;    if ( p + 2 > valid->limit )      OTL_INVALID_TOO_SHORT;    count = OTL_NEXT_USHORT( p );    if ( p + count*2 > valid->limit )      OTL_INVALID_TOO_SHORT;    for ( ; count > 0; count-- )      otl_caret_value_validate( table + OTL_NEXT_USHORT( p ) );  }  static void  otl_ligature_caret_list_validate( OTL_Bytes      table,                                    OTL_Validator  valid )  {    OTL_Bytes  p = table;    OTL_Bytes  coverage;    OTL_UInt   count;    if ( p + 4 > valid->limit )      OTL_INVALID_TOO_SHORT;    coverage = table + OTL_NEXT_USHORT( p );    count    = OTL_NEXT_USHORT( p );    otl_coverage_validate( coverage, valid );    if ( count != otl_coverage_get_count( coverage ) )      OTL_INVALID_DATA;    if ( p + count*2 > valid->limit )      OTL_INVALID_TOO_SHORT;    for ( ; count > 0; count-- )      otl_ligature_glyph_validate( table + OTL_NEXT_USHORT( p ) );  } /************************************************************************/ /************************************************************************/ /*****                                                              *****/ /*****                         GDEF TABLE                           *****/ /*****                                                              *****/ /************************************************************************/ /************************************************************************/  OTL_APIDEF( void )  otl_gdef_validate( OTL_Bytes      table,                     OTL_Validator  valid )  {    OTL_Bytes  p = table;    if ( p + 12 > valid->limit )      OTL_INVALID_TOO_SHORT;    /* check format */    if ( OTL_NEXT_ULONG( p ) != 0x00010000UL )      OTL_INVALID_FORMAT;    /* validate class definition table */    otl_class_definition_validate( table + OTL_NEXT_USHORT( p ) );    /* validate attachment point list */    otl_attach_list_validate( table + OTL_NEXT_USHORT( p ) );    /* validate ligature caret list */    otl_ligature_caret_list_validate( table + OTL_NEXT_USHORT( p ) );    /* validate mark attach class */    otl_class_definition_validate( table + OTL_NEXT_USHORT( p ) );  }

⌨️ 快捷键说明

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