您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ FT_STREAM_POS函数代码示例

51自学网 2021-06-01 20:44:41
  C++
这篇教程C++ FT_STREAM_POS函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中FT_STREAM_POS函数的典型用法代码示例。如果您正苦于以下问题:C++ FT_STREAM_POS函数的具体用法?C++ FT_STREAM_POS怎么用?C++ FT_STREAM_POS使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了FT_STREAM_POS函数的22个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: ft_gzip_file_init

  static FT_Error  ft_gzip_file_init( FT_GZipFile  zip,                     FT_Stream    stream,                     FT_Stream    source )  {    z_stream*  zstream = &zip->zstream;    FT_Error   error   = Gzip_Err_Ok;    zip->stream = stream;    zip->source = source;    zip->memory = stream->memory;    zip->limit  = zip->buffer + FT_GZIP_BUFFER_SIZE;    zip->cursor = zip->limit;    zip->pos    = 0;    /* check and skip .gz header */    {      stream = source;      error = ft_gzip_check_header( stream );      if ( error )        goto Exit;      zip->start = FT_STREAM_POS();    }    /* initialize zlib -- there is no zlib header in the compressed stream */    zstream->zalloc = (alloc_func)ft_gzip_alloc;    zstream->zfree  = (free_func) ft_gzip_free;    zstream->opaque = stream->memory;    zstream->avail_in = 0;    zstream->next_in  = zip->buffer;    if ( inflateInit2( zstream, -MAX_WBITS ) != Z_OK ||         zstream->next_in == NULL                     )      error = Gzip_Err_Invalid_File_Format;  Exit:    return error;  }
开发者ID:BlairArchibald,项目名称:Alexandria,代码行数:43,


示例2: ft_lzw_file_init

  static FT_Error  ft_lzw_file_init( FT_LZWFile  zip,                    FT_Stream   stream,                    FT_Stream   source )  {    s_zstate_t*  zstream = &zip->zstream;    FT_Error     error   = LZW_Err_Ok;    zip->stream = stream;    zip->source = source;    zip->memory = stream->memory;    zip->limit  = zip->buffer + FT_LZW_BUFFER_SIZE;    zip->cursor = zip->limit;    zip->pos    = 0;    /* check and skip .Z header */    {      stream = source;      error = ft_lzw_check_header( source );      if ( error )        goto Exit;      zip->start = FT_STREAM_POS();    }    /* initialize internal lzw variable */    zinit( zstream );    zstream->avail_in    = 0;    zstream->next_in     = zip->buffer;    zstream->zs_in_count = source->size - 2;    if ( zstream->next_in == NULL )      error = LZW_Err_Invalid_File_Format;  Exit:    return error;  }
开发者ID:NNN-zz,项目名称:Freemap-waze,代码行数:41,


示例3: load_post_names

  static FT_Error  load_post_names( TT_Face  face )  {    FT_Stream  stream;    FT_Error   error;    FT_Fixed   format;    FT_ULong   post_len;    FT_ULong   post_limit;    /* get a stream for the face's resource */    stream = face->root.stream;    /* seek to the beginning of the PS names table */    error = face->goto_table( face, TTAG_post, stream, &post_len );    if ( error )      goto Exit;    post_limit = FT_STREAM_POS() + post_len;    format = face->postscript.FormatType;    /* go to beginning of subtable */    if ( FT_STREAM_SKIP( 32 ) )      goto Exit;    /* now read postscript table */    if ( format == 0x00020000L )      error = load_format_20( face, stream, post_limit );    else if ( format == 0x00028000L )      error = load_format_25( face, stream, post_limit );    else      error = FT_THROW( Invalid_File_Format );    face->postscript_names.loaded = 1;  Exit:    return error;  }
开发者ID:hsmith,项目名称:freetype,代码行数:39,


