

#include <ft2build.h>
#include FT_INTERNAL_SERVICE_H

#include "psdecode.h"
#include "psobjs.h"

#include "psauxerr.h"


  /*************************************************************************/
  /*                                                                       */
  /* <Function>                                                            */
  /*    ps_decoder_init                                                    */
  /*                                                                       */
  /* <Description>                                                         */
  /*    Creates a decoder for the combined Type 1 / CFF interpreter.       */
  /*                                                                       */
  /* <InOut>                                                               */
  /*    decoder :: A pointer to the glyph builder to initialize.           */
  /*                                                                       */
  /* <Input>                                                               */
  /*                                                                       */
  /*                                                                       */
  /*                                                                       */
  /*                                                                       */
  /*                                                                       */
  FT_LOCAL_DEF( void )
  ps_decoder_init( void*        decoder,
                   FT_Bool      is_t1,
                   PS_Decoder*  ps_decoder )
  {
    FT_ZERO( ps_decoder );

    if ( is_t1 )
    {
      T1_Decoder  t1_decoder = (T1_Decoder)decoder;

      ps_builder_init( &t1_decoder->builder,
                       is_t1,
                       &ps_decoder->builder );

      ps_decoder->cf2_instance       = &t1_decoder->cf2_instance;
      ps_decoder->psnames            =  t1_decoder->psnames;

      ps_decoder->num_glyphs         =  t1_decoder->num_glyphs;
      ps_decoder->glyph_names        =  t1_decoder->glyph_names;
      ps_decoder->hint_mode          =  t1_decoder->hint_mode;
      ps_decoder->blend              =  t1_decoder->blend;

      ps_decoder->num_locals         =  t1_decoder->num_subrs;
      ps_decoder->locals             =  t1_decoder->subrs;
      ps_decoder->locals_len         =  t1_decoder->subrs_len;
      ps_decoder->locals_hash        =  t1_decoder->subrs_hash;

      ps_decoder->buildchar          =  t1_decoder->buildchar;
      ps_decoder->len_buildchar      =  t1_decoder->len_buildchar;

      ps_decoder->lenIV              =  t1_decoder->lenIV;
    }
    else
    {
      CFF_Decoder*  cff_decoder = (CFF_Decoder*)decoder;

      ps_builder_init( &cff_decoder->builder,
                       is_t1,
                       &ps_decoder->builder );

      ps_decoder->cff                 =  cff_decoder->cff;
      ps_decoder->cf2_instance        = &cff_decoder->cff->cf2_instance;
      ps_decoder->current_subfont     =  cff_decoder->current_subfont;

      ps_decoder->num_globals         =  cff_decoder->num_globals;
      ps_decoder->globals             =  cff_decoder->globals;
      ps_decoder->globals_bias        =  cff_decoder->globals_bias;
      ps_decoder->num_locals          =  cff_decoder->num_locals;
      ps_decoder->locals              =  cff_decoder->locals;
      ps_decoder->locals_bias         =  cff_decoder->locals_bias;

      ps_decoder->glyph_width         =  cff_decoder->glyph_width;
      ps_decoder->nominal_width       =  cff_decoder->nominal_width;
      ps_decoder->width_only          =  cff_decoder->width_only;

      ps_decoder->hint_mode           =  cff_decoder->hint_mode;

      ps_decoder->get_glyph_callback  =  cff_decoder->get_glyph_callback;
      ps_decoder->free_glyph_callback =  cff_decoder->free_glyph_callback;
    }
  }

