summaryrefslogtreecommitdiff
path: root/src/psaux/psdecode.c
blob: 86b42863fec08a4e42126e9400ca11032a09bc51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90


#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->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->t1_parse_callback  =  t1_decoder->parse_callback; */

      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->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;
    }
  }