< prev index next >

src/java.desktop/share/native/libfreetype/src/psaux/cffdecode.c

Print this page


   1 /****************************************************************************
   2  *
   3  * cffdecode.c
   4  *
   5  *   PostScript CFF (Type 2) decoding routines (body).
   6  *
   7  * Copyright (C) 2017-2019 by
   8  * David Turner, Robert Wilhelm, and Werner Lemberg.
   9  *
  10  * This file is part of the FreeType project, and may only be used,
  11  * modified, and distributed under the terms of the FreeType project
  12  * license, LICENSE.TXT.  By continuing to use, modify, or distribute
  13  * this file you indicate that you have read the license and
  14  * understand and accept it fully.
  15  *
  16  */
  17 
  18 
  19 #include <ft2build.h>
  20 #include FT_FREETYPE_H
  21 #include FT_INTERNAL_DEBUG_H
  22 #include FT_INTERNAL_SERVICE_H
  23 #include FT_SERVICE_CFF_TABLE_LOAD_H
  24 
  25 #include "cffdecode.h"
  26 #include "psobjs.h"
  27 


 313       error = cff_decoder_parse_charstrings( decoder, charstring,
 314                                              charstring_len, 0 );
 315       decoder->seac = FALSE;
 316 
 317       decoder->free_glyph_callback( face, &charstring, charstring_len );
 318 
 319       if ( error )
 320         goto Exit;
 321     }
 322 
 323     /* Save the left bearing, advance and glyph width of the base */
 324     /* character as they will be erased by the next load.         */
 325 
 326     left_bearing = builder->left_bearing;
 327     advance      = builder->advance;
 328     glyph_width  = decoder->glyph_width;
 329 
 330     builder->left_bearing.x = 0;
 331     builder->left_bearing.y = 0;
 332 
 333     builder->pos_x = adx - asb;
 334     builder->pos_y = ady;
 335 
 336     /* Now load `achar' on top of the base outline. */
 337     error = decoder->get_glyph_callback( face, (FT_UInt)achar_index,
 338                                          &charstring, &charstring_len );
 339     if ( !error )
 340     {
 341       /* the seac operator must not be nested */
 342       decoder->seac = TRUE;
 343       error = cff_decoder_parse_charstrings( decoder, charstring,
 344                                              charstring_len, 0 );
 345       decoder->seac = FALSE;
 346 
 347       decoder->free_glyph_callback( face, &charstring, charstring_len );
 348 
 349       if ( error )
 350         goto Exit;
 351     }
 352 
 353     /* Restore the left side bearing, advance and glyph width */


 512                          decoder->cff->top_font.font_dict.num_designs;
 513     FT_UShort          num_axes =
 514                          decoder->cff->top_font.font_dict.num_axes;
 515 
 516     T2_Hints_Funcs  hinter;
 517 
 518 
 519     /* set default width */
 520     decoder->num_hints  = 0;
 521     decoder->read_width = 1;
 522 
 523     /* initialize the decoder */
 524     decoder->top  = decoder->stack;
 525     decoder->zone = decoder->zones;
 526     zone          = decoder->zones;
 527     stack         = decoder->top;
 528 
 529     hinter = (T2_Hints_Funcs)builder->hints_funcs;
 530 
 531     builder->path_begun = 0;



 532 
 533     zone->base           = charstring_base;
 534     limit = zone->limit  = charstring_base + charstring_len;
 535     ip    = zone->cursor = zone->base;
 536 
 537     error = FT_Err_Ok;
 538 
 539     x = builder->pos_x;
 540     y = builder->pos_y;
 541 
 542     /* begin hints recording session, if any */
 543     if ( hinter )
 544       hinter->open( hinter->hints );
 545 
 546     /* now execute loop */
 547     while ( ip < limit )
 548     {
 549       CFF_Operator  op;
 550       FT_Byte       v;
 551 


   1 /****************************************************************************
   2  *
   3  * cffdecode.c
   4  *
   5  *   PostScript CFF (Type 2) decoding routines (body).
   6  *
   7  * Copyright (C) 2017-2020 by
   8  * David Turner, Robert Wilhelm, and Werner Lemberg.
   9  *
  10  * This file is part of the FreeType project, and may only be used,
  11  * modified, and distributed under the terms of the FreeType project
  12  * license, LICENSE.TXT.  By continuing to use, modify, or distribute
  13  * this file you indicate that you have read the license and
  14  * understand and accept it fully.
  15  *
  16  */
  17 
  18 
  19 #include <ft2build.h>
  20 #include FT_FREETYPE_H
  21 #include FT_INTERNAL_DEBUG_H
  22 #include FT_INTERNAL_SERVICE_H
  23 #include FT_SERVICE_CFF_TABLE_LOAD_H
  24 
  25 #include "cffdecode.h"
  26 #include "psobjs.h"
  27 


 313       error = cff_decoder_parse_charstrings( decoder, charstring,
 314                                              charstring_len, 0 );
 315       decoder->seac = FALSE;
 316 
 317       decoder->free_glyph_callback( face, &charstring, charstring_len );
 318 
 319       if ( error )
 320         goto Exit;
 321     }
 322 
 323     /* Save the left bearing, advance and glyph width of the base */
 324     /* character as they will be erased by the next load.         */
 325 
 326     left_bearing = builder->left_bearing;
 327     advance      = builder->advance;
 328     glyph_width  = decoder->glyph_width;
 329 
 330     builder->left_bearing.x = 0;
 331     builder->left_bearing.y = 0;
 332 
 333     builder->pos_x = SUB_LONG( adx, asb );
 334     builder->pos_y = ady;
 335 
 336     /* Now load `achar' on top of the base outline. */
 337     error = decoder->get_glyph_callback( face, (FT_UInt)achar_index,
 338                                          &charstring, &charstring_len );
 339     if ( !error )
 340     {
 341       /* the seac operator must not be nested */
 342       decoder->seac = TRUE;
 343       error = cff_decoder_parse_charstrings( decoder, charstring,
 344                                              charstring_len, 0 );
 345       decoder->seac = FALSE;
 346 
 347       decoder->free_glyph_callback( face, &charstring, charstring_len );
 348 
 349       if ( error )
 350         goto Exit;
 351     }
 352 
 353     /* Restore the left side bearing, advance and glyph width */


 512                          decoder->cff->top_font.font_dict.num_designs;
 513     FT_UShort          num_axes =
 514                          decoder->cff->top_font.font_dict.num_axes;
 515 
 516     T2_Hints_Funcs  hinter;
 517 
 518 
 519     /* set default width */
 520     decoder->num_hints  = 0;
 521     decoder->read_width = 1;
 522 
 523     /* initialize the decoder */
 524     decoder->top  = decoder->stack;
 525     decoder->zone = decoder->zones;
 526     zone          = decoder->zones;
 527     stack         = decoder->top;
 528 
 529     hinter = (T2_Hints_Funcs)builder->hints_funcs;
 530 
 531     builder->path_begun = 0;
 532 
 533     if ( !charstring_base )
 534       return FT_Err_Ok;
 535 
 536     zone->base           = charstring_base;
 537     limit = zone->limit  = charstring_base + charstring_len;
 538     ip    = zone->cursor = zone->base;
 539 
 540     error = FT_Err_Ok;
 541 
 542     x = builder->pos_x;
 543     y = builder->pos_y;
 544 
 545     /* begin hints recording session, if any */
 546     if ( hinter )
 547       hinter->open( hinter->hints );
 548 
 549     /* now execute loop */
 550     while ( ip < limit )
 551     {
 552       CFF_Operator  op;
 553       FT_Byte       v;
 554 


< prev index next >