亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cffparse.c

?? 智能設備中PDF閱讀器的源碼!用于windows mobile2003或者WM5以上
?? C
?? 第 1 頁 / 共 2 頁
字號:
        matrix->yy = FT_DivFix( matrix->yy, temp );
        offset->x  = FT_DivFix( offset->x,  temp );
        offset->y  = FT_DivFix( offset->y,  temp );
      }

      /* note that the offsets must be expressed in integer font units */
      offset->x >>= 16;
      offset->y >>= 16;

      error = CFF_Err_Ok;
    }

    return error;
  }


  static FT_Error
  cff_parse_font_bbox( CFF_Parser  parser )
  {
    CFF_FontRecDict  dict = (CFF_FontRecDict)parser->object;
    FT_BBox*         bbox = &dict->font_bbox;
    FT_Byte**        data = parser->stack;
    FT_Error         error;


    error = CFF_Err_Stack_Underflow;

    if ( parser->top >= parser->stack + 4 )
    {
      bbox->xMin = FT_RoundFix( cff_parse_fixed( data++ ) );
      bbox->yMin = FT_RoundFix( cff_parse_fixed( data++ ) );
      bbox->xMax = FT_RoundFix( cff_parse_fixed( data++ ) );
      bbox->yMax = FT_RoundFix( cff_parse_fixed( data   ) );
      error = CFF_Err_Ok;
    }

    return error;
  }


  static FT_Error
  cff_parse_private_dict( CFF_Parser  parser )
  {
    CFF_FontRecDict  dict = (CFF_FontRecDict)parser->object;
    FT_Byte**        data = parser->stack;
    FT_Error         error;


    error = CFF_Err_Stack_Underflow;

    if ( parser->top >= parser->stack + 2 )
    {
      dict->private_size   = cff_parse_num( data++ );
      dict->private_offset = cff_parse_num( data   );
      error = CFF_Err_Ok;
    }

    return error;
  }


  static FT_Error
  cff_parse_cid_ros( CFF_Parser  parser )
  {
    CFF_FontRecDict  dict = (CFF_FontRecDict)parser->object;
    FT_Byte**        data = parser->stack;
    FT_Error         error;


    error = CFF_Err_Stack_Underflow;

    if ( parser->top >= parser->stack + 3 )
    {
      dict->cid_registry   = (FT_UInt)cff_parse_num ( data++ );
      dict->cid_ordering   = (FT_UInt)cff_parse_num ( data++ );
      dict->cid_supplement = (FT_ULong)cff_parse_num( data );
      error = CFF_Err_Ok;
    }

    return error;
  }


#define CFF_FIELD_NUM( code, name ) \
          CFF_FIELD( code, name, cff_kind_num )
#define CFF_FIELD_FIXED( code, name ) \
          CFF_FIELD( code, name, cff_kind_fixed )
#define CFF_FIELD_FIXED_1000( code, name ) \
          CFF_FIELD( code, name, cff_kind_fixed_thousand )
#define CFF_FIELD_STRING( code, name ) \
          CFF_FIELD( code, name, cff_kind_string )
#define CFF_FIELD_BOOL( code, name ) \
          CFF_FIELD( code, name, cff_kind_bool )
#define CFF_FIELD_DELTA( code, name, max ) \
          CFF_FIELD( code, name, cff_kind_delta )

#define CFF_FIELD_CALLBACK( code, name ) \
          {                              \
            cff_kind_callback,           \
            code | CFFCODE,              \
            0, 0,                        \
            cff_parse_ ## name,          \
            0, 0                         \
          },

#undef  CFF_FIELD
#define CFF_FIELD( code, name, kind ) \
          {                          \
            kind,                    \
            code | CFFCODE,          \
            FT_FIELD_OFFSET( name ), \
            FT_FIELD_SIZE( name ),   \
            0, 0, 0                  \
          },

