diff --git a/ChangeLog b/ChangeLog index 62a0f4424..bcdc5bf09 100644 --- a/ChangeLog +++ b/ChangeLog @@ -14,63 +14,99 @@ * freetype2/src/sfnt/ttcmap.c (tt_face_build_cmaps): Same for local variable `cmap'. - 2006-08-16 David Turner - * src/cid/cidgload.c (cid_slot_load_glyph), - src/truetype/ttgload.c (tt_prepare_zone): removing compiler warnings + * src/cid/cidgload.c (cid_slot_load_glyph): Remove compiler + warnings. - * src/base/ftobjs.c (ft_validator_run): disabling function, it is - buggy by design, so it will always return -1 + * src/base/ftobjs.c (ft_validator_run): Disable function; it is + buggy by design. Always return -1. - * include/freetype/internal/ftgloadr.h, - include/freetype/internal/tttypes.h, src/base/ftgloadr.c, - src/base/ftobjs.c, src/truetype/ttgload.c, src/truetype/ttinterp.c, - src/truetype/ttobjs.c: improvements to native TrueType hinting, - this is a first try, controlled by the FIX_BYTECODE macro in - src/truetype/ttinterp.c + Improvements to native TrueType hinting. This is a first try, + controlled by the FIX_BYTECODE macro in src/truetype/ttinterp.c. + + * include/freetype/internal/ftgloadr.h (FT_GlyphLoadRec): Add member + `extra_points2'. + + * include/freetype/internal/tttypes.h (TT_GlyphZoneRec): Add member + `orus'. + + * src/base/ftgloadr.c (FT_GlyphLoader_Reset, + FT_GlyphLoader_Adjust_Points, FT_GlyphLoader_CreateExtra, + FT_GlyphLoader_CheckPoints, FT_GlyphLoader_CopyPoints): Updated to + handle `extra_points2'. + + * src/truetype/ttgload.c (tt_prepare_zone): Handle `orus'. + Remove compiler warning. + (cur_to_arg): Remove macro. + (TT_Hint_Glyph): Updated. + (TT_Process_Simple_Glyph): Handle `orus'. + + * src/truetype/ttinterp.c (FIX_BYTECODE): New macro. + (Ins_MD, Ins_MDRP, Ins_IP) [FIX_BYTECODE]: Handle `orus'. + (LOC_Ins_IUP): Renamed to... + (IUP_WorkerRec): This. + Add `orus' member. + (Shift): Renamed to... + (_iup_worker_shift): This. + Updated. + (Interp): Renamed to... + (_iup_worker_interpolate): This. + Updated to handle `orus'. + (Ins_IUP): Updated. + + * src/truetype/ttobjs.c (tt_glyphzone_done, tt_glyphzone_new): + Handle `orus'. 2006-08-15 suzuki toshiya * modules.cfg (BASE_EXTENSIONS): Compile in ftgxval.c by default to - build ftvalid in ft2demos. Commit on 2006-02-28 had been slipped. + build ftvalid in ft2demos. This has been inadvertedly changed + 2006-08-13. 2006-08-15 suzuki toshiya - `ft_validator_run' wrapping `setjmp' can cause crash, found by Jens: - http://lists.nongnu.org/archive/html/freetype-devel/2006-08/msg00004.htm + `ft_validator_run' wrapping `setjmp' can cause a crash, as found by + Jens: + http://lists.nongnu.org/archive/html/freetype-devel/2006-08/msg00004.htm. - * freetype2/src/otvalid/otvmod.c: replace `ft_validator_run' by - `ft_setjmp'. It reverts the change introduced on 2005-08-20. + * freetype2/src/otvalid/otvmod.c: Replace `ft_validator_run' by + `ft_setjmp'. It reverts the change introduced on 2005-08-20. * freetype2/src/gxvalid/gxvmod.c: Ditto. 2006-08-13 Jens Claudius - * freetype2/include/freetype/internal/psaux.h: (enum T1_TokenType_): - add T1_TOKEN_TYPE_KEY. (struct T1_FieldRec_) add `dict'. Add macros - T1_FIELD_DICT_FONTDICT and T1_FIELD_DICT_PRIVATE. Change T1_NEW_XXX and - T1_FIELD_XXX macros to take the dictionary where the PS keywords is - expected as an additional argument. + * freetype2/include/freetype/internal/psaux.h: (T1_TokenType): Add + T1_TOKEN_TYPE_KEY. + (T1_FieldRec): Add `dict'. + (T1_FIELD_DICT_FONTDICT, T1_FIELD_DICT_PRIVATE): New macros. + (T1_NEW_XXX, T1_FIELD_XXX): Update to take the dictionary where a PS + keyword is expected as an additional argument. - * freetype2/src/cid/cidload.c: (T1_FieldRec): Adjust invocations - of T1_FIELD_XXX. + * freetype2/src/cid/cidload.c: (cid_field_records): Adjust + invocations of T1_FIELD_XXX. * freetype2/src/cid/cidtoken.h: Adjust invocations of T1_FIELD_XXX. * freetype2/src/psaux/psobjs.c: Add macro FT_COMPONENT for tracing. - (ps_parser_to_token): Report a PostScript key as T1_TOKEN_TYPE_KEY - instead as T1_TOKEN_TYPE_ANY. (ps_parser_load_field): Make sure a token - that should be a string or name is a string or name indeed. Avoid - memory leak if a keyword has been already encountered and its value - is overwritten. + (ps_parser_to_token): Report a PostScript key as T1_TOKEN_TYPE_KEY, + not T1_TOKEN_TYPE_ANY. + (ps_parser_load_field): Make sure a token that should be a string or + name is really a string or name. + Avoid memory leak if a keyword has been already encountered and its + value is overwritten. + * freetype2/src/type1/t1load.c: (t1_keywords): Adjust invocations of + T1_FIELD_XXX. + (parse_dict): Ignore keywords that occur in the wrong dictionary + (e.g., in `Private' instead of `FontDict'). - * freetype2/src/type1/t1load.c: (T1_FieldRec): Adjust invocations of - T1_FIELD_XXX. (parse_dict): Ignore keywords that occur in the wrong - dictionary (e.g., in Private instead of FontDict). + * freetype2/src/type1/t1tokens.h: Adjust invocations of + T1_FIELD_XXX. - * freetype2/src/type1/t1tokens.h: Adjust invocations of T1_FIELD_XXX. + * freetype2/src/type42/t42parse.c: (t42_keywords): Adjust + invocations of T1_FIELD_XXX. 2006-07-18 Jens Claudius diff --git a/src/base/ftgloadr.c b/src/base/ftgloadr.c index 5dbb6b50c..ab52621ea 100644 --- a/src/base/ftgloadr.c +++ b/src/base/ftgloadr.c @@ -4,7 +4,7 @@ /* */ /* The FreeType glyph loader (body). */ /* */ -/* Copyright 2002, 2003, 2004, 2005 by */ +/* Copyright 2002, 2003, 2004, 2005, 2006 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -168,7 +168,7 @@ FT_Memory memory = loader->memory; - if ( !FT_NEW_ARRAY( loader->base.extra_points, 2*loader->max_points ) ) + if ( !FT_NEW_ARRAY( loader->base.extra_points, 2 * loader->max_points ) ) { loader->use_extra = 1; loader->base.extra_points2 = loader->base.extra_points + @@ -224,7 +224,8 @@ if ( loader->use_extra ) { - if ( FT_RENEW_ARRAY( loader->base.extra_points, old_max*2, new_max*2 ) ) + if ( FT_RENEW_ARRAY( loader->base.extra_points, + old_max * 2, new_max * 2 ) ) goto Exit; FT_ARRAY_MOVE( loader->base.extra_points + new_max, diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 9488cd453..14085437b 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -78,8 +78,9 @@ FT_BASE_DEF( FT_Int ) ft_validator_run( FT_Validator valid ) { - /* this function is so buggy, none should be calling it */ - FT_UNUSED(valid); + /* This function doesn't work! None should call it. */ + FT_UNUSED( valid ); + return -1; } diff --git a/src/cid/cidgload.c b/src/cid/cidgload.c index 741411687..68bd14e0f 100644 --- a/src/cid/cidgload.c +++ b/src/cid/cidgload.c @@ -298,7 +298,7 @@ hinting, FT_LOAD_TARGET_MODE( load_flags ), cid_load_glyph ); - if (error) + if ( error ) goto Exit; /* TODO: initialize decoder.len_buildchar and decoder.buildchar */ @@ -309,7 +309,7 @@ ( ( load_flags & FT_LOAD_NO_RECURSE ) != 0 ) ); error = cid_load_glyph( &decoder, glyph_index ); - if (error) + if ( error ) goto Exit; font_matrix = decoder.font_matrix; @@ -318,7 +318,7 @@ /* save new glyph tables */ psaux->t1_decoder_funcs->done( &decoder ); - /* now, set the metrics -- this is rather simple, as */ + /* now set the metrics -- this is rather simple, as */ /* the left side bearing is the xMin, and the top side */ /* bearing the yMax */ cidglyph->outline.flags &= FT_OUTLINE_OWNER; @@ -334,9 +334,9 @@ cidglyph->metrics.horiBearingX = decoder.builder.left_bearing.x; cidglyph->metrics.horiAdvance = decoder.builder.advance.x; - internal->glyph_matrix = font_matrix; - internal->glyph_delta = font_offset; - internal->glyph_transformed = 1; + internal->glyph_matrix = font_matrix; + internal->glyph_delta = font_offset; + internal->glyph_transformed = 1; } else { @@ -371,6 +371,7 @@ advance.y = 0; FT_Vector_Transform( &advance, &font_matrix ); metrics->horiAdvance = advance.x + font_offset.x; + advance.x = 0; advance.y = metrics->vertAdvance; FT_Vector_Transform( &advance, &font_matrix ); @@ -395,8 +396,8 @@ } /* Then scale the metrics */ - metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, x_scale ); - metrics->vertAdvance = FT_MulFix( metrics->vertAdvance, y_scale ); + metrics->horiAdvance = FT_MulFix( metrics->horiAdvance, x_scale ); + metrics->vertAdvance = FT_MulFix( metrics->vertAdvance, y_scale ); } /* compute the other metrics */ diff --git a/src/cid/cidload.c b/src/cid/cidload.c index f245a53b0..9ed8cee46 100644 --- a/src/cid/cidload.c +++ b/src/cid/cidload.c @@ -4,7 +4,7 @@ /* */ /* CID-keyed Type1 font loader (body). */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2005 by */ +/* Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/cid/cidtoken.h b/src/cid/cidtoken.h index d2a957673..ad5bbb2ee 100644 --- a/src/cid/cidtoken.h +++ b/src/cid/cidtoken.h @@ -4,7 +4,7 @@ /* */ /* CID token definitions (specification only). */ /* */ -/* Copyright 1996-2001, 2002, 2003 by */ +/* Copyright 1996-2001, 2002, 2003, 2006 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -21,17 +21,17 @@ #undef T1CODE #define T1CODE T1_FIELD_LOCATION_CID_INFO - T1_FIELD_KEY ( "CIDFontName", cid_font_name, 0 ) - T1_FIELD_NUM ( "CIDFontVersion", cid_version, 0 ) - T1_FIELD_NUM ( "CIDFontType", cid_font_type, 0 ) - T1_FIELD_STRING( "Registry", registry, 0 ) - T1_FIELD_STRING( "Ordering", ordering, 0 ) - T1_FIELD_NUM ( "Supplement", supplement, 0 ) - T1_FIELD_NUM ( "UIDBase", uid_base, 0 ) - T1_FIELD_NUM ( "CIDMapOffset", cidmap_offset, 0 ) - T1_FIELD_NUM ( "FDBytes", fd_bytes, 0 ) - T1_FIELD_NUM ( "GDBytes", gd_bytes, 0 ) - T1_FIELD_NUM ( "CIDCount", cid_count, 0 ) + T1_FIELD_KEY ( "CIDFontName", cid_font_name, 0 ) + T1_FIELD_NUM ( "CIDFontVersion", cid_version, 0 ) + T1_FIELD_NUM ( "CIDFontType", cid_font_type, 0 ) + T1_FIELD_STRING( "Registry", registry, 0 ) + T1_FIELD_STRING( "Ordering", ordering, 0 ) + T1_FIELD_NUM ( "Supplement", supplement, 0 ) + T1_FIELD_NUM ( "UIDBase", uid_base, 0 ) + T1_FIELD_NUM ( "CIDMapOffset", cidmap_offset, 0 ) + T1_FIELD_NUM ( "FDBytes", fd_bytes, 0 ) + T1_FIELD_NUM ( "GDBytes", gd_bytes, 0 ) + T1_FIELD_NUM ( "CIDCount", cid_count, 0 ) #undef FT_STRUCTURE @@ -39,14 +39,14 @@ #undef T1CODE #define T1CODE T1_FIELD_LOCATION_FONT_INFO - T1_FIELD_STRING( "version", version, 0 ) - T1_FIELD_STRING( "Notice", notice, 0 ) - T1_FIELD_STRING( "FullName", full_name, 0 ) - T1_FIELD_STRING( "FamilyName", family_name, 0 ) - T1_FIELD_STRING( "Weight", weight, 0 ) - T1_FIELD_NUM ( "ItalicAngle", italic_angle, 0 ) - T1_FIELD_BOOL ( "isFixedPitch", is_fixed_pitch, 0 ) - T1_FIELD_NUM ( "UnderlinePosition", underline_position, 0 ) + T1_FIELD_STRING( "version", version, 0 ) + T1_FIELD_STRING( "Notice", notice, 0 ) + T1_FIELD_STRING( "FullName", full_name, 0 ) + T1_FIELD_STRING( "FamilyName", family_name, 0 ) + T1_FIELD_STRING( "Weight", weight, 0 ) + T1_FIELD_NUM ( "ItalicAngle", italic_angle, 0 ) + T1_FIELD_BOOL ( "isFixedPitch", is_fixed_pitch, 0 ) + T1_FIELD_NUM ( "UnderlinePosition", underline_position, 0 ) T1_FIELD_NUM ( "UnderlineThickness", underline_thickness, 0 ) @@ -55,15 +55,15 @@ #undef T1CODE #define T1CODE T1_FIELD_LOCATION_FONT_DICT - T1_FIELD_NUM ( "PaintType", paint_type, 0 ) - T1_FIELD_NUM ( "FontType", font_type, 0 ) - T1_FIELD_NUM ( "SubrMapOffset", subrmap_offset, 0 ) - T1_FIELD_NUM ( "SDBytes", sd_bytes, 0 ) - T1_FIELD_NUM ( "SubrCount", num_subrs, 0 ) - T1_FIELD_NUM ( "lenBuildCharArray", len_buildchar, 0 ) + T1_FIELD_NUM ( "PaintType", paint_type, 0 ) + T1_FIELD_NUM ( "FontType", font_type, 0 ) + T1_FIELD_NUM ( "SubrMapOffset", subrmap_offset, 0 ) + T1_FIELD_NUM ( "SDBytes", sd_bytes, 0 ) + T1_FIELD_NUM ( "SubrCount", num_subrs, 0 ) + T1_FIELD_NUM ( "lenBuildCharArray", len_buildchar, 0 ) T1_FIELD_FIXED( "ForceBoldThreshold", forcebold_threshold, 0 ) - T1_FIELD_FIXED( "ExpansionFactor", expansion_factor, 0 ) - T1_FIELD_FIXED( "StrokeWidth", stroke_width, 0 ) + T1_FIELD_FIXED( "ExpansionFactor", expansion_factor, 0 ) + T1_FIELD_FIXED( "StrokeWidth", stroke_width, 0 ) #undef FT_STRUCTURE @@ -71,26 +71,26 @@ #undef T1CODE #define T1CODE T1_FIELD_LOCATION_PRIVATE - T1_FIELD_NUM ( "UniqueID", unique_id, 0 ) - T1_FIELD_NUM ( "lenIV", lenIV, 0 ) - T1_FIELD_NUM ( "LanguageGroup", language_group, 0 ) - T1_FIELD_NUM ( "password", password, 0 ) + T1_FIELD_NUM ( "UniqueID", unique_id, 0 ) + T1_FIELD_NUM ( "lenIV", lenIV, 0 ) + T1_FIELD_NUM ( "LanguageGroup", language_group, 0 ) + T1_FIELD_NUM ( "password", password, 0 ) - T1_FIELD_FIXED_1000( "BlueScale", blue_scale, 0 ) - T1_FIELD_NUM ( "BlueShift", blue_shift, 0 ) - T1_FIELD_NUM ( "BlueFuzz", blue_fuzz, 0 ) + T1_FIELD_FIXED_1000( "BlueScale", blue_scale, 0 ) + T1_FIELD_NUM ( "BlueShift", blue_shift, 0 ) + T1_FIELD_NUM ( "BlueFuzz", blue_fuzz, 0 ) - T1_FIELD_NUM_TABLE ( "BlueValues", blue_values, 14, 0 ) - T1_FIELD_NUM_TABLE ( "OtherBlues", other_blues, 10, 0 ) - T1_FIELD_NUM_TABLE ( "FamilyBlues", family_blues, 14, 0 ) + T1_FIELD_NUM_TABLE ( "BlueValues", blue_values, 14, 0 ) + T1_FIELD_NUM_TABLE ( "OtherBlues", other_blues, 10, 0 ) + T1_FIELD_NUM_TABLE ( "FamilyBlues", family_blues, 14, 0 ) T1_FIELD_NUM_TABLE ( "FamilyOtherBlues", family_other_blues, 10, 0 ) - T1_FIELD_NUM_TABLE2( "StdHW", standard_width, 1, 0 ) - T1_FIELD_NUM_TABLE2( "StdVW", standard_height, 1, 0 ) - T1_FIELD_NUM_TABLE2( "MinFeature", min_feature, 2, 0 ) + T1_FIELD_NUM_TABLE2( "StdHW", standard_width, 1, 0 ) + T1_FIELD_NUM_TABLE2( "StdVW", standard_height, 1, 0 ) + T1_FIELD_NUM_TABLE2( "MinFeature", min_feature, 2, 0 ) - T1_FIELD_NUM_TABLE ( "StemSnapH", snap_widths, 12, 0 ) - T1_FIELD_NUM_TABLE ( "StemSnapV", snap_heights, 12, 0 ) + T1_FIELD_NUM_TABLE ( "StemSnapH", snap_widths, 12, 0 ) + T1_FIELD_NUM_TABLE ( "StemSnapV", snap_heights, 12, 0 ) #undef FT_STRUCTURE #define FT_STRUCTURE FT_BBox diff --git a/src/gxvalid/gxvmod.c b/src/gxvalid/gxvmod.c index 2f8d24629..d8d6e2a06 100644 --- a/src/gxvalid/gxvmod.c +++ b/src/gxvalid/gxvmod.c @@ -4,7 +4,8 @@ /* */ /* FreeType's TrueTypeGX/AAT validation module implementation (body). */ /* */ -/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004, 2005, 2006 */ +/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -72,9 +73,9 @@ } -#define GXV_TABLE_DECL( _sfnt ) \ - FT_Byte* volatile _sfnt = NULL; \ - FT_ULong len_ ## _sfnt = 0 +#define GXV_TABLE_DECL( _sfnt ) \ + FT_Byte* volatile _sfnt = NULL; \ + FT_ULong len_ ## _sfnt = 0 #define GXV_TABLE_LOAD( _sfnt ) \ if ( ( FT_VALIDATE_ ## _sfnt ## _INDEX < table_count ) && \ @@ -109,10 +110,10 @@ FT_Bytes tables[FT_VALIDATE_GX_LENGTH], FT_UInt table_count ) { - FT_Memory volatile memory = FT_FACE_MEMORY( face ); + FT_Memory volatile memory = FT_FACE_MEMORY( face ); - FT_Error error = GXV_Err_Ok; - FT_ValidatorRec volatile valid; + FT_Error error = GXV_Err_Ok; + FT_ValidatorRec volatile valid; FT_UInt i; diff --git a/src/otvalid/otvmod.c b/src/otvalid/otvmod.c index 63416616d..cc4ed89d1 100644 --- a/src/otvalid/otvmod.c +++ b/src/otvalid/otvmod.c @@ -4,7 +4,7 @@ /* */ /* FreeType's OpenType validation module implementation (body). */ /* */ -/* Copyright 2004, 2005 by */ +/* Copyright 2004, 2005, 2006 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -67,20 +67,20 @@ static FT_Error otv_validate( FT_Face volatile face, FT_UInt ot_flags, - FT_Bytes *ot_base, - FT_Bytes *ot_gdef, - FT_Bytes *ot_gpos, - FT_Bytes *ot_gsub, - FT_Bytes *ot_jstf ) + FT_Bytes *ot_base, + FT_Bytes *ot_gdef, + FT_Bytes *ot_gpos, + FT_Bytes *ot_gsub, + FT_Bytes *ot_jstf ) { - FT_Error error = OTV_Err_Ok; - FT_Byte* volatile base; - FT_Byte* volatile gdef; - FT_Byte* volatile gpos; - FT_Byte* volatile gsub; - FT_Byte* volatile jstf; - FT_ULong len_base, len_gdef, len_gpos, len_gsub, len_jstf; - FT_ValidatorRec volatile valid; + FT_Error error = OTV_Err_Ok; + FT_Byte* volatile base; + FT_Byte* volatile gdef; + FT_Byte* volatile gpos; + FT_Byte* volatile gsub; + FT_Byte* volatile jstf; + FT_ULong len_base, len_gdef, len_gpos, len_gsub, len_jstf; + FT_ValidatorRec volatile valid; base = gdef = gpos = gsub = jstf = NULL; diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c index 0d47bf7cc..bbdb7666d 100644 --- a/src/truetype/ttgload.c +++ b/src/truetype/ttgload.c @@ -618,7 +618,7 @@ #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER /* save original point positioin in org */ if ( n_ins > 0 ) - FT_ARRAY_COPY( zone->org, zone->cur, zone->n_points ); + FT_ARRAY_COPY( zone->org, zone->cur, zone->n_points ); #endif /* round pp2 and pp4 */ diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index 6c5188084..183ad7905 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -16,11 +16,11 @@ /***************************************************************************/ -/* define FIX_BYTECODE to implement the bytecode interpreter fixes needed - * to match Windows behaviour more accurately - */ + /* define FIX_BYTECODE to implement the bytecode interpreter fixes */ + /* needed to match Windows behaviour more accurately */ #define FIX_BYTECODE + #include #include FT_INTERNAL_DEBUG_H #include FT_INTERNAL_CALC_H @@ -4787,15 +4787,16 @@ D = CUR_Func_project( CUR.zp0.cur + L, CUR.zp1.cur + K ); else { + #ifdef FIX_BYTECODE + FT_Vector vec1, vec2; + if ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 ) - { FT_ARRAY_COPY( CUR.twilight.orus, CUR.twilight.org, CUR.twilight.n_points ); - } /* get scaled orus coordinates */ vec1 = CUR.zp0.orus[L]; @@ -4807,9 +4808,12 @@ vec2.y = TT_MULFIX( vec2.y, CUR.metrics.y_scale ); D = CUR_Func_dualproj( &vec1, &vec2 ); + #else + D = CUR_Func_dualproj( CUR.zp0.org + L, CUR.zp1.org + K ); -#endif + +#endif /* FIX_BYTECODE */ } } @@ -5725,9 +5729,11 @@ /* twilight zone? */ #ifdef FIX_BYTECODE + { FT_Vector vec1, vec2; + if ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 ) FT_ARRAY_COPY( CUR.twilight.orus, CUR.twilight.org, @@ -5744,12 +5750,15 @@ org_dist = CUR_Func_dualproj( &vec1, &vec2 ); } + #else + org_dist = CUR_Func_dualproj( CUR.zp1.org + point, CUR.zp0.org + CUR.GS.rp0 ); -#endif - /* single width cutin test */ +#endif /* FIX_BYTECODE */ + + /* single width cut-in test */ if ( FT_ABS( org_dist - CUR.GS.single_width_value ) < CUR.GS.single_width_cutin ) @@ -6117,19 +6126,22 @@ } #ifdef FIX_BYTECODE - /* we need to deal in a special way with the twilight zone - * the easiest is simply to copy the coordinates from 'org' to 'orus' - * whenever someone tries to perform intersections based on some - * of its points. - * - * otherwise, by definition value of CUR.twilight[n] is (0,0), whatever 'n' - */ + + /* We need to deal in a special way with the twilight zone. The easiest + * solution is simply to copy the coordinates from `org' to `orus' + * whenever someone tries to perform intersections based on some of its + * points. + * + * Otherwise, by definition, value of CUR.twilight[n] is (0,0), + * whatever value of `n'. + */ if ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 || CUR.GS.gep2 == 0 ) { FT_ARRAY_COPY( CUR.twilight.orus, CUR.twilight.org, CUR.twilight.n_points ); } + #endif /* FIX_BYTECODE */ /* XXX: There are some glyphs in some braindead but popular */ @@ -6145,9 +6157,12 @@ } else { + #ifdef FIX_BYTECODE + FT_Vector vec1, vec2; + vec1 = CUR.zp0.orus[CUR.GS.rp1]; vec2 = CUR.zp1.orus[CUR.GS.rp2]; vec1.x = TT_MULFIX( vec1.x, CUR.metrics.x_scale ); @@ -6157,10 +6172,13 @@ org_a = CUR_Func_dualproj( &vec1, NULL_Vector ); org_b = CUR_Func_dualproj( &vec2, NULL_Vector ); + #else + org_a = CUR_Func_dualproj( CUR.zp0.org + CUR.GS.rp1, NULL_Vector ); org_b = CUR_Func_dualproj( CUR.zp1.org + CUR.GS.rp2, NULL_Vector ); -#endif + +#endif /* FIX_BYTECODE */ cur_a = CUR_Func_project( CUR.zp0.cur + CUR.GS.rp1, NULL_Vector ); cur_b = CUR_Func_project( CUR.zp1.cur + CUR.GS.rp2, NULL_Vector ); @@ -6181,17 +6199,24 @@ } else { + #ifdef FIX_BYTECODE + FT_Vector vec; + vec = CUR.zp2.orus[point]; vec.x = TT_MULFIX( vec.x, CUR.metrics.x_scale ); vec.y = TT_MULFIX( vec.y, CUR.metrics.y_scale ); org_x = CUR_Func_dualproj( &vec, NULL_Vector ); + #else + org_x = CUR_Func_dualproj( CUR.zp2.org + point, NULL_Vector ); -#endif + +#endif /* FIX_BYTECODE */ + cur_x = CUR_Func_project ( CUR.zp2.cur + point, NULL_Vector ); if ( ( org_a <= org_b && org_x <= org_a ) || @@ -6306,13 +6331,19 @@ orus1 = worker->orus[ref1].x; orus2 = worker->orus[ref2].x; - if (orus1 > orus2) + if ( orus1 > orus2 ) { FT_F26Dot6 tmp_o; FT_UInt tmp_r; - tmp_o = orus1; orus1 = orus2; orus2 = tmp_o; - tmp_r = ref1; ref1 = ref2; ref2 = tmp_r; + + tmp_o = orus1; + orus1 = orus2; + orus2 = tmp_o; + + tmp_r = ref1; + ref1 = ref2; + ref2 = tmp_r; } org1 = worker->orgs[ref1].x; @@ -6327,6 +6358,7 @@ { FT_F26Dot6 x = worker->orgs[i].x; + if ( x <= org1 ) x += delta1; else @@ -6340,11 +6372,13 @@ FT_Fixed scale = 0; FT_Bool scale_valid = 0; + /* interpolation */ for ( i = p1; i <= p2; i++ ) { FT_F26Dot6 x = worker->orgs[i].x; + if ( x <= org1 ) x += delta1; @@ -6356,11 +6390,12 @@ if ( !scale_valid ) { scale_valid = 1; - scale = TT_MULDIV( org2+delta2 - (org1+delta1), 0x10000, - orus2 - orus1 ); + scale = TT_MULDIV( org2 + delta2 - ( org1 + delta1 ), + 0x10000, orus2 - orus1 ); } - x = (org1 + delta1) + TT_MULFIX( worker->orus[i].x - orus1, scale ); + x = ( org1 + delta1 ) + + TT_MULFIX( worker->orus[i].x - orus1, scale ); } worker->curs[i].x = x; } diff --git a/src/type1/t1load.c b/src/type1/t1load.c index d367b989a..70b9f2004 100644 --- a/src/type1/t1load.c +++ b/src/type1/t1load.c @@ -1721,18 +1721,28 @@ #include "t1tokens.h" /* now add the special functions... */ - T1_FIELD_CALLBACK( "FontMatrix", parse_font_matrix, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_CALLBACK( "Encoding", parse_encoding, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_CALLBACK( "Subrs", parse_subrs, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_CALLBACK( "CharStrings", parse_charstrings, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_CALLBACK( "Private", parse_private, T1_FIELD_DICT_FONTDICT ) + T1_FIELD_CALLBACK( "FontMatrix", parse_font_matrix, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_CALLBACK( "Encoding", parse_encoding, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_CALLBACK( "Subrs", parse_subrs, + T1_FIELD_DICT_PRIVATE ) + T1_FIELD_CALLBACK( "CharStrings", parse_charstrings, + T1_FIELD_DICT_PRIVATE ) + T1_FIELD_CALLBACK( "Private", parse_private, + T1_FIELD_DICT_FONTDICT ) #ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT - T1_FIELD_CALLBACK( "BlendDesignPositions", parse_blend_design_positions, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_CALLBACK( "BlendDesignMap", parse_blend_design_map, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_CALLBACK( "BlendAxisTypes", parse_blend_axis_types, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_CALLBACK( "WeightVector", parse_weight_vector, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_CALLBACK( "BuildCharArray", parse_buildchar, T1_FIELD_DICT_PRIVATE ) + T1_FIELD_CALLBACK( "BlendDesignPositions", parse_blend_design_positions, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_CALLBACK( "BlendDesignMap", parse_blend_design_map, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_CALLBACK( "BlendAxisTypes", parse_blend_axis_types, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_CALLBACK( "WeightVector", parse_weight_vector, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_CALLBACK( "BuildCharArray", parse_buildchar, + T1_FIELD_DICT_PRIVATE ) #endif { 0, T1_FIELD_LOCATION_CID_INFO, T1_FIELD_TYPE_NONE, 0, 0, 0, 0, 0, 0 } @@ -1866,41 +1876,42 @@ /* synthetic font) to deal adequately with */ /* multiple master fonts; this is also */ /* necessary because later PostScript */ - /* definitions override earlier ones */ + /* definitions override earlier ones. */ /* Once we encounter `FontDirectory' after */ /* `/Private', we know that this is a synthetic */ /* font; except for `/CharStrings' we are not */ /* interested in anything that follows this */ - /* `FontDirectory' */ + /* `FontDirectory'. */ /* MM fonts have more than one /Private token at */ /* the top level; let's hope that all the junk */ /* that follows the first /Private token is not */ - /* interesting to us */ + /* interesting to us. */ /* According to Adobe Tech Note #5175 (CID-Keyed */ /* Font Installation for ATM Software) a `begin' */ - /* must be followed by exactly one `end' and */ + /* must be followed by exactly one `end', and */ /* `begin' -- `end' pairs must be accurately */ - /* paired. We could use this to dinstinguish */ + /* paired. We could use this to dinstinguish */ /* between the global Private and the Private */ - /* that is a member of the Blend dict. */ + /* dict that is a member of the Blend dict. */ - const FT_UInt dict - = ( ( loader->keywords_encountered & T1_PRIVATE ) ? - T1_FIELD_DICT_PRIVATE : T1_FIELD_DICT_FONTDICT ); + const FT_UInt dict = + ( loader->keywords_encountered & T1_PRIVATE ) + ? T1_FIELD_DICT_PRIVATE + : T1_FIELD_DICT_FONTDICT; - if ( ! ( dict & keyword->dict ) ) + if ( !( dict & keyword->dict ) ) { - FT_TRACE1(( "parse_dict: found %s but ignore it " + FT_TRACE1(( "parse_dict: found %s but ignoring it " "since it is in the wrong dictionary\n", keyword->ident )); break; } - if ( !( loader->keywords_encountered & - T1_FONTDIR_AFTER_PRIVATE ) || + if ( !( loader->keywords_encountered & + T1_FONTDIR_AFTER_PRIVATE ) || ft_strcmp( (const char*)name, "CharStrings" ) == 0 ) { parser->root.error = t1_load_keyword( face, diff --git a/src/type1/t1tokens.h b/src/type1/t1tokens.h index beb5c7413..788c811b0 100644 --- a/src/type1/t1tokens.h +++ b/src/type1/t1tokens.h @@ -21,17 +21,26 @@ #undef T1CODE #define T1CODE T1_FIELD_LOCATION_FONT_INFO - T1_FIELD_STRING( "version", version, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_STRING( "Notice", notice, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_STRING( "FullName", full_name, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_STRING( "FamilyName", family_name, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_STRING( "Weight", weight, T1_FIELD_DICT_FONTDICT ) + T1_FIELD_STRING( "version", version, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_STRING( "Notice", notice, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_STRING( "FullName", full_name, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_STRING( "FamilyName", family_name, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_STRING( "Weight", weight, + T1_FIELD_DICT_FONTDICT ) /* we use pointers to detect modifications made by synthetic fonts */ - T1_FIELD_NUM ( "ItalicAngle", italic_angle, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_BOOL ( "isFixedPitch", is_fixed_pitch, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_NUM ( "UnderlinePosition", underline_position, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_NUM ( "UnderlineThickness", underline_thickness, T1_FIELD_DICT_FONTDICT ) + T1_FIELD_NUM ( "ItalicAngle", italic_angle, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_BOOL ( "isFixedPitch", is_fixed_pitch, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_NUM ( "UnderlinePosition", underline_position, + T1_FIELD_DICT_FONTDICT ) + T1_FIELD_NUM ( "UnderlineThickness", underline_thickness, + T1_FIELD_DICT_FONTDICT ) #undef FT_STRUCTURE @@ -39,28 +48,45 @@ #undef T1CODE #define T1CODE T1_FIELD_LOCATION_PRIVATE - T1_FIELD_NUM ( "UniqueID", unique_id, T1_FIELD_DICT_FONTDICT | T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM ( "lenIV", lenIV, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM ( "LanguageGroup", language_group, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM ( "password", password, T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM ( "UniqueID", unique_id, + T1_FIELD_DICT_FONTDICT | T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM ( "lenIV", lenIV, + T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM ( "LanguageGroup", language_group, + T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM ( "password", password, + T1_FIELD_DICT_PRIVATE ) - T1_FIELD_FIXED_1000( "BlueScale", blue_scale, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM ( "BlueShift", blue_shift, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM ( "BlueFuzz", blue_fuzz, T1_FIELD_DICT_PRIVATE ) + T1_FIELD_FIXED_1000( "BlueScale", blue_scale, + T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM ( "BlueShift", blue_shift, + T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM ( "BlueFuzz", blue_fuzz, + T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM_TABLE ( "BlueValues", blue_values, 14, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM_TABLE ( "OtherBlues", other_blues, 10, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM_TABLE ( "FamilyBlues", family_blues, 14, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM_TABLE ( "FamilyOtherBlues", family_other_blues, 10, T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM_TABLE ( "BlueValues", blue_values, 14, + T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM_TABLE ( "OtherBlues", other_blues, 10, + T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM_TABLE ( "FamilyBlues", family_blues, 14, + T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM_TABLE ( "FamilyOtherBlues", family_other_blues, 10, + T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM_TABLE2( "StdHW", standard_width, 1, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM_TABLE2( "StdVW", standard_height, 1, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM_TABLE2( "MinFeature", min_feature, 2, T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM_TABLE2( "StdHW", standard_width, 1, + T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM_TABLE2( "StdVW", standard_height, 1, + T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM_TABLE2( "MinFeature", min_feature, 2, + T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM_TABLE ( "StemSnapH", snap_widths, 12, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM_TABLE ( "StemSnapV", snap_heights, 12, T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM_TABLE ( "StemSnapH", snap_widths, 12, + T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM_TABLE ( "StemSnapV", snap_heights, 12, + T1_FIELD_DICT_PRIVATE ) - T1_FIELD_FIXED ( "ExpansionFactor", expansion_factor, T1_FIELD_DICT_PRIVATE ) + T1_FIELD_FIXED ( "ExpansionFactor", expansion_factor, + T1_FIELD_DICT_PRIVATE ) #undef FT_STRUCTURE @@ -68,9 +94,9 @@ #undef T1CODE #define T1CODE T1_FIELD_LOCATION_FONT_DICT - T1_FIELD_KEY ( "FontName", font_name, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_NUM ( "PaintType", paint_type, T1_FIELD_DICT_FONTDICT ) - T1_FIELD_NUM ( "FontType", font_type, T1_FIELD_DICT_FONTDICT ) + T1_FIELD_KEY ( "FontName", font_name, T1_FIELD_DICT_FONTDICT ) + T1_FIELD_NUM ( "PaintType", paint_type, T1_FIELD_DICT_FONTDICT ) + T1_FIELD_NUM ( "FontType", font_type, T1_FIELD_DICT_FONTDICT ) T1_FIELD_FIXED( "StrokeWidth", stroke_width, T1_FIELD_DICT_FONTDICT ) @@ -89,8 +115,8 @@ #undef T1CODE #define T1CODE T1_FIELD_LOCATION_FACE - T1_FIELD_NUM ( "NDV", ndv_idx, T1_FIELD_DICT_PRIVATE ) - T1_FIELD_NUM ( "CDV", cdv_idx, T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM( "NDV", ndv_idx, T1_FIELD_DICT_PRIVATE ) + T1_FIELD_NUM( "CDV", cdv_idx, T1_FIELD_DICT_PRIVATE ) #undef FT_STRUCTURE @@ -98,7 +124,8 @@ #undef T1CODE #define T1CODE T1_FIELD_LOCATION_BLEND - T1_FIELD_NUM_TABLE( "DesignVector", default_design_vector, T1_MAX_MM_DESIGNS, T1_FIELD_DICT_FONTDICT ) + T1_FIELD_NUM_TABLE( "DesignVector", default_design_vector, + T1_MAX_MM_DESIGNS, T1_FIELD_DICT_FONTDICT ) #endif /* T1_CONFIG_OPTION_NO_MM_SUPPORT */