示例4: tt_face_load_font_dir

  tt_face_load_font_dir( TT_Face    face,                         FT_Stream  stream )  {    SFNT_HeaderRec  sfnt;    FT_Error        error;    FT_Memory       memory = stream->memory;    TT_TableRec*    entry;    FT_Int          nn;    static const FT_Frame_Field  offset_table_fields[] =    {#undef  FT_STRUCTURE#define FT_STRUCTURE  SFNT_HeaderRec      FT_FRAME_START( 8 ),        FT_FRAME_USHORT( num_tables ),        FT_FRAME_USHORT( search_range ),        FT_FRAME_USHORT( entry_selector ),        FT_FRAME_USHORT( range_shift ),      FT_FRAME_END    };    FT_TRACE2(( "tt_face_load_font_dir: %08p/n", face ));    /* read the offset table */    sfnt.offset = FT_STREAM_POS();    if ( FT_READ_ULONG( sfnt.format_tag )                    ||         FT_STREAM_READ_FIELDS( offset_table_fields, &sfnt ) )      goto Exit;    /* many fonts don't have these fields set correctly */#if 0    if ( sfnt.search_range != 1 << ( sfnt.entry_selector + 4 )        ||         sfnt.search_range + sfnt.range_shift != sfnt.num_tables << 4 )      return SFNT_Err_Unknown_File_Format;#endif    /* load the table directory */    FT_TRACE2(( "-- Number of tables: %10u/n",    sfnt.num_tables ));    FT_TRACE2(( "-- Format version:   0x%08lx/n", sfnt.format_tag ));    /* check first */    error = check_table_dir( &sfnt, stream );    if ( error )    {      FT_TRACE2(( "tt_face_load_font_dir:"                  " invalid table directory for TrueType/n" ));      goto Exit;    }    face->num_tables = sfnt.num_tables;    face->format_tag = sfnt.format_tag;    if ( FT_QNEW_ARRAY( face->dir_tables, face->num_tables ) )      goto Exit;    if ( FT_STREAM_SEEK( sfnt.offset + 12 )       ||         FT_FRAME_ENTER( face->num_tables * 16L ) )      goto Exit;    entry = face->dir_tables;    for ( nn = 0; nn < sfnt.num_tables; nn++ )    {      entry->Tag      = FT_GET_TAG4();      entry->CheckSum = FT_GET_ULONG();      entry->Offset   = FT_GET_LONG();      entry->Length   = FT_GET_LONG();      /* ignore invalid tables */      if ( entry->Offset + entry->Length > stream->size )        continue;      else      {        FT_TRACE2(( "  %c%c%c%c  -  %08lx  -  %08lx/n",                    (FT_Char)( entry->Tag >> 24 ),                    (FT_Char)( entry->Tag >> 16 ),                    (FT_Char)( entry->Tag >> 8  ),                    (FT_Char)( entry->Tag       ),                    entry->Offset,                    entry->Length ));        entry++;      }    }    FT_FRAME_EXIT();    FT_TRACE2(( "table directory loaded/n/n" ));  Exit:    return error;  }
开发者ID:howardgao-mt,项目名称:myd3dlib,代码行数:97,


示例5: load_format_20

  static FT_Error  load_format_20( TT_Face    face,                  FT_Stream  stream,                  FT_ULong   post_limit )  {    FT_Memory   memory = stream->memory;    FT_Error    error;    FT_Int      num_glyphs;    FT_UShort   num_names;    FT_UShort*  glyph_indices = NULL;    FT_Char**   name_strings  = NULL;    if ( FT_READ_USHORT( num_glyphs ) )      goto Exit;    /* UNDOCUMENTED!  The number of glyphs in this table can be smaller */    /* than the value in the maxp table (cf. cyberbit.ttf).             */    /* There already exist fonts which have more than 32768 glyph names */    /* in this table, so the test for this threshold has been dropped.  */    if ( num_glyphs > face->max_profile.numGlyphs )    {      error = FT_THROW( Invalid_File_Format );      goto Exit;    }    /* load the indices */    {      FT_Int  n;      if ( FT_NEW_ARRAY ( glyph_indices, num_glyphs ) ||           FT_FRAME_ENTER( num_glyphs * 2L )          )        goto Fail;      for ( n = 0; n < num_glyphs; n++ )        glyph_indices[n] = FT_GET_USHORT();      FT_FRAME_EXIT();    }    /* compute number of names stored in table */    {      FT_Int  n;      num_names = 0;      for ( n = 0; n < num_glyphs; n++ )      {        FT_Int  idx;        idx = glyph_indices[n];        if ( idx >= 258 )        {          idx -= 257;          if ( idx > num_names )            num_names = (FT_UShort)idx;        }      }    }    /* now load the name strings */    {      FT_UShort  n;      if ( FT_NEW_ARRAY( name_strings, num_names ) )        goto Fail;      for ( n = 0; n < num_names; n++ )      {        FT_UInt  len;        if ( FT_STREAM_POS() >= post_limit )          break;        else        {          FT_TRACE6(( "load_format_20: %d byte left in post table/n",                      post_limit - FT_STREAM_POS() ));          if ( FT_READ_BYTE( len ) )            goto Fail1;        }        if ( len > post_limit                   ||             FT_STREAM_POS() > post_limit - len )        {          FT_Int  d = (FT_Int)post_limit - (FT_Int)FT_STREAM_POS();          FT_ERROR(( "load_format_20:"                     " exceeding string length (%d),"                     " truncating at end of post table (%d byte left)/n",//.........这里部分代码省略.........
开发者ID:hsmith,项目名称:freetype,代码行数:101,


示例6: cff_new_index

  static FT_Error  cff_new_index( CFF_Index  idx,                 FT_Stream  stream,                 FT_Bool    load )  {    FT_Error   error;    FT_Memory  memory = stream->memory;    FT_UShort  count;    FT_MEM_ZERO( idx, sizeof ( *idx ) );    idx->stream = stream;    if ( !FT_READ_USHORT( count ) &&         count > 0                )    {      FT_Byte*   p;      FT_Byte    offsize;      FT_ULong   data_size;      FT_ULong*  poff;      /* there is at least one element; read the offset size,           */      /* then access the offset table to compute the index's total size */      if ( FT_READ_BYTE( offsize ) )        goto Exit;      idx->stream   = stream;      idx->count    = count;      idx->off_size = offsize;      data_size     = (FT_ULong)( count + 1 ) * offsize;      if ( FT_NEW_ARRAY( idx->offsets, count + 1 ) ||           FT_FRAME_ENTER( data_size )             )        goto Exit;      poff = idx->offsets;      p    = (FT_Byte*)stream->cursor;      for ( ; (FT_Short)count >= 0; count-- )      {        poff[0] = cff_get_offset( p, offsize );        poff++;        p += offsize;      }      FT_FRAME_EXIT();      idx->data_offset = FT_STREAM_POS();      data_size        = poff[-1] - 1;      if ( load )      {        /* load the data */        if ( FT_FRAME_EXTRACT( data_size, idx->bytes ) )          goto Exit;      }      else      {        /* skip the data */        if ( FT_STREAM_SKIP( data_size ) )          goto Exit;      }    }  Exit:    if ( error )      FT_FREE( idx->offsets );    return error;  }
开发者ID:OS2World,项目名称:LIB-SDL,代码行数:71,


示例7: fnt_face_get_dll_fonts

  static FT_Error  fnt_face_get_dll_fonts( FNT_Face  face )  {    FT_Error         error;    FT_Stream        stream = FT_FACE( face )->stream;    FT_Memory        memory = FT_FACE( face )->memory;    WinMZ_HeaderRec  mz_header;    face->fonts     = 0;    face->num_fonts = 0;    /* does it begin with a MZ header? */    if ( FT_STREAM_SEEK( 0 )                                 ||         FT_STREAM_READ_FIELDS( winmz_header_fields, &mz_header ) )      goto Exit;    error = FNT_Err_Unknown_File_Format;    if ( mz_header.magic == WINFNT_MZ_MAGIC )    {      /* yes, now look for a NE header in the file */      WinNE_HeaderRec  ne_header;      if ( FT_STREAM_SEEK( mz_header.lfanew )                  ||           FT_STREAM_READ_FIELDS( winne_header_fields, &ne_header ) )        goto Exit;      error = FNT_Err_Unknown_File_Format;      if ( ne_header.magic == WINFNT_NE_MAGIC )      {        /* good, now look in the resource table for each FNT resource */        FT_ULong   res_offset = mz_header.lfanew +                                ne_header.resource_tab_offset;        FT_UShort  size_shift;        FT_UShort  font_count  = 0;        FT_ULong   font_offset = 0;        if ( FT_STREAM_SEEK( res_offset ) ||             FT_FRAME_ENTER( ne_header.rname_tab_offset -                             ne_header.resource_tab_offset ) )          goto Exit;        size_shift = FT_GET_USHORT_LE();        for (;;)        {          FT_UShort  type_id, count;          type_id = FT_GET_USHORT_LE();          if ( !type_id )            break;          count = FT_GET_USHORT_LE();          if ( type_id == 0x8008 )          {            font_count  = count;            font_offset = (FT_ULong)( FT_STREAM_POS() + 4 +                                      ( stream->cursor - stream->limit ) );            break;          }          stream->cursor += 4 + count * 12;        }        FT_FRAME_EXIT();        if ( !font_count || !font_offset )        {          FT_TRACE2(( "this file doesn't contain any FNT resources!/n" ));          error = FNT_Err_Unknown_File_Format;          goto Exit;        }        if ( FT_STREAM_SEEK( font_offset )           ||             FT_NEW_ARRAY( face->fonts, font_count ) )          goto Exit;        face->num_fonts = font_count;        if ( FT_FRAME_ENTER( (FT_Long)font_count * 12 ) )          goto Exit;        /* now read the offset and position of each FNT font */        {          FNT_Font  cur   = face->fonts;          FNT_Font  limit = cur + font_count;          for ( ; cur < limit; cur++ )          {            cur->offset     = (FT_ULong)FT_GET_USHORT_LE() << size_shift;            cur->fnt_size   = (FT_ULong)FT_GET_USHORT_LE() << size_shift;            cur->size_shift = size_shift;            stream->cursor += 8;          }        }//.........这里部分代码省略.........
开发者ID:Claruarius,项目名称:stblinux-2.6.37,代码行数:101,


示例8: cff_index_init

  static FT_Error  cff_index_init( CFF_Index  idx,                  FT_Stream  stream,                  FT_Bool    load )  {    FT_Error   error;    FT_Memory  memory = stream->memory;    FT_UShort  count;    FT_MEM_ZERO( idx, sizeof ( *idx ) );    idx->stream = stream;    idx->start  = FT_STREAM_POS();    if ( !FT_READ_USHORT( count ) &&         count > 0                )    {      FT_Byte   offsize;      FT_ULong  size;      /* there is at least one element; read the offset size,           */      /* then access the offset table to compute the index's total size */      if ( FT_READ_BYTE( offsize ) )        goto Exit;      if ( offsize < 1 || offsize > 4 )      {        error = FT_Err_Invalid_Table;        goto Exit;      }      idx->count    = count;      idx->off_size = offsize;      size          = (FT_ULong)( count + 1 ) * offsize;      idx->data_offset = idx->start + 3 + size;      if ( FT_STREAM_SKIP( size - offsize ) )        goto Exit;      size = cff_index_read_offset( idx, &error );      if ( error )        goto Exit;      if ( size == 0 )      {        error = CFF_Err_Invalid_Table;        goto Exit;      }      idx->data_size = --size;      if ( load )      {        /* load the data */        if ( FT_FRAME_EXTRACT( size, idx->bytes ) )          goto Exit;      }      else      {        /* skip the data */        if ( FT_STREAM_SKIP( size ) )          goto Exit;      }    }  Exit:    if ( error )      FT_FREE( idx->offsets );    return error;  }
开发者ID:Ali-il,项目名称:gamekit,代码行数:73,


示例9: T1_Get_Private_Dict

  T1_Get_Private_Dict( T1_Parser      parser,                       PSAux_Service  psaux )  {    FT_Stream  stream = parser->stream;    FT_Memory  memory = parser->root.memory;    FT_Error   error  = FT_Err_Ok;    FT_ULong   size;    if ( parser->in_pfb )    {      /* in the case of the PFB format, the private dictionary can be  */      /* made of several segments.  We thus first read the number of   */      /* segments to compute the total size of the private dictionary  */      /* then re-read them into memory.                                */      FT_Long    start_pos = FT_STREAM_POS();      FT_UShort  tag;      parser->private_len = 0;      for (;;)      {        error = read_pfb_tag( stream, &tag, &size );        if ( error )          goto Fail;        if ( tag != 0x8002U )          break;        parser->private_len += size;        if ( FT_STREAM_SKIP( size ) )          goto Fail;      }      /* Check that we have a private dictionary there */      /* and allocate private dictionary buffer        */      if ( parser->private_len == 0 )      {        FT_ERROR(( "T1_Get_Private_Dict:"                   " invalid private dictionary section/n" ));        error = FT_THROW( Invalid_File_Format );        goto Fail;      }      if ( FT_STREAM_SEEK( start_pos )                           ||           FT_ALLOC( parser->private_dict, parser->private_len ) )        goto Fail;      parser->private_len = 0;      for (;;)      {        error = read_pfb_tag( stream, &tag, &size );        if ( error || tag != 0x8002U )        {          error = FT_Err_Ok;          break;        }        if ( FT_STREAM_READ( parser->private_dict + parser->private_len,                             size ) )          goto Fail;        parser->private_len += size;      }    }    else    {      /* We have already `loaded' the whole PFA font file into memory; */      /* if this is a memory resource, allocate a new block to hold    */      /* the private dict.  Otherwise, simply overwrite into the base  */      /* dictionary block in the heap.                                 */      /* first of all, look at the `eexec' keyword */      FT_Byte*  cur   = parser->base_dict;      FT_Byte*  limit = cur + parser->base_len;      FT_Byte   c;    Again:      for (;;)      {        c = cur[0];        if ( c == 'e' && cur + 9 < limit )  /* 9 = 5 letters for `eexec' + */                                            /* whitespace + 4 chars        */        {          if ( cur[1] == 'e' &&               cur[2] == 'x' &&               cur[3] == 'e' &&               cur[4] == 'c' )            break;        }        cur++;        if ( cur >= limit )        {          FT_ERROR(( "T1_Get_Private_Dict:"                     " could not find `eexec' keyword/n" ));          error = FT_THROW( Invalid_File_Format );          goto Exit;        }//.........这里部分代码省略.........
开发者ID:PrinttingGroup,项目名称:SumatraPDF_SpecialPrint,代码行数:101,


示例10: fnt_face_get_dll_font

static FT_Errorfnt_face_get_dll_font( FNT_Face  face,                       FT_Int    face_index ){    FT_Error         error;    FT_Stream        stream = FT_FACE( face )->stream;    FT_Memory        memory = FT_FACE( face )->memory;    WinMZ_HeaderRec  mz_header;    face->font = 0;    /* does it begin with an MZ header? */    if ( FT_STREAM_SEEK( 0 )                                      ||            FT_STREAM_READ_FIELDS( winmz_header_fields, &mz_header ) )        goto Exit;    error = FNT_Err_Unknown_File_Format;    if ( mz_header.magic == WINFNT_MZ_MAGIC )    {        /* yes, now look for an NE header in the file */        WinNE_HeaderRec  ne_header;        if ( FT_STREAM_SEEK( mz_header.lfanew )                       ||                FT_STREAM_READ_FIELDS( winne_header_fields, &ne_header ) )            goto Exit;        error = FNT_Err_Unknown_File_Format;        if ( ne_header.magic == WINFNT_NE_MAGIC )        {            /* good, now look into the resource table for each FNT resource */            FT_ULong   res_offset  = mz_header.lfanew +                                     ne_header.resource_tab_offset;            FT_UShort  size_shift;            FT_UShort  font_count  = 0;            FT_ULong   font_offset = 0;            if ( FT_STREAM_SEEK( res_offset )                    ||                    FT_FRAME_ENTER( ne_header.rname_tab_offset -                                    ne_header.resource_tab_offset ) )                goto Exit;            size_shift = FT_GET_USHORT_LE();            for (;;)            {                FT_UShort  type_id, count;                type_id = FT_GET_USHORT_LE();                if ( !type_id )                    break;                count = FT_GET_USHORT_LE();                if ( type_id == 0x8008U )                {                    font_count  = count;                    font_offset = (FT_ULong)( FT_STREAM_POS() + 4 +                                              ( stream->cursor - stream->limit ) );                    break;                }                stream->cursor += 4 + count * 12;            }            FT_FRAME_EXIT();            if ( !font_count || !font_offset )            {                FT_TRACE2(( "this file doesn't contain any FNT resources!/n" ));                error = FNT_Err_Unknown_File_Format;                goto Exit;            }            face->root.num_faces = font_count;            if ( face_index >= font_count )            {                error = FNT_Err_Bad_Argument;                goto Exit;            }            if ( FT_NEW( face->font ) )                goto Exit;            if ( FT_STREAM_SEEK( font_offset + face_index * 12 ) ||                    FT_FRAME_ENTER( 12 )                            )                goto Fail;            face->font->offset     = (FT_ULong)FT_GET_USHORT_LE() << size_shift;            face->font->fnt_size   = (FT_ULong)FT_GET_USHORT_LE() << size_shift;            face->font->size_shift = size_shift;            stream->cursor += 8;            FT_FRAME_EXIT();//.........这里部分代码省略.........
开发者ID:1tgr,项目名称:mobius,代码行数:101,


示例11: sfnt_open_font

  /* synthesized into a TTC with one offset table.              */  static FT_Error  sfnt_open_font( FT_Stream  stream,                  TT_Face    face )  {    FT_Memory  memory = stream->memory;    FT_Error   error;    FT_ULong   tag, offset;    static const FT_Frame_Field  ttc_header_fields[] =    {#undef  FT_STRUCTURE#define FT_STRUCTURE  TTC_HeaderRec      FT_FRAME_START( 8 ),        FT_FRAME_LONG( version ),        FT_FRAME_LONG( count   ),  /* this is ULong in the specs */      FT_FRAME_END    };    face->ttc_header.tag     = 0;    face->ttc_header.version = 0;    face->ttc_header.count   = 0;    offset = FT_STREAM_POS();    if ( FT_READ_ULONG( tag ) )      return error;    if ( tag != 0x00010000UL &&         tag != TTAG_ttcf    &&         tag != TTAG_OTTO    &&         tag != TTAG_true    &&         tag != TTAG_typ1    &&         tag != 0x00020000UL )    {      FT_TRACE2(( "  not a font using the SFNT container format/n" ));      return FT_THROW( Unknown_File_Format );    }    face->ttc_header.tag = TTAG_ttcf;    if ( tag == TTAG_ttcf )    {      FT_Int  n;      FT_TRACE3(( "sfnt_open_font: file is a collection/n" ));      if ( FT_STREAM_READ_FIELDS( ttc_header_fields, &face->ttc_header ) )        return error;      if ( face->ttc_header.count == 0 )        return FT_THROW( Invalid_Table );      /* a rough size estimate: let's conservatively assume that there   */      /* is just a single table info in each subfont header (12 + 16*1 = */      /* 28 bytes), thus we have (at least) `12 + 4*count' bytes for the */      /* size of the TTC header plus `28*count' bytes for all subfont    */      /* headers                                                         */      if ( (FT_ULong)face->ttc_header.count > stream->size / ( 28 + 4 ) )        return FT_THROW( Array_Too_Large );      /* now read the offsets of each font in the file */      if ( FT_NEW_ARRAY( face->ttc_header.offsets, face->ttc_header.count ) )        return error;      if ( FT_FRAME_ENTER( face->ttc_header.count * 4L ) )        return error;      for ( n = 0; n < face->ttc_header.count; n++ )        face->ttc_header.offsets[n] = FT_GET_ULONG();      FT_FRAME_EXIT();    }    else    {      FT_TRACE3(( "sfnt_open_font: synthesize TTC/n" ));      face->ttc_header.version = 1 << 16;      face->ttc_header.count   = 1;      if ( FT_NEW( face->ttc_header.offsets ) )        return error;      face->ttc_header.offsets[0] = offset;    }    return error;  }
开发者ID:kobolabs,项目名称:qt-everywhere-4.8.0,代码行数:91,


示例12: cid_parser_new

  cid_parser_new( CID_Parser*    parser,                  FT_Stream      stream,                  FT_Memory      memory,                  PSAux_Service  psaux )  {    FT_Error  error;    FT_ULong  base_offset, offset, ps_len;    FT_Byte   buffer[256 + 10];    FT_Int    buff_len;    FT_Byte   *cur, *limit;    FT_Byte   *arg1, *arg2;    FT_MEM_ZERO( parser, sizeof ( *parser ) );    psaux->ps_parser_funcs->init( &parser->root, 0, 0, memory );    parser->stream = stream;    base_offset = FT_STREAM_POS();    /* first of all, check the font format in the header */    if ( FT_FRAME_ENTER( 31 ) )      goto Exit;    if ( ft_strncmp( (char *)stream->cursor,                     "%!PS-Adobe-3.0 Resource-CIDFont", 31 ) )    {      FT_TRACE2(( "[not a valid CID-keyed font]/n" ));      error = CID_Err_Unknown_File_Format;    }    FT_FRAME_EXIT();    if ( error )      goto Exit;  Again:    /* now, read the rest of the file until we find a `StartData' */    buff_len = 256;    for (;;)    {      FT_Byte*  p;      FT_ULong  top_position;      /* fill input buffer */      limit     = buffer + 256;      buff_len -= 256;      if ( buff_len > 0 )        FT_MEM_MOVE( buffer, limit, buff_len );      p = buffer + buff_len;      if ( FT_STREAM_READ( p, 256 + 10 - buff_len ) )        goto Exit;      top_position = FT_STREAM_POS() - buff_len;      buff_len     = 256 + 10;      /* look for `StartData' */      for ( p = buffer; p < limit; p++ )      {        if ( p[0] == 'S' && ft_strncmp( (char*)p, "StartData", 9 ) == 0 )        {          /* save offset of binary data after `StartData' */          offset = (FT_ULong)( top_position - ( limit - p ) + 10 );          goto Found;        }      }    }  Found:    /* we have found the start of the binary data.  We will now     */    /* rewind and extract the frame corresponding to the PostScript */    /* section                                                      */    ps_len = offset - base_offset;    if ( FT_STREAM_SEEK( base_offset )                  ||         FT_FRAME_EXTRACT( ps_len, parser->postscript ) )      goto Exit;    parser->data_offset    = offset;    parser->postscript_len = ps_len;    parser->root.base      = parser->postscript;    parser->root.cursor    = parser->postscript;    parser->root.limit     = parser->root.cursor + ps_len;    parser->num_dict       = -1;    /* Finally, we check whether `StartData' was real -- it could be  */    /* in a comment or string.  We also get its arguments to find out */    /* whether the data is represented in binary or hex format.       */    arg1 = parser->root.cursor;    cid_parser_skip_PS_token( parser );    cid_parser_skip_spaces  ( parser );    arg2 = parser->root.cursor;    cid_parser_skip_PS_token( parser );    cid_parser_skip_spaces  ( parser );    limit = parser->root.limit;    cur   = parser->root.cursor;//.........这里部分代码省略.........
开发者ID:allanw1,项目名称:Arianrhod,代码行数:101,


示例13: cid_parser_new

cid_parser_new( CID_Parser*    parser,                FT_Stream      stream,                FT_Memory      memory,                PSAux_Service  psaux ){    FT_Error  error;    FT_ULong  base_offset, offset, ps_len;    FT_Byte   *cur, *limit;    FT_Byte   *arg1, *arg2;    FT_MEM_ZERO( parser, sizeof ( *parser ) );    psaux->ps_parser_funcs->init( &parser->root, 0, 0, memory );    parser->stream = stream;    base_offset = FT_STREAM_POS();    /* first of all, check the font format in the header */    if ( FT_FRAME_ENTER( 31 ) )        goto Exit;    if ( ft_strncmp( (char *)stream->cursor,                     "%!PS-Adobe-3.0 Resource-CIDFont", 31 ) )    {        FT_TRACE2(( "  not a CID-keyed font/n" ));        error = FT_THROW( Unknown_File_Format );    }    FT_FRAME_EXIT();    if ( error )        goto Exit;Again:    /* now, read the rest of the file until we find */    /* `StartData' or `/sfnts'                      */    {        FT_Byte   buffer[256 + 10];        FT_ULong  read_len = 256 + 10;        FT_Byte*  p        = buffer;        for ( offset = FT_STREAM_POS(); ; offset += 256 )        {            FT_ULong  stream_len;            stream_len = stream->size - FT_STREAM_POS();            if ( stream_len == 0 )            {                FT_TRACE2(( "cid_parser_new: no `StartData' keyword found/n" ));                error = FT_THROW( Invalid_File_Format );                goto Exit;            }            read_len = FT_MIN( read_len, stream_len );            if ( FT_STREAM_READ( p, read_len ) )                goto Exit;            if ( read_len < 256 )                p[read_len]  = '/0';            limit = p + read_len - 10;            for ( p = buffer; p < limit; p++ )            {                if ( p[0] == 'S' && ft_strncmp( (char*)p, "StartData", 9 ) == 0 )                {                    /* save offset of binary data after `StartData' */                    offset += (FT_ULong)( p - buffer + 10 );                    goto Found;                }                else if ( p[1] == 's' && ft_strncmp( (char*)p, "/sfnts", 6 ) == 0 )                {                    offset += (FT_ULong)( p - buffer + 7 );                    goto Found;                }            }            FT_MEM_MOVE( buffer, p, 10 );            read_len = 256;            p = buffer + 10;        }    }Found:    /* We have found the start of the binary data or the `/sfnts' token. */    /* Now rewind and extract the frame corresponding to this PostScript */    /* section.                                                          */    ps_len = offset - base_offset;    if ( FT_STREAM_SEEK( base_offset )                  ||            FT_FRAME_EXTRACT( ps_len, parser->postscript ) )        goto Exit;    parser->data_offset    = offset;    parser->postscript_len = ps_len;    parser->root.base      = parser->postscript;    parser->root.cursor    = parser->postscript;    parser->root.limit     = parser->root.cursor + ps_len;//.........这里部分代码省略.........
开发者ID:Johnny-Martin,项目名称:ComBase,代码行数:101,


示例14: woff_open_font

  static FT_Error  woff_open_font( FT_Stream  stream,                  TT_Face    face )  {    FT_Memory       memory = stream->memory;    FT_Error        error  = FT_Err_Ok;    WOFF_HeaderRec  woff;    WOFF_Table      tables  = NULL;    WOFF_Table*     indices = NULL;    FT_ULong        woff_offset;    FT_Byte*        sfnt        = NULL;    FT_Stream       sfnt_stream = NULL;    FT_Byte*        sfnt_header;    FT_ULong        sfnt_offset;    FT_Int          nn;    FT_ULong        old_tag = 0;    static const FT_Frame_Field  woff_header_fields[] =    {#undef  FT_STRUCTURE#define FT_STRUCTURE  WOFF_HeaderRec      FT_FRAME_START( 44 ),        FT_FRAME_ULONG ( signature ),        FT_FRAME_ULONG ( flavor ),        FT_FRAME_ULONG ( length ),        FT_FRAME_USHORT( num_tables ),        FT_FRAME_USHORT( reserved ),        FT_FRAME_ULONG ( totalSfntSize ),        FT_FRAME_USHORT( majorVersion ),        FT_FRAME_USHORT( minorVersion ),        FT_FRAME_ULONG ( metaOffset ),        FT_FRAME_ULONG ( metaLength ),        FT_FRAME_ULONG ( metaOrigLength ),        FT_FRAME_ULONG ( privOffset ),        FT_FRAME_ULONG ( privLength ),      FT_FRAME_END    };    FT_ASSERT( stream == face->root.stream );    FT_ASSERT( FT_STREAM_POS() == 0 );    if ( FT_STREAM_READ_FIELDS( woff_header_fields, &woff ) )      return error;    /* Make sure we don't recurse back here or hit TTC code. */    if ( woff.flavor == TTAG_wOFF || woff.flavor == TTAG_ttcf )      return FT_THROW( Invalid_Table );    /* Miscellaneous checks. */    if ( woff.length != stream->size                              ||         woff.num_tables == 0                                     ||         44 + woff.num_tables * 20UL >= woff.length               ||         12 + woff.num_tables * 16UL >= woff.totalSfntSize        ||         ( woff.totalSfntSize & 3 ) != 0                          ||         ( woff.metaOffset == 0 && ( woff.metaLength != 0     ||                                     woff.metaOrigLength != 0 ) ) ||         ( woff.metaLength != 0 && woff.metaOrigLength == 0 )     ||         ( woff.privOffset == 0 && woff.privLength != 0 )         )      return FT_THROW( Invalid_Table );    if ( FT_ALLOC( sfnt, woff.totalSfntSize ) ||         FT_NEW( sfnt_stream )                )      goto Exit;    sfnt_header = sfnt;    /* Write sfnt header. */    {      FT_UInt  searchRange, entrySelector, rangeShift, x;      x             = woff.num_tables;      entrySelector = 0;      while ( x )      {        x            >>= 1;        entrySelector += 1;      }      entrySelector--;      searchRange = ( 1 << entrySelector ) * 16;      rangeShift  = woff.num_tables * 16 - searchRange;      WRITE_ULONG ( sfnt_header, woff.flavor );      WRITE_USHORT( sfnt_header, woff.num_tables );      WRITE_USHORT( sfnt_header, searchRange );      WRITE_USHORT( sfnt_header, entrySelector );      WRITE_USHORT( sfnt_header, rangeShift );    }    /* While the entries in the sfnt header must be sorted by the */    /* tag value, the tables themselves are not.  We thus have to */    /* sort them by offset and check that they don't overlap.     *///.........这里部分代码省略.........
开发者ID:johndpope,项目名称:Medusa,代码行数:101,


示例15: T1_Get_Private_Dict

  T1_Get_Private_Dict( T1_Parser      parser,                       PSAux_Service  psaux )  {    FT_Stream  stream = parser->stream;    FT_Memory  memory = parser->root.memory;    FT_Error   error  = 0;    FT_Long    size;    if ( parser->in_pfb )    {      /* in the case of the PFB format, the private dictionary can be  */      /* made of several segments.  We thus first read the number of   */      /* segments to compute the total size of the private dictionary  */      /* then re-read them into memory.                                */      FT_Long    start_pos = FT_STREAM_POS();      FT_UShort  tag;      parser->private_len = 0;      for (;;)      {        error = read_pfb_tag( stream, &tag, &size );        if ( error )          goto Fail;        if ( tag != 0x8002U )          break;        parser->private_len += size;        if ( FT_STREAM_SKIP( size ) )          goto Fail;      }      /* Check that we have a private dictionary there */      /* and allocate private dictionary buffer        */      if ( parser->private_len == 0 )      {        FT_ERROR(( "T1_Get_Private_Dict:" ));        FT_ERROR(( " invalid private dictionary section/n" ));        error = T1_Err_Invalid_File_Format;        goto Fail;      }      if ( FT_STREAM_SEEK( start_pos )                             ||           FT_ALLOC( parser->private_dict, parser->private_len ) )        goto Fail;      parser->private_len = 0;      for (;;)      {        error = read_pfb_tag( stream, &tag, &size );        if ( error || tag != 0x8002U )        {          error = T1_Err_Ok;          break;        }        if ( FT_STREAM_READ( parser->private_dict + parser->private_len, size ) )          goto Fail;        parser->private_len += size;      }    }    else    {      /* we have already `loaded' the whole PFA font file into memory; */      /* if this is a memory resource, allocate a new block to hold    */      /* the private dict. Otherwise, simply overwrite into the base   */      /* dictionary block in the heap.                                 */      /* first of all, look at the `eexec' keyword */      FT_Byte*  cur   = parser->base_dict;      FT_Byte*  limit = cur + parser->base_len;      FT_Byte   c;      for (;;)      {        c = cur[0];        if ( c == 'e' && cur + 9 < limit )  /* 9 = 5 letters for `eexec' + */                                            /* newline + 4 chars           */        {          if ( cur[1] == 'e' && cur[2] == 'x' &&               cur[3] == 'e' && cur[4] == 'c' )          {            cur += 6; /* we skip the newling after the `eexec' */            /* XXX: Some fonts use DOS-linefeeds, i.e. /r/n; we need to */            /*      skip the extra /n if we find it                     */            if ( cur[0] == '/n' )              cur++;            break;          }        }        cur++;        if ( cur >= limit )        {//.........这里部分代码省略.........
开发者ID:8l,项目名称:inferno,代码行数:101,


示例16: tt_face_load_name

  tt_face_load_name( TT_Face    face,                     FT_Stream  stream )  {    FT_Error      error;    FT_Memory     memory = stream->memory;    FT_ULong      table_pos, table_len;    FT_ULong      storage_start, storage_limit;    FT_UInt       count;    TT_NameTable  table;    static const FT_Frame_Field  name_table_fields[] =    {#undef  FT_STRUCTURE#define FT_STRUCTURE  TT_NameTableRec      FT_FRAME_START( 6 ),        FT_FRAME_USHORT( format ),        FT_FRAME_USHORT( numNameRecords ),        FT_FRAME_USHORT( storageOffset ),      FT_FRAME_END    };    static const FT_Frame_Field  name_record_fields[] =    {#undef  FT_STRUCTURE#define FT_STRUCTURE  TT_NameEntryRec      /* no FT_FRAME_START */        FT_FRAME_USHORT( platformID ),        FT_FRAME_USHORT( encodingID ),        FT_FRAME_USHORT( languageID ),        FT_FRAME_USHORT( nameID ),        FT_FRAME_USHORT( stringLength ),        FT_FRAME_USHORT( stringOffset ),      FT_FRAME_END    };    table         = &face->name_table;    table->stream = stream;    error = face->goto_table( face, TTAG_name, stream, &table_len );    if ( error )      goto Exit;    table_pos = FT_STREAM_POS();    if ( FT_STREAM_READ_FIELDS( name_table_fields, table ) )      goto Exit;    /* Some popular Asian fonts have an invalid `storageOffset' value   */    /* (it should be at least "6 + 12*num_names").  However, the string */    /* offsets, computed as "storageOffset + entry->stringOffset", are  */    /* valid pointers within the name table...                          */    /*                                                                  */    /* We thus can't check `storageOffset' right now.                   */    /*                                                                  */    storage_start = table_pos + 6 + 12*table->numNameRecords;    storage_limit = table_pos + table_len;    if ( storage_start > storage_limit )    {      FT_ERROR(( "tt_face_load_name: invalid `name' table/n" ));      error = SFNT_Err_Name_Table_Missing;      goto Exit;    }    /* Allocate the array of name records. */    count                 = table->numNameRecords;    table->numNameRecords = 0;    if ( FT_NEW_ARRAY( table->names, count ) ||         FT_FRAME_ENTER( count * 12 )        )      goto Exit;    /* Load the name records and determine how much storage is needed */    /* to hold the strings themselves.                                */    {      TT_NameEntryRec*  entry = table->names;      for ( ; count > 0; count-- )      {        if ( FT_STREAM_READ_FIELDS( name_record_fields, entry ) )          continue;        /* check that the name is not empty */        if ( entry->stringLength == 0 )          continue;        /* check that the name string is within the table */        entry->stringOffset += table_pos + table->storageOffset;        if ( entry->stringOffset                       < storage_start ||             entry->stringOffset + entry->stringLength > storage_limit )        {          /* invalid entry - ignore it */          entry->stringOffset = 0;          entry->stringLength = 0;          continue;//.........这里部分代码省略.........
开发者ID:howardgao-mt,项目名称:myd3dlib,代码行数:101,


示例17: sfnt_open_font

/* synthesized into a TTC with one offset table.              */static FT_Errorsfnt_open_font(FT_Stream stream,               TT_Face face){    FT_Memory memory = stream->memory;    FT_Error  error;    FT_ULong  tag, offset;    static const FT_Frame_Field ttc_header_fields[] =    {#undef  FT_STRUCTURE#define FT_STRUCTURE TTC_HeaderRec        FT_FRAME_START(8),        FT_FRAME_LONG(version),        FT_FRAME_LONG(count),        FT_FRAME_END    };    face->ttc_header.tag     = 0;    face->ttc_header.version = 0;    face->ttc_header.count   = 0;    offset = FT_STREAM_POS();    if (FT_READ_ULONG(tag))        return error;    if (tag != 0x00010000UL &&        tag != TTAG_ttcf &&        tag != TTAG_OTTO &&        tag != TTAG_true &&        tag != TTAG_typ1 &&        tag != 0x00020000UL)        return SFNT_Err_Unknown_File_Format;    face->ttc_header.tag = TTAG_ttcf;    if (tag == TTAG_ttcf)    {        FT_Int n;        FT_TRACE3(("sfnt_open_font: file is a collection/n"));        if (FT_STREAM_READ_FIELDS(ttc_header_fields, &face->ttc_header))            return error;        /* now read the offsets of each font in the file */        if (FT_NEW_ARRAY(face->ttc_header.offsets, face->ttc_header.count))            return error;        if (FT_FRAME_ENTER(face->ttc_header.count * 4L))            return error;        for (n = 0; n < face->ttc_header.count; n++)            face->ttc_header.offsets[n] = FT_GET_ULONG();        FT_FRAME_EXIT();    }    else    {        FT_TRACE3(("sfnt_open_font: synthesize TTC/n"));        face->ttc_header.version = 1 << 16;        face->ttc_header.count   = 1;        if (FT_NEW(face->ttc_header.offsets))            return error;        face->ttc_header.offsets[0] = offset;    }    return error;}
开发者ID:hyyh619,项目名称:OpenSceneGraph-3.4.0,代码行数:77,


示例18: CID_New_Parser

  CID_New_Parser( CID_Parser*    parser,                  FT_Stream      stream,                  FT_Memory      memory,                  PSAux_Service  psaux )  {    FT_Error  error;    FT_ULong  base_offset, offset, ps_len;    FT_Byte   buffer[256 + 10];    FT_Int    buff_len;    FT_MEM_SET( parser, 0, sizeof ( *parser ) );    psaux->ps_parser_funcs->init( &parser->root, 0, 0, memory );    parser->stream = stream;    base_offset = FT_STREAM_POS();    /* first of all, check the font format in the  header */    if ( FT_FRAME_ENTER( 31 ) )      goto Exit;    if ( ft_strncmp( (char *)stream->cursor,                     "%!PS-Adobe-3.0 Resource-CIDFont", 31 ) )    {      FT_TRACE2(( "[not a valid CID-keyed font]/n" ));      error = CID_Err_Unknown_File_Format;    }    FT_FRAME_EXIT();    if ( error )      goto Exit;    /* now, read the rest of the file, until we find a `StartData' */    buff_len = 256;    for (;;)    {      FT_Byte   *p, *limit = buffer + 256;      FT_ULong  top_position;      /* fill input buffer */      buff_len -= 256;      if ( buff_len > 0 )        FT_MEM_MOVE( buffer, limit, buff_len );      p = buffer + buff_len;      if ( FT_STREAM_READ( p, 256 + 10 - buff_len ) )        goto Exit;      top_position = FT_STREAM_POS() - buff_len;      buff_len = 256 + 10;      /* look for `StartData' */      for ( p = buffer; p < limit; p++ )      {        if ( p[0] == 'S' && ft_strncmp( (char*)p, "StartData", 9 ) == 0 )        {          /* save offset of binary data after `StartData' */          offset = (FT_ULong)( top_position - ( limit - p ) + 10 );          goto Found;        }      }    }  Found:    /* we have found the start of the binary data.  We will now        */    /* rewind and extract the frame of corresponding to the Postscript */    /* section                                                         */    ps_len = offset - base_offset;    if ( FT_STREAM_SEEK( base_offset )                    ||         FT_FRAME_EXTRACT( ps_len, parser->postscript ) )      goto Exit;    parser->data_offset    = offset;    parser->postscript_len = ps_len;    parser->root.base      = parser->postscript;    parser->root.cursor    = parser->postscript;    parser->root.limit     = parser->root.cursor + ps_len;    parser->num_dict       = -1;  Exit:    return error;  }
开发者ID:SOLARIC,项目名称:world-opponent-network,代码行数:86,


示例19: cff_font_load

  cff_font_load( FT_Stream  stream,                 FT_Int     face_index,                 CFF_Font   font,                 FT_Bool    pure_cff )  {    static const FT_Frame_Field  cff_header_fields[] =    {#undef  FT_STRUCTURE#define FT_STRUCTURE  CFF_FontRec      FT_FRAME_START( 4 ),        FT_FRAME_BYTE( version_major ),        FT_FRAME_BYTE( version_minor ),        FT_FRAME_BYTE( header_size ),        FT_FRAME_BYTE( absolute_offsize ),      FT_FRAME_END    };    FT_Error         error;    FT_Memory        memory = stream->memory;    FT_ULong         base_offset;    CFF_FontRecDict  dict;    FT_ZERO( font );    font->stream = stream;    font->memory = memory;    dict         = &font->top_font.font_dict;    base_offset  = FT_STREAM_POS();    /* read CFF font header */    if ( FT_STREAM_READ_FIELDS( cff_header_fields, font ) )      goto Exit;    /* check format */    if ( font->version_major   != 1 ||         font->header_size      < 4 ||         font->absolute_offsize > 4 )    {      FT_TRACE2(( "[not a CFF font header!]/n" ));      error = CFF_Err_Unknown_File_Format;      goto Exit;    }    /* skip the rest of the header */    if ( FT_STREAM_SKIP( font->header_size - 4 ) )      goto Exit;    /* read the name, top dict, string and global subrs index */    if ( FT_SET_ERROR( cff_index_init( &font->name_index,                                       stream, 0 ) )              ||         FT_SET_ERROR( cff_index_init( &font->font_dict_index,                                       stream, 0 ) )              ||         FT_SET_ERROR( cff_index_init( &font->string_index,                                       stream, 0 ) )              ||         FT_SET_ERROR( cff_index_init( &font->global_subrs_index,                                       stream, 1 ) )              )      goto Exit;    /* well, we don't really forget the `disabled' fonts... */    font->num_faces = font->name_index.count;    if ( face_index >= (FT_Int)font->num_faces )    {      FT_ERROR(( "cff_font_load: incorrect face index = %d/n",                 face_index ));      error = CFF_Err_Invalid_Argument;    }    /* in case of a font format check, simply exit now */    if ( face_index < 0 )      goto Exit;    /* now, parse the top-level font dictionary */    error = cff_subfont_load( &font->top_font,                              &font->font_dict_index,                              face_index,                              stream,                              base_offset );    if ( error )      goto Exit;    if ( FT_STREAM_SEEK( base_offset + dict->charstrings_offset ) )      goto Exit;    error = cff_index_init( &font->charstrings_index, stream, 0 );    if ( error )      goto Exit;    /* now, check for a CID font */    if ( dict->cid_registry != 0xFFFFU )    {      CFF_IndexRec  fd_index;      CFF_SubFont   sub;      FT_UInt       idx;      /* this is a CID-keyed font, we must now allocate a table of */      /* sub-fonts, then load each of them separately              */      if ( FT_STREAM_SEEK( base_offset + dict->cid_fd_array_offset ) )//.........这里部分代码省略.........
开发者ID:Ali-il,项目名称:gamekit,代码行数:101,


示例20: tt_face_load_font_dir

  tt_face_load_font_dir( TT_Face    face,                         FT_Stream  stream )  {    SFNT_HeaderRec  sfnt;    FT_Error        error;    FT_Memory       memory = stream->memory;    TT_TableRec*    entry;    FT_Int          nn;    static const FT_Frame_Field  offset_table_fields[] =    {#undef  FT_STRUCTURE#define FT_STRUCTURE  SFNT_HeaderRec      FT_FRAME_START( 8 ),        FT_FRAME_USHORT( num_tables ),        FT_FRAME_USHORT( search_range ),        FT_FRAME_USHORT( entry_selector ),        FT_FRAME_USHORT( range_shift ),      FT_FRAME_END    };    FT_TRACE2(( "tt_face_load_font_dir: %08p/n", face ));    /* read the offset table */    sfnt.offset = FT_STREAM_POS();    if ( FT_READ_ULONG( sfnt.format_tag )                    ||         FT_STREAM_READ_FIELDS( offset_table_fields, &sfnt ) )      goto Exit;    /* many fonts don't have these fields set correctly */#if 0    if ( sfnt.search_range != 1 << ( sfnt.entry_selector + 4 )        ||         sfnt.search_range + sfnt.range_shift != sfnt.num_tables << 4 )      return FT_THROW( Unknown_File_Format );#endif    /* load the table directory */    FT_TRACE2(( "-- Number of tables: %10u/n",    sfnt.num_tables ));    FT_TRACE2(( "-- Format version:   0x%08lx/n", sfnt.format_tag ));    if ( sfnt.format_tag != TTAG_OTTO )    {      /* check first */      error = check_table_dir( &sfnt, stream );      if ( error )      {        FT_TRACE2(( "tt_face_load_font_dir:"                    " invalid table directory for TrueType/n" ));        goto Exit;      }    }    face->num_tables = sfnt.num_tables;    face->format_tag = sfnt.format_tag;    if ( FT_QNEW_ARRAY( face->dir_tables, face->num_tables ) )      goto Exit;    if ( FT_STREAM_SEEK( sfnt.offset + 12 )       ||         FT_FRAME_ENTER( face->num_tables * 16L ) )      goto Exit;    entry = face->dir_tables;    FT_TRACE2(( "/n"                "  tag    offset    length   checksum/n"                "  ----------------------------------/n" ));    for ( nn = 0; nn < sfnt.num_tables; nn++ )    {      entry->Tag      = FT_GET_TAG4();      entry->CheckSum = FT_GET_ULONG();      entry->Offset   = FT_GET_ULONG();      entry->Length   = FT_GET_ULONG();      /* ignore invalid tables that can't be sanitized */      if ( entry->Offset > stream->size )        continue;      else if ( entry->Length > stream->size - entry->Offset )      {        if ( entry->Tag == TTAG_hmtx ||             entry->Tag == TTAG_vmtx )        {#ifdef FT_DEBUG_LEVEL_TRACE          FT_ULong  old_length = entry->Length;#endif          /* make metrics table length a multiple of 4 */          entry->Length = ( stream->size - entry->Offset ) & ~3U;          FT_TRACE2(( "  %c%c%c%c  %08lx  %08lx  %08lx"                      " (sanitized; original length %08lx)/n",//.........这里部分代码省略.........
开发者ID:Blitzker,项目名称:assfilter,代码行数:101,


示例21: pfr_phy_font_load

//.........这里部分代码省略.........    {      FT_UInt  n, count;      PFR_CHECK( 1 );      phy_font->num_blue_values = count = PFR_NEXT_BYTE( p );      PFR_CHECK( count * 2 );      if ( FT_NEW_ARRAY( phy_font->blue_values, count ) )        goto Fail;      for ( n = 0; n < count; n++ )        phy_font->blue_values[n] = PFR_NEXT_SHORT( p );    }    PFR_CHECK( 8 );    phy_font->blue_fuzz  = PFR_NEXT_BYTE( p );    phy_font->blue_scale = PFR_NEXT_BYTE( p );    phy_font->vertical.standard   = PFR_NEXT_USHORT( p );    phy_font->horizontal.standard = PFR_NEXT_USHORT( p );    /* read the character descriptors */    {      FT_UInt  n, count, Size;      phy_font->num_chars    = count = PFR_NEXT_USHORT( p );      phy_font->chars_offset = offset + (FT_Offset)( p - stream->cursor );      Size = 1 + 1 + 2;      if ( flags & PFR_PHY_2BYTE_CHARCODE )        Size += 1;      if ( flags & PFR_PHY_PROPORTIONAL )        Size += 2;      if ( flags & PFR_PHY_ASCII_CODE )        Size += 1;      if ( flags & PFR_PHY_2BYTE_GPS_SIZE )        Size += 1;      if ( flags & PFR_PHY_3BYTE_GPS_OFFSET )        Size += 1;      PFR_CHECK_SIZE( count * Size );      if ( FT_NEW_ARRAY( phy_font->chars, count ) )        goto Fail;      for ( n = 0; n < count; n++ )      {        PFR_Char  cur = &phy_font->chars[n];        cur->char_code = ( flags & PFR_PHY_2BYTE_CHARCODE )                         ? PFR_NEXT_USHORT( p )                         : PFR_NEXT_BYTE( p );        cur->advance   = ( flags & PFR_PHY_PROPORTIONAL )                         ? PFR_NEXT_SHORT( p )                         : phy_font->standard_advance;#if 0        cur->ascii     = ( flags & PFR_PHY_ASCII_CODE )                         ? PFR_NEXT_BYTE( p )                         : 0;#else        if ( flags & PFR_PHY_ASCII_CODE )          p += 1;#endif        cur->gps_size  = ( flags & PFR_PHY_2BYTE_GPS_SIZE )                         ? PFR_NEXT_USHORT( p )                         : PFR_NEXT_BYTE( p );        cur->gps_offset = ( flags & PFR_PHY_3BYTE_GPS_OFFSET )                          ? PFR_NEXT_ULONG( p )                          : PFR_NEXT_USHORT( p );      }    }    /* that's it! */  Fail:    FT_FRAME_EXIT();    /* save position of bitmap info */    phy_font->bct_offset = FT_STREAM_POS();    phy_font->cursor     = NULL;  Exit:    return error;  Too_Short:    error = FT_THROW( Invalid_Table );    FT_ERROR(( "pfr_phy_font_load: invalid physical font table/n" ));    goto Fail;  }
开发者ID:ImageMagick,项目名称:ttf,代码行数:101,


示例22: cid_parser_new

  cid_parser_new( CID_Parser*    parser,                  FT_Stream      stream,                  FT_Memory      memory,                  PSAux_Service  psaux )  {    FT_Error  error;    FT_ULong  base_offset, offset, ps_len;    FT_Byte   *cur, *limit;    FT_Byte   *arg1, *arg2;    FT_ZERO( parser );    psaux->ps_parser_funcs->init( &parser->root, 0, 0, memory );    parser->stream = stream;    base_offset = FT_STREAM_POS();    /* first of all, check the font format in the header */    if ( FT_FRAME_ENTER( 31 ) )      goto Exit;    if ( ft_strncmp( (char *)stream->cursor,                     "%!PS-Adobe-3.0 Resource-CIDFont", 31 ) )    {      FT_TRACE2(( "  not a CID-keyed font/n" ));      error = FT_THROW( Unknown_File_Format );    }    FT_FRAME_EXIT();    if ( error )      goto Exit;  Again:    /* now, read the rest of the file until we find */    /* `StartData' or `/sfnts'                      */    {      /*       * The algorithm is as follows (omitting the case with less than 256       * bytes to fill for simplicity).       *       * 1. Fill the buffer with 256 + STARTDATA_LEN bytes.       *       * 2. Search for the STARTDATA and SFNTS strings at positions       *    buffer[0], buffer[1], ...,       *    buffer[255 + STARTDATA_LEN - SFNTS_LEN].       *       * 3. Move the last STARTDATA_LEN bytes to buffer[0].       *       * 4. Fill the buffer with 256 bytes, starting at STARTDATA_LEN.       *       * 5. Repeat with step 2.       *       */      FT_Byte  buffer[256 + STARTDATA_LEN + 1];      /* values for the first loop */      FT_ULong  read_len    = 256 + STARTDATA_LEN;      FT_ULong  read_offset = 0;      FT_Byte*  p           = buffer;      for ( offset = FT_STREAM_POS(); ; offset += 256 )      {        FT_ULong  stream_len;        stream_len = stream->size - FT_STREAM_POS();        read_len = FT_MIN( read_len, stream_len );        if ( FT_STREAM_READ( p, read_len ) )          goto Exit;        /* ensure that we do not compare with data beyond the buffer */        p[read_len] = '/0';        limit = p + read_len - SFNTS_LEN;        for ( p = buffer; p < limit; p++ )        {          if ( p[0] == 'S'                                           &&               ft_strncmp( (char*)p, STARTDATA, STARTDATA_LEN ) == 0 )          {            /* save offset of binary data after `StartData' */            offset += (FT_ULong)( p - buffer ) + STARTDATA_LEN + 1;            goto Found;          }          else if ( p[1] == 's'                                   &&                    ft_strncmp( (char*)p, SFNTS, SFNTS_LEN ) == 0 )          {            offset += (FT_ULong)( p - buffer ) + SFNTS_LEN + 1;            goto Found;          }        }        if ( read_offset + read_len < STARTDATA_LEN )        {          FT_TRACE2(( "cid_parser_new: no `StartData' keyword found/n" ));          error = FT_THROW( Invalid_File_Format );          goto Exit;//.........这里部分代码省略.........
开发者ID:GWRon,项目名称:pub.mod-NG,代码行数:101,



注:本文中的FT_STREAM_POS函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ FT_STREAM_READ函数代码示例
C++ FT_Render_Glyph函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。