#undef  CFF_FIELD_DELTA
#define CFF_FIELD_DELTA( code, name, max ) \
        {                                  \
          cff_kind_delta,                  \
          code | CFFCODE,                  \
          FT_FIELD_OFFSET( name ),         \
          FT_FIELD_SIZE_DELTA( name ),     \
          0,                               \
          max,                             \
          FT_FIELD_OFFSET( num_ ## name )  \
        },

#define CFFCODE_TOPDICT  0x1000
#define CFFCODE_PRIVATE  0x2000

  static const CFF_Field_Handler  cff_field_handlers[] =
  {

#include "cfftoken.h"

    { 0, 0, 0, 0, 0, 0, 0 }
  };


  FT_LOCAL_DEF( FT_Error )
  cff_parser_run( CFF_Parser  parser,
                  FT_Byte*    start,
                  FT_Byte*    limit )
  {
    FT_Byte*  p     = start;
    FT_Error  error = CFF_Err_Ok;


    parser->top    = parser->stack;
    parser->start  = start;
    parser->limit  = limit;
    parser->cursor = start;

    while ( p < limit )
    {
      FT_UInt  v = *p;


      if ( v >= 27 && v != 31 )
      {
        /* it's a number; we will push its position on the stack */
        if ( parser->top - parser->stack >= CFF_MAX_STACK_DEPTH )
          goto Stack_Overflow;

        *parser->top ++ = p;

        /* now, skip it */
        if ( v == 30 )
        {
          /* skip real number */
          p++;
          for (;;)
          {
            if ( p >= limit )
              goto Syntax_Error;
            v = p[0] >> 4;
            if ( v == 15 )
              break;
            v = p[0] & 0xF;
            if ( v == 15 )
              break;
            p++;
          }
        }
        else if ( v == 28 )
          p += 2;
        else if ( v == 29 )
          p += 4;
        else if ( v > 246 )
          p += 1;
      }
      else
      {
        /* This is not a number, hence it's an operator.  Compute its code */
        /* and look for it in our current list.                            */

        FT_UInt                   code;
        FT_UInt                   num_args = (FT_UInt)
                                             ( parser->top - parser->stack );
        const CFF_Field_Handler*  field;


        *parser->top = p;
        code = v;
        if ( v == 12 )
        {
          /* two byte operator */
          p++;
          if ( p >= limit )
            goto Syntax_Error;

          code = 0x100 | p[0];
        }
        code = code | parser->object_code;

        for ( field = cff_field_handlers; field->kind; field++ )
        {
          if ( field->code == (FT_Int)code )
          {
            /* we found our field's handler; read it */
            FT_Long   val;
            FT_Byte*  q = (FT_Byte*)parser->object + field->offset;


            /* check that we have enough arguments -- except for */
            /* delta encoded arrays, which can be empty          */
            if ( field->kind != cff_kind_delta && num_args < 1 )
              goto Stack_Underflow;

            switch ( field->kind )
            {
            case cff_kind_bool:
            case cff_kind_string:
            case cff_kind_num:
              val = cff_parse_num( parser->stack );
              goto Store_Number;

            case cff_kind_fixed:
              val = cff_parse_fixed( parser->stack );
              goto Store_Number;

            case cff_kind_fixed_thousand:
              val = cff_parse_fixed_thousand( parser->stack );

            Store_Number:
              switch ( field->size )
              {
              case (8 / FT_CHAR_BIT):
                *(FT_Byte*)q = (FT_Byte)val;
                break;

              case (16 / FT_CHAR_BIT):
                *(FT_Short*)q = (FT_Short)val;
                break;

              case (32 / FT_CHAR_BIT):
                *(FT_Int32*)q = (FT_Int)val;
                break;

              default:  /* for 64-bit systems */
                *(FT_Long*)q = val;
              }
              break;

            case cff_kind_delta:
              {
                FT_Byte*   qcount = (FT_Byte*)parser->object +
                                      field->count_offset;

                FT_Byte**  data = parser->stack;


                if ( num_args > field->array_max )
                  num_args = field->array_max;

                /* store count */
                *qcount = (FT_Byte)num_args;

                val = 0;
                while ( num_args > 0 )
                {
                  val += cff_parse_num( data++ );
                  switch ( field->size )
                  {
                  case (8 / FT_CHAR_BIT):
                    *(FT_Byte*)q = (FT_Byte)val;
                    break;

                  case (16 / FT_CHAR_BIT):
                    *(FT_Short*)q = (FT_Short)val;
                    break;

                  case (32 / FT_CHAR_BIT):
                    *(FT_Int32*)q = (FT_Int)val;
                    break;

                  default:  /* for 64-bit systems */
                    *(FT_Long*)q = val;
                  }

                  q += field->size;
                  num_args--;
                }
              }
              break;

            default:  /* callback */
              error = field->reader( parser );
              if ( error )
                goto Exit;
            }
            goto Found;
          }
        }

        /* this is an unknown operator, or it is unsupported; */
        /* we will ignore it for now.                         */

      Found:
        /* clear stack */
        parser->top = parser->stack;
      }
      p++;
    }

  Exit:
    return error;

  Stack_Overflow:
    error = CFF_Err_Invalid_Argument;
    goto Exit;

  Stack_Underflow:
    error = CFF_Err_Invalid_Argument;
    goto Exit;

  Syntax_Error:
    error = CFF_Err_Invalid_Argument;
    goto Exit;
  }


/* END */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美本精品男人aⅴ天堂| 麻豆久久久久久| 日韩专区在线视频| 日本成人在线不卡视频| 精品在线一区二区三区| 不卡av电影在线播放| 91久久精品国产91性色tv| 欧美精品九九99久久| 久久久精品免费观看| 亚洲色图一区二区三区| 性久久久久久久久久久久| 国产麻豆一精品一av一免费| 波多野洁衣一区| 在线成人小视频| 亚洲国产精品成人综合色在线婷婷 | 欧美大白屁股肥臀xxxxxx| 国产欧美日韩激情| 日韩高清在线一区| 成人免费va视频| 69久久夜色精品国产69蝌蚪网| 久久亚洲精品国产精品紫薇| 亚洲一区二区三区在线播放| 国产精品69毛片高清亚洲| 欧美吻胸吃奶大尺度电影| 国产人妖乱国产精品人妖| 亚洲国产一区二区在线播放| 国产麻豆精品在线| 欧美日韩成人综合天天影院| 国产欧美日本一区视频| 日本不卡一区二区三区高清视频| 99免费精品视频| 久久久久久久久久美女| 一级日本不卡的影视| 国产成a人亚洲| 欧美一区二区黄| 亚洲综合视频在线观看| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 欧美精品自拍偷拍| 国产精品电影院| 国产乱码一区二区三区| 欧美久久久久久久久久| 一区二区三区四区不卡在线 | 国产精品久久精品日日| 久久99精品久久久久婷婷| 欧美在线观看一区| 国产精品久久久久久户外露出 | 国产日韩精品久久久| 日本不卡一二三| 在线观看国产日韩| 中文字幕中文在线不卡住| 精品一二线国产| 日韩一级欧美一级| 丝袜诱惑制服诱惑色一区在线观看| caoporen国产精品视频| 国产亚洲欧美一级| 国产一区二区三区免费| 日韩无一区二区| 日韩高清中文字幕一区| 欧美老女人在线| 亚洲电影第三页| 色88888久久久久久影院按摩| 国产精品少妇自拍| 国产精品一区二区视频| 精品处破学生在线二十三| 喷白浆一区二区| 日韩一区二区在线免费观看| 午夜精品久久久久久不卡8050 | 热久久久久久久| 欧美日韩美少妇| 香蕉影视欧美成人| 制服丝袜日韩国产| 丝袜美腿亚洲一区二区图片| 欧美日韩国产一二三| 无码av免费一区二区三区试看| 欧美无砖专区一中文字| 亚洲h在线观看| 8x8x8国产精品| 奇米一区二区三区av| 欧美成va人片在线观看| 精品一区二区免费| xfplay精品久久| 成人精品鲁一区一区二区| 中文字幕中文字幕一区二区| 91污在线观看| 亚洲最新在线观看| 在线播放日韩导航| 久久精品国产久精国产| 久久综合精品国产一区二区三区| 国产成人精品影视| 国产精品欧美久久久久无广告| 成人a级免费电影| 一区二区三区日韩欧美精品 | 免费欧美在线视频| 精品国产精品一区二区夜夜嗨| 国产精品正在播放| 国产精品国产三级国产aⅴ入口| av影院午夜一区| 亚洲一区二区三区四区中文字幕| 在线视频国内一区二区| 视频一区二区中文字幕| 欧美精品一区二区三区四区| 高清av一区二区| 一二三区精品视频| 欧美一区二区高清| 成人丝袜高跟foot| 亚洲国产精品久久久久婷婷884 | 国产一二精品视频| 中文字幕一区二区三区乱码在线| 色狠狠桃花综合| 蜜臀av性久久久久蜜臀av麻豆| 久久女同互慰一区二区三区| 成人综合在线视频| 亚洲成人777| 国产亚洲欧美一级| 欧美综合色免费| 国内精品国产成人| 一区二区视频在线看| 欧美电影免费观看高清完整版在线观看| 国产99精品国产| 亚洲国产cao| 国产欧美一区二区精品性| 色婷婷av一区二区三区软件 | 久久精品亚洲麻豆av一区二区 | 亚洲成人福利片| 久久久久久久久久久久久久久99 | 午夜国产精品影院在线观看| 国产亚洲精品bt天堂精选| 欧美在线免费观看亚洲| 国产精品综合网| 亚洲777理论| 亚洲欧洲精品成人久久奇米网| 91麻豆精品91久久久久同性| 成人免费av在线| 蜜臀av性久久久久蜜臀av麻豆| 亚洲欧洲综合另类| 久久久.com| 91精品国产乱码| 色视频一区二区| 成人深夜福利app| 欧美aaaaaa午夜精品| 樱桃国产成人精品视频| 久久久久久99精品| 51精品久久久久久久蜜臀| 99久久精品国产一区| 精品一区二区三区视频在线观看| 亚洲精品高清在线| 中文字幕巨乱亚洲| 日韩欧美一级在线播放| 欧美午夜精品一区二区三区| 成人激情黄色小说| 国产一区二区三区最好精华液| 亚洲va国产va欧美va观看| 亚洲欧美日韩成人高清在线一区| 欧美va亚洲va| 欧美一级理论性理论a| 色av一区二区| 99精品视频在线播放观看| 国产麻豆精品theporn| 日本不卡在线视频| 午夜精品久久久久久久99水蜜桃 | 欧美精品日韩一区| 在线精品视频小说1| 91社区在线播放| 成人av网站在线| 成人免费毛片片v| 国产精品一二三四五| 国产美女精品在线| 久久国产欧美日韩精品| 日本欧美肥老太交大片| 香蕉加勒比综合久久| 亚洲午夜精品网| 一区二区三区四区av| 亚洲激情六月丁香| 亚洲精品中文字幕乱码三区| 国产精品久久久久久久裸模| 中文字幕精品一区| 国产精品午夜久久| 国产农村妇女精品| 中文字幕免费在线观看视频一区| 久久精品一区蜜桃臀影院| 久久亚洲精华国产精华液| 久久精品视频在线免费观看| 2021国产精品久久精品| 久久夜色精品国产噜噜av| 久久精品欧美日韩精品| 国产午夜亚洲精品午夜鲁丝片 | 色综合久久中文字幕综合网| 99久久精品国产精品久久| 91在线视频观看| 欧美亚洲综合在线| 欧美精三区欧美精三区| 日韩午夜在线观看视频| 精品国产91乱码一区二区三区| 精品噜噜噜噜久久久久久久久试看| 欧美变态tickling挠脚心| 久久精品免费在线观看| 亚洲视频在线一区| 亚洲综合在线视频| 青青草精品视频| 国内国产精品久久|