summaryrefslogtreecommitdiff
path: root/src/psaux/psdecode.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/psaux/psdecode.c')
-rw-r--r--src/psaux/psdecode.c83
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;
+ }
}
+