diff options
Diffstat (limited to 'src/psaux/psdecode.c')
-rw-r--r-- | src/psaux/psdecode.c | 83 |
1 files changed, 58 insertions, 25 deletions
diff --git a/src/psaux/psdecode.c b/src/psaux/psdecode.c index 700342582..86b42863f 100644 --- a/src/psaux/psdecode.c +++ b/src/psaux/psdecode.c @@ -2,7 +2,6 @@ #include <ft2build.h> #include FT_INTERNAL_SERVICE_H -#include FT_SERVICE_CFF_TABLE_LOAD_H #include "psdecode.h" #include "psobjs.h" @@ -16,42 +15,76 @@ /* ps_decoder_init */ /* */ /* <Description> */ - /* Initializes a given glyph decoder. */ + /* Creates a decoder for the combined Type 1 / CFF interpreter. */ /* */ /* <InOut> */ /* decoder :: A pointer to the glyph builder to initialize. */ /* */ /* <Input> */ - /* face :: The current face object. */ /* */ - /* size :: The current size object. */ /* */ - /* slot :: The current glyph object. */ /* */ - /* hinting :: Whether hinting is active. */ /* */ - /* hint_mode :: The hinting mode. */ /* */ FT_LOCAL_DEF( void ) - ps_decoder_init( PS_Decoder* decoder, - TT_Face face, - FT_Size size, - CFF_GlyphSlot slot, - FT_Byte** glyph_names, - PS_Blend blend, - FT_Bool hinting, - FT_Render_Mode hint_mode, - PS_Decoder_Get_Glyph_Callback get_callback, - PS_Decoder_Free_Glyph_Callback free_callback ) + 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; - /* this function is used to select the subfont */ - /* and the locals subrs array */ - FT_LOCAL_DEF( FT_Error ) - ps_decoder_prepare( PS_Decoder* decoder, - FT_Size size, - FT_UInt glyph_index ) - { + 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; + } } + |