From 1b4d68cf901d18cadfef5c4433e78969cc5b6d46 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sat, 10 Jan 2015 19:56:28 +0100 Subject: [PATCH] * src/truetype/ttinterp.c (CUR): Remove by replacing with expansion. This starts a series of patches that simplifies the code of the bytecode interpreter. --- ChangeLog | 7 + src/truetype/ttinterp.c | 2532 +++++++++++++++++++++++------------------------ 2 files changed, 1271 insertions(+), 1268 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5a857ff..12fe053 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2015-01-10 Werner Lemberg + + * src/truetype/ttinterp.c (CUR): Remove by replacing with expansion. + + This starts a series of patches that simplifies the code of the + bytecode interpreter. + 2014-12-30 Werner Lemberg * Version 2.5.5 released. diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index eccd4aa..ffef8c0 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -92,8 +92,6 @@ #ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */ -#define CUR (*exc) /* see ttobjs.h */ - /*************************************************************************/ /* */ /* This macro is used whenever `exec' is unused in a function, to avoid */ @@ -103,8 +101,6 @@ #else /* static implementation */ -#define CUR cur - #define FT_UNUSED_EXEC int __dummy = __dummy static @@ -132,8 +128,8 @@ #define FT_UNUSED_ARG FT_UNUSED_EXEC; FT_UNUSED( args ) -#define SUBPIXEL_HINTING \ - ( ((TT_Driver)FT_FACE_DRIVER( CUR.face ))->interpreter_version == \ +#define SUBPIXEL_HINTING \ + ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \ TT_INTERPRETER_VERSION_38 ) @@ -164,25 +160,25 @@ Ins_Goto_CodeRange( EXEC_ARG_ range, ip ) #define CUR_Func_move( z, p, d ) \ - CUR.func_move( EXEC_ARG_ z, p, d ) + exc->func_move( EXEC_ARG_ z, p, d ) #define CUR_Func_move_orig( z, p, d ) \ - CUR.func_move_orig( EXEC_ARG_ z, p, d ) + exc->func_move_orig( EXEC_ARG_ z, p, d ) #define CUR_Func_round( d, c ) \ - CUR.func_round( EXEC_ARG_ d, c ) + exc->func_round( EXEC_ARG_ d, c ) #define CUR_Func_cur_ppem() \ - CUR.func_cur_ppem( EXEC_ARG ) + exc->func_cur_ppem( EXEC_ARG ) #define CUR_Func_read_cvt( index ) \ - CUR.func_read_cvt( EXEC_ARG_ index ) + exc->func_read_cvt( EXEC_ARG_ index ) #define CUR_Func_write_cvt( index, val ) \ - CUR.func_write_cvt( EXEC_ARG_ index, val ) + exc->func_write_cvt( EXEC_ARG_ index, val ) #define CUR_Func_move_cvt( index, val ) \ - CUR.func_move_cvt( EXEC_ARG_ index, val ) + exc->func_move_cvt( EXEC_ARG_ index, val ) #define CURRENT_Ratio() \ Current_Ratio( EXEC_ARG ) @@ -204,16 +200,16 @@ #define CUR_Func_project( v1, v2 ) \ - CUR.func_project( EXEC_ARG_ (v1)->x - (v2)->x, (v1)->y - (v2)->y ) + exc->func_project( EXEC_ARG_ (v1)->x - (v2)->x, (v1)->y - (v2)->y ) #define CUR_Func_dualproj( v1, v2 ) \ - CUR.func_dualproj( EXEC_ARG_ (v1)->x - (v2)->x, (v1)->y - (v2)->y ) + exc->func_dualproj( EXEC_ARG_ (v1)->x - (v2)->x, (v1)->y - (v2)->y ) #define CUR_fast_project( v ) \ - CUR.func_project( EXEC_ARG_ (v)->x, (v)->y ) + exc->func_project( EXEC_ARG_ (v)->x, (v)->y ) #define CUR_fast_dualproj( v ) \ - CUR.func_dualproj( EXEC_ARG_ (v)->x, (v)->y ) + exc->func_dualproj( EXEC_ARG_ (v)->x, (v)->y ) /*************************************************************************/ @@ -245,11 +241,11 @@ #define FAILURE 1 #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING -#define GUESS_VECTOR( V ) \ - if ( CUR.face->unpatented_hinting ) \ - { \ - CUR.GS.V.x = (FT_F2Dot14)( CUR.GS.both_x_axis ? 0x4000 : 0 ); \ - CUR.GS.V.y = (FT_F2Dot14)( CUR.GS.both_x_axis ? 0 : 0x4000 ); \ +#define GUESS_VECTOR( V ) \ + if ( exc->face->unpatented_hinting ) \ + { \ + exc->GS.V.x = (FT_F2Dot14)( exc->GS.both_x_axis ? 0x4000 : 0 ); \ + exc->GS.V.y = (FT_F2Dot14)( exc->GS.both_x_axis ? 0 : 0x4000 ); \ } #else #define GUESS_VECTOR( V ) @@ -1639,53 +1635,53 @@ static FT_Long Current_Ratio( EXEC_OP ) { - if ( !CUR.tt_metrics.ratio ) + if ( !exc->tt_metrics.ratio ) { #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING - if ( CUR.face->unpatented_hinting ) + if ( exc->face->unpatented_hinting ) { - if ( CUR.GS.both_x_axis ) - CUR.tt_metrics.ratio = CUR.tt_metrics.x_ratio; + if ( exc->GS.both_x_axis ) + exc->tt_metrics.ratio = exc->tt_metrics.x_ratio; else - CUR.tt_metrics.ratio = CUR.tt_metrics.y_ratio; + exc->tt_metrics.ratio = exc->tt_metrics.y_ratio; } else #endif { - if ( CUR.GS.projVector.y == 0 ) - CUR.tt_metrics.ratio = CUR.tt_metrics.x_ratio; + if ( exc->GS.projVector.y == 0 ) + exc->tt_metrics.ratio = exc->tt_metrics.x_ratio; - else if ( CUR.GS.projVector.x == 0 ) - CUR.tt_metrics.ratio = CUR.tt_metrics.y_ratio; + else if ( exc->GS.projVector.x == 0 ) + exc->tt_metrics.ratio = exc->tt_metrics.y_ratio; else { FT_F26Dot6 x, y; - x = TT_MulFix14( CUR.tt_metrics.x_ratio, - CUR.GS.projVector.x ); - y = TT_MulFix14( CUR.tt_metrics.y_ratio, - CUR.GS.projVector.y ); - CUR.tt_metrics.ratio = FT_Hypot( x, y ); + x = TT_MulFix14( exc->tt_metrics.x_ratio, + exc->GS.projVector.x ); + y = TT_MulFix14( exc->tt_metrics.y_ratio, + exc->GS.projVector.y ); + exc->tt_metrics.ratio = FT_Hypot( x, y ); } } } - return CUR.tt_metrics.ratio; + return exc->tt_metrics.ratio; } FT_CALLBACK_DEF( FT_Long ) Current_Ppem( EXEC_OP ) { - return CUR.tt_metrics.ppem; + return exc->tt_metrics.ppem; } FT_CALLBACK_DEF( FT_Long ) Current_Ppem_Stretched( EXEC_OP ) { - return FT_MulFix( CUR.tt_metrics.ppem, CURRENT_Ratio() ); + return FT_MulFix( exc->tt_metrics.ppem, CURRENT_Ratio() ); } @@ -1699,14 +1695,14 @@ FT_CALLBACK_DEF( FT_F26Dot6 ) Read_CVT( EXEC_OP_ FT_ULong idx ) { - return CUR.cvt[idx]; + return exc->cvt[idx]; } FT_CALLBACK_DEF( FT_F26Dot6 ) Read_CVT_Stretched( EXEC_OP_ FT_ULong idx ) { - return FT_MulFix( CUR.cvt[idx], CURRENT_Ratio() ); + return FT_MulFix( exc->cvt[idx], CURRENT_Ratio() ); } @@ -1714,7 +1710,7 @@ Write_CVT( EXEC_OP_ FT_ULong idx, FT_F26Dot6 value ) { - CUR.cvt[idx] = value; + exc->cvt[idx] = value; } @@ -1722,7 +1718,7 @@ Write_CVT_Stretched( EXEC_OP_ FT_ULong idx, FT_F26Dot6 value ) { - CUR.cvt[idx] = FT_DivFix( value, CURRENT_Ratio() ); + exc->cvt[idx] = FT_DivFix( value, CURRENT_Ratio() ); } @@ -1730,7 +1726,7 @@ Move_CVT( EXEC_OP_ FT_ULong idx, FT_F26Dot6 value ) { - CUR.cvt[idx] += value; + exc->cvt[idx] += value; } @@ -1738,7 +1734,7 @@ Move_CVT_Stretched( EXEC_OP_ FT_ULong idx, FT_F26Dot6 value ) { - CUR.cvt[idx] += FT_DivFix( value, CURRENT_Ratio() ); + exc->cvt[idx] += FT_DivFix( value, CURRENT_Ratio() ); } @@ -1761,9 +1757,9 @@ GetShortIns( EXEC_OP ) { /* Reading a byte stream so there is no endianess (DaveP) */ - CUR.IP += 2; - return (FT_Short)( ( CUR.code[CUR.IP - 2] << 8 ) + - CUR.code[CUR.IP - 1] ); + exc->IP += 2; + return (FT_Short)( ( exc->code[exc->IP - 2] << 8 ) + + exc->code[exc->IP - 1] ); } @@ -1792,15 +1788,15 @@ if ( aRange < 1 || aRange > 3 ) { - CUR.error = FT_THROW( Bad_Argument ); + exc->error = FT_THROW( Bad_Argument ); return FAILURE; } - range = &CUR.codeRangeTable[aRange - 1]; + range = &exc->codeRangeTable[aRange - 1]; if ( range->base == NULL ) /* invalid coderange */ { - CUR.error = FT_THROW( Invalid_CodeRange ); + exc->error = FT_THROW( Invalid_CodeRange ); return FAILURE; } @@ -1810,14 +1806,14 @@ if ( aIP > range->size ) { - CUR.error = FT_THROW( Code_Overflow ); + exc->error = FT_THROW( Code_Overflow ); return FAILURE; } - CUR.code = range->base; - CUR.codeSize = range->size; - CUR.IP = aIP; - CUR.curRange = aRange; + exc->code = range->base; + exc->codeSize = range->size; + exc->IP = aIP; + exc->curRange = aRange; return SUCCESS; } @@ -1849,28 +1845,28 @@ #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING - FT_ASSERT( !CUR.face->unpatented_hinting ); + FT_ASSERT( !exc->face->unpatented_hinting ); #endif - v = CUR.GS.freeVector.x; + v = exc->GS.freeVector.x; if ( v != 0 ) { #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( !SUBPIXEL_HINTING || - ( !CUR.ignore_x_mode || - ( CUR.sph_tweak_flags & SPH_TWEAK_ALLOW_X_DMOVE ) ) ) + if ( !SUBPIXEL_HINTING || + ( !exc->ignore_x_mode || + ( exc->sph_tweak_flags & SPH_TWEAK_ALLOW_X_DMOVE ) ) ) #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - zone->cur[point].x += FT_MulDiv( distance, v, CUR.F_dot_P ); + zone->cur[point].x += FT_MulDiv( distance, v, exc->F_dot_P ); zone->tags[point] |= FT_CURVE_TAG_TOUCH_X; } - v = CUR.GS.freeVector.y; + v = exc->GS.freeVector.y; if ( v != 0 ) { - zone->cur[point].y += FT_MulDiv( distance, v, CUR.F_dot_P ); + zone->cur[point].y += FT_MulDiv( distance, v, exc->F_dot_P ); zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y; } @@ -1903,18 +1899,18 @@ #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING - FT_ASSERT( !CUR.face->unpatented_hinting ); + FT_ASSERT( !exc->face->unpatented_hinting ); #endif - v = CUR.GS.freeVector.x; + v = exc->GS.freeVector.x; if ( v != 0 ) - zone->org[point].x += FT_MulDiv( distance, v, CUR.F_dot_P ); + zone->org[point].x += FT_MulDiv( distance, v, exc->F_dot_P ); - v = CUR.GS.freeVector.y; + v = exc->GS.freeVector.y; if ( v != 0 ) - zone->org[point].y += FT_MulDiv( distance, v, CUR.F_dot_P ); + zone->org[point].y += FT_MulDiv( distance, v, exc->F_dot_P ); } @@ -1936,8 +1932,8 @@ FT_UNUSED_EXEC; #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( !SUBPIXEL_HINTING || - !CUR.ignore_x_mode ) + if ( !SUBPIXEL_HINTING || + !exc->ignore_x_mode ) #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ zone->cur[point].x += distance; @@ -2277,19 +2273,19 @@ if ( distance >= 0 ) { - val = ( distance - CUR.phase + CUR.threshold + compensation ) & - -CUR.period; - val += CUR.phase; + val = ( distance - exc->phase + exc->threshold + compensation ) & + -exc->period; + val += exc->phase; if ( val < 0 ) - val = CUR.phase; + val = exc->phase; } else { - val = -( ( CUR.threshold - CUR.phase - distance + compensation ) & - -CUR.period ); - val -= CUR.phase; + val = -( ( exc->threshold - exc->phase - distance + compensation ) & + -exc->period ); + val -= exc->phase; if ( val > 0 ) - val = -CUR.phase; + val = -exc->phase; } return val; @@ -2325,19 +2321,19 @@ if ( distance >= 0 ) { - val = ( ( distance - CUR.phase + CUR.threshold + compensation ) / - CUR.period ) * CUR.period; - val += CUR.phase; + val = ( ( distance - exc->phase + exc->threshold + compensation ) / + exc->period ) * exc->period; + val += exc->phase; if ( val < 0 ) - val = CUR.phase; + val = exc->phase; } else { - val = -( ( ( CUR.threshold - CUR.phase - distance + compensation ) / - CUR.period ) * CUR.period ); - val -= CUR.phase; + val = -( ( ( exc->threshold - exc->phase - distance + compensation ) / + exc->period ) * exc->period ); + val -= exc->phase; if ( val > 0 ) - val = -CUR.phase; + val = -exc->phase; } return val; @@ -2361,35 +2357,35 @@ switch ( round_mode ) { case TT_Round_Off: - CUR.func_round = (TT_Round_Func)Round_None; + exc->func_round = (TT_Round_Func)Round_None; break; case TT_Round_To_Grid: - CUR.func_round = (TT_Round_Func)Round_To_Grid; + exc->func_round = (TT_Round_Func)Round_To_Grid; break; case TT_Round_Up_To_Grid: - CUR.func_round = (TT_Round_Func)Round_Up_To_Grid; + exc->func_round = (TT_Round_Func)Round_Up_To_Grid; break; case TT_Round_Down_To_Grid: - CUR.func_round = (TT_Round_Func)Round_Down_To_Grid; + exc->func_round = (TT_Round_Func)Round_Down_To_Grid; break; case TT_Round_To_Half_Grid: - CUR.func_round = (TT_Round_Func)Round_To_Half_Grid; + exc->func_round = (TT_Round_Func)Round_To_Half_Grid; break; case TT_Round_To_Double_Grid: - CUR.func_round = (TT_Round_Func)Round_To_Double_Grid; + exc->func_round = (TT_Round_Func)Round_To_Double_Grid; break; case TT_Round_Super: - CUR.func_round = (TT_Round_Func)Round_Super; + exc->func_round = (TT_Round_Func)Round_Super; break; case TT_Round_Super_45: - CUR.func_round = (TT_Round_Func)Round_Super_45; + exc->func_round = (TT_Round_Func)Round_Super_45; break; } } @@ -2415,51 +2411,51 @@ switch ( (FT_Int)( selector & 0xC0 ) ) { case 0: - CUR.period = GridPeriod / 2; + exc->period = GridPeriod / 2; break; case 0x40: - CUR.period = GridPeriod; + exc->period = GridPeriod; break; case 0x80: - CUR.period = GridPeriod * 2; + exc->period = GridPeriod * 2; break; /* This opcode is reserved, but... */ case 0xC0: - CUR.period = GridPeriod; + exc->period = GridPeriod; break; } switch ( (FT_Int)( selector & 0x30 ) ) { case 0: - CUR.phase = 0; + exc->phase = 0; break; case 0x10: - CUR.phase = CUR.period / 4; + exc->phase = exc->period / 4; break; case 0x20: - CUR.phase = CUR.period / 2; + exc->phase = exc->period / 2; break; case 0x30: - CUR.phase = CUR.period * 3 / 4; + exc->phase = exc->period * 3 / 4; break; } if ( ( selector & 0x0F ) == 0 ) - CUR.threshold = CUR.period - 1; + exc->threshold = exc->period - 1; else - CUR.threshold = ( (FT_Int)( selector & 0x0F ) - 4 ) * CUR.period / 8; + exc->threshold = ( (FT_Int)( selector & 0x0F ) - 4 ) * exc->period / 8; - CUR.period /= 256; - CUR.phase /= 256; - CUR.threshold /= 256; + exc->period /= 256; + exc->phase /= 256; + exc->threshold /= 256; } @@ -2484,12 +2480,12 @@ FT_Pos dy ) { #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING - FT_ASSERT( !CUR.face->unpatented_hinting ); + FT_ASSERT( !exc->face->unpatented_hinting ); #endif return TT_DotFix14( (FT_UInt32)dx, (FT_UInt32)dy, - CUR.GS.projVector.x, - CUR.GS.projVector.y ); + exc->GS.projVector.x, + exc->GS.projVector.y ); } @@ -2514,8 +2510,8 @@ FT_Pos dy ) { return TT_DotFix14( (FT_UInt32)dx, (FT_UInt32)dy, - CUR.GS.dualVector.x, - CUR.GS.dualVector.y ); + exc->GS.dualVector.x, + exc->GS.dualVector.y ); } @@ -2586,98 +2582,98 @@ Compute_Funcs( EXEC_OP ) { #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING - if ( CUR.face->unpatented_hinting ) + if ( exc->face->unpatented_hinting ) { /* If both vectors point rightwards along the x axis, set */ /* `both-x-axis' true, otherwise set it false. The x values only */ /* need be tested because the vector has been normalised to a unit */ /* vector of length 0x4000 = unity. */ - CUR.GS.both_x_axis = (FT_Bool)( CUR.GS.projVector.x == 0x4000 && - CUR.GS.freeVector.x == 0x4000 ); + exc->GS.both_x_axis = (FT_Bool)( exc->GS.projVector.x == 0x4000 && + exc->GS.freeVector.x == 0x4000 ); /* Throw away projection and freedom vector information */ /* because the patents don't allow them to be stored. */ /* The relevant US Patents are 5155805 and 5325479. */ - CUR.GS.projVector.x = 0; - CUR.GS.projVector.y = 0; - CUR.GS.freeVector.x = 0; - CUR.GS.freeVector.y = 0; + exc->GS.projVector.x = 0; + exc->GS.projVector.y = 0; + exc->GS.freeVector.x = 0; + exc->GS.freeVector.y = 0; - if ( CUR.GS.both_x_axis ) + if ( exc->GS.both_x_axis ) { - CUR.func_project = Project_x; - CUR.func_move = Direct_Move_X; - CUR.func_move_orig = Direct_Move_Orig_X; + exc->func_project = Project_x; + exc->func_move = Direct_Move_X; + exc->func_move_orig = Direct_Move_Orig_X; } else { - CUR.func_project = Project_y; - CUR.func_move = Direct_Move_Y; - CUR.func_move_orig = Direct_Move_Orig_Y; + exc->func_project = Project_y; + exc->func_move = Direct_Move_Y; + exc->func_move_orig = Direct_Move_Orig_Y; } - if ( CUR.GS.dualVector.x == 0x4000 ) - CUR.func_dualproj = Project_x; - else if ( CUR.GS.dualVector.y == 0x4000 ) - CUR.func_dualproj = Project_y; + if ( exc->GS.dualVector.x == 0x4000 ) + exc->func_dualproj = Project_x; + else if ( exc->GS.dualVector.y == 0x4000 ) + exc->func_dualproj = Project_y; else - CUR.func_dualproj = Dual_Project; + exc->func_dualproj = Dual_Project; /* Force recalculation of cached aspect ratio */ - CUR.tt_metrics.ratio = 0; + exc->tt_metrics.ratio = 0; return; } #endif /* TT_CONFIG_OPTION_UNPATENTED_HINTING */ - if ( CUR.GS.freeVector.x == 0x4000 ) - CUR.F_dot_P = CUR.GS.projVector.x; - else if ( CUR.GS.freeVector.y == 0x4000 ) - CUR.F_dot_P = CUR.GS.projVector.y; + if ( exc->GS.freeVector.x == 0x4000 ) + exc->F_dot_P = exc->GS.projVector.x; + else if ( exc->GS.freeVector.y == 0x4000 ) + exc->F_dot_P = exc->GS.projVector.y; else - CUR.F_dot_P = ( (FT_Long)CUR.GS.projVector.x * CUR.GS.freeVector.x + - (FT_Long)CUR.GS.projVector.y * CUR.GS.freeVector.y ) >> - 14; - - if ( CUR.GS.projVector.x == 0x4000 ) - CUR.func_project = (TT_Project_Func)Project_x; - else if ( CUR.GS.projVector.y == 0x4000 ) - CUR.func_project = (TT_Project_Func)Project_y; + exc->F_dot_P = ( (FT_Long)exc->GS.projVector.x * exc->GS.freeVector.x + + (FT_Long)exc->GS.projVector.y * exc->GS.freeVector.y ) >> + 14; + + if ( exc->GS.projVector.x == 0x4000 ) + exc->func_project = (TT_Project_Func)Project_x; + else if ( exc->GS.projVector.y == 0x4000 ) + exc->func_project = (TT_Project_Func)Project_y; else - CUR.func_project = (TT_Project_Func)Project; + exc->func_project = (TT_Project_Func)Project; - if ( CUR.GS.dualVector.x == 0x4000 ) - CUR.func_dualproj = (TT_Project_Func)Project_x; - else if ( CUR.GS.dualVector.y == 0x4000 ) - CUR.func_dualproj = (TT_Project_Func)Project_y; + if ( exc->GS.dualVector.x == 0x4000 ) + exc->func_dualproj = (TT_Project_Func)Project_x; + else if ( exc->GS.dualVector.y == 0x4000 ) + exc->func_dualproj = (TT_Project_Func)Project_y; else - CUR.func_dualproj = (TT_Project_Func)Dual_Project; + exc->func_dualproj = (TT_Project_Func)Dual_Project; - CUR.func_move = (TT_Move_Func)Direct_Move; - CUR.func_move_orig = (TT_Move_Func)Direct_Move_Orig; + exc->func_move = (TT_Move_Func)Direct_Move; + exc->func_move_orig = (TT_Move_Func)Direct_Move_Orig; - if ( CUR.F_dot_P == 0x4000L ) + if ( exc->F_dot_P == 0x4000L ) { - if ( CUR.GS.freeVector.x == 0x4000 ) + if ( exc->GS.freeVector.x == 0x4000 ) { - CUR.func_move = (TT_Move_Func)Direct_Move_X; - CUR.func_move_orig = (TT_Move_Func)Direct_Move_Orig_X; + exc->func_move = (TT_Move_Func)Direct_Move_X; + exc->func_move_orig = (TT_Move_Func)Direct_Move_Orig_X; } - else if ( CUR.GS.freeVector.y == 0x4000 ) + else if ( exc->GS.freeVector.y == 0x4000 ) { - CUR.func_move = (TT_Move_Func)Direct_Move_Y; - CUR.func_move_orig = (TT_Move_Func)Direct_Move_Orig_Y; + exc->func_move = (TT_Move_Func)Direct_Move_Y; + exc->func_move_orig = (TT_Move_Func)Direct_Move_Orig_Y; } } /* at small sizes, F_dot_P can become too small, resulting */ /* in overflows and `spikes' in a number of glyphs like `w'. */ - if ( FT_ABS( CUR.F_dot_P ) < 0x400L ) - CUR.F_dot_P = 0x4000L; + if ( FT_ABS( exc->F_dot_P ) < 0x400L ) + exc->F_dot_P = 0x4000L; /* Disable cached aspect ratio */ - CUR.tt_metrics.ratio = 0; + exc->tt_metrics.ratio = 0; } @@ -2753,16 +2749,16 @@ FT_Vector* p2; - if ( BOUNDS( aIdx1, CUR.zp2.n_points ) || - BOUNDS( aIdx2, CUR.zp1.n_points ) ) + if ( BOUNDS( aIdx1, exc->zp2.n_points ) || + BOUNDS( aIdx2, exc->zp1.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return FAILURE; } - p1 = CUR.zp1.cur + aIdx2; - p2 = CUR.zp2.cur + aIdx1; + p1 = exc->zp1.cur + aIdx2; + p2 = exc->zp2.cur + aIdx1; A = p1->x - p2->x; B = p1->y - p2->y; @@ -2797,89 +2793,89 @@ /* */ /* They are all defined there. */ -#define DO_SVTCA \ - { \ - FT_Short A, B; \ - \ - \ - A = (FT_Short)( CUR.opcode & 1 ) << 14; \ - B = A ^ (FT_Short)0x4000; \ - \ - CUR.GS.freeVector.x = A; \ - CUR.GS.projVector.x = A; \ - CUR.GS.dualVector.x = A; \ - \ - CUR.GS.freeVector.y = B; \ - CUR.GS.projVector.y = B; \ - CUR.GS.dualVector.y = B; \ - \ - COMPUTE_Funcs(); \ - } - - -#define DO_SPVTCA \ - { \ - FT_Short A, B; \ - \ - \ - A = (FT_Short)( CUR.opcode & 1 ) << 14; \ - B = A ^ (FT_Short)0x4000; \ - \ - CUR.GS.projVector.x = A; \ - CUR.GS.dualVector.x = A; \ - \ - CUR.GS.projVector.y = B; \ - CUR.GS.dualVector.y = B; \ - \ - GUESS_VECTOR( freeVector ); \ - \ - COMPUTE_Funcs(); \ - } - - -#define DO_SFVTCA \ - { \ - FT_Short A, B; \ - \ - \ - A = (FT_Short)( CUR.opcode & 1 ) << 14; \ - B = A ^ (FT_Short)0x4000; \ - \ - CUR.GS.freeVector.x = A; \ - CUR.GS.freeVector.y = B; \ - \ - GUESS_VECTOR( projVector ); \ - \ - COMPUTE_Funcs(); \ - } - - -#define DO_SPVTL \ - if ( INS_SxVTL( (FT_UShort)args[1], \ - (FT_UShort)args[0], \ - CUR.opcode, \ - &CUR.GS.projVector ) == SUCCESS ) \ - { \ - CUR.GS.dualVector = CUR.GS.projVector; \ - GUESS_VECTOR( freeVector ); \ - COMPUTE_Funcs(); \ - } - - -#define DO_SFVTL \ - if ( INS_SxVTL( (FT_UShort)args[1], \ - (FT_UShort)args[0], \ - CUR.opcode, \ - &CUR.GS.freeVector ) == SUCCESS ) \ - { \ - GUESS_VECTOR( projVector ); \ - COMPUTE_Funcs(); \ - } - - -#define DO_SFVTPV \ - GUESS_VECTOR( projVector ); \ - CUR.GS.freeVector = CUR.GS.projVector; \ +#define DO_SVTCA \ + { \ + FT_Short A, B; \ + \ + \ + A = (FT_Short)( exc->opcode & 1 ) << 14; \ + B = A ^ (FT_Short)0x4000; \ + \ + exc->GS.freeVector.x = A; \ + exc->GS.projVector.x = A; \ + exc->GS.dualVector.x = A; \ + \ + exc->GS.freeVector.y = B; \ + exc->GS.projVector.y = B; \ + exc->GS.dualVector.y = B; \ + \ + COMPUTE_Funcs(); \ + } + + +#define DO_SPVTCA \ + { \ + FT_Short A, B; \ + \ + \ + A = (FT_Short)( exc->opcode & 1 ) << 14; \ + B = A ^ (FT_Short)0x4000; \ + \ + exc->GS.projVector.x = A; \ + exc->GS.dualVector.x = A; \ + \ + exc->GS.projVector.y = B; \ + exc->GS.dualVector.y = B; \ + \ + GUESS_VECTOR( freeVector ); \ + \ + COMPUTE_Funcs(); \ + } + + +#define DO_SFVTCA \ + { \ + FT_Short A, B; \ + \ + \ + A = (FT_Short)( exc->opcode & 1 ) << 14; \ + B = A ^ (FT_Short)0x4000; \ + \ + exc->GS.freeVector.x = A; \ + exc->GS.freeVector.y = B; \ + \ + GUESS_VECTOR( projVector ); \ + \ + COMPUTE_Funcs(); \ + } + + +#define DO_SPVTL \ + if ( INS_SxVTL( (FT_UShort)args[1], \ + (FT_UShort)args[0], \ + exc->opcode, \ + &exc->GS.projVector ) == SUCCESS ) \ + { \ + exc->GS.dualVector = exc->GS.projVector; \ + GUESS_VECTOR( freeVector ); \ + COMPUTE_Funcs(); \ + } + + +#define DO_SFVTL \ + if ( INS_SxVTL( (FT_UShort)args[1], \ + (FT_UShort)args[0], \ + exc->opcode, \ + &exc->GS.freeVector ) == SUCCESS ) \ + { \ + GUESS_VECTOR( projVector ); \ + COMPUTE_Funcs(); \ + } + + +#define DO_SFVTPV \ + GUESS_VECTOR( projVector ); \ + exc->GS.freeVector = exc->GS.projVector; \ COMPUTE_Funcs(); @@ -2895,9 +2891,9 @@ S = (FT_Short)args[0]; \ X = (FT_Long)S; \ \ - NORMalize( X, Y, &CUR.GS.projVector ); \ + NORMalize( X, Y, &exc->GS.projVector ); \ \ - CUR.GS.dualVector = CUR.GS.projVector; \ + exc->GS.dualVector = exc->GS.projVector; \ GUESS_VECTOR( freeVector ); \ COMPUTE_Funcs(); \ } @@ -2915,145 +2911,145 @@ S = (FT_Short)args[0]; \ X = S; \ \ - NORMalize( X, Y, &CUR.GS.freeVector ); \ + NORMalize( X, Y, &exc->GS.freeVector ); \ GUESS_VECTOR( projVector ); \ COMPUTE_Funcs(); \ } #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING -#define DO_GPV \ - if ( CUR.face->unpatented_hinting ) \ - { \ - args[0] = CUR.GS.both_x_axis ? 0x4000 : 0; \ - args[1] = CUR.GS.both_x_axis ? 0 : 0x4000; \ - } \ - else \ - { \ - args[0] = CUR.GS.projVector.x; \ - args[1] = CUR.GS.projVector.y; \ +#define DO_GPV \ + if ( exc->face->unpatented_hinting ) \ + { \ + args[0] = exc->GS.both_x_axis ? 0x4000 : 0; \ + args[1] = exc->GS.both_x_axis ? 0 : 0x4000; \ + } \ + else \ + { \ + args[0] = exc->GS.projVector.x; \ + args[1] = exc->GS.projVector.y; \ } #else -#define DO_GPV \ - args[0] = CUR.GS.projVector.x; \ - args[1] = CUR.GS.projVector.y; +#define DO_GPV \ + args[0] = exc->GS.projVector.x; \ + args[1] = exc->GS.projVector.y; #endif #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING -#define DO_GFV \ - if ( CUR.face->unpatented_hinting ) \ - { \ - args[0] = CUR.GS.both_x_axis ? 0x4000 : 0; \ - args[1] = CUR.GS.both_x_axis ? 0 : 0x4000; \ - } \ - else \ - { \ - args[0] = CUR.GS.freeVector.x; \ - args[1] = CUR.GS.freeVector.y; \ +#define DO_GFV \ + if ( exc->face->unpatented_hinting ) \ + { \ + args[0] = exc->GS.both_x_axis ? 0x4000 : 0; \ + args[1] = exc->GS.both_x_axis ? 0 : 0x4000; \ + } \ + else \ + { \ + args[0] = exc->GS.freeVector.x; \ + args[1] = exc->GS.freeVector.y; \ } #else -#define DO_GFV \ - args[0] = CUR.GS.freeVector.x; \ - args[1] = CUR.GS.freeVector.y; +#define DO_GFV \ + args[0] = exc->GS.freeVector.x; \ + args[1] = exc->GS.freeVector.y; #endif -#define DO_SRP0 \ - CUR.GS.rp0 = (FT_UShort)args[0]; +#define DO_SRP0 \ + exc->GS.rp0 = (FT_UShort)args[0]; -#define DO_SRP1 \ - CUR.GS.rp1 = (FT_UShort)args[0]; +#define DO_SRP1 \ + exc->GS.rp1 = (FT_UShort)args[0]; -#define DO_SRP2 \ - CUR.GS.rp2 = (FT_UShort)args[0]; +#define DO_SRP2 \ + exc->GS.rp2 = (FT_UShort)args[0]; -#define DO_RTHG \ - CUR.GS.round_state = TT_Round_To_Half_Grid; \ - CUR.func_round = (TT_Round_Func)Round_To_Half_Grid; +#define DO_RTHG \ + exc->GS.round_state = TT_Round_To_Half_Grid; \ + exc->func_round = (TT_Round_Func)Round_To_Half_Grid; -#define DO_RTG \ - CUR.GS.round_state = TT_Round_To_Grid; \ - CUR.func_round = (TT_Round_Func)Round_To_Grid; +#define DO_RTG \ + exc->GS.round_state = TT_Round_To_Grid; \ + exc->func_round = (TT_Round_Func)Round_To_Grid; -#define DO_RTDG \ - CUR.GS.round_state = TT_Round_To_Double_Grid; \ - CUR.func_round = (TT_Round_Func)Round_To_Double_Grid; +#define DO_RTDG \ + exc->GS.round_state = TT_Round_To_Double_Grid; \ + exc->func_round = (TT_Round_Func)Round_To_Double_Grid; -#define DO_RUTG \ - CUR.GS.round_state = TT_Round_Up_To_Grid; \ - CUR.func_round = (TT_Round_Func)Round_Up_To_Grid; +#define DO_RUTG \ + exc->GS.round_state = TT_Round_Up_To_Grid; \ + exc->func_round = (TT_Round_Func)Round_Up_To_Grid; -#define DO_RDTG \ - CUR.GS.round_state = TT_Round_Down_To_Grid; \ - CUR.func_round = (TT_Round_Func)Round_Down_To_Grid; +#define DO_RDTG \ + exc->GS.round_state = TT_Round_Down_To_Grid; \ + exc->func_round = (TT_Round_Func)Round_Down_To_Grid; -#define DO_ROFF \ - CUR.GS.round_state = TT_Round_Off; \ - CUR.func_round = (TT_Round_Func)Round_None; +#define DO_ROFF \ + exc->GS.round_state = TT_Round_Off; \ + exc->func_round = (TT_Round_Func)Round_None; -#define DO_SROUND \ - SET_SuperRound( 0x4000, args[0] ); \ - CUR.GS.round_state = TT_Round_Super; \ - CUR.func_round = (TT_Round_Func)Round_Super; +#define DO_SROUND \ + SET_SuperRound( 0x4000, args[0] ); \ + exc->GS.round_state = TT_Round_Super; \ + exc->func_round = (TT_Round_Func)Round_Super; -#define DO_S45ROUND \ - SET_SuperRound( 0x2D41, args[0] ); \ - CUR.GS.round_state = TT_Round_Super_45; \ - CUR.func_round = (TT_Round_Func)Round_Super_45; +#define DO_S45ROUND \ + SET_SuperRound( 0x2D41, args[0] ); \ + exc->GS.round_state = TT_Round_Super_45; \ + exc->func_round = (TT_Round_Func)Round_Super_45; -#define DO_SLOOP \ - if ( args[0] < 0 ) \ - CUR.error = FT_THROW( Bad_Argument ); \ - else \ - CUR.GS.loop = args[0]; +#define DO_SLOOP \ + if ( args[0] < 0 ) \ + exc->error = FT_THROW( Bad_Argument ); \ + else \ + exc->GS.loop = args[0]; -#define DO_SMD \ - CUR.GS.minimum_distance = args[0]; +#define DO_SMD \ + exc->GS.minimum_distance = args[0]; -#define DO_SCVTCI \ - CUR.GS.control_value_cutin = (FT_F26Dot6)args[0]; +#define DO_SCVTCI \ + exc->GS.control_value_cutin = (FT_F26Dot6)args[0]; -#define DO_SSWCI \ - CUR.GS.single_width_cutin = (FT_F26Dot6)args[0]; +#define DO_SSWCI \ + exc->GS.single_width_cutin = (FT_F26Dot6)args[0]; -#define DO_SSW \ - CUR.GS.single_width_value = FT_MulFix( args[0], \ - CUR.tt_metrics.scale ); +#define DO_SSW \ + exc->GS.single_width_value = FT_MulFix( args[0], \ + exc->tt_metrics.scale ); -#define DO_FLIPON \ - CUR.GS.auto_flip = TRUE; +#define DO_FLIPON \ + exc->GS.auto_flip = TRUE; -#define DO_FLIPOFF \ - CUR.GS.auto_flip = FALSE; +#define DO_FLIPOFF \ + exc->GS.auto_flip = FALSE; -#define DO_SDB \ - CUR.GS.delta_base = (FT_UShort)args[0]; +#define DO_SDB \ + exc->GS.delta_base = (FT_UShort)args[0]; -#define DO_SDS \ - if ( (FT_ULong)args[0] > 6UL ) \ - CUR.error = FT_THROW( Bad_Argument ); \ - else \ - CUR.GS.delta_shift = (FT_UShort)args[0]; +#define DO_SDS \ + if ( (FT_ULong)args[0] > 6UL ) \ + exc->error = FT_THROW( Bad_Argument ); \ + else \ + exc->GS.delta_shift = (FT_UShort)args[0]; #define DO_MD /* nothing */ @@ -3067,8 +3063,8 @@ /* we thus decide to return only the ppem. */ #if 0 -#define DO_MPS \ - args[0] = CUR.metrics.pointSize; +#define DO_MPS \ + args[0] = exc->metrics.pointSize; #else @@ -3082,8 +3078,8 @@ args[1] = args[0]; -#define DO_CLEAR \ - CUR.new_top = 0; +#define DO_CLEAR \ + exc->new_top = 0; #define DO_SWAP \ @@ -3097,64 +3093,64 @@ } -#define DO_DEPTH \ - args[0] = CUR.top; +#define DO_DEPTH \ + args[0] = exc->top; -#define DO_CINDEX \ - { \ - FT_Long L; \ - \ - \ - L = args[0]; \ - \ - if ( L <= 0 || L > CUR.args ) \ - { \ - if ( CUR.pedantic_hinting ) \ - CUR.error = FT_THROW( Invalid_Reference ); \ - args[0] = 0; \ - } \ - else \ - args[0] = CUR.stack[CUR.args - L]; \ +#define DO_CINDEX \ + { \ + FT_Long L; \ + \ + \ + L = args[0]; \ + \ + if ( L <= 0 || L > exc->args ) \ + { \ + if ( exc->pedantic_hinting ) \ + exc->error = FT_THROW( Invalid_Reference ); \ + args[0] = 0; \ + } \ + else \ + args[0] = exc->stack[exc->args - L]; \ } -#define DO_JROT \ - if ( args[1] != 0 ) \ - { \ - if ( args[0] == 0 && CUR.args == 0 ) \ - CUR.error = FT_THROW( Bad_Argument ); \ - CUR.IP += args[0]; \ - if ( CUR.IP < 0 || \ - ( CUR.callTop > 0 && \ - CUR.IP > CUR.callStack[CUR.callTop - 1].Def->end ) ) \ - CUR.error = FT_THROW( Bad_Argument ); \ - CUR.step_ins = FALSE; \ +#define DO_JROT \ + if ( args[1] != 0 ) \ + { \ + if ( args[0] == 0 && exc->args == 0 ) \ + exc->error = FT_THROW( Bad_Argument ); \ + exc->IP += args[0]; \ + if ( exc->IP < 0 || \ + ( exc->callTop > 0 && \ + exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) \ + exc->error = FT_THROW( Bad_Argument ); \ + exc->step_ins = FALSE; \ } -#define DO_JMPR \ - if ( args[0] == 0 && CUR.args == 0 ) \ - CUR.error = FT_THROW( Bad_Argument ); \ - CUR.IP += args[0]; \ - if ( CUR.IP < 0 || \ - ( CUR.callTop > 0 && \ - CUR.IP > CUR.callStack[CUR.callTop - 1].Def->end ) ) \ - CUR.error = FT_THROW( Bad_Argument ); \ - CUR.step_ins = FALSE; +#define DO_JMPR \ + if ( args[0] == 0 && exc->args == 0 ) \ + exc->error = FT_THROW( Bad_Argument ); \ + exc->IP += args[0]; \ + if ( exc->IP < 0 || \ + ( exc->callTop > 0 && \ + exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) \ + exc->error = FT_THROW( Bad_Argument ); \ + exc->step_ins = FALSE; -#define DO_JROF \ - if ( args[1] == 0 ) \ - { \ - if ( args[0] == 0 && CUR.args == 0 ) \ - CUR.error = FT_THROW( Bad_Argument ); \ - CUR.IP += args[0]; \ - if ( CUR.IP < 0 || \ - ( CUR.callTop > 0 && \ - CUR.IP > CUR.callStack[CUR.callTop - 1].Def->end ) ) \ - CUR.error = FT_THROW( Bad_Argument ); \ - CUR.step_ins = FALSE; \ +#define DO_JROF \ + if ( args[1] == 0 ) \ + { \ + if ( args[0] == 0 && exc->args == 0 ) \ + exc->error = FT_THROW( Bad_Argument ); \ + exc->IP += args[0]; \ + if ( exc->IP < 0 || \ + ( exc->callTop > 0 && \ + exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) \ + exc->error = FT_THROW( Bad_Argument ); \ + exc->step_ins = FALSE; \ } @@ -3212,7 +3208,7 @@ #define DO_DIV \ if ( args[1] == 0 ) \ - CUR.error = FT_THROW( Divide_By_Zero ); \ + exc->error = FT_THROW( Divide_By_Zero ); \ else \ args[0] = FT_MulDiv_No_Round( args[0], 64L, args[1] ); @@ -3229,7 +3225,7 @@ args[0] = -args[0]; -#define DO_FLOOR \ +#define DO_FLOOR \ args[0] = FT_PIX_FLOOR( args[0] ); @@ -3238,79 +3234,79 @@ #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING -#define DO_RS \ - { \ - FT_ULong I = (FT_ULong)args[0]; \ - \ - \ - if ( BOUNDSL( I, CUR.storeSize ) ) \ - { \ - if ( CUR.pedantic_hinting ) \ - ARRAY_BOUND_ERROR; \ - else \ - args[0] = 0; \ - } \ - else \ - { \ - /* subpixel hinting - avoid Typeman Dstroke and */ \ - /* IStroke and Vacuform rounds */ \ - \ - if ( SUBPIXEL_HINTING && \ - CUR.ignore_x_mode && \ - ( ( I == 24 && \ - ( CUR.face->sph_found_func_flags & \ - ( SPH_FDEF_SPACING_1 | \ - SPH_FDEF_SPACING_2 ) ) ) || \ - ( I == 22 && \ - ( CUR.sph_in_func_flags & \ - SPH_FDEF_TYPEMAN_STROKES ) ) || \ - ( I == 8 && \ - ( CUR.face->sph_found_func_flags & \ - SPH_FDEF_VACUFORM_ROUND_1 ) && \ - CUR.iup_called ) ) ) \ - args[0] = 0; \ - else \ - args[0] = CUR.storage[I]; \ - } \ +#define DO_RS \ + { \ + FT_ULong I = (FT_ULong)args[0]; \ + \ + \ + if ( BOUNDSL( I, exc->storeSize ) ) \ + { \ + if ( exc->pedantic_hinting ) \ + ARRAY_BOUND_ERROR; \ + else \ + args[0] = 0; \ + } \ + else \ + { \ + /* subpixel hinting - avoid Typeman Dstroke and */ \ + /* IStroke and Vacuform rounds */ \ + \ + if ( SUBPIXEL_HINTING && \ + exc->ignore_x_mode && \ + ( ( I == 24 && \ + ( exc->face->sph_found_func_flags & \ + ( SPH_FDEF_SPACING_1 | \ + SPH_FDEF_SPACING_2 ) ) ) || \ + ( I == 22 && \ + ( exc->sph_in_func_flags & \ + SPH_FDEF_TYPEMAN_STROKES ) ) || \ + ( I == 8 && \ + ( exc->face->sph_found_func_flags & \ + SPH_FDEF_VACUFORM_ROUND_1 ) && \ + exc->iup_called ) ) ) \ + args[0] = 0; \ + else \ + args[0] = exc->storage[I]; \ + } \ } #else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ -#define DO_RS \ - { \ - FT_ULong I = (FT_ULong)args[0]; \ - \ - \ - if ( BOUNDSL( I, CUR.storeSize ) ) \ - { \ - if ( CUR.pedantic_hinting ) \ - { \ - ARRAY_BOUND_ERROR; \ - } \ - else \ - args[0] = 0; \ - } \ - else \ - args[0] = CUR.storage[I]; \ +#define DO_RS \ + { \ + FT_ULong I = (FT_ULong)args[0]; \ + \ + \ + if ( BOUNDSL( I, exc->storeSize ) ) \ + { \ + if ( exc->pedantic_hinting ) \ + { \ + ARRAY_BOUND_ERROR; \ + } \ + else \ + args[0] = 0; \ + } \ + else \ + args[0] = exc->storage[I]; \ } #endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ -#define DO_WS \ - { \ - FT_ULong I = (FT_ULong)args[0]; \ - \ - \ - if ( BOUNDSL( I, CUR.storeSize ) ) \ - { \ - if ( CUR.pedantic_hinting ) \ - { \ - ARRAY_BOUND_ERROR; \ - } \ - } \ - else \ - CUR.storage[I] = args[1]; \ +#define DO_WS \ + { \ + FT_ULong I = (FT_ULong)args[0]; \ + \ + \ + if ( BOUNDSL( I, exc->storeSize ) ) \ + { \ + if ( exc->pedantic_hinting ) \ + { \ + ARRAY_BOUND_ERROR; \ + } \ + } \ + else \ + exc->storage[I] = args[1]; \ } @@ -3319,9 +3315,9 @@ FT_ULong I = (FT_ULong)args[0]; \ \ \ - if ( BOUNDSL( I, CUR.cvtSize ) ) \ + if ( BOUNDSL( I, exc->cvtSize ) ) \ { \ - if ( CUR.pedantic_hinting ) \ + if ( exc->pedantic_hinting ) \ { \ ARRAY_BOUND_ERROR; \ } \ @@ -3338,9 +3334,9 @@ FT_ULong I = (FT_ULong)args[0]; \ \ \ - if ( BOUNDSL( I, CUR.cvtSize ) ) \ + if ( BOUNDSL( I, exc->cvtSize ) ) \ { \ - if ( CUR.pedantic_hinting ) \ + if ( exc->pedantic_hinting ) \ { \ ARRAY_BOUND_ERROR; \ } \ @@ -3350,36 +3346,36 @@ } -#define DO_WCVTF \ - { \ - FT_ULong I = (FT_ULong)args[0]; \ - \ - \ - if ( BOUNDSL( I, CUR.cvtSize ) ) \ - { \ - if ( CUR.pedantic_hinting ) \ - { \ - ARRAY_BOUND_ERROR; \ - } \ - } \ - else \ - CUR.cvt[I] = FT_MulFix( args[1], CUR.tt_metrics.scale ); \ +#define DO_WCVTF \ + { \ + FT_ULong I = (FT_ULong)args[0]; \ + \ + \ + if ( BOUNDSL( I, exc->cvtSize ) ) \ + { \ + if ( exc->pedantic_hinting ) \ + { \ + ARRAY_BOUND_ERROR; \ + } \ + } \ + else \ + exc->cvt[I] = FT_MulFix( args[1], exc->tt_metrics.scale ); \ } -#define DO_DEBUG \ - CUR.error = FT_THROW( Debug_OpCode ); +#define DO_DEBUG \ + exc->error = FT_THROW( Debug_OpCode ); -#define DO_ROUND \ - args[0] = CUR_Func_round( \ - args[0], \ - CUR.tt_metrics.compensations[CUR.opcode - 0x68] ); +#define DO_ROUND \ + args[0] = CUR_Func_round( \ + args[0], \ + exc->tt_metrics.compensations[exc->opcode - 0x68] ); -#define DO_NROUND \ - args[0] = ROUND_None( args[0], \ - CUR.tt_metrics.compensations[CUR.opcode - 0x6C] ); +#define DO_NROUND \ + args[0] = ROUND_None( args[0], \ + exc->tt_metrics.compensations[exc->opcode - 0x6C] ); #define DO_MAX \ @@ -3396,10 +3392,10 @@ #undef ARRAY_BOUND_ERROR -#define ARRAY_BOUND_ERROR \ - { \ - CUR.error = FT_THROW( Invalid_Reference ); \ - return; \ +#define ARRAY_BOUND_ERROR \ + { \ + exc->error = FT_THROW( Invalid_Reference ); \ + return; \ } @@ -4375,20 +4371,20 @@ L = args[0]; - if ( L <= 0 || L > CUR.args ) + if ( L <= 0 || L > exc->args ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); } else { - K = CUR.stack[CUR.args - L]; + K = exc->stack[exc->args - L]; - FT_ARRAY_MOVE( &CUR.stack[CUR.args - L ], - &CUR.stack[CUR.args - L + 1], + FT_ARRAY_MOVE( &exc->stack[exc->args - L ], + &exc->stack[exc->args - L + 1], ( L - 1 ) ); - CUR.stack[CUR.args - 1] = K; + exc->stack[exc->args - 1] = K; } } @@ -4429,26 +4425,26 @@ static FT_Bool SkipCode( EXEC_OP ) { - CUR.IP += CUR.length; + exc->IP += exc->length; - if ( CUR.IP < CUR.codeSize ) + if ( exc->IP < exc->codeSize ) { - CUR.opcode = CUR.code[CUR.IP]; + exc->opcode = exc->code[exc->IP]; - CUR.length = opcode_length[CUR.opcode]; - if ( CUR.length < 0 ) + exc->length = opcode_length[exc->opcode]; + if ( exc->length < 0 ) { - if ( CUR.IP + 1 >= CUR.codeSize ) + if ( exc->IP + 1 >= exc->codeSize ) goto Fail_Overflow; - CUR.length = 2 - CUR.length * CUR.code[CUR.IP + 1]; + exc->length = 2 - exc->length * exc->code[exc->IP + 1]; } - if ( CUR.IP + CUR.length <= CUR.codeSize ) + if ( exc->IP + exc->length <= exc->codeSize ) return SUCCESS; } Fail_Overflow: - CUR.error = FT_THROW( Code_Overflow ); + exc->error = FT_THROW( Code_Overflow ); return FAILURE; } @@ -4477,7 +4473,7 @@ if ( SKIP_Code() == FAILURE ) return; - switch ( CUR.opcode ) + switch ( exc->opcode ) { case 0x58: /* IF */ nIfs++; @@ -4517,7 +4513,7 @@ if ( SKIP_Code() == FAILURE ) return; - switch ( CUR.opcode ) + switch ( exc->opcode ) { case 0x58: /* IF */ nIfs++; @@ -4657,8 +4653,8 @@ /* some font programs are broken enough to redefine functions! */ /* We will then parse the current table. */ - rec = CUR.FDefs; - limit = rec + CUR.numFDefs; + rec = exc->FDefs; + limit = rec + exc->numFDefs; n = args[0]; for ( ; rec < limit; rec++ ) @@ -4670,31 +4666,31 @@ if ( rec == limit ) { /* check that there is enough room for new functions */ - if ( CUR.numFDefs >= CUR.maxFDefs ) + if ( exc->numFDefs >= exc->maxFDefs ) { - CUR.error = FT_THROW( Too_Many_Function_Defs ); + exc->error = FT_THROW( Too_Many_Function_Defs ); return; } - CUR.numFDefs++; + exc->numFDefs++; } /* Although FDEF takes unsigned 32-bit integer, */ /* func # must be within unsigned 16-bit integer */ if ( n > 0xFFFFU ) { - CUR.error = FT_THROW( Too_Many_Function_Defs ); + exc->error = FT_THROW( Too_Many_Function_Defs ); return; } - rec->range = CUR.curRange; + rec->range = exc->curRange; rec->opc = (FT_UInt16)n; - rec->start = CUR.IP + 1; + rec->start = exc->IP + 1; rec->active = TRUE; rec->inline_delta = FALSE; rec->sph_fdef_flags = 0x0000; - if ( n > CUR.maxFunc ) - CUR.maxFunc = (FT_UInt16)n; + if ( n > exc->maxFunc ) + exc->maxFunc = (FT_UInt16)n; #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING /* We don't know for sure these are typeman functions, */ @@ -4715,8 +4711,8 @@ { for ( i = 0; i < opcode_patterns; i++ ) { - if ( opcode_pointer[i] < opcode_size[i] && - CUR.opcode == opcode_pattern[i][opcode_pointer[i]] ) + if ( opcode_pointer[i] < opcode_size[i] && + exc->opcode == opcode_pattern[i][opcode_pointer[i]] ) { opcode_pointer[i] += 1; @@ -4724,19 +4720,19 @@ { FT_TRACE7(( "sph: Function %d, opcode ptrn: %d, %s %s\n", i, n, - CUR.face->root.family_name, - CUR.face->root.style_name )); + exc->face->root.family_name, + exc->face->root.style_name )); switch ( i ) { case 0: - rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_1; - CUR.face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_1; + rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_1; + exc->face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_1; break; case 1: - rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_2; - CUR.face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_2; + rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_2; + exc->face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_2; break; case 2: @@ -4744,8 +4740,8 @@ { /* needs to be implemented still */ case 58: - rec->sph_fdef_flags |= SPH_FDEF_DIAGONAL_STROKE; - CUR.face->sph_found_func_flags |= SPH_FDEF_DIAGONAL_STROKE; + rec->sph_fdef_flags |= SPH_FDEF_DIAGONAL_STROKE; + exc->face->sph_found_func_flags |= SPH_FDEF_DIAGONAL_STROKE; } break; @@ -4753,15 +4749,15 @@ switch ( n ) { case 0: - rec->sph_fdef_flags |= SPH_FDEF_VACUFORM_ROUND_1; - CUR.face->sph_found_func_flags |= SPH_FDEF_VACUFORM_ROUND_1; + rec->sph_fdef_flags |= SPH_FDEF_VACUFORM_ROUND_1; + exc->face->sph_found_func_flags |= SPH_FDEF_VACUFORM_ROUND_1; } break; case 4: /* probably not necessary to detect anymore */ - rec->sph_fdef_flags |= SPH_FDEF_TTFAUTOHINT_1; - CUR.face->sph_found_func_flags |= SPH_FDEF_TTFAUTOHINT_1; + rec->sph_fdef_flags |= SPH_FDEF_TTFAUTOHINT_1; + exc->face->sph_found_func_flags |= SPH_FDEF_TTFAUTOHINT_1; break; case 5: @@ -4773,8 +4769,8 @@ case 4: case 7: case 8: - rec->sph_fdef_flags |= SPH_FDEF_SPACING_1; - CUR.face->sph_found_func_flags |= SPH_FDEF_SPACING_1; + rec->sph_fdef_flags |= SPH_FDEF_SPACING_1; + exc->face->sph_found_func_flags |= SPH_FDEF_SPACING_1; } break; @@ -4787,20 +4783,20 @@ case 4: case 7: case 8: - rec->sph_fdef_flags |= SPH_FDEF_SPACING_2; - CUR.face->sph_found_func_flags |= SPH_FDEF_SPACING_2; + rec->sph_fdef_flags |= SPH_FDEF_SPACING_2; + exc->face->sph_found_func_flags |= SPH_FDEF_SPACING_2; } break; case 7: - rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; - CUR.face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; + rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; + exc->face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; break; case 8: #if 0 - rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; - CUR.face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; + rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; + exc->face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; #endif break; } @@ -4813,22 +4809,22 @@ } /* Set sph_compatibility_mode only when deltas are detected */ - CUR.face->sph_compatibility_mode = - ( ( CUR.face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_1 ) | - ( CUR.face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ); + exc->face->sph_compatibility_mode = + ( ( exc->face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_1 ) | + ( exc->face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ); } #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - switch ( CUR.opcode ) + switch ( exc->opcode ) { case 0x89: /* IDEF */ case 0x2C: /* FDEF */ - CUR.error = FT_THROW( Nested_DEFS ); + exc->error = FT_THROW( Nested_DEFS ); return; case 0x2D: /* ENDF */ - rec->end = CUR.IP; + rec->end = exc->IP; return; } } @@ -4850,27 +4846,27 @@ #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - CUR.sph_in_func_flags = 0x0000; + exc->sph_in_func_flags = 0x0000; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - if ( CUR.callTop <= 0 ) /* We encountered an ENDF without a call */ + if ( exc->callTop <= 0 ) /* We encountered an ENDF without a call */ { - CUR.error = FT_THROW( ENDF_In_Exec_Stream ); + exc->error = FT_THROW( ENDF_In_Exec_Stream ); return; } - CUR.callTop--; + exc->callTop--; - pRec = &CUR.callStack[CUR.callTop]; + pRec = &exc->callStack[exc->callTop]; pRec->Cur_Count--; - CUR.step_ins = FALSE; + exc->step_ins = FALSE; if ( pRec->Cur_Count > 0 ) { - CUR.callTop++; - CUR.IP = pRec->Def->start; + exc->callTop++; + exc->IP = pRec->Def->start; } else /* Loop through the current function */ @@ -4904,27 +4900,27 @@ /* first of all, check the index */ F = args[0]; - if ( BOUNDSL( F, CUR.maxFunc + 1 ) ) + if ( BOUNDSL( F, exc->maxFunc + 1 ) ) goto Fail; /* Except for some old Apple fonts, all functions in a TrueType */ /* font are defined in increasing order, starting from 0. This */ /* means that we normally have */ /* */ - /* CUR.maxFunc+1 == CUR.numFDefs */ - /* CUR.FDefs[n].opc == n for n in 0..CUR.maxFunc */ + /* exc->maxFunc+1 == exc->numFDefs */ + /* exc->FDefs[n].opc == n for n in 0..exc->maxFunc */ /* */ /* If this isn't true, we need to look up the function table. */ - def = CUR.FDefs + F; - if ( CUR.maxFunc + 1 != CUR.numFDefs || def->opc != F ) + def = exc->FDefs + F; + if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F ) { /* look up the FDefs table */ TT_DefRecord* limit; - def = CUR.FDefs; - limit = def + CUR.numFDefs; + def = exc->FDefs; + limit = def + exc->numFDefs; while ( def < limit && def->opc != F ) def++; @@ -4938,41 +4934,41 @@ goto Fail; #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - ( ( CUR.iup_called && - ( CUR.sph_tweak_flags & SPH_TWEAK_NO_CALL_AFTER_IUP ) ) || - ( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) ) ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + ( ( exc->iup_called && + ( exc->sph_tweak_flags & SPH_TWEAK_NO_CALL_AFTER_IUP ) ) || + ( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) ) ) goto Fail; else - CUR.sph_in_func_flags = def->sph_fdef_flags; + exc->sph_in_func_flags = def->sph_fdef_flags; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ /* check the call stack */ - if ( CUR.callTop >= CUR.callSize ) + if ( exc->callTop >= exc->callSize ) { - CUR.error = FT_THROW( Stack_Overflow ); + exc->error = FT_THROW( Stack_Overflow ); return; } - pCrec = CUR.callStack + CUR.callTop; + pCrec = exc->callStack + exc->callTop; - pCrec->Caller_Range = CUR.curRange; - pCrec->Caller_IP = CUR.IP + 1; + pCrec->Caller_Range = exc->curRange; + pCrec->Caller_IP = exc->IP + 1; pCrec->Cur_Count = 1; pCrec->Def = def; - CUR.callTop++; + exc->callTop++; INS_Goto_CodeRange( def->range, def->start ); - CUR.step_ins = FALSE; + exc->step_ins = FALSE; return; Fail: - CUR.error = FT_THROW( Invalid_Reference ); + exc->error = FT_THROW( Invalid_Reference ); } @@ -4992,27 +4988,27 @@ /* first of all, check the index */ F = args[1]; - if ( BOUNDSL( F, CUR.maxFunc + 1 ) ) + if ( BOUNDSL( F, exc->maxFunc + 1 ) ) goto Fail; /* Except for some old Apple fonts, all functions in a TrueType */ /* font are defined in increasing order, starting from 0. This */ /* means that we normally have */ /* */ - /* CUR.maxFunc+1 == CUR.numFDefs */ - /* CUR.FDefs[n].opc == n for n in 0..CUR.maxFunc */ + /* exc->maxFunc+1 == exc->numFDefs */ + /* exc->FDefs[n].opc == n for n in 0..exc->maxFunc */ /* */ /* If this isn't true, we need to look up the function table. */ - def = CUR.FDefs + F; - if ( CUR.maxFunc + 1 != CUR.numFDefs || def->opc != F ) + def = exc->FDefs + F; + if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F ) { /* look up the FDefs table */ TT_DefRecord* limit; - def = CUR.FDefs; - limit = def + CUR.numFDefs; + def = exc->FDefs; + limit = def + exc->numFDefs; while ( def < limit && def->opc != F ) def++; @@ -5027,40 +5023,40 @@ #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && + exc->ignore_x_mode && ( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) ) goto Fail; else - CUR.sph_in_func_flags = def->sph_fdef_flags; + exc->sph_in_func_flags = def->sph_fdef_flags; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ /* check stack */ - if ( CUR.callTop >= CUR.callSize ) + if ( exc->callTop >= exc->callSize ) { - CUR.error = FT_THROW( Stack_Overflow ); + exc->error = FT_THROW( Stack_Overflow ); return; } if ( args[0] > 0 ) { - pCrec = CUR.callStack + CUR.callTop; + pCrec = exc->callStack + exc->callTop; - pCrec->Caller_Range = CUR.curRange; - pCrec->Caller_IP = CUR.IP + 1; + pCrec->Caller_Range = exc->curRange; + pCrec->Caller_IP = exc->IP + 1; pCrec->Cur_Count = (FT_Int)args[0]; pCrec->Def = def; - CUR.callTop++; + exc->callTop++; INS_Goto_CodeRange( def->range, def->start ); - CUR.step_ins = FALSE; + exc->step_ins = FALSE; } return; Fail: - CUR.error = FT_THROW( Invalid_Reference ); + exc->error = FT_THROW( Invalid_Reference ); } @@ -5079,8 +5075,8 @@ /* First of all, look for the same function in our table */ - def = CUR.IDefs; - limit = def + CUR.numIDefs; + def = exc->IDefs; + limit = def + exc->numIDefs; for ( ; def < limit; def++ ) if ( def->opc == (FT_ULong)args[0] ) @@ -5089,39 +5085,39 @@ if ( def == limit ) { /* check that there is enough room for a new instruction */ - if ( CUR.numIDefs >= CUR.maxIDefs ) + if ( exc->numIDefs >= exc->maxIDefs ) { - CUR.error = FT_THROW( Too_Many_Instruction_Defs ); + exc->error = FT_THROW( Too_Many_Instruction_Defs ); return; } - CUR.numIDefs++; + exc->numIDefs++; } /* opcode must be unsigned 8-bit integer */ if ( 0 > args[0] || args[0] > 0x00FF ) { - CUR.error = FT_THROW( Too_Many_Instruction_Defs ); + exc->error = FT_THROW( Too_Many_Instruction_Defs ); return; } def->opc = (FT_Byte)args[0]; - def->start = CUR.IP + 1; - def->range = CUR.curRange; + def->start = exc->IP + 1; + def->range = exc->curRange; def->active = TRUE; - if ( (FT_ULong)args[0] > CUR.maxIns ) - CUR.maxIns = (FT_Byte)args[0]; + if ( (FT_ULong)args[0] > exc->maxIns ) + exc->maxIns = (FT_Byte)args[0]; /* Now skip the whole function definition. */ /* We don't allow nested IDEFs & FDEFs. */ while ( SKIP_Code() == SUCCESS ) { - switch ( CUR.opcode ) + switch ( exc->opcode ) { case 0x89: /* IDEF */ case 0x2C: /* FDEF */ - CUR.error = FT_THROW( Nested_DEFS ); + exc->error = FT_THROW( Nested_DEFS ); return; case 0x2D: /* ENDF */ return; @@ -5151,18 +5147,18 @@ FT_UShort L, K; - L = (FT_UShort)CUR.code[CUR.IP + 1]; + L = (FT_UShort)exc->code[exc->IP + 1]; - if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) ) + if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) { - CUR.error = FT_THROW( Stack_Overflow ); + exc->error = FT_THROW( Stack_Overflow ); return; } for ( K = 1; K <= L; K++ ) - args[K - 1] = CUR.code[CUR.IP + K + 1]; + args[K - 1] = exc->code[exc->IP + K + 1]; - CUR.new_top += L; + exc->new_top += L; } @@ -5178,21 +5174,21 @@ FT_UShort L, K; - L = (FT_UShort)CUR.code[CUR.IP + 1]; + L = (FT_UShort)exc->code[exc->IP + 1]; - if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) ) + if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) { - CUR.error = FT_THROW( Stack_Overflow ); + exc->error = FT_THROW( Stack_Overflow ); return; } - CUR.IP += 2; + exc->IP += 2; for ( K = 0; K < L; K++ ) args[K] = GET_ShortIns(); - CUR.step_ins = FALSE; - CUR.new_top += L; + exc->step_ins = FALSE; + exc->new_top += L; } @@ -5208,16 +5204,16 @@ FT_UShort L, K; - L = (FT_UShort)( CUR.opcode - 0xB0 + 1 ); + L = (FT_UShort)( exc->opcode - 0xB0 + 1 ); - if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) ) + if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) { - CUR.error = FT_THROW( Stack_Overflow ); + exc->error = FT_THROW( Stack_Overflow ); return; } for ( K = 1; K <= L; K++ ) - args[K - 1] = CUR.code[CUR.IP + K]; + args[K - 1] = exc->code[exc->IP + K]; } @@ -5233,20 +5229,20 @@ FT_UShort L, K; - L = (FT_UShort)( CUR.opcode - 0xB8 + 1 ); + L = (FT_UShort)( exc->opcode - 0xB8 + 1 ); - if ( BOUNDS( L, CUR.stackSize + 1 - CUR.top ) ) + if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) { - CUR.error = FT_THROW( Stack_Overflow ); + exc->error = FT_THROW( Stack_Overflow ); return; } - CUR.IP++; + exc->IP++; for ( K = 0; K < L; K++ ) args[K] = GET_ShortIns(); - CUR.step_ins = FALSE; + exc->step_ins = FALSE; } @@ -5277,18 +5273,18 @@ L = (FT_ULong)args[0]; - if ( BOUNDSL( L, CUR.zp2.n_points ) ) + if ( BOUNDSL( L, exc->zp2.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); R = 0; } else { - if ( CUR.opcode & 1 ) - R = CUR_fast_dualproj( &CUR.zp2.org[L] ); + if ( exc->opcode & 1 ) + R = CUR_fast_dualproj( &exc->zp2.org[L] ); else - R = CUR_fast_project( &CUR.zp2.cur[L] ); + R = CUR_fast_project( &exc->zp2.cur[L] ); } args[0] = R; @@ -5314,21 +5310,21 @@ L = (FT_UShort)args[0]; - if ( BOUNDS( L, CUR.zp2.n_points ) ) + if ( BOUNDS( L, exc->zp2.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } - K = CUR_fast_project( &CUR.zp2.cur[L] ); + K = CUR_fast_project( &exc->zp2.cur[L] ); - CUR_Func_move( &CUR.zp2, L, args[1] - K ); + CUR_Func_move( &exc->zp2, L, args[1] - K ); /* UNDOCUMENTED! The MS rasterizer does that with */ /* twilight points (confirmed by Greg Hitchcock) */ - if ( CUR.GS.gep2 == 0 ) - CUR.zp2.org[L] = CUR.zp2.cur[L]; + if ( exc->GS.gep2 == 0 ) + exc->zp2.org[L] = exc->zp2.cur[L]; } @@ -5357,48 +5353,48 @@ K = (FT_UShort)args[1]; L = (FT_UShort)args[0]; - if ( BOUNDS( L, CUR.zp0.n_points ) || - BOUNDS( K, CUR.zp1.n_points ) ) + if ( BOUNDS( L, exc->zp0.n_points ) || + BOUNDS( K, exc->zp1.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); D = 0; } else { - if ( CUR.opcode & 1 ) - D = CUR_Func_project( CUR.zp0.cur + L, CUR.zp1.cur + K ); + if ( exc->opcode & 1 ) + D = CUR_Func_project( exc->zp0.cur + L, exc->zp1.cur + K ); else { /* XXX: UNDOCUMENTED: twilight zone special case */ - if ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 ) + if ( exc->GS.gep0 == 0 || exc->GS.gep1 == 0 ) { - FT_Vector* vec1 = CUR.zp0.org + L; - FT_Vector* vec2 = CUR.zp1.org + K; + FT_Vector* vec1 = exc->zp0.org + L; + FT_Vector* vec2 = exc->zp1.org + K; D = CUR_Func_dualproj( vec1, vec2 ); } else { - FT_Vector* vec1 = CUR.zp0.orus + L; - FT_Vector* vec2 = CUR.zp1.orus + K; + FT_Vector* vec1 = exc->zp0.orus + L; + FT_Vector* vec2 = exc->zp1.orus + K; - if ( CUR.metrics.x_scale == CUR.metrics.y_scale ) + if ( exc->metrics.x_scale == exc->metrics.y_scale ) { /* this should be faster */ D = CUR_Func_dualproj( vec1, vec2 ); - D = FT_MulFix( D, CUR.metrics.x_scale ); + D = FT_MulFix( D, exc->metrics.x_scale ); } else { FT_Vector vec; - vec.x = FT_MulFix( vec1->x - vec2->x, CUR.metrics.x_scale ); - vec.y = FT_MulFix( vec1->y - vec2->y, CUR.metrics.y_scale ); + vec.x = FT_MulFix( vec1->x - vec2->x, exc->metrics.x_scale ); + vec.y = FT_MulFix( vec1->y - vec2->y, exc->metrics.y_scale ); D = CUR_fast_dualproj( &vec ); } @@ -5408,8 +5404,8 @@ #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING /* Disable Type 2 Vacuform Rounds - e.g. Arial Narrow */ - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && FT_ABS( D ) == 64 ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && FT_ABS( D ) == 64 ) D += 1; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ @@ -5428,23 +5424,23 @@ { FT_Long A, B, C; FT_UShort p1, p2; /* was FT_Int in pas type ERROR */ - FT_Int aOpc = CUR.opcode; + FT_Int aOpc = exc->opcode; p1 = (FT_UShort)args[1]; p2 = (FT_UShort)args[0]; - if ( BOUNDS( p2, CUR.zp1.n_points ) || - BOUNDS( p1, CUR.zp2.n_points ) ) + if ( BOUNDS( p2, exc->zp1.n_points ) || + BOUNDS( p1, exc->zp2.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } { - FT_Vector* v1 = CUR.zp1.org + p2; - FT_Vector* v2 = CUR.zp2.org + p1; + FT_Vector* v1 = exc->zp1.org + p2; + FT_Vector* v2 = exc->zp2.org + p1; A = v1->x - v2->x; @@ -5469,11 +5465,11 @@ A = -C; } - NORMalize( A, B, &CUR.GS.dualVector ); + NORMalize( A, B, &exc->GS.dualVector ); { - FT_Vector* v1 = CUR.zp1.cur + p2; - FT_Vector* v2 = CUR.zp2.cur + p1; + FT_Vector* v1 = exc->zp1.cur + p2; + FT_Vector* v2 = exc->zp2.cur + p1; A = v1->x - v2->x; @@ -5493,7 +5489,7 @@ A = -C; } - NORMalize( A, B, &CUR.GS.projVector ); + NORMalize( A, B, &exc->GS.projVector ); GUESS_VECTOR( freeVector ); @@ -5513,20 +5509,20 @@ switch ( (FT_Int)args[0] ) { case 0: - CUR.zp0 = CUR.twilight; + exc->zp0 = exc->twilight; break; case 1: - CUR.zp0 = CUR.pts; + exc->zp0 = exc->pts; break; default: - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } - CUR.GS.gep0 = (FT_UShort)args[0]; + exc->GS.gep0 = (FT_UShort)args[0]; } @@ -5542,20 +5538,20 @@ switch ( (FT_Int)args[0] ) { case 0: - CUR.zp1 = CUR.twilight; + exc->zp1 = exc->twilight; break; case 1: - CUR.zp1 = CUR.pts; + exc->zp1 = exc->pts; break; default: - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } - CUR.GS.gep1 = (FT_UShort)args[0]; + exc->GS.gep1 = (FT_UShort)args[0]; } @@ -5571,20 +5567,20 @@ switch ( (FT_Int)args[0] ) { case 0: - CUR.zp2 = CUR.twilight; + exc->zp2 = exc->twilight; break; case 1: - CUR.zp2 = CUR.pts; + exc->zp2 = exc->pts; break; default: - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } - CUR.GS.gep2 = (FT_UShort)args[0]; + exc->GS.gep2 = (FT_UShort)args[0]; } @@ -5600,25 +5596,25 @@ switch ( (FT_Int)args[0] ) { case 0: - CUR.zp0 = CUR.twilight; + exc->zp0 = exc->twilight; break; case 1: - CUR.zp0 = CUR.pts; + exc->zp0 = exc->pts; break; default: - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } - CUR.zp1 = CUR.zp0; - CUR.zp2 = CUR.zp0; + exc->zp1 = exc->zp0; + exc->zp2 = exc->zp0; - CUR.GS.gep0 = (FT_UShort)args[0]; - CUR.GS.gep1 = (FT_UShort)args[0]; - CUR.GS.gep2 = (FT_UShort)args[0]; + exc->GS.gep0 = (FT_UShort)args[0]; + exc->GS.gep1 = (FT_UShort)args[0]; + exc->GS.gep2 = (FT_UShort)args[0]; } @@ -5639,16 +5635,16 @@ if ( K < 1 || K > 2 ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } if ( L != 0 ) L = K; - CUR.GS.instruct_control = FT_BOOL( - ( (FT_Byte)CUR.GS.instruct_control & ~(FT_Byte)K ) | (FT_Byte)L ); + exc->GS.instruct_control = FT_BOOL( + ( (FT_Byte)exc->GS.instruct_control & ~(FT_Byte)K ) | (FT_Byte)L ); } @@ -5669,32 +5665,32 @@ if ( A == 0xFF ) { - CUR.GS.scan_control = TRUE; + exc->GS.scan_control = TRUE; return; } else if ( A == 0 ) { - CUR.GS.scan_control = FALSE; + exc->GS.scan_control = FALSE; return; } - if ( ( args[0] & 0x100 ) != 0 && CUR.tt_metrics.ppem <= A ) - CUR.GS.scan_control = TRUE; + if ( ( args[0] & 0x100 ) != 0 && exc->tt_metrics.ppem <= A ) + exc->GS.scan_control = TRUE; - if ( ( args[0] & 0x200 ) != 0 && CUR.tt_metrics.rotated ) - CUR.GS.scan_control = TRUE; + if ( ( args[0] & 0x200 ) != 0 && exc->tt_metrics.rotated ) + exc->GS.scan_control = TRUE; - if ( ( args[0] & 0x400 ) != 0 && CUR.tt_metrics.stretched ) - CUR.GS.scan_control = TRUE; + if ( ( args[0] & 0x400 ) != 0 && exc->tt_metrics.stretched ) + exc->GS.scan_control = TRUE; - if ( ( args[0] & 0x800 ) != 0 && CUR.tt_metrics.ppem > A ) - CUR.GS.scan_control = FALSE; + if ( ( args[0] & 0x800 ) != 0 && exc->tt_metrics.ppem > A ) + exc->GS.scan_control = FALSE; - if ( ( args[0] & 0x1000 ) != 0 && CUR.tt_metrics.rotated ) - CUR.GS.scan_control = FALSE; + if ( ( args[0] & 0x1000 ) != 0 && exc->tt_metrics.rotated ) + exc->GS.scan_control = FALSE; - if ( ( args[0] & 0x2000 ) != 0 && CUR.tt_metrics.stretched ) - CUR.GS.scan_control = FALSE; + if ( ( args[0] & 0x2000 ) != 0 && exc->tt_metrics.stretched ) + exc->GS.scan_control = FALSE; } @@ -5708,7 +5704,7 @@ Ins_SCANTYPE( INS_ARG ) { if ( args[0] >= 0 ) - CUR.GS.scan_type = (FT_Int)args[0]; + exc->GS.scan_type = (FT_Int)args[0]; } @@ -5735,36 +5731,36 @@ FT_UNUSED_ARG; - if ( CUR.top < CUR.GS.loop ) + if ( exc->top < exc->GS.loop ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Too_Few_Arguments ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Too_Few_Arguments ); goto Fail; } - while ( CUR.GS.loop > 0 ) + while ( exc->GS.loop > 0 ) { - CUR.args--; + exc->args--; - point = (FT_UShort)CUR.stack[CUR.args]; + point = (FT_UShort)exc->stack[exc->args]; - if ( BOUNDS( point, CUR.pts.n_points ) ) + if ( BOUNDS( point, exc->pts.n_points ) ) { - if ( CUR.pedantic_hinting ) + if ( exc->pedantic_hinting ) { - CUR.error = FT_THROW( Invalid_Reference ); + exc->error = FT_THROW( Invalid_Reference ); return; } } else - CUR.pts.tags[point] ^= FT_CURVE_TAG_ON; + exc->pts.tags[point] ^= FT_CURVE_TAG_ON; - CUR.GS.loop--; + exc->GS.loop--; } Fail: - CUR.GS.loop = 1; - CUR.new_top = CUR.args; + exc->GS.loop = 1; + exc->new_top = exc->args; } @@ -5783,16 +5779,16 @@ K = (FT_UShort)args[1]; L = (FT_UShort)args[0]; - if ( BOUNDS( K, CUR.pts.n_points ) || - BOUNDS( L, CUR.pts.n_points ) ) + if ( BOUNDS( K, exc->pts.n_points ) || + BOUNDS( L, exc->pts.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } for ( I = L; I <= K; I++ ) - CUR.pts.tags[I] |= FT_CURVE_TAG_ON; + exc->pts.tags[I] |= FT_CURVE_TAG_ON; } @@ -5811,16 +5807,16 @@ K = (FT_UShort)args[1]; L = (FT_UShort)args[0]; - if ( BOUNDS( K, CUR.pts.n_points ) || - BOUNDS( L, CUR.pts.n_points ) ) + if ( BOUNDS( K, exc->pts.n_points ) || + BOUNDS( L, exc->pts.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } for ( I = L; I <= K; I++ ) - CUR.pts.tags[I] &= ~FT_CURVE_TAG_ON; + exc->pts.tags[I] &= ~FT_CURVE_TAG_ON; } @@ -5835,21 +5831,21 @@ FT_F26Dot6 d; - if ( CUR.opcode & 1 ) + if ( exc->opcode & 1 ) { - zp = CUR.zp0; - p = CUR.GS.rp1; + zp = exc->zp0; + p = exc->GS.rp1; } else { - zp = CUR.zp1; - p = CUR.GS.rp2; + zp = exc->zp1; + p = exc->GS.rp2; } if ( BOUNDS( p, zp.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); *refp = 0; return FAILURE; } @@ -5860,9 +5856,9 @@ d = CUR_Func_project( zp.cur + p, zp.org + p ); #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING - if ( CUR.face->unpatented_hinting ) + if ( exc->face->unpatented_hinting ) { - if ( CUR.GS.both_x_axis ) + if ( exc->GS.both_x_axis ) { *x = d; *y = 0; @@ -5876,8 +5872,8 @@ else #endif { - *x = FT_MulDiv( d, (FT_Long)CUR.GS.freeVector.x, CUR.F_dot_P ); - *y = FT_MulDiv( d, (FT_Long)CUR.GS.freeVector.y, CUR.F_dot_P ); + *x = FT_MulDiv( d, (FT_Long)exc->GS.freeVector.x, exc->F_dot_P ); + *y = FT_MulDiv( d, (FT_Long)exc->GS.freeVector.y, exc->F_dot_P ); } return SUCCESS; @@ -5891,36 +5887,36 @@ FT_Bool touch ) { #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING - if ( CUR.face->unpatented_hinting ) + if ( exc->face->unpatented_hinting ) { - if ( CUR.GS.both_x_axis ) + if ( exc->GS.both_x_axis ) { - CUR.zp2.cur[point].x += dx; + exc->zp2.cur[point].x += dx; if ( touch ) - CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X; + exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X; } else { - CUR.zp2.cur[point].y += dy; + exc->zp2.cur[point].y += dy; if ( touch ) - CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y; + exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y; } return; } #endif - if ( CUR.GS.freeVector.x != 0 ) + if ( exc->GS.freeVector.x != 0 ) { - CUR.zp2.cur[point].x += dx; + exc->zp2.cur[point].x += dx; if ( touch ) - CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X; + exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_X; } - if ( CUR.GS.freeVector.y != 0 ) + if ( exc->GS.freeVector.y != 0 ) { - CUR.zp2.cur[point].y += dy; + exc->zp2.cur[point].y += dy; if ( touch ) - CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y; + exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_Y; } } @@ -5944,45 +5940,45 @@ FT_UNUSED_ARG; - if ( CUR.top < CUR.GS.loop ) + if ( exc->top < exc->GS.loop ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); goto Fail; } if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) ) return; - while ( CUR.GS.loop > 0 ) + while ( exc->GS.loop > 0 ) { - CUR.args--; - point = (FT_UShort)CUR.stack[CUR.args]; + exc->args--; + point = (FT_UShort)exc->stack[exc->args]; - if ( BOUNDS( point, CUR.zp2.n_points ) ) + if ( BOUNDS( point, exc->zp2.n_points ) ) { - if ( CUR.pedantic_hinting ) + if ( exc->pedantic_hinting ) { - CUR.error = FT_THROW( Invalid_Reference ); + exc->error = FT_THROW( Invalid_Reference ); return; } } else #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING /* doesn't follow Cleartype spec but produces better result */ - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode ) MOVE_Zp2_Point( point, 0, dy, TRUE ); else #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ MOVE_Zp2_Point( point, dx, dy, TRUE ); - CUR.GS.loop--; + exc->GS.loop--; } Fail: - CUR.GS.loop = 1; - CUR.new_top = CUR.args; + exc->GS.loop = 1; + exc->new_top = exc->args; } @@ -6008,12 +6004,12 @@ contour = (FT_UShort)args[0]; - bounds = ( CUR.GS.gep2 == 0 ) ? 1 : CUR.zp2.n_contours; + bounds = ( exc->GS.gep2 == 0 ) ? 1 : exc->zp2.n_contours; if ( BOUNDS( contour, bounds ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } @@ -6023,19 +6019,19 @@ if ( contour == 0 ) start = 0; else - start = (FT_UShort)( CUR.zp2.contours[contour - 1] + 1 - - CUR.zp2.first_point ); + start = (FT_UShort)( exc->zp2.contours[contour - 1] + 1 - + exc->zp2.first_point ); /* we use the number of points if in the twilight zone */ - if ( CUR.GS.gep2 == 0 ) - limit = CUR.zp2.n_points; + if ( exc->GS.gep2 == 0 ) + limit = exc->zp2.n_points; else - limit = (FT_UShort)( CUR.zp2.contours[contour] - - CUR.zp2.first_point + 1 ); + limit = (FT_UShort)( exc->zp2.contours[contour] - + exc->zp2.first_point + 1 ); for ( i = start; i < limit; i++ ) { - if ( zp.cur != CUR.zp2.cur || refp != i ) + if ( zp.cur != exc->zp2.cur || refp != i ) MOVE_Zp2_Point( i, dx, dy, TRUE ); } } @@ -6060,8 +6056,8 @@ if ( BOUNDS( args[0], 2 ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } @@ -6072,17 +6068,17 @@ /* Twilight zone has no real contours, so use `n_points'. */ /* Normal zone's `n_points' includes phantoms, so must */ /* use end of last contour. */ - if ( CUR.GS.gep2 == 0 ) - limit = (FT_UShort)CUR.zp2.n_points; - else if ( CUR.GS.gep2 == 1 && CUR.zp2.n_contours > 0 ) - limit = (FT_UShort)( CUR.zp2.contours[CUR.zp2.n_contours - 1] + 1 ); + if ( exc->GS.gep2 == 0 ) + limit = (FT_UShort)exc->zp2.n_points; + else if ( exc->GS.gep2 == 1 && exc->zp2.n_contours > 0 ) + limit = (FT_UShort)( exc->zp2.contours[exc->zp2.n_contours - 1] + 1 ); else limit = 0; /* XXX: UNDOCUMENTED! SHZ doesn't touch the points */ for ( i = 0; i < limit; i++ ) { - if ( zp.cur != CUR.zp2.cur || refp != i ) + if ( zp.cur != exc->zp2.cur || refp != i ) MOVE_Zp2_Point( i, dx, dy, FALSE ); } } @@ -6104,17 +6100,17 @@ #endif - if ( CUR.top < CUR.GS.loop + 1 ) + if ( exc->top < exc->GS.loop + 1 ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); goto Fail; } #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING - if ( CUR.face->unpatented_hinting ) + if ( exc->face->unpatented_hinting ) { - if ( CUR.GS.both_x_axis ) + if ( exc->GS.both_x_axis ) { dx = (FT_UInt32)args[0]; dy = 0; @@ -6128,21 +6124,21 @@ else #endif { - dx = TT_MulFix14( (FT_UInt32)args[0], CUR.GS.freeVector.x ); - dy = TT_MulFix14( (FT_UInt32)args[0], CUR.GS.freeVector.y ); + dx = TT_MulFix14( (FT_UInt32)args[0], exc->GS.freeVector.x ); + dy = TT_MulFix14( (FT_UInt32)args[0], exc->GS.freeVector.y ); } - while ( CUR.GS.loop > 0 ) + while ( exc->GS.loop > 0 ) { - CUR.args--; + exc->args--; - point = (FT_UShort)CUR.stack[CUR.args]; + point = (FT_UShort)exc->stack[exc->args]; - if ( BOUNDS( point, CUR.zp2.n_points ) ) + if ( BOUNDS( point, exc->zp2.n_points ) ) { - if ( CUR.pedantic_hinting ) + if ( exc->pedantic_hinting ) { - CUR.error = FT_THROW( Invalid_Reference ); + exc->error = FT_THROW( Invalid_Reference ); return; } } @@ -6157,57 +6153,57 @@ /* - the glyph is specifically set to allow SHPIX moves */ /* - the move is on a previously Y-touched point */ - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode ) { /* save point for later comparison */ - if ( CUR.GS.freeVector.y != 0 ) - B1 = CUR.zp2.cur[point].y; + if ( exc->GS.freeVector.y != 0 ) + B1 = exc->zp2.cur[point].y; else - B1 = CUR.zp2.cur[point].x; + B1 = exc->zp2.cur[point].x; - if ( !CUR.face->sph_compatibility_mode && - CUR.GS.freeVector.y != 0 ) + if ( !exc->face->sph_compatibility_mode && + exc->GS.freeVector.y != 0 ) { MOVE_Zp2_Point( point, dx, dy, TRUE ); /* save new point */ - if ( CUR.GS.freeVector.y != 0 ) + if ( exc->GS.freeVector.y != 0 ) { - B2 = CUR.zp2.cur[point].y; + B2 = exc->zp2.cur[point].y; /* reverse any disallowed moves */ - if ( ( CUR.sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) && - ( B1 & 63 ) != 0 && - ( B2 & 63 ) != 0 && - B1 != B2 ) + if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) && + ( B1 & 63 ) != 0 && + ( B2 & 63 ) != 0 && + B1 != B2 ) MOVE_Zp2_Point( point, -dx, -dy, TRUE ); } } - else if ( CUR.face->sph_compatibility_mode ) + else if ( exc->face->sph_compatibility_mode ) { - if ( CUR.sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) + if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) { dx = FT_PIX_ROUND( B1 + dx ) - B1; dy = FT_PIX_ROUND( B1 + dy ) - B1; } /* skip post-iup deltas */ - if ( CUR.iup_called && - ( ( CUR.sph_in_func_flags & SPH_FDEF_INLINE_DELTA_1 ) || - ( CUR.sph_in_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ) ) + if ( exc->iup_called && + ( ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_1 ) || + ( exc->sph_in_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ) ) goto Skip; - if ( !( CUR.sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) && - ( ( CUR.is_composite && CUR.GS.freeVector.y != 0 ) || - ( CUR.zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) || - ( CUR.sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) ) + if ( !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) && + ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) || + ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) || + ( exc->sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) ) MOVE_Zp2_Point( point, 0, dy, TRUE ); /* save new point */ - if ( CUR.GS.freeVector.y != 0 ) + if ( exc->GS.freeVector.y != 0 ) { - B2 = CUR.zp2.cur[point].y; + B2 = exc->zp2.cur[point].y; /* reverse any disallowed moves */ if ( ( B1 & 63 ) == 0 && @@ -6216,7 +6212,7 @@ MOVE_Zp2_Point( point, 0, -dy, TRUE ); } } - else if ( CUR.sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL ) + else if ( exc->sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL ) MOVE_Zp2_Point( point, dx, dy, TRUE ); } else @@ -6231,12 +6227,12 @@ #endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - CUR.GS.loop--; + exc->GS.loop--; } Fail: - CUR.GS.loop = 1; - CUR.new_top = CUR.args; + exc->GS.loop = 1; + exc->new_top = exc->args; } @@ -6258,11 +6254,11 @@ if ( SUBPIXEL_HINTING ) { - control_value_cutin = CUR.GS.control_value_cutin; + control_value_cutin = exc->GS.control_value_cutin; - if ( CUR.ignore_x_mode && - CUR.GS.freeVector.x != 0 && - !( CUR.sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) + if ( exc->ignore_x_mode && + exc->GS.freeVector.x != 0 && + !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) control_value_cutin = 0; } @@ -6270,42 +6266,42 @@ point = (FT_UShort)args[0]; - if ( BOUNDS( point, CUR.zp1.n_points ) || - BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) ) + if ( BOUNDS( point, exc->zp1.n_points ) || + BOUNDS( exc->GS.rp0, exc->zp0.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } /* UNDOCUMENTED! The MS rasterizer does that with */ /* twilight points (confirmed by Greg Hitchcock) */ - if ( CUR.GS.gep1 == 0 ) + if ( exc->GS.gep1 == 0 ) { - CUR.zp1.org[point] = CUR.zp0.org[CUR.GS.rp0]; - CUR_Func_move_orig( &CUR.zp1, point, args[1] ); - CUR.zp1.cur[point] = CUR.zp1.org[point]; + exc->zp1.org[point] = exc->zp0.org[exc->GS.rp0]; + CUR_Func_move_orig( &exc->zp1, point, args[1] ); + exc->zp1.cur[point] = exc->zp1.org[point]; } - distance = CUR_Func_project( CUR.zp1.cur + point, - CUR.zp0.cur + CUR.GS.rp0 ); + distance = CUR_Func_project( exc->zp1.cur + point, + exc->zp0.cur + exc->GS.rp0 ); #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING /* subpixel hinting - make MSIRP respect CVT cut-in; */ if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - CUR.GS.freeVector.x != 0 && + exc->ignore_x_mode && + exc->GS.freeVector.x != 0 && FT_ABS( distance - args[1] ) >= control_value_cutin ) distance = args[1]; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - CUR_Func_move( &CUR.zp1, point, args[1] - distance ); + CUR_Func_move( &exc->zp1, point, args[1] - distance ); - CUR.GS.rp1 = CUR.GS.rp0; - CUR.GS.rp2 = point; + exc->GS.rp1 = exc->GS.rp0; + exc->GS.rp2 = point; - if ( ( CUR.opcode & 1 ) != 0 ) - CUR.GS.rp0 = point; + if ( ( exc->opcode & 1 ) != 0 ) + exc->GS.rp0 = point; } @@ -6325,36 +6321,36 @@ point = (FT_UShort)args[0]; - if ( BOUNDS( point, CUR.zp0.n_points ) ) + if ( BOUNDS( point, exc->zp0.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } - if ( ( CUR.opcode & 1 ) != 0 ) + if ( ( exc->opcode & 1 ) != 0 ) { - cur_dist = CUR_fast_project( &CUR.zp0.cur[point] ); + cur_dist = CUR_fast_project( &exc->zp0.cur[point] ); #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - CUR.GS.freeVector.x != 0 ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + exc->GS.freeVector.x != 0 ) distance = ROUND_None( cur_dist, - CUR.tt_metrics.compensations[0] ) - cur_dist; + exc->tt_metrics.compensations[0] ) - cur_dist; else #endif distance = CUR_Func_round( cur_dist, - CUR.tt_metrics.compensations[0] ) - cur_dist; + exc->tt_metrics.compensations[0] ) - cur_dist; } else distance = 0; - CUR_Func_move( &CUR.zp0, point, distance ); + CUR_Func_move( &exc->zp0, point, distance ); - CUR.GS.rp0 = point; - CUR.GS.rp1 = point; + exc->GS.rp0 = point; + exc->GS.rp1 = point; } @@ -6374,24 +6370,24 @@ FT_F26Dot6 control_value_cutin; - control_value_cutin = CUR.GS.control_value_cutin; + control_value_cutin = exc->GS.control_value_cutin; cvtEntry = (FT_ULong)args[1]; point = (FT_UShort)args[0]; #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - CUR.GS.freeVector.x != 0 && - CUR.GS.freeVector.y == 0 && - !( CUR.sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + exc->GS.freeVector.x != 0 && + exc->GS.freeVector.y == 0 && + !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) control_value_cutin = 0; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - if ( BOUNDS( point, CUR.zp0.n_points ) || - BOUNDSL( cvtEntry, CUR.cvtSize ) ) + if ( BOUNDS( point, exc->zp0.n_points ) || + BOUNDSL( cvtEntry, exc->cvtSize ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); goto Fail; } @@ -6417,54 +6413,54 @@ distance = CUR_Func_read_cvt( cvtEntry ); - if ( CUR.GS.gep0 == 0 ) /* If in twilight zone */ + if ( exc->GS.gep0 == 0 ) /* If in twilight zone */ { #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING /* Only adjust if not in sph_compatibility_mode or ignore_x_mode. */ /* Determined via experimentation and may be incorrect... */ - if ( !SUBPIXEL_HINTING || - ( !CUR.ignore_x_mode || - !CUR.face->sph_compatibility_mode ) ) + if ( !SUBPIXEL_HINTING || + ( !exc->ignore_x_mode || + !exc->face->sph_compatibility_mode ) ) #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - CUR.zp0.org[point].x = TT_MulFix14( (FT_UInt32)distance, - CUR.GS.freeVector.x ); - CUR.zp0.org[point].y = TT_MulFix14( (FT_UInt32)distance, - CUR.GS.freeVector.y ), - CUR.zp0.cur[point] = CUR.zp0.org[point]; + exc->zp0.org[point].x = TT_MulFix14( (FT_UInt32)distance, + exc->GS.freeVector.x ); + exc->zp0.org[point].y = TT_MulFix14( (FT_UInt32)distance, + exc->GS.freeVector.y ), + exc->zp0.cur[point] = exc->zp0.org[point]; } #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - ( CUR.sph_tweak_flags & SPH_TWEAK_MIAP_HACK ) && - distance > 0 && - CUR.GS.freeVector.y != 0 ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + ( exc->sph_tweak_flags & SPH_TWEAK_MIAP_HACK ) && + distance > 0 && + exc->GS.freeVector.y != 0 ) distance = 0; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - org_dist = CUR_fast_project( &CUR.zp0.cur[point] ); + org_dist = CUR_fast_project( &exc->zp0.cur[point] ); - if ( ( CUR.opcode & 1 ) != 0 ) /* rounding and control cut-in flag */ + if ( ( exc->opcode & 1 ) != 0 ) /* rounding and control cut-in flag */ { if ( FT_ABS( distance - org_dist ) > control_value_cutin ) distance = org_dist; #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - CUR.GS.freeVector.x != 0 ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + exc->GS.freeVector.x != 0 ) distance = ROUND_None( distance, - CUR.tt_metrics.compensations[0] ); + exc->tt_metrics.compensations[0] ); else #endif distance = CUR_Func_round( distance, - CUR.tt_metrics.compensations[0] ); + exc->tt_metrics.compensations[0] ); } - CUR_Func_move( &CUR.zp0, point, distance - org_dist ); + CUR_Func_move( &exc->zp0, point, distance - org_dist ); Fail: - CUR.GS.rp0 = point; - CUR.GS.rp1 = point; + exc->GS.rp0 = point; + exc->GS.rp1 = point; } @@ -6481,23 +6477,23 @@ FT_F26Dot6 org_dist, distance, minimum_distance; - minimum_distance = CUR.GS.minimum_distance; + minimum_distance = exc->GS.minimum_distance; #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - CUR.GS.freeVector.x != 0 && - !( CUR.sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + exc->GS.freeVector.x != 0 && + !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) minimum_distance = 0; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ point = (FT_UShort)args[0]; - if ( BOUNDS( point, CUR.zp1.n_points ) || - BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) ) + if ( BOUNDS( point, exc->zp1.n_points ) || + BOUNDS( exc->GS.rp0, exc->zp0.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); goto Fail; } @@ -6506,33 +6502,33 @@ /* XXX: UNDOCUMENTED: twilight zone special case */ - if ( CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 ) + if ( exc->GS.gep0 == 0 || exc->GS.gep1 == 0 ) { - FT_Vector* vec1 = &CUR.zp1.org[point]; - FT_Vector* vec2 = &CUR.zp0.org[CUR.GS.rp0]; + FT_Vector* vec1 = &exc->zp1.org[point]; + FT_Vector* vec2 = &exc->zp0.org[exc->GS.rp0]; org_dist = CUR_Func_dualproj( vec1, vec2 ); } else { - FT_Vector* vec1 = &CUR.zp1.orus[point]; - FT_Vector* vec2 = &CUR.zp0.orus[CUR.GS.rp0]; + FT_Vector* vec1 = &exc->zp1.orus[point]; + FT_Vector* vec2 = &exc->zp0.orus[exc->GS.rp0]; - if ( CUR.metrics.x_scale == CUR.metrics.y_scale ) + if ( exc->metrics.x_scale == exc->metrics.y_scale ) { /* this should be faster */ org_dist = CUR_Func_dualproj( vec1, vec2 ); - org_dist = FT_MulFix( org_dist, CUR.metrics.x_scale ); + org_dist = FT_MulFix( org_dist, exc->metrics.x_scale ); } else { FT_Vector vec; - vec.x = FT_MulFix( vec1->x - vec2->x, CUR.metrics.x_scale ); - vec.y = FT_MulFix( vec1->y - vec2->y, CUR.metrics.y_scale ); + vec.x = FT_MulFix( vec1->x - vec2->x, exc->metrics.x_scale ); + vec.y = FT_MulFix( vec1->y - vec2->y, exc->metrics.y_scale ); org_dist = CUR_fast_dualproj( &vec ); } @@ -6540,40 +6536,40 @@ /* single width cut-in test */ - if ( FT_ABS( org_dist - CUR.GS.single_width_value ) < - CUR.GS.single_width_cutin ) + if ( FT_ABS( org_dist - exc->GS.single_width_value ) < + exc->GS.single_width_cutin ) { if ( org_dist >= 0 ) - org_dist = CUR.GS.single_width_value; + org_dist = exc->GS.single_width_value; else - org_dist = -CUR.GS.single_width_value; + org_dist = -exc->GS.single_width_value; } /* round flag */ - if ( ( CUR.opcode & 4 ) != 0 ) + if ( ( exc->opcode & 4 ) != 0 ) { #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - CUR.GS.freeVector.x != 0 ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + exc->GS.freeVector.x != 0 ) distance = ROUND_None( org_dist, - CUR.tt_metrics.compensations[CUR.opcode & 3] ); + exc->tt_metrics.compensations[exc->opcode & 3] ); else #endif distance = CUR_Func_round( org_dist, - CUR.tt_metrics.compensations[CUR.opcode & 3] ); + exc->tt_metrics.compensations[exc->opcode & 3] ); } else distance = ROUND_None( org_dist, - CUR.tt_metrics.compensations[CUR.opcode & 3] ); + exc->tt_metrics.compensations[exc->opcode & 3] ); /* minimum distance flag */ - if ( ( CUR.opcode & 8 ) != 0 ) + if ( ( exc->opcode & 8 ) != 0 ) { if ( org_dist >= 0 ) { @@ -6589,17 +6585,17 @@ /* now move the point */ - org_dist = CUR_Func_project( CUR.zp1.cur + point, - CUR.zp0.cur + CUR.GS.rp0 ); + org_dist = CUR_Func_project( exc->zp1.cur + point, + exc->zp0.cur + exc->GS.rp0 ); - CUR_Func_move( &CUR.zp1, point, distance - org_dist ); + CUR_Func_move( &exc->zp1, point, distance - org_dist ); Fail: - CUR.GS.rp1 = CUR.GS.rp0; - CUR.GS.rp2 = point; + exc->GS.rp1 = exc->GS.rp0; + exc->GS.rp2 = point; - if ( ( CUR.opcode & 16 ) != 0 ) - CUR.GS.rp0 = point; + if ( ( exc->opcode & 16 ) != 0 ) + exc->GS.rp0 = point; } @@ -6628,27 +6624,27 @@ #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - minimum_distance = CUR.GS.minimum_distance; - control_value_cutin = CUR.GS.control_value_cutin; + minimum_distance = exc->GS.minimum_distance; + control_value_cutin = exc->GS.control_value_cutin; point = (FT_UShort)args[0]; cvtEntry = (FT_ULong)( args[1] + 1 ); #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - CUR.GS.freeVector.x != 0 && - !( CUR.sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + exc->GS.freeVector.x != 0 && + !( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) ) control_value_cutin = minimum_distance = 0; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ /* XXX: UNDOCUMENTED! cvt[-1] = 0 always */ - if ( BOUNDS( point, CUR.zp1.n_points ) || - BOUNDSL( cvtEntry, CUR.cvtSize + 1 ) || - BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) ) + if ( BOUNDS( point, exc->zp1.n_points ) || + BOUNDSL( cvtEntry, exc->cvtSize + 1 ) || + BOUNDS( exc->GS.rp0, exc->zp0.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); goto Fail; } @@ -6659,46 +6655,46 @@ /* single width test */ - if ( FT_ABS( cvt_dist - CUR.GS.single_width_value ) < - CUR.GS.single_width_cutin ) + if ( FT_ABS( cvt_dist - exc->GS.single_width_value ) < + exc->GS.single_width_cutin ) { if ( cvt_dist >= 0 ) - cvt_dist = CUR.GS.single_width_value; + cvt_dist = exc->GS.single_width_value; else - cvt_dist = -CUR.GS.single_width_value; + cvt_dist = -exc->GS.single_width_value; } /* UNDOCUMENTED! The MS rasterizer does that with */ /* twilight points (confirmed by Greg Hitchcock) */ - if ( CUR.GS.gep1 == 0 ) + if ( exc->GS.gep1 == 0 ) { - CUR.zp1.org[point].x = CUR.zp0.org[CUR.GS.rp0].x + - TT_MulFix14( (FT_UInt32)cvt_dist, - CUR.GS.freeVector.x ); - CUR.zp1.org[point].y = CUR.zp0.org[CUR.GS.rp0].y + - TT_MulFix14( (FT_UInt32)cvt_dist, - CUR.GS.freeVector.y ); - CUR.zp1.cur[point] = CUR.zp1.org[point]; + exc->zp1.org[point].x = exc->zp0.org[exc->GS.rp0].x + + TT_MulFix14( (FT_UInt32)cvt_dist, + exc->GS.freeVector.x ); + exc->zp1.org[point].y = exc->zp0.org[exc->GS.rp0].y + + TT_MulFix14( (FT_UInt32)cvt_dist, + exc->GS.freeVector.y ); + exc->zp1.cur[point] = exc->zp1.org[point]; } - org_dist = CUR_Func_dualproj( &CUR.zp1.org[point], - &CUR.zp0.org[CUR.GS.rp0] ); - cur_dist = CUR_Func_project ( &CUR.zp1.cur[point], - &CUR.zp0.cur[CUR.GS.rp0] ); + org_dist = CUR_Func_dualproj( &exc->zp1.org[point], + &exc->zp0.org[exc->GS.rp0] ); + cur_dist = CUR_Func_project ( &exc->zp1.cur[point], + &exc->zp0.cur[exc->GS.rp0] ); /* auto-flip test */ - if ( CUR.GS.auto_flip ) + if ( exc->GS.auto_flip ) { if ( ( org_dist ^ cvt_dist ) < 0 ) cvt_dist = -cvt_dist; } #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - CUR.GS.freeVector.y != 0 && - ( CUR.sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + exc->GS.freeVector.y != 0 && + ( exc->sph_tweak_flags & SPH_TWEAK_TIMES_NEW_ROMAN_HACK ) ) { if ( cur_dist < -64 ) cvt_dist -= 16; @@ -6709,12 +6705,12 @@ /* control value cut-in and round */ - if ( ( CUR.opcode & 4 ) != 0 ) + if ( ( exc->opcode & 4 ) != 0 ) { /* XXX: UNDOCUMENTED! Only perform cut-in test when both points */ /* refer to the same zone. */ - if ( CUR.GS.gep0 == CUR.GS.gep1 ) + if ( exc->GS.gep0 == exc->GS.gep1 ) { /* XXX: According to Greg Hitchcock, the following wording is */ /* the right one: */ @@ -6734,16 +6730,16 @@ distance = CUR_Func_round( cvt_dist, - CUR.tt_metrics.compensations[CUR.opcode & 3] ); + exc->tt_metrics.compensations[exc->opcode & 3] ); } else { #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING /* do cvt cut-in always in MIRP for sph */ - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - CUR.GS.gep0 == CUR.GS.gep1 ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + exc->GS.gep0 == exc->GS.gep1 ) { if ( FT_ABS( cvt_dist - org_dist ) > control_value_cutin ) cvt_dist = org_dist; @@ -6752,12 +6748,12 @@ distance = ROUND_None( cvt_dist, - CUR.tt_metrics.compensations[CUR.opcode & 3] ); + exc->tt_metrics.compensations[exc->opcode & 3] ); } /* minimum distance test */ - if ( ( CUR.opcode & 8 ) != 0 ) + if ( ( exc->opcode & 8 ) != 0 ) { if ( org_dist >= 0 ) { @@ -6774,59 +6770,59 @@ #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING if ( SUBPIXEL_HINTING ) { - B1 = CUR.zp1.cur[point].y; + B1 = exc->zp1.cur[point].y; /* Round moves if necessary */ - if ( CUR.ignore_x_mode && - CUR.GS.freeVector.y != 0 && - ( CUR.sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) ) + if ( exc->ignore_x_mode && + exc->GS.freeVector.y != 0 && + ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) ) distance = FT_PIX_ROUND( B1 + distance - cur_dist ) - B1 + cur_dist; - if ( CUR.ignore_x_mode && - CUR.GS.freeVector.y != 0 && - ( CUR.opcode & 16 ) == 0 && - ( CUR.opcode & 8 ) == 0 && - ( CUR.sph_tweak_flags & SPH_TWEAK_COURIER_NEW_2_HACK ) ) + if ( exc->ignore_x_mode && + exc->GS.freeVector.y != 0 && + ( exc->opcode & 16 ) == 0 && + ( exc->opcode & 8 ) == 0 && + ( exc->sph_tweak_flags & SPH_TWEAK_COURIER_NEW_2_HACK ) ) distance += 64; } #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - CUR_Func_move( &CUR.zp1, point, distance - cur_dist ); + CUR_Func_move( &exc->zp1, point, distance - cur_dist ); #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING if ( SUBPIXEL_HINTING ) { - B2 = CUR.zp1.cur[point].y; + B2 = exc->zp1.cur[point].y; /* Reverse move if necessary */ - if ( CUR.ignore_x_mode ) + if ( exc->ignore_x_mode ) { - if ( CUR.face->sph_compatibility_mode && - CUR.GS.freeVector.y != 0 && - ( B1 & 63 ) == 0 && - ( B2 & 63 ) != 0 ) + if ( exc->face->sph_compatibility_mode && + exc->GS.freeVector.y != 0 && + ( B1 & 63 ) == 0 && + ( B2 & 63 ) != 0 ) reverse_move = TRUE; - if ( ( CUR.sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) && - CUR.GS.freeVector.y != 0 && - ( B2 & 63 ) != 0 && - ( B1 & 63 ) != 0 ) + if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) && + exc->GS.freeVector.y != 0 && + ( B2 & 63 ) != 0 && + ( B1 & 63 ) != 0 ) reverse_move = TRUE; } if ( reverse_move ) - CUR_Func_move( &CUR.zp1, point, -( distance - cur_dist ) ); + CUR_Func_move( &exc->zp1, point, -( distance - cur_dist ) ); } #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ Fail: - CUR.GS.rp1 = CUR.GS.rp0; + exc->GS.rp1 = exc->GS.rp0; - if ( ( CUR.opcode & 16 ) != 0 ) - CUR.GS.rp0 = point; + if ( ( exc->opcode & 16 ) != 0 ) + exc->GS.rp0 = point; - CUR.GS.rp2 = point; + exc->GS.rp2 = point; } @@ -6846,52 +6842,52 @@ #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - CUR.iup_called && - ( CUR.sph_tweak_flags & SPH_TWEAK_NO_ALIGNRP_AFTER_IUP ) ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + exc->iup_called && + ( exc->sph_tweak_flags & SPH_TWEAK_NO_ALIGNRP_AFTER_IUP ) ) { - CUR.error = FT_THROW( Invalid_Reference ); + exc->error = FT_THROW( Invalid_Reference ); goto Fail; } #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - if ( CUR.top < CUR.GS.loop || - BOUNDS( CUR.GS.rp0, CUR.zp0.n_points ) ) + if ( exc->top < exc->GS.loop || + BOUNDS( exc->GS.rp0, exc->zp0.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); goto Fail; } - while ( CUR.GS.loop > 0 ) + while ( exc->GS.loop > 0 ) { - CUR.args--; + exc->args--; - point = (FT_UShort)CUR.stack[CUR.args]; + point = (FT_UShort)exc->stack[exc->args]; - if ( BOUNDS( point, CUR.zp1.n_points ) ) + if ( BOUNDS( point, exc->zp1.n_points ) ) { - if ( CUR.pedantic_hinting ) + if ( exc->pedantic_hinting ) { - CUR.error = FT_THROW( Invalid_Reference ); + exc->error = FT_THROW( Invalid_Reference ); return; } } else { - distance = CUR_Func_project( CUR.zp1.cur + point, - CUR.zp0.cur + CUR.GS.rp0 ); + distance = CUR_Func_project( exc->zp1.cur + point, + exc->zp0.cur + exc->GS.rp0 ); - CUR_Func_move( &CUR.zp1, point, -distance ); + CUR_Func_move( &exc->zp1, point, -distance ); } - CUR.GS.loop--; + exc->GS.loop--; } Fail: - CUR.GS.loop = 1; - CUR.new_top = CUR.args; + exc->GS.loop = 1; + exc->new_top = exc->args; } @@ -6926,29 +6922,29 @@ b0 = (FT_UShort)args[3]; b1 = (FT_UShort)args[4]; - if ( BOUNDS( b0, CUR.zp0.n_points ) || - BOUNDS( b1, CUR.zp0.n_points ) || - BOUNDS( a0, CUR.zp1.n_points ) || - BOUNDS( a1, CUR.zp1.n_points ) || - BOUNDS( point, CUR.zp2.n_points ) ) + if ( BOUNDS( b0, exc->zp0.n_points ) || + BOUNDS( b1, exc->zp0.n_points ) || + BOUNDS( a0, exc->zp1.n_points ) || + BOUNDS( a1, exc->zp1.n_points ) || + BOUNDS( point, exc->zp2.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } /* Cramer's rule */ - dbx = CUR.zp0.cur[b1].x - CUR.zp0.cur[b0].x; - dby = CUR.zp0.cur[b1].y - CUR.zp0.cur[b0].y; + dbx = exc->zp0.cur[b1].x - exc->zp0.cur[b0].x; + dby = exc->zp0.cur[b1].y - exc->zp0.cur[b0].y; - dax = CUR.zp1.cur[a1].x - CUR.zp1.cur[a0].x; - day = CUR.zp1.cur[a1].y - CUR.zp1.cur[a0].y; + dax = exc->zp1.cur[a1].x - exc->zp1.cur[a0].x; + day = exc->zp1.cur[a1].y - exc->zp1.cur[a0].y; - dx = CUR.zp0.cur[b0].x - CUR.zp1.cur[a0].x; - dy = CUR.zp0.cur[b0].y - CUR.zp1.cur[a0].y; + dx = exc->zp0.cur[b0].x - exc->zp1.cur[a0].x; + dy = exc->zp0.cur[b0].y - exc->zp1.cur[a0].y; - CUR.zp2.tags[point] |= FT_CURVE_TAG_TOUCH_BOTH; + exc->zp2.tags[point] |= FT_CURVE_TAG_TOUCH_BOTH; discriminant = FT_MulDiv( dax, -dby, 0x40 ) + FT_MulDiv( day, dbx, 0x40 ); @@ -6970,21 +6966,21 @@ R.x = FT_MulDiv( val, dax, discriminant ); R.y = FT_MulDiv( val, day, discriminant ); - CUR.zp2.cur[point].x = CUR.zp1.cur[a0].x + R.x; - CUR.zp2.cur[point].y = CUR.zp1.cur[a0].y + R.y; + exc->zp2.cur[point].x = exc->zp1.cur[a0].x + R.x; + exc->zp2.cur[point].y = exc->zp1.cur[a0].y + R.y; } else { /* else, take the middle of the middles of A and B */ - CUR.zp2.cur[point].x = ( CUR.zp1.cur[a0].x + - CUR.zp1.cur[a1].x + - CUR.zp0.cur[b0].x + - CUR.zp0.cur[b1].x ) / 4; - CUR.zp2.cur[point].y = ( CUR.zp1.cur[a0].y + - CUR.zp1.cur[a1].y + - CUR.zp0.cur[b0].y + - CUR.zp0.cur[b1].y ) / 4; + exc->zp2.cur[point].x = ( exc->zp1.cur[a0].x + + exc->zp1.cur[a1].x + + exc->zp0.cur[b0].x + + exc->zp0.cur[b1].x ) / 4; + exc->zp2.cur[point].y = ( exc->zp1.cur[a0].y + + exc->zp1.cur[a1].y + + exc->zp0.cur[b0].y + + exc->zp0.cur[b1].y ) / 4; } } @@ -7005,19 +7001,19 @@ p1 = (FT_UShort)args[0]; p2 = (FT_UShort)args[1]; - if ( BOUNDS( p1, CUR.zp1.n_points ) || - BOUNDS( p2, CUR.zp0.n_points ) ) + if ( BOUNDS( p1, exc->zp1.n_points ) || + BOUNDS( p2, exc->zp0.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } - distance = CUR_Func_project( CUR.zp0.cur + p2, - CUR.zp1.cur + p1 ) / 2; + distance = CUR_Func_project( exc->zp0.cur + p2, + exc->zp1.cur + p1 ) / 2; - CUR_Func_move( &CUR.zp1, p1, distance ); - CUR_Func_move( &CUR.zp0, p2, -distance ); + CUR_Func_move( &exc->zp1, p1, distance ); + CUR_Func_move( &exc->zp0, p2, -distance ); } @@ -7041,40 +7037,40 @@ FT_UNUSED_ARG; - if ( CUR.top < CUR.GS.loop ) + if ( exc->top < exc->GS.loop ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); goto Fail; } /* * We need to deal in a special way with the twilight zone. - * Otherwise, by definition, the value of CUR.twilight.orus[n] is (0,0), + * Otherwise, by definition, the value of exc->twilight.orus[n] is (0,0), * for every n. */ - twilight = CUR.GS.gep0 == 0 || CUR.GS.gep1 == 0 || CUR.GS.gep2 == 0; + twilight = exc->GS.gep0 == 0 || exc->GS.gep1 == 0 || exc->GS.gep2 == 0; - if ( BOUNDS( CUR.GS.rp1, CUR.zp0.n_points ) ) + if ( BOUNDS( exc->GS.rp1, exc->zp0.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); goto Fail; } if ( twilight ) - orus_base = &CUR.zp0.org[CUR.GS.rp1]; + orus_base = &exc->zp0.org[exc->GS.rp1]; else - orus_base = &CUR.zp0.orus[CUR.GS.rp1]; + orus_base = &exc->zp0.orus[exc->GS.rp1]; - cur_base = &CUR.zp0.cur[CUR.GS.rp1]; + cur_base = &exc->zp0.cur[exc->GS.rp1]; /* XXX: There are some glyphs in some braindead but popular */ /* fonts out there (e.g. [aeu]grave in monotype.ttf) */ /* calling IP[] with bad values of rp[12]. */ /* Do something sane when this odd thing happens. */ - if ( BOUNDS( CUR.GS.rp1, CUR.zp0.n_points ) || - BOUNDS( CUR.GS.rp2, CUR.zp1.n_points ) ) + if ( BOUNDS( exc->GS.rp1, exc->zp0.n_points ) || + BOUNDS( exc->GS.rp2, exc->zp1.n_points ) ) { old_range = 0; cur_range = 0; @@ -7082,62 +7078,62 @@ else { if ( twilight ) - old_range = CUR_Func_dualproj( &CUR.zp1.org[CUR.GS.rp2], + old_range = CUR_Func_dualproj( &exc->zp1.org[exc->GS.rp2], orus_base ); - else if ( CUR.metrics.x_scale == CUR.metrics.y_scale ) - old_range = CUR_Func_dualproj( &CUR.zp1.orus[CUR.GS.rp2], + else if ( exc->metrics.x_scale == exc->metrics.y_scale ) + old_range = CUR_Func_dualproj( &exc->zp1.orus[exc->GS.rp2], orus_base ); else { FT_Vector vec; - vec.x = FT_MulFix( CUR.zp1.orus[CUR.GS.rp2].x - orus_base->x, - CUR.metrics.x_scale ); - vec.y = FT_MulFix( CUR.zp1.orus[CUR.GS.rp2].y - orus_base->y, - CUR.metrics.y_scale ); + vec.x = FT_MulFix( exc->zp1.orus[exc->GS.rp2].x - orus_base->x, + exc->metrics.x_scale ); + vec.y = FT_MulFix( exc->zp1.orus[exc->GS.rp2].y - orus_base->y, + exc->metrics.y_scale ); old_range = CUR_fast_dualproj( &vec ); } - cur_range = CUR_Func_project ( &CUR.zp1.cur[CUR.GS.rp2], cur_base ); + cur_range = CUR_Func_project ( &exc->zp1.cur[exc->GS.rp2], cur_base ); } - for ( ; CUR.GS.loop > 0; --CUR.GS.loop ) + for ( ; exc->GS.loop > 0; --exc->GS.loop ) { - FT_UInt point = (FT_UInt)CUR.stack[--CUR.args]; + FT_UInt point = (FT_UInt)exc->stack[--exc->args]; FT_F26Dot6 org_dist, cur_dist, new_dist; /* check point bounds */ - if ( BOUNDS( point, CUR.zp2.n_points ) ) + if ( BOUNDS( point, exc->zp2.n_points ) ) { - if ( CUR.pedantic_hinting ) + if ( exc->pedantic_hinting ) { - CUR.error = FT_THROW( Invalid_Reference ); + exc->error = FT_THROW( Invalid_Reference ); return; } continue; } if ( twilight ) - org_dist = CUR_Func_dualproj( &CUR.zp2.org[point], orus_base ); - else if ( CUR.metrics.x_scale == CUR.metrics.y_scale ) - org_dist = CUR_Func_dualproj( &CUR.zp2.orus[point], orus_base ); + org_dist = CUR_Func_dualproj( &exc->zp2.org[point], orus_base ); + else if ( exc->metrics.x_scale == exc->metrics.y_scale ) + org_dist = CUR_Func_dualproj( &exc->zp2.orus[point], orus_base ); else { FT_Vector vec; - vec.x = FT_MulFix( CUR.zp2.orus[point].x - orus_base->x, - CUR.metrics.x_scale ); - vec.y = FT_MulFix( CUR.zp2.orus[point].y - orus_base->y, - CUR.metrics.y_scale ); + vec.x = FT_MulFix( exc->zp2.orus[point].x - orus_base->x, + exc->metrics.x_scale ); + vec.y = FT_MulFix( exc->zp2.orus[point].y - orus_base->y, + exc->metrics.y_scale ); org_dist = CUR_fast_dualproj( &vec ); } - cur_dist = CUR_Func_project( &CUR.zp2.cur[point], cur_base ); + cur_dist = CUR_Func_project( &exc->zp2.cur[point], cur_base ); if ( org_dist ) { @@ -7167,12 +7163,12 @@ else new_dist = 0; - CUR_Func_move( &CUR.zp2, (FT_UShort)point, new_dist - cur_dist ); + CUR_Func_move( &exc->zp2, (FT_UShort)point, new_dist - cur_dist ); } Fail: - CUR.GS.loop = 1; - CUR.new_top = CUR.args; + exc->GS.loop = 1; + exc->new_top = exc->args; } @@ -7191,22 +7187,22 @@ point = (FT_UShort)args[0]; - if ( BOUNDS( point, CUR.zp0.n_points ) ) + if ( BOUNDS( point, exc->zp0.n_points ) ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); return; } mask = 0xFF; - if ( CUR.GS.freeVector.x != 0 ) + if ( exc->GS.freeVector.x != 0 ) mask &= ~FT_CURVE_TAG_TOUCH_X; - if ( CUR.GS.freeVector.y != 0 ) + if ( exc->GS.freeVector.y != 0 ) mask &= ~FT_CURVE_TAG_TOUCH_Y; - CUR.zp0.tags[point] &= mask; + exc->zp0.tags[point] &= mask; } @@ -7361,47 +7357,47 @@ /* ignore empty outlines */ - if ( CUR.pts.n_contours == 0 ) + if ( exc->pts.n_contours == 0 ) return; - if ( CUR.opcode & 1 ) + if ( exc->opcode & 1 ) { mask = FT_CURVE_TAG_TOUCH_X; - V.orgs = CUR.pts.org; - V.curs = CUR.pts.cur; - V.orus = CUR.pts.orus; + V.orgs = exc->pts.org; + V.curs = exc->pts.cur; + V.orus = exc->pts.orus; } else { mask = FT_CURVE_TAG_TOUCH_Y; - V.orgs = (FT_Vector*)( (FT_Pos*)CUR.pts.org + 1 ); - V.curs = (FT_Vector*)( (FT_Pos*)CUR.pts.cur + 1 ); - V.orus = (FT_Vector*)( (FT_Pos*)CUR.pts.orus + 1 ); + V.orgs = (FT_Vector*)( (FT_Pos*)exc->pts.org + 1 ); + V.curs = (FT_Vector*)( (FT_Pos*)exc->pts.cur + 1 ); + V.orus = (FT_Vector*)( (FT_Pos*)exc->pts.orus + 1 ); } - V.max_points = CUR.pts.n_points; + V.max_points = exc->pts.n_points; contour = 0; point = 0; #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode ) { - CUR.iup_called = TRUE; - if ( CUR.sph_tweak_flags & SPH_TWEAK_SKIP_IUP ) + exc->iup_called = TRUE; + if ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_IUP ) return; } #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ do { - end_point = CUR.pts.contours[contour] - CUR.pts.first_point; + end_point = exc->pts.contours[contour] - exc->pts.first_point; first_point = point; - if ( BOUNDS ( end_point, CUR.pts.n_points ) ) - end_point = CUR.pts.n_points - 1; + if ( BOUNDS( end_point, exc->pts.n_points ) ) + end_point = exc->pts.n_points - 1; - while ( point <= end_point && ( CUR.pts.tags[point] & mask ) == 0 ) + while ( point <= end_point && ( exc->pts.tags[point] & mask ) == 0 ) point++; if ( point <= end_point ) @@ -7413,7 +7409,7 @@ while ( point <= end_point ) { - if ( ( CUR.pts.tags[point] & mask ) != 0 ) + if ( ( exc->pts.tags[point] & mask ) != 0 ) { _iup_worker_interpolate( &V, cur_touched + 1, @@ -7445,7 +7441,7 @@ } } contour++; - } while ( contour < CUR.pts.n_contours ); + } while ( contour < exc->pts.n_contours ); } @@ -7466,30 +7462,30 @@ FT_UShort B1, B2; - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - CUR.iup_called && - ( CUR.sph_tweak_flags & SPH_TWEAK_NO_DELTAP_AFTER_IUP ) ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + exc->iup_called && + ( exc->sph_tweak_flags & SPH_TWEAK_NO_DELTAP_AFTER_IUP ) ) goto Fail; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING /* Delta hinting is covered by US Patent 5159668. */ - if ( CUR.face->unpatented_hinting ) + if ( exc->face->unpatented_hinting ) { FT_Long n = args[0] * 2; - if ( CUR.args < n ) + if ( exc->args < n ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Too_Few_Arguments ); - n = CUR.args; + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Too_Few_Arguments ); + n = exc->args; } - CUR.args -= n; - CUR.new_top = CUR.args; + exc->args -= n; + exc->new_top = exc->args; return; } #endif @@ -7500,18 +7496,18 @@ for ( k = 1; k <= nump; k++ ) { - if ( CUR.args < 2 ) + if ( exc->args < 2 ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Too_Few_Arguments ); - CUR.args = 0; + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Too_Few_Arguments ); + exc->args = 0; goto Fail; } - CUR.args -= 2; + exc->args -= 2; - A = (FT_UShort)CUR.stack[CUR.args + 1]; - B = CUR.stack[CUR.args]; + A = (FT_UShort)exc->stack[exc->args + 1]; + B = exc->stack[exc->args]; /* XXX: Because some popular fonts contain some invalid DeltaP */ /* instructions, we simply ignore them when the stacked */ @@ -7519,11 +7515,11 @@ /* error. As a delta instruction doesn't change a glyph */ /* in great ways, this shouldn't be a problem. */ - if ( !BOUNDS( A, CUR.zp0.n_points ) ) + if ( !BOUNDS( A, exc->zp0.n_points ) ) { C = ( (FT_ULong)B & 0xF0 ) >> 4; - switch ( CUR.opcode ) + switch ( exc->opcode ) { case 0x5D: break; @@ -7537,14 +7533,14 @@ break; } - C += CUR.GS.delta_base; + C += exc->GS.delta_base; if ( P == C ) { B = ( (FT_ULong)B & 0xF ) - 8; if ( B >= 0 ) B++; - B *= 1L << ( 6 - CUR.GS.delta_shift ); + B *= 1L << ( 6 - exc->GS.delta_shift ); #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING @@ -7558,65 +7554,65 @@ * - glyph is composite and freedom vector is not in subpixel * direction. */ - if ( !CUR.ignore_x_mode || - ( CUR.sph_tweak_flags & SPH_TWEAK_ALWAYS_DO_DELTAP ) || - ( CUR.is_composite && CUR.GS.freeVector.y != 0 ) ) - CUR_Func_move( &CUR.zp0, A, B ); + if ( !exc->ignore_x_mode || + ( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_DO_DELTAP ) || + ( exc->is_composite && exc->GS.freeVector.y != 0 ) ) + CUR_Func_move( &exc->zp0, A, B ); /* Otherwise, apply subpixel hinting and compatibility mode */ /* rules, always skipping deltas in subpixel direction. */ - else if ( CUR.ignore_x_mode && CUR.GS.freeVector.y != 0 ) + else if ( exc->ignore_x_mode && exc->GS.freeVector.y != 0 ) { /* save the y value of the point now; compare after move */ - B1 = (FT_UShort)CUR.zp0.cur[A].y; + B1 = (FT_UShort)exc->zp0.cur[A].y; /* Standard subpixel hinting: Allow y move for y-touched */ /* points. This messes up DejaVu ... */ - if ( !CUR.face->sph_compatibility_mode && - ( CUR.zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) ) - CUR_Func_move( &CUR.zp0, A, B ); + if ( !exc->face->sph_compatibility_mode && + ( exc->zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) ) + CUR_Func_move( &exc->zp0, A, B ); /* compatibility mode */ - else if ( CUR.face->sph_compatibility_mode && - !( CUR.sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) ) + else if ( exc->face->sph_compatibility_mode && + !( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_SKIP_DELTAP ) ) { - if ( CUR.sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) + if ( exc->sph_tweak_flags & SPH_TWEAK_ROUND_NONPIXEL_Y_MOVES ) B = FT_PIX_ROUND( B1 + B ) - B1; /* Allow delta move if using sph_compatibility_mode, */ /* IUP has not been called, and point is touched on Y. */ - if ( !CUR.iup_called && - ( CUR.zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) ) - CUR_Func_move( &CUR.zp0, A, B ); + if ( !exc->iup_called && + ( exc->zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) ) + CUR_Func_move( &exc->zp0, A, B ); } - B2 = (FT_UShort)CUR.zp0.cur[A].y; + B2 = (FT_UShort)exc->zp0.cur[A].y; /* Reverse this move if it results in a disallowed move */ - if ( CUR.GS.freeVector.y != 0 && - ( ( CUR.face->sph_compatibility_mode && + if ( exc->GS.freeVector.y != 0 && + ( ( exc->face->sph_compatibility_mode && ( B1 & 63 ) == 0 && ( B2 & 63 ) != 0 ) || - ( ( CUR.sph_tweak_flags & + ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP ) && ( B1 & 63 ) != 0 && ( B2 & 63 ) != 0 ) ) ) - CUR_Func_move( &CUR.zp0, A, -B ); + CUR_Func_move( &exc->zp0, A, -B ); } } else #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - CUR_Func_move( &CUR.zp0, A, B ); + CUR_Func_move( &exc->zp0, A, B ); } } else - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Invalid_Reference ); + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); } Fail: - CUR.new_top = CUR.args; + exc->new_top = exc->args; } @@ -7636,20 +7632,20 @@ #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING /* Delta hinting is covered by US Patent 5159668. */ - if ( CUR.face->unpatented_hinting ) + if ( exc->face->unpatented_hinting ) { FT_Long n = args[0] * 2; - if ( CUR.args < n ) + if ( exc->args < n ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Too_Few_Arguments ); - n = CUR.args; + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Too_Few_Arguments ); + n = exc->args; } - CUR.args -= n; - CUR.new_top = CUR.args; + exc->args -= n; + exc->new_top = exc->args; return; } #endif @@ -7659,24 +7655,24 @@ for ( k = 1; k <= nump; k++ ) { - if ( CUR.args < 2 ) + if ( exc->args < 2 ) { - if ( CUR.pedantic_hinting ) - CUR.error = FT_THROW( Too_Few_Arguments ); - CUR.args = 0; + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Too_Few_Arguments ); + exc->args = 0; goto Fail; } - CUR.args -= 2; + exc->args -= 2; - A = (FT_ULong)CUR.stack[CUR.args + 1]; - B = CUR.stack[CUR.args]; + A = (FT_ULong)exc->stack[exc->args + 1]; + B = exc->stack[exc->args]; - if ( BOUNDSL( A, CUR.cvtSize ) ) + if ( BOUNDSL( A, exc->cvtSize ) ) { - if ( CUR.pedantic_hinting ) + if ( exc->pedantic_hinting ) { - CUR.error = FT_THROW( Invalid_Reference ); + exc->error = FT_THROW( Invalid_Reference ); return; } } @@ -7684,7 +7680,7 @@ { C = ( (FT_ULong)B & 0xF0 ) >> 4; - switch ( CUR.opcode ) + switch ( exc->opcode ) { case 0x73: break; @@ -7698,14 +7694,14 @@ break; } - C += CUR.GS.delta_base; + C += exc->GS.delta_base; if ( P == C ) { B = ( (FT_ULong)B & 0xF ) - 8; if ( B >= 0 ) B++; - B *= 1L << ( 6 - CUR.GS.delta_shift ); + B *= 1L << ( 6 - exc->GS.delta_shift ); CUR_Func_move_cvt( A, B ); } @@ -7713,7 +7709,7 @@ } Fail: - CUR.new_top = CUR.args; + exc->new_top = exc->args; } @@ -7746,11 +7742,11 @@ /* */ if ( SUBPIXEL_HINTING && ( args[0] & 1 ) != 0 && - CUR.ignore_x_mode ) + exc->ignore_x_mode ) { - K = CUR.rasterizer_version; + K = exc->rasterizer_version; FT_TRACE7(( "Setting rasterizer version %d\n", - CUR.rasterizer_version )); + exc->rasterizer_version )); } else #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ @@ -7762,7 +7758,7 @@ /* Selector Bit: 1 */ /* Return Bit(s): 8 */ /* */ - if ( ( args[0] & 2 ) != 0 && CUR.tt_metrics.rotated ) + if ( ( args[0] & 2 ) != 0 && exc->tt_metrics.rotated ) K |= 0x80; /********************************/ @@ -7770,7 +7766,7 @@ /* Selector Bit: 2 */ /* Return Bit(s): 9 */ /* */ - if ( ( args[0] & 4 ) != 0 && CUR.tt_metrics.stretched ) + if ( ( args[0] & 4 ) != 0 && exc->tt_metrics.stretched ) K |= 1 << 8; /********************************/ @@ -7778,24 +7774,24 @@ /* Selector Bit: 5 */ /* Return Bit(s): 12 */ /* */ - if ( ( args[0] & 32 ) != 0 && CUR.grayscale ) + if ( ( args[0] & 32 ) != 0 && exc->grayscale ) K |= 1 << 12; #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - CUR.ignore_x_mode && - CUR.rasterizer_version >= TT_INTERPRETER_VERSION_35 ) + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + exc->rasterizer_version >= TT_INTERPRETER_VERSION_35 ) { - if ( CUR.rasterizer_version >= 37 ) + if ( exc->rasterizer_version >= 37 ) { /********************************/ /* HINTING FOR SUBPIXEL */ /* Selector Bit: 6 */ /* Return Bit(s): 13 */ /* */ - if ( ( args[0] & 64 ) != 0 && CUR.subpixel ) + if ( ( args[0] & 64 ) != 0 && exc->subpixel ) K |= 1 << 13; /********************************/ @@ -7804,7 +7800,7 @@ /* Return Bit(s): 14 */ /* */ /* Functionality still needs to be added */ - if ( ( args[0] & 128 ) != 0 && CUR.compatible_widths ) + if ( ( args[0] & 128 ) != 0 && exc->compatible_widths ) K |= 1 << 14; /********************************/ @@ -7813,7 +7809,7 @@ /* Return Bit(s): 15 */ /* */ /* Functionality still needs to be added */ - if ( ( args[0] & 256 ) != 0 && CUR.symmetrical_smoothing ) + if ( ( args[0] & 256 ) != 0 && exc->symmetrical_smoothing ) K |= 1 << 15; /********************************/ @@ -7822,10 +7818,10 @@ /* Return Bit(s): 16 */ /* */ /* Functionality still needs to be added */ - if ( ( args[0] & 512 ) != 0 && CUR.bgr ) + if ( ( args[0] & 512 ) != 0 && exc->bgr ) K |= 1 << 16; - if ( CUR.rasterizer_version >= 38 ) + if ( exc->rasterizer_version >= 38 ) { /********************************/ /* SUBPIXEL POSITIONED? */ @@ -7833,7 +7829,7 @@ /* Return Bit(s): 17 */ /* */ /* Functionality still needs to be added */ - if ( ( args[0] & 1024 ) != 0 && CUR.subpixel_positioned ) + if ( ( args[0] & 1024 ) != 0 && exc->subpixel_positioned ) K |= 1 << 17; } } @@ -7848,40 +7844,40 @@ static void Ins_UNKNOWN( INS_ARG ) { - TT_DefRecord* def = CUR.IDefs; - TT_DefRecord* limit = def + CUR.numIDefs; + TT_DefRecord* def = exc->IDefs; + TT_DefRecord* limit = def + exc->numIDefs; FT_UNUSED_ARG; for ( ; def < limit; def++ ) { - if ( (FT_Byte)def->opc == CUR.opcode && def->active ) + if ( (FT_Byte)def->opc == exc->opcode && def->active ) { TT_CallRec* call; - if ( CUR.callTop >= CUR.callSize ) + if ( exc->callTop >= exc->callSize ) { - CUR.error = FT_THROW( Stack_Overflow ); + exc->error = FT_THROW( Stack_Overflow ); return; } - call = CUR.callStack + CUR.callTop++; + call = exc->callStack + exc->callTop++; - call->Caller_Range = CUR.curRange; - call->Caller_IP = CUR.IP + 1; + call->Caller_Range = exc->curRange; + call->Caller_IP = exc->IP + 1; call->Cur_Count = 1; call->Def = def; INS_Goto_CodeRange( def->range, def->start ); - CUR.step_ins = FALSE; + exc->step_ins = FALSE; return; } } - CUR.error = FT_THROW( Invalid_Opcode ); + exc->error = FT_THROW( Invalid_Opcode ); } @@ -8233,26 +8229,26 @@ #endif #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - CUR.iup_called = FALSE; + exc->iup_called = FALSE; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ /* set PPEM and CVT functions */ - CUR.tt_metrics.ratio = 0; - if ( CUR.metrics.x_ppem != CUR.metrics.y_ppem ) + exc->tt_metrics.ratio = 0; + if ( exc->metrics.x_ppem != exc->metrics.y_ppem ) { /* non-square pixels, use the stretched routines */ - CUR.func_cur_ppem = Current_Ppem_Stretched; - CUR.func_read_cvt = Read_CVT_Stretched; - CUR.func_write_cvt = Write_CVT_Stretched; - CUR.func_move_cvt = Move_CVT_Stretched; + exc->func_cur_ppem = Current_Ppem_Stretched; + exc->func_read_cvt = Read_CVT_Stretched; + exc->func_write_cvt = Write_CVT_Stretched; + exc->func_move_cvt = Move_CVT_Stretched; } else { /* square pixels, use normal routines */ - CUR.func_cur_ppem = Current_Ppem; - CUR.func_read_cvt = Read_CVT; - CUR.func_write_cvt = Write_CVT; - CUR.func_move_cvt = Move_CVT; + exc->func_cur_ppem = Current_Ppem; + exc->func_read_cvt = Read_CVT; + exc->func_write_cvt = Write_CVT; + exc->func_move_cvt = Move_CVT; } COMPUTE_Funcs(); @@ -8260,55 +8256,55 @@ do { - CUR.opcode = CUR.code[CUR.IP]; + exc->opcode = exc->code[exc->IP]; FT_TRACE7(( " " )); - FT_TRACE7(( opcode_name[CUR.opcode] )); + FT_TRACE7(( opcode_name[exc->opcode] )); FT_TRACE7(( "\n" )); - if ( ( CUR.length = opcode_length[CUR.opcode] ) < 0 ) + if ( ( exc->length = opcode_length[exc->opcode] ) < 0 ) { - if ( CUR.IP + 1 >= CUR.codeSize ) + if ( exc->IP + 1 >= exc->codeSize ) goto LErrorCodeOverflow_; - CUR.length = 2 - CUR.length * CUR.code[CUR.IP + 1]; + exc->length = 2 - exc->length * exc->code[exc->IP + 1]; } - if ( CUR.IP + CUR.length > CUR.codeSize ) + if ( exc->IP + exc->length > exc->codeSize ) goto LErrorCodeOverflow_; /* First, let's check for empty stack and overflow */ - CUR.args = CUR.top - ( Pop_Push_Count[CUR.opcode] >> 4 ); + exc->args = exc->top - ( Pop_Push_Count[exc->opcode] >> 4 ); /* `args' is the top of the stack once arguments have been popped. */ /* One can also interpret it as the index of the last argument. */ - if ( CUR.args < 0 ) + if ( exc->args < 0 ) { - if ( CUR.pedantic_hinting ) + if ( exc->pedantic_hinting ) { - CUR.error = FT_THROW( Too_Few_Arguments ); + exc->error = FT_THROW( Too_Few_Arguments ); goto LErrorLabel_; } /* push zeroes onto the stack */ - for ( i = 0; i < Pop_Push_Count[CUR.opcode] >> 4; i++ ) - CUR.stack[i] = 0; - CUR.args = 0; + for ( i = 0; i < Pop_Push_Count[exc->opcode] >> 4; i++ ) + exc->stack[i] = 0; + exc->args = 0; } - CUR.new_top = CUR.args + ( Pop_Push_Count[CUR.opcode] & 15 ); + exc->new_top = exc->args + ( Pop_Push_Count[exc->opcode] & 15 ); /* `new_top' is the new top of the stack, after the instruction's */ /* execution. `top' will be set to `new_top' after the `switch' */ /* statement. */ - if ( CUR.new_top > CUR.stackSize ) + if ( exc->new_top > exc->stackSize ) { - CUR.error = FT_THROW( Stack_Overflow ); + exc->error = FT_THROW( Stack_Overflow ); goto LErrorLabel_; } - CUR.step_ins = TRUE; - CUR.error = FT_Err_Ok; + exc->step_ins = TRUE; + exc->error = FT_Err_Ok; #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING @@ -8316,8 +8312,8 @@ { for ( i = 0; i < opcode_patterns; i++ ) { - if ( opcode_pointer[i] < opcode_size[i] && - CUR.opcode == opcode_pattern[i][opcode_pointer[i]] ) + if ( opcode_pointer[i] < opcode_size[i] && + exc->opcode == opcode_pattern[i][opcode_pointer[i]] ) { opcode_pointer[i] += 1; @@ -8325,8 +8321,8 @@ { FT_TRACE7(( "sph: opcode ptrn: %d, %s %s\n", i, - CUR.face->root.family_name, - CUR.face->root.style_name )); + exc->face->root.family_name, + exc->face->root.style_name )); switch ( i ) { @@ -8346,8 +8342,8 @@ #ifdef TT_CONFIG_OPTION_INTERPRETER_SWITCH { - FT_Long* args = CUR.stack + CUR.args; - FT_Byte opcode = CUR.opcode; + FT_Long* args = exc->stack + exc->args; + FT_Byte opcode = exc->opcode; #undef ARRAY_BOUND_ERROR @@ -8371,11 +8367,11 @@ if ( opcode < 4 ) { - CUR.GS.projVector.x = AA; - CUR.GS.projVector.y = BB; + exc->GS.projVector.x = AA; + exc->GS.projVector.y = BB; - CUR.GS.dualVector.x = AA; - CUR.GS.dualVector.y = BB; + exc->GS.dualVector.x = AA; + exc->GS.dualVector.y = BB; } else { @@ -8384,8 +8380,8 @@ if ( ( opcode & 2 ) == 0 ) { - CUR.GS.freeVector.x = AA; - CUR.GS.freeVector.y = BB; + exc->GS.freeVector.x = AA; + exc->GS.freeVector.y = BB; } else { @@ -8614,7 +8610,7 @@ break; Set_Invalid_Ref: - CUR.error = FT_THROW( Invalid_Reference ); + exc->error = FT_THROW( Invalid_Reference ); break; case 0x43: /* RS */ @@ -8900,38 +8896,38 @@ #else - Instruct_Dispatch[CUR.opcode]( EXEC_ARG_ &CUR.stack[CUR.args] ); + Instruct_Dispatch[exc->opcode]( EXEC_ARG_ &exc->stack[exc->args] ); #endif /* TT_CONFIG_OPTION_INTERPRETER_SWITCH */ - if ( CUR.error ) + if ( exc->error ) { - switch ( CUR.error ) + switch ( exc->error ) { /* looking for redefined instructions */ case FT_ERR( Invalid_Opcode ): { - TT_DefRecord* def = CUR.IDefs; - TT_DefRecord* limit = def + CUR.numIDefs; + TT_DefRecord* def = exc->IDefs; + TT_DefRecord* limit = def + exc->numIDefs; for ( ; def < limit; def++ ) { - if ( def->active && CUR.opcode == (FT_Byte)def->opc ) + if ( def->active && exc->opcode == (FT_Byte)def->opc ) { TT_CallRec* callrec; - if ( CUR.callTop >= CUR.callSize ) + if ( exc->callTop >= exc->callSize ) { - CUR.error = FT_THROW( Invalid_Reference ); + exc->error = FT_THROW( Invalid_Reference ); goto LErrorLabel_; } - callrec = &CUR.callStack[CUR.callTop]; + callrec = &exc->callStack[exc->callTop]; - callrec->Caller_Range = CUR.curRange; - callrec->Caller_IP = CUR.IP + 1; + callrec->Caller_Range = exc->curRange; + callrec->Caller_IP = exc->IP + 1; callrec->Cur_Count = 1; callrec->Def = def; @@ -8943,7 +8939,7 @@ } } - CUR.error = FT_THROW( Invalid_Opcode ); + exc->error = FT_THROW( Invalid_Opcode ); goto LErrorLabel_; #if 0 @@ -8961,10 +8957,10 @@ } } - CUR.top = CUR.new_top; + exc->top = exc->new_top; - if ( CUR.step_ins ) - CUR.IP += CUR.length; + if ( exc->step_ins ) + exc->IP += exc->length; /* increment instruction counter and check if we didn't */ /* run this program for too long (e.g. infinite loops). */ @@ -8972,17 +8968,17 @@ return FT_THROW( Execution_Too_Long ); LSuiteLabel_: - if ( CUR.IP >= CUR.codeSize ) + if ( exc->IP >= exc->codeSize ) { - if ( CUR.callTop > 0 ) + if ( exc->callTop > 0 ) { - CUR.error = FT_THROW( Code_Overflow ); + exc->error = FT_THROW( Code_Overflow ); goto LErrorLabel_; } else goto LNo_Error_; } - } while ( !CUR.instruction_trap ); + } while ( !exc->instruction_trap ); LNo_Error_: @@ -8993,7 +8989,7 @@ return FT_Err_Ok; LErrorCodeOverflow_: - CUR.error = FT_THROW( Code_Overflow ); + exc->error = FT_THROW( Code_Overflow ); LErrorLabel_: @@ -9004,16 +9000,16 @@ /* If any errors have occurred, function tables may be broken. */ /* Force a re-execution of `prep' and `fpgm' tables if no */ /* bytecode debugger is run. */ - if ( CUR.error && - !CUR.instruction_trap && - CUR.curRange == tt_coderange_glyph ) + if ( exc->error && + !exc->instruction_trap && + exc->curRange == tt_coderange_glyph ) { - FT_TRACE1(( " The interpreter returned error 0x%x\n", CUR.error )); + FT_TRACE1(( " The interpreter returned error 0x%x\n", exc->error )); exc->size->bytecode_ready = -1; exc->size->cvt_ready = -1; } - return CUR.error; + return exc->error; } -- 2.2.2 From 5a752f332c568d64b1056636ae3e4ff527f7b17a Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sat, 10 Jan 2015 20:08:35 +0100 Subject: [PATCH] [truetype] Remove code for static TrueType interpreter. This is a follow-up patch. * src/truetype/ttinterp.c, src/truetype/ttinterp.h [TT_CONFIG_OPTION_STATIC_INTERPRETER, TT_CONFIG_OPTION_STATIC_RASTER]: Remove macros and related code. --- ChangeLog | 10 +++++++ src/truetype/ttinterp.c | 69 ------------------------------------------------- src/truetype/ttinterp.h | 11 -------- 3 files changed, 10 insertions(+), 80 deletions(-) diff --git a/ChangeLog b/ChangeLog index 12fe053..ca832a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2015-01-10 Werner Lemberg + [truetype] Remove code for static TrueType interpreter. + + This is a follow-up patch. + + * src/truetype/ttinterp.c, src/truetype/ttinterp.h + [TT_CONFIG_OPTION_STATIC_INTERPRETER, + TT_CONFIG_OPTION_STATIC_RASTER]: Remove macros and related code. + +2015-01-10 Werner Lemberg + * src/truetype/ttinterp.c (CUR): Remove by replacing with expansion. This starts a series of patches that simplifies the code of the diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index ffef8c0..d9bda32 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -55,63 +55,11 @@ /*************************************************************************/ /* */ - /* There are two kinds of implementations: */ - /* */ - /* a. static implementation */ - /* */ - /* The current execution context is a static variable, which fields */ - /* are accessed directly by the interpreter during execution. The */ - /* context is named `cur'. */ - /* */ - /* This version is non-reentrant, of course. */ - /* */ - /* b. indirect implementation */ - /* */ - /* The current execution context is passed to _each_ function as its */ - /* first argument, and each field is thus accessed indirectly. */ - /* */ - /* This version is fully re-entrant. */ - /* */ - /* The idea is that an indirect implementation may be slower to execute */ - /* on low-end processors that are used in some systems (like 386s or */ - /* even 486s). */ - /* */ - /* As a consequence, the indirect implementation is now the default, as */ - /* its performance costs can be considered negligible in our context. */ - /* Note, however, that we kept the same source with macros because: */ - /* */ - /* - The code is kept very close in design to the Pascal code used for */ - /* development. */ - /* */ - /* - It's much more readable that way! */ - /* */ - /* - It's still open to experimentation and tuning. */ - /* */ - /*************************************************************************/ - - -#ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */ - - /*************************************************************************/ - /* */ /* This macro is used whenever `exec' is unused in a function, to avoid */ /* stupid warnings from pedantic compilers. */ /* */ #define FT_UNUSED_EXEC FT_UNUSED( exc ) -#else /* static implementation */ - -#define FT_UNUSED_EXEC int __dummy = __dummy - - static - TT_ExecContextRec cur; /* static exec. context variable */ - - /* apparently, we have a _lot_ of direct indexing when accessing */ - /* the static `cur', which makes the code bigger (due to all the */ - /* four bytes addresses). */ - -#endif /* TT_CONFIG_OPTION_STATIC_INTERPRETER */ - /*************************************************************************/ /* */ @@ -8221,13 +8169,6 @@ #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ -#ifdef TT_CONFIG_OPTION_STATIC_RASTER - if ( !exc ) - return FT_THROW( Invalid_Argument ); - - cur = *exc; -#endif - #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING exc->iup_called = FALSE; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ @@ -8981,22 +8922,12 @@ } while ( !exc->instruction_trap ); LNo_Error_: - -#ifdef TT_CONFIG_OPTION_STATIC_RASTER - *exc = cur; -#endif - return FT_Err_Ok; LErrorCodeOverflow_: exc->error = FT_THROW( Code_Overflow ); LErrorLabel_: - -#ifdef TT_CONFIG_OPTION_STATIC_RASTER - *exc = cur; -#endif - /* If any errors have occurred, function tables may be broken. */ /* Force a re-execution of `prep' and `fpgm' tables if no */ /* bytecode debugger is run. */ diff --git a/src/truetype/ttinterp.h b/src/truetype/ttinterp.h index 333decc..c282471 100644 --- a/src/truetype/ttinterp.h +++ b/src/truetype/ttinterp.h @@ -26,22 +26,11 @@ FT_BEGIN_HEADER -#ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */ - #define EXEC_OP_ TT_ExecContext exc, #define EXEC_OP TT_ExecContext exc #define EXEC_ARG_ exc, #define EXEC_ARG exc -#else /* static implementation */ - -#define EXEC_OP_ /* void */ -#define EXEC_OP /* void */ -#define EXEC_ARG_ /* void */ -#define EXEC_ARG /* void */ - -#endif /* TT_CONFIG_OPTION_STATIC_INTERPRETER */ - /*************************************************************************/ /* */ -- 2.2.2 From fae0c81f6917a0f782129f085fadfe151469ba79 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sat, 10 Jan 2015 20:23:10 +0100 Subject: [PATCH] [truetype] More macro expansions. * src/truetype/ttinterp.c (EXEC_OP_, EXEC_OP): Remove by replacing with expansion. --- ChangeLog | 7 ++ src/truetype/ttinterp.c | 190 ++++++++++++++++++++++++++++-------------------- src/truetype/ttinterp.h | 29 ++++---- 3 files changed, 134 insertions(+), 92 deletions(-) diff --git a/ChangeLog b/ChangeLog index ca832a2..60bb0b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2015-01-10 Werner Lemberg + [truetype] More macro expansions. + + * src/truetype/ttinterp.c (EXEC_OP_, EXEC_OP): Remove by replacing + with expansion. + +2015-01-10 Werner Lemberg + [truetype] Remove code for static TrueType interpreter. This is a follow-up patch. diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index d9bda32..e153a58 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -65,7 +65,8 @@ /* */ /* The instruction argument stack. */ /* */ -#define INS_ARG EXEC_OP_ FT_Long* args /* see ttobjs.h for EXEC_OP_ */ +#define INS_ARG TT_ExecContext exc, \ + FT_Long* args /*************************************************************************/ @@ -1581,7 +1582,7 @@ /* The aspect ratio in 16.16 format, always <= 1.0 . */ /* */ static FT_Long - Current_Ratio( EXEC_OP ) + Current_Ratio( TT_ExecContext exc ) { if ( !exc->tt_metrics.ratio ) { @@ -1620,14 +1621,14 @@ FT_CALLBACK_DEF( FT_Long ) - Current_Ppem( EXEC_OP ) + Current_Ppem( TT_ExecContext exc ) { return exc->tt_metrics.ppem; } FT_CALLBACK_DEF( FT_Long ) - Current_Ppem_Stretched( EXEC_OP ) + Current_Ppem_Stretched( TT_ExecContext exc ) { return FT_MulFix( exc->tt_metrics.ppem, CURRENT_Ratio() ); } @@ -1641,46 +1642,52 @@ FT_CALLBACK_DEF( FT_F26Dot6 ) - Read_CVT( EXEC_OP_ FT_ULong idx ) + Read_CVT( TT_ExecContext exc, + FT_ULong idx ) { return exc->cvt[idx]; } FT_CALLBACK_DEF( FT_F26Dot6 ) - Read_CVT_Stretched( EXEC_OP_ FT_ULong idx ) + Read_CVT_Stretched( TT_ExecContext exc, + FT_ULong idx ) { return FT_MulFix( exc->cvt[idx], CURRENT_Ratio() ); } FT_CALLBACK_DEF( void ) - Write_CVT( EXEC_OP_ FT_ULong idx, - FT_F26Dot6 value ) + Write_CVT( TT_ExecContext exc, + FT_ULong idx, + FT_F26Dot6 value ) { exc->cvt[idx] = value; } FT_CALLBACK_DEF( void ) - Write_CVT_Stretched( EXEC_OP_ FT_ULong idx, - FT_F26Dot6 value ) + Write_CVT_Stretched( TT_ExecContext exc, + FT_ULong idx, + FT_F26Dot6 value ) { exc->cvt[idx] = FT_DivFix( value, CURRENT_Ratio() ); } FT_CALLBACK_DEF( void ) - Move_CVT( EXEC_OP_ FT_ULong idx, - FT_F26Dot6 value ) + Move_CVT( TT_ExecContext exc, + FT_ULong idx, + FT_F26Dot6 value ) { exc->cvt[idx] += value; } FT_CALLBACK_DEF( void ) - Move_CVT_Stretched( EXEC_OP_ FT_ULong idx, - FT_F26Dot6 value ) + Move_CVT_Stretched( TT_ExecContext exc, + FT_ULong idx, + FT_F26Dot6 value ) { exc->cvt[idx] += FT_DivFix( value, CURRENT_Ratio() ); } @@ -1702,7 +1709,7 @@ /* This one could become a macro. */ /* */ static FT_Short - GetShortIns( EXEC_OP ) + GetShortIns( TT_ExecContext exc ) { /* Reading a byte stream so there is no endianess (DaveP) */ exc->IP += 2; @@ -1728,8 +1735,9 @@ /* SUCCESS or FAILURE. */ /* */ static FT_Bool - Ins_Goto_CodeRange( EXEC_OP_ FT_Int aRange, - FT_ULong aIP ) + Ins_Goto_CodeRange( TT_ExecContext exc, + FT_Int aRange, + FT_ULong aIP ) { TT_CodeRange* range; @@ -1785,9 +1793,10 @@ /* zone :: The affected glyph zone. */ /* */ static void - Direct_Move( EXEC_OP_ TT_GlyphZone zone, - FT_UShort point, - FT_F26Dot6 distance ) + Direct_Move( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ) { FT_F26Dot6 v; @@ -1839,9 +1848,10 @@ /* zone :: The affected glyph zone. */ /* */ static void - Direct_Move_Orig( EXEC_OP_ TT_GlyphZone zone, - FT_UShort point, - FT_F26Dot6 distance ) + Direct_Move_Orig( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ) { FT_F26Dot6 v; @@ -1873,9 +1883,10 @@ static void - Direct_Move_X( EXEC_OP_ TT_GlyphZone zone, - FT_UShort point, - FT_F26Dot6 distance ) + Direct_Move_X( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ) { FT_UNUSED_EXEC; @@ -1890,9 +1901,10 @@ static void - Direct_Move_Y( EXEC_OP_ TT_GlyphZone zone, - FT_UShort point, - FT_F26Dot6 distance ) + Direct_Move_Y( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ) { FT_UNUSED_EXEC; @@ -1912,9 +1924,10 @@ static void - Direct_Move_Orig_X( EXEC_OP_ TT_GlyphZone zone, - FT_UShort point, - FT_F26Dot6 distance ) + Direct_Move_Orig_X( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ) { FT_UNUSED_EXEC; @@ -1923,9 +1936,10 @@ static void - Direct_Move_Orig_Y( EXEC_OP_ TT_GlyphZone zone, - FT_UShort point, - FT_F26Dot6 distance ) + Direct_Move_Orig_Y( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ) { FT_UNUSED_EXEC; @@ -1956,8 +1970,9 @@ /* before rounding. */ /* */ static FT_F26Dot6 - Round_None( EXEC_OP_ FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + Round_None( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_F26Dot6 compensation ) { FT_F26Dot6 val; @@ -1997,8 +2012,9 @@ /* Rounded distance. */ /* */ static FT_F26Dot6 - Round_To_Grid( EXEC_OP_ FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + Round_To_Grid( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_F26Dot6 compensation ) { FT_F26Dot6 val; @@ -2039,8 +2055,9 @@ /* Rounded distance. */ /* */ static FT_F26Dot6 - Round_To_Half_Grid( EXEC_OP_ FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + Round_To_Half_Grid( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_F26Dot6 compensation ) { FT_F26Dot6 val; @@ -2081,8 +2098,9 @@ /* Rounded distance. */ /* */ static FT_F26Dot6 - Round_Down_To_Grid( EXEC_OP_ FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + Round_Down_To_Grid( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_F26Dot6 compensation ) { FT_F26Dot6 val; @@ -2123,8 +2141,9 @@ /* Rounded distance. */ /* */ static FT_F26Dot6 - Round_Up_To_Grid( EXEC_OP_ FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + Round_Up_To_Grid( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_F26Dot6 compensation ) { FT_F26Dot6 val; @@ -2165,8 +2184,9 @@ /* Rounded distance. */ /* */ static FT_F26Dot6 - Round_To_Double_Grid( EXEC_OP_ FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + Round_To_Double_Grid( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_F26Dot6 compensation ) { FT_F26Dot6 val; @@ -2213,8 +2233,9 @@ /* before rounding. */ /* */ static FT_F26Dot6 - Round_Super( EXEC_OP_ FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + Round_Super( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_F26Dot6 compensation ) { FT_F26Dot6 val; @@ -2261,8 +2282,9 @@ /* greater precision. */ /* */ static FT_F26Dot6 - Round_Super_45( EXEC_OP_ FT_F26Dot6 distance, - FT_F26Dot6 compensation ) + Round_Super_45( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_F26Dot6 compensation ) { FT_F26Dot6 val; @@ -2300,7 +2322,8 @@ /* round_mode :: The rounding mode to be used. */ /* */ static void - Compute_Round( EXEC_OP_ FT_Byte round_mode ) + Compute_Round( TT_ExecContext exc, + FT_Byte round_mode ) { switch ( round_mode ) { @@ -2353,8 +2376,9 @@ /* selector :: The SROUND opcode. */ /* */ static void - SetSuperRound( EXEC_OP_ FT_F26Dot6 GridPeriod, - FT_Long selector ) + SetSuperRound( TT_ExecContext exc, + FT_F26Dot6 GridPeriod, + FT_Long selector ) { switch ( (FT_Int)( selector & 0xC0 ) ) { @@ -2424,8 +2448,9 @@ /* The distance in F26dot6 format. */ /* */ static FT_F26Dot6 - Project( EXEC_OP_ FT_Pos dx, - FT_Pos dy ) + Project( TT_ExecContext exc, + FT_Pos dx, + FT_Pos dy ) { #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING FT_ASSERT( !exc->face->unpatented_hinting ); @@ -2454,8 +2479,9 @@ /* The distance in F26dot6 format. */ /* */ static FT_F26Dot6 - Dual_Project( EXEC_OP_ FT_Pos dx, - FT_Pos dy ) + Dual_Project( TT_ExecContext exc, + FT_Pos dx, + FT_Pos dy ) { return TT_DotFix14( (FT_UInt32)dx, (FT_UInt32)dy, exc->GS.dualVector.x, @@ -2480,8 +2506,9 @@ /* The distance in F26dot6 format. */ /* */ static FT_F26Dot6 - Project_x( EXEC_OP_ FT_Pos dx, - FT_Pos dy ) + Project_x( TT_ExecContext exc, + FT_Pos dx, + FT_Pos dy ) { FT_UNUSED_EXEC; FT_UNUSED( dy ); @@ -2507,8 +2534,9 @@ /* The distance in F26dot6 format. */ /* */ static FT_F26Dot6 - Project_y( EXEC_OP_ FT_Pos dx, - FT_Pos dy ) + Project_y( TT_ExecContext exc, + FT_Pos dx, + FT_Pos dy ) { FT_UNUSED_EXEC; FT_UNUSED( dx ); @@ -2527,7 +2555,7 @@ /* to the current graphics state. */ /* */ static void - Compute_Funcs( EXEC_OP ) + Compute_Funcs( TT_ExecContext exc ) { #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING if ( exc->face->unpatented_hinting ) @@ -2648,9 +2676,10 @@ /* R is undefined. */ /* */ static FT_Bool - Normalize( EXEC_OP_ FT_F26Dot6 Vx, - FT_F26Dot6 Vy, - FT_UnitVector* R ) + Normalize( TT_ExecContext exc, + FT_F26Dot6 Vx, + FT_F26Dot6 Vy, + FT_UnitVector* R ) { FT_F26Dot6 W; @@ -2687,10 +2716,11 @@ static FT_Bool - Ins_SxVTL( EXEC_OP_ FT_UShort aIdx1, - FT_UShort aIdx2, - FT_Int aOpc, - FT_UnitVector* Vec ) + Ins_SxVTL( TT_ExecContext exc, + FT_UShort aIdx1, + FT_UShort aIdx2, + FT_Int aOpc, + FT_UnitVector* Vec ) { FT_Long A, B, C; FT_Vector* p1; @@ -4371,7 +4401,7 @@ static FT_Bool - SkipCode( EXEC_OP ) + SkipCode( TT_ExecContext exc ) { exc->IP += exc->length; @@ -5769,10 +5799,11 @@ static FT_Bool - Compute_Point_Displacement( EXEC_OP_ FT_F26Dot6* x, - FT_F26Dot6* y, - TT_GlyphZone zone, - FT_UShort* refp ) + Compute_Point_Displacement( TT_ExecContext exc, + FT_F26Dot6* x, + FT_F26Dot6* y, + TT_GlyphZone zone, + FT_UShort* refp ) { TT_GlyphZoneRec zp; FT_UShort p; @@ -5829,10 +5860,11 @@ static void - Move_Zp2_Point( EXEC_OP_ FT_UShort point, - FT_F26Dot6 dx, - FT_F26Dot6 dy, - FT_Bool touch ) + Move_Zp2_Point( TT_ExecContext exc, + FT_UShort point, + FT_F26Dot6 dx, + FT_F26Dot6 dy, + FT_Bool touch ) { #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING if ( exc->face->unpatented_hinting ) diff --git a/src/truetype/ttinterp.h b/src/truetype/ttinterp.h index c282471..50f1acd 100644 --- a/src/truetype/ttinterp.h +++ b/src/truetype/ttinterp.h @@ -26,8 +26,6 @@ FT_BEGIN_HEADER -#define EXEC_OP_ TT_ExecContext exc, -#define EXEC_OP TT_ExecContext exc #define EXEC_ARG_ exc, #define EXEC_ARG exc @@ -56,33 +54,38 @@ FT_BEGIN_HEADER /* Rounding function */ typedef FT_F26Dot6 - (*TT_Round_Func)( EXEC_OP_ FT_F26Dot6 distance, - FT_F26Dot6 compensation ); + (*TT_Round_Func)( TT_ExecContext exc, + FT_F26Dot6 distance, + FT_F26Dot6 compensation ); /* Point displacement along the freedom vector routine */ typedef void - (*TT_Move_Func)( EXEC_OP_ TT_GlyphZone zone, - FT_UShort point, - FT_F26Dot6 distance ); + (*TT_Move_Func)( TT_ExecContext exc, + TT_GlyphZone zone, + FT_UShort point, + FT_F26Dot6 distance ); /* Distance projection along one of the projection vectors */ typedef FT_F26Dot6 - (*TT_Project_Func)( EXEC_OP_ FT_Pos dx, - FT_Pos dy ); + (*TT_Project_Func)( TT_ExecContext exc, + FT_Pos dx, + FT_Pos dy ); /* getting current ppem. Take care of non-square pixels if necessary */ typedef FT_Long - (*TT_Cur_Ppem_Func)( EXEC_OP ); + (*TT_Cur_Ppem_Func)( TT_ExecContext exc ); /* reading a cvt value. Take care of non-square pixels if necessary */ typedef FT_F26Dot6 - (*TT_Get_CVT_Func)( EXEC_OP_ FT_ULong idx ); + (*TT_Get_CVT_Func)( TT_ExecContext exc, + FT_ULong idx ); /* setting or moving a cvt value. Take care of non-square pixels */ /* if necessary */ typedef void - (*TT_Set_CVT_Func)( EXEC_OP_ FT_ULong idx, - FT_F26Dot6 value ); + (*TT_Set_CVT_Func)( TT_ExecContext exc, + FT_ULong idx, + FT_F26Dot6 value ); /*************************************************************************/ -- 2.2.2 From 246814554fb1ba4e8d7747e156572ad1481af13c Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sat, 10 Jan 2015 21:53:48 +0100 Subject: [PATCH] [truetype] More macro expansions. Based on a patch from Behdad. * src/truetype/ttinterp.c (SKIP_Code, GET_ShortIns, NORMalize, SET_SuperRound, ROUND_None, INS_Goto_CodeRange, CUR_Func_move, CUR_Func_move_orig, CUR_Func_round, CUR_Func_cur_ppem, CUR_Func_read_cvt, CUR_Func_write_cvt, CUR_Func_move_cvt, CURRENT_Ratio, INS_SxVTL, COMPUTE_Funcs, COMPUTE_Round, COMPUTE_Point_Displacement, MOVE_Zp2_Point): Remove by replacing with expansion. (Cur_Func_project, CUR_Func_dualproj, CUR_fast_project, CUR_fast_dualproj): Replace with macros `project', `dualproj', `fast_project', `fast_dualproj'. --- ChangeLog | 18 ++ src/truetype/ttinterp.c | 483 +++++++++++++++++++++--------------------------- 2 files changed, 231 insertions(+), 270 deletions(-) diff --git a/ChangeLog b/ChangeLog index 60bb0b1..a271e5a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,24 @@ [truetype] More macro expansions. + Based on a patch from Behdad. + + * src/truetype/ttinterp.c (SKIP_Code, GET_ShortIns, NORMalize, + SET_SuperRound, ROUND_None, INS_Goto_CodeRange, CUR_Func_move, + CUR_Func_move_orig, CUR_Func_round, CUR_Func_cur_ppem, + CUR_Func_read_cvt, CUR_Func_write_cvt, CUR_Func_move_cvt, + CURRENT_Ratio, INS_SxVTL, COMPUTE_Funcs, COMPUTE_Round, + COMPUTE_Point_Displacement, MOVE_Zp2_Point): Remove by replacing + with expansion. + + (Cur_Func_project, CUR_Func_dualproj, CUR_fast_project, + CUR_fast_dualproj): Replace with macros `project', `dualproj', + `fast_project', `fast_dualproj'. + +2015-01-10 Werner Lemberg + + [truetype] More macro expansions. + * src/truetype/ttinterp.c (EXEC_OP_, EXEC_OP): Remove by replacing with expansion. diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index e153a58..1c5e98a 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -82,83 +82,17 @@ TT_INTERPRETER_VERSION_38 ) - /*************************************************************************/ - /* */ - /* The following macros hide the use of EXEC_ARG and EXEC_ARG_ to */ - /* increase readability of the code. */ - /* */ - /*************************************************************************/ - - -#define SKIP_Code() \ - SkipCode( EXEC_ARG ) - -#define GET_ShortIns() \ - GetShortIns( EXEC_ARG ) - -#define NORMalize( x, y, v ) \ - Normalize( EXEC_ARG_ x, y, v ) - -#define SET_SuperRound( scale, flags ) \ - SetSuperRound( EXEC_ARG_ scale, flags ) - -#define ROUND_None( d, c ) \ - Round_None( EXEC_ARG_ d, c ) - -#define INS_Goto_CodeRange( range, ip ) \ - Ins_Goto_CodeRange( EXEC_ARG_ range, ip ) - -#define CUR_Func_move( z, p, d ) \ - exc->func_move( EXEC_ARG_ z, p, d ) - -#define CUR_Func_move_orig( z, p, d ) \ - exc->func_move_orig( EXEC_ARG_ z, p, d ) - -#define CUR_Func_round( d, c ) \ - exc->func_round( EXEC_ARG_ d, c ) +#define project( v1, v2 ) \ + exc->func_project( exc, (v1)->x - (v2)->x, (v1)->y - (v2)->y ) -#define CUR_Func_cur_ppem() \ - exc->func_cur_ppem( EXEC_ARG ) +#define dualproj( v1, v2 ) \ + exc->func_dualproj( exc, (v1)->x - (v2)->x, (v1)->y - (v2)->y ) -#define CUR_Func_read_cvt( index ) \ - exc->func_read_cvt( EXEC_ARG_ index ) +#define fast_project( v ) \ + exc->func_project( exc, (v)->x, (v)->y ) -#define CUR_Func_write_cvt( index, val ) \ - exc->func_write_cvt( EXEC_ARG_ index, val ) - -#define CUR_Func_move_cvt( index, val ) \ - exc->func_move_cvt( EXEC_ARG_ index, val ) - -#define CURRENT_Ratio() \ - Current_Ratio( EXEC_ARG ) - -#define INS_SxVTL( a, b, c, d ) \ - Ins_SxVTL( EXEC_ARG_ a, b, c, d ) - -#define COMPUTE_Funcs() \ - Compute_Funcs( EXEC_ARG ) - -#define COMPUTE_Round( a ) \ - Compute_Round( EXEC_ARG_ a ) - -#define COMPUTE_Point_Displacement( a, b, c, d ) \ - Compute_Point_Displacement( EXEC_ARG_ a, b, c, d ) - -#define MOVE_Zp2_Point( a, b, c, t ) \ - Move_Zp2_Point( EXEC_ARG_ a, b, c, t ) - - -#define CUR_Func_project( v1, v2 ) \ - exc->func_project( EXEC_ARG_ (v1)->x - (v2)->x, (v1)->y - (v2)->y ) - -#define CUR_Func_dualproj( v1, v2 ) \ - exc->func_dualproj( EXEC_ARG_ (v1)->x - (v2)->x, (v1)->y - (v2)->y ) - -#define CUR_fast_project( v ) \ - exc->func_project( EXEC_ARG_ (v)->x, (v)->y ) - -#define CUR_fast_dualproj( v ) \ - exc->func_dualproj( EXEC_ARG_ (v)->x, (v)->y ) +#define fast_dualproj( v ) \ + exc->func_dualproj( exc, (v)->x, (v)->y ) /*************************************************************************/ @@ -1630,7 +1564,7 @@ FT_CALLBACK_DEF( FT_Long ) Current_Ppem_Stretched( TT_ExecContext exc ) { - return FT_MulFix( exc->tt_metrics.ppem, CURRENT_Ratio() ); + return FT_MulFix( exc->tt_metrics.ppem, Current_Ratio( exc ) ); } @@ -1653,7 +1587,7 @@ Read_CVT_Stretched( TT_ExecContext exc, FT_ULong idx ) { - return FT_MulFix( exc->cvt[idx], CURRENT_Ratio() ); + return FT_MulFix( exc->cvt[idx], Current_Ratio( exc ) ); } @@ -1671,7 +1605,7 @@ FT_ULong idx, FT_F26Dot6 value ) { - exc->cvt[idx] = FT_DivFix( value, CURRENT_Ratio() ); + exc->cvt[idx] = FT_DivFix( value, Current_Ratio( exc ) ); } @@ -1689,7 +1623,7 @@ FT_ULong idx, FT_F26Dot6 value ) { - exc->cvt[idx] += FT_DivFix( value, CURRENT_Ratio() ); + exc->cvt[idx] += FT_DivFix( value, Current_Ratio( exc ) ); } @@ -2759,7 +2693,7 @@ A = -C; } - NORMalize( A, B, Vec ); + Normalize( exc, A, B, Vec ); return SUCCESS; } @@ -2787,7 +2721,7 @@ exc->GS.projVector.y = B; \ exc->GS.dualVector.y = B; \ \ - COMPUTE_Funcs(); \ + Compute_Funcs( exc ); \ } @@ -2807,7 +2741,7 @@ \ GUESS_VECTOR( freeVector ); \ \ - COMPUTE_Funcs(); \ + Compute_Funcs( exc ); \ } @@ -2824,74 +2758,76 @@ \ GUESS_VECTOR( projVector ); \ \ - COMPUTE_Funcs(); \ + Compute_Funcs( exc ); \ } #define DO_SPVTL \ - if ( INS_SxVTL( (FT_UShort)args[1], \ + if ( Ins_SxVTL( exc, \ + (FT_UShort)args[1], \ (FT_UShort)args[0], \ exc->opcode, \ &exc->GS.projVector ) == SUCCESS ) \ { \ exc->GS.dualVector = exc->GS.projVector; \ GUESS_VECTOR( freeVector ); \ - COMPUTE_Funcs(); \ + Compute_Funcs( exc ); \ } #define DO_SFVTL \ - if ( INS_SxVTL( (FT_UShort)args[1], \ + if ( Ins_SxVTL( exc, \ + (FT_UShort)args[1], \ (FT_UShort)args[0], \ exc->opcode, \ &exc->GS.freeVector ) == SUCCESS ) \ { \ GUESS_VECTOR( projVector ); \ - COMPUTE_Funcs(); \ + Compute_Funcs( exc ); \ } #define DO_SFVTPV \ GUESS_VECTOR( projVector ); \ exc->GS.freeVector = exc->GS.projVector; \ - COMPUTE_Funcs(); - - -#define DO_SPVFS \ - { \ - FT_Short S; \ - FT_Long X, Y; \ - \ - \ - /* Only use low 16bits, then sign extend */ \ - S = (FT_Short)args[1]; \ - Y = (FT_Long)S; \ - S = (FT_Short)args[0]; \ - X = (FT_Long)S; \ - \ - NORMalize( X, Y, &exc->GS.projVector ); \ - \ - exc->GS.dualVector = exc->GS.projVector; \ - GUESS_VECTOR( freeVector ); \ - COMPUTE_Funcs(); \ - } - - -#define DO_SFVFS \ - { \ - FT_Short S; \ - FT_Long X, Y; \ - \ - \ - /* Only use low 16bits, then sign extend */ \ - S = (FT_Short)args[1]; \ - Y = (FT_Long)S; \ - S = (FT_Short)args[0]; \ - X = S; \ - \ - NORMalize( X, Y, &exc->GS.freeVector ); \ - GUESS_VECTOR( projVector ); \ - COMPUTE_Funcs(); \ + Compute_Funcs( exc ); + + +#define DO_SPVFS \ + { \ + FT_Short S; \ + FT_Long X, Y; \ + \ + \ + /* Only use low 16bits, then sign extend */ \ + S = (FT_Short)args[1]; \ + Y = (FT_Long)S; \ + S = (FT_Short)args[0]; \ + X = (FT_Long)S; \ + \ + Normalize( exc, X, Y, &exc->GS.projVector ); \ + \ + exc->GS.dualVector = exc->GS.projVector; \ + GUESS_VECTOR( freeVector ); \ + Compute_Funcs( exc ); \ + } + + +#define DO_SFVFS \ + { \ + FT_Short S; \ + FT_Long X, Y; \ + \ + \ + /* Only use low 16bits, then sign extend */ \ + S = (FT_Short)args[1]; \ + Y = (FT_Long)S; \ + S = (FT_Short)args[0]; \ + X = S; \ + \ + Normalize( exc, X, Y, &exc->GS.freeVector ); \ + GUESS_VECTOR( projVector ); \ + Compute_Funcs( exc ); \ } @@ -2976,13 +2912,13 @@ #define DO_SROUND \ - SET_SuperRound( 0x4000, args[0] ); \ + SetSuperRound( exc, 0x4000, args[0] ); \ exc->GS.round_state = TT_Round_Super; \ exc->func_round = (TT_Round_Func)Round_Super; #define DO_S45ROUND \ - SET_SuperRound( 0x2D41, args[0] ); \ + SetSuperRound( exc, 0x2D41, args[0] ); \ exc->GS.round_state = TT_Round_Super_45; \ exc->func_round = (TT_Round_Func)Round_Super_45; @@ -3033,8 +2969,8 @@ #define DO_MD /* nothing */ -#define DO_MPPEM \ - args[0] = CUR_Func_cur_ppem(); +#define DO_MPPEM \ + args[0] = exc->func_cur_ppem( exc ); /* Note: The pointSize should be irrelevant in a given font program; */ @@ -3046,8 +2982,8 @@ #else -#define DO_MPS \ - args[0] = CUR_Func_cur_ppem(); +#define DO_MPS \ + args[0] = exc->func_cur_ppem( exc ); #endif /* 0 */ @@ -3156,12 +3092,12 @@ args[0] = ( args[0] != args[1] ); -#define DO_ODD \ - args[0] = ( ( CUR_Func_round( args[0], 0 ) & 127 ) == 64 ); +#define DO_ODD \ + args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 64 ); -#define DO_EVEN \ - args[0] = ( ( CUR_Func_round( args[0], 0 ) & 127 ) == 0 ); +#define DO_EVEN \ + args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 0 ); #define DO_AND \ @@ -3288,39 +3224,39 @@ } -#define DO_RCVT \ - { \ - FT_ULong I = (FT_ULong)args[0]; \ - \ - \ - if ( BOUNDSL( I, exc->cvtSize ) ) \ - { \ - if ( exc->pedantic_hinting ) \ - { \ - ARRAY_BOUND_ERROR; \ - } \ - else \ - args[0] = 0; \ - } \ - else \ - args[0] = CUR_Func_read_cvt( I ); \ +#define DO_RCVT \ + { \ + FT_ULong I = (FT_ULong)args[0]; \ + \ + \ + if ( BOUNDSL( I, exc->cvtSize ) ) \ + { \ + if ( exc->pedantic_hinting ) \ + { \ + ARRAY_BOUND_ERROR; \ + } \ + else \ + args[0] = 0; \ + } \ + else \ + args[0] = exc->func_read_cvt( exc, I ); \ } -#define DO_WCVTP \ - { \ - FT_ULong I = (FT_ULong)args[0]; \ - \ - \ - if ( BOUNDSL( I, exc->cvtSize ) ) \ - { \ - if ( exc->pedantic_hinting ) \ - { \ - ARRAY_BOUND_ERROR; \ - } \ - } \ - else \ - CUR_Func_write_cvt( I, args[1] ); \ +#define DO_WCVTP \ + { \ + FT_ULong I = (FT_ULong)args[0]; \ + \ + \ + if ( BOUNDSL( I, exc->cvtSize ) ) \ + { \ + if ( exc->pedantic_hinting ) \ + { \ + ARRAY_BOUND_ERROR; \ + } \ + } \ + else \ + exc->func_write_cvt( exc, I, args[1] ); \ } @@ -3345,14 +3281,16 @@ exc->error = FT_THROW( Debug_OpCode ); -#define DO_ROUND \ - args[0] = CUR_Func_round( \ - args[0], \ +#define DO_ROUND \ + args[0] = exc->func_round( \ + exc, \ + args[0], \ exc->tt_metrics.compensations[exc->opcode - 0x68] ); #define DO_NROUND \ - args[0] = ROUND_None( args[0], \ + args[0] = Round_None( exc, \ + args[0], \ exc->tt_metrics.compensations[exc->opcode - 0x6C] ); @@ -4448,7 +4386,7 @@ do { - if ( SKIP_Code() == FAILURE ) + if ( SkipCode( exc ) == FAILURE ) return; switch ( exc->opcode ) @@ -4488,7 +4426,7 @@ do { - if ( SKIP_Code() == FAILURE ) + if ( SkipCode( exc ) == FAILURE ) return; switch ( exc->opcode ) @@ -4680,7 +4618,7 @@ /* Now skip the whole function definition. */ /* We don't allow nested IDEFS & FDEFs. */ - while ( SKIP_Code() == SUCCESS ) + while ( SkipCode( exc ) == SUCCESS ) { #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING @@ -4848,8 +4786,7 @@ } else /* Loop through the current function */ - INS_Goto_CodeRange( pRec->Caller_Range, - pRec->Caller_IP ); + Ins_Goto_CodeRange( exc, pRec->Caller_Range, pRec->Caller_IP ); /* Exit the current call frame. */ @@ -4938,8 +4875,7 @@ exc->callTop++; - INS_Goto_CodeRange( def->range, - def->start ); + Ins_Goto_CodeRange( exc, def->range, def->start ); exc->step_ins = FALSE; @@ -5026,7 +4962,7 @@ exc->callTop++; - INS_Goto_CodeRange( def->range, def->start ); + Ins_Goto_CodeRange( exc, def->range, def->start ); exc->step_ins = FALSE; } @@ -5089,7 +5025,7 @@ /* Now skip the whole function definition. */ /* We don't allow nested IDEFs & FDEFs. */ - while ( SKIP_Code() == SUCCESS ) + while ( SkipCode( exc ) == SUCCESS ) { switch ( exc->opcode ) { @@ -5163,7 +5099,7 @@ exc->IP += 2; for ( K = 0; K < L; K++ ) - args[K] = GET_ShortIns(); + args[K] = GetShortIns( exc ); exc->step_ins = FALSE; exc->new_top += L; @@ -5218,7 +5154,7 @@ exc->IP++; for ( K = 0; K < L; K++ ) - args[K] = GET_ShortIns(); + args[K] = GetShortIns( exc ); exc->step_ins = FALSE; } @@ -5260,9 +5196,9 @@ else { if ( exc->opcode & 1 ) - R = CUR_fast_dualproj( &exc->zp2.org[L] ); + R = fast_dualproj( &exc->zp2.org[L] ); else - R = CUR_fast_project( &exc->zp2.cur[L] ); + R = fast_project( &exc->zp2.cur[L] ); } args[0] = R; @@ -5295,9 +5231,9 @@ return; } - K = CUR_fast_project( &exc->zp2.cur[L] ); + K = fast_project( &exc->zp2.cur[L] ); - CUR_Func_move( &exc->zp2, L, args[1] - K ); + exc->func_move( exc, &exc->zp2, L, args[1] - K ); /* UNDOCUMENTED! The MS rasterizer does that with */ /* twilight points (confirmed by Greg Hitchcock) */ @@ -5341,7 +5277,7 @@ else { if ( exc->opcode & 1 ) - D = CUR_Func_project( exc->zp0.cur + L, exc->zp1.cur + K ); + D = project( exc->zp0.cur + L, exc->zp1.cur + K ); else { /* XXX: UNDOCUMENTED: twilight zone special case */ @@ -5352,7 +5288,7 @@ FT_Vector* vec2 = exc->zp1.org + K; - D = CUR_Func_dualproj( vec1, vec2 ); + D = dualproj( vec1, vec2 ); } else { @@ -5363,7 +5299,7 @@ if ( exc->metrics.x_scale == exc->metrics.y_scale ) { /* this should be faster */ - D = CUR_Func_dualproj( vec1, vec2 ); + D = dualproj( vec1, vec2 ); D = FT_MulFix( D, exc->metrics.x_scale ); } else @@ -5374,7 +5310,7 @@ vec.x = FT_MulFix( vec1->x - vec2->x, exc->metrics.x_scale ); vec.y = FT_MulFix( vec1->y - vec2->y, exc->metrics.y_scale ); - D = CUR_fast_dualproj( &vec ); + D = fast_dualproj( &vec ); } } } @@ -5443,7 +5379,7 @@ A = -C; } - NORMalize( A, B, &exc->GS.dualVector ); + Normalize( exc, A, B, &exc->GS.dualVector ); { FT_Vector* v1 = exc->zp1.cur + p2; @@ -5467,11 +5403,11 @@ A = -C; } - NORMalize( A, B, &exc->GS.projVector ); + Normalize( exc, A, B, &exc->GS.projVector ); GUESS_VECTOR( freeVector ); - COMPUTE_Funcs(); + Compute_Funcs( exc ); } @@ -5832,7 +5768,7 @@ *zone = zp; *refp = p; - d = CUR_Func_project( zp.cur + p, zp.org + p ); + d = project( zp.cur + p, zp.org + p ); #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING if ( exc->face->unpatented_hinting ) @@ -5927,7 +5863,7 @@ goto Fail; } - if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) ) + if ( Compute_Point_Displacement( exc, &dx, &dy, &zp, &refp ) ) return; while ( exc->GS.loop > 0 ) @@ -5948,10 +5884,10 @@ /* doesn't follow Cleartype spec but produces better result */ if ( SUBPIXEL_HINTING && exc->ignore_x_mode ) - MOVE_Zp2_Point( point, 0, dy, TRUE ); + Move_Zp2_Point( exc, point, 0, dy, TRUE ); else #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - MOVE_Zp2_Point( point, dx, dy, TRUE ); + Move_Zp2_Point( exc, point, dx, dy, TRUE ); exc->GS.loop--; } @@ -5993,7 +5929,7 @@ return; } - if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) ) + if ( Compute_Point_Displacement( exc, &dx, &dy, &zp, &refp ) ) return; if ( contour == 0 ) @@ -6012,7 +5948,7 @@ for ( i = start; i < limit; i++ ) { if ( zp.cur != exc->zp2.cur || refp != i ) - MOVE_Zp2_Point( i, dx, dy, TRUE ); + Move_Zp2_Point( exc, i, dx, dy, TRUE ); } } @@ -6041,7 +5977,7 @@ return; } - if ( COMPUTE_Point_Displacement( &dx, &dy, &zp, &refp ) ) + if ( Compute_Point_Displacement( exc, &dx, &dy, &zp, &refp ) ) return; /* XXX: UNDOCUMENTED! SHZ doesn't move the phantom points. */ @@ -6059,7 +5995,7 @@ for ( i = 0; i < limit; i++ ) { if ( zp.cur != exc->zp2.cur || refp != i ) - MOVE_Zp2_Point( i, dx, dy, FALSE ); + Move_Zp2_Point( exc, i, dx, dy, FALSE ); } } @@ -6145,7 +6081,7 @@ if ( !exc->face->sph_compatibility_mode && exc->GS.freeVector.y != 0 ) { - MOVE_Zp2_Point( point, dx, dy, TRUE ); + Move_Zp2_Point( exc, point, dx, dy, TRUE ); /* save new point */ if ( exc->GS.freeVector.y != 0 ) @@ -6157,7 +6093,7 @@ ( B1 & 63 ) != 0 && ( B2 & 63 ) != 0 && B1 != B2 ) - MOVE_Zp2_Point( point, -dx, -dy, TRUE ); + Move_Zp2_Point( exc, point, -dx, -dy, TRUE ); } } else if ( exc->face->sph_compatibility_mode ) @@ -6178,7 +6114,7 @@ ( ( exc->is_composite && exc->GS.freeVector.y != 0 ) || ( exc->zp2.tags[point] & FT_CURVE_TAG_TOUCH_Y ) || ( exc->sph_tweak_flags & SPH_TWEAK_DO_SHPIX ) ) ) - MOVE_Zp2_Point( point, 0, dy, TRUE ); + Move_Zp2_Point( exc, point, 0, dy, TRUE ); /* save new point */ if ( exc->GS.freeVector.y != 0 ) @@ -6189,21 +6125,21 @@ if ( ( B1 & 63 ) == 0 && ( B2 & 63 ) != 0 && B1 != B2 ) - MOVE_Zp2_Point( point, 0, -dy, TRUE ); + Move_Zp2_Point( exc, point, 0, -dy, TRUE ); } } else if ( exc->sph_in_func_flags & SPH_FDEF_TYPEMAN_DIAGENDCTRL ) - MOVE_Zp2_Point( point, dx, dy, TRUE ); + Move_Zp2_Point( exc, point, dx, dy, TRUE ); } else - MOVE_Zp2_Point( point, dx, dy, TRUE ); + Move_Zp2_Point( exc, point, dx, dy, TRUE ); } Skip: #else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - MOVE_Zp2_Point( point, dx, dy, TRUE ); + Move_Zp2_Point( exc, point, dx, dy, TRUE ); #endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ @@ -6259,12 +6195,11 @@ if ( exc->GS.gep1 == 0 ) { exc->zp1.org[point] = exc->zp0.org[exc->GS.rp0]; - CUR_Func_move_orig( &exc->zp1, point, args[1] ); + exc->func_move_orig( exc, &exc->zp1, point, args[1] ); exc->zp1.cur[point] = exc->zp1.org[point]; } - distance = CUR_Func_project( exc->zp1.cur + point, - exc->zp0.cur + exc->GS.rp0 ); + distance = project( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 ); #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING /* subpixel hinting - make MSIRP respect CVT cut-in; */ @@ -6275,7 +6210,7 @@ distance = args[1]; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - CUR_Func_move( &exc->zp1, point, args[1] - distance ); + exc->func_move( exc, &exc->zp1, point, args[1] - distance ); exc->GS.rp1 = exc->GS.rp0; exc->GS.rp2 = point; @@ -6310,24 +6245,26 @@ if ( ( exc->opcode & 1 ) != 0 ) { - cur_dist = CUR_fast_project( &exc->zp0.cur[point] ); + cur_dist = fast_project( &exc->zp0.cur[point] ); #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING if ( SUBPIXEL_HINTING && exc->ignore_x_mode && exc->GS.freeVector.x != 0 ) - distance = ROUND_None( + distance = Round_None( + exc, cur_dist, exc->tt_metrics.compensations[0] ) - cur_dist; else #endif - distance = CUR_Func_round( + distance = exc->func_round( + exc, cur_dist, exc->tt_metrics.compensations[0] ) - cur_dist; } else distance = 0; - CUR_Func_move( &exc->zp0, point, distance ); + exc->func_move( exc, &exc->zp0, point, distance ); exc->GS.rp0 = point; exc->GS.rp1 = point; @@ -6391,7 +6328,7 @@ /* */ /* Confirmed by Greg Hitchcock. */ - distance = CUR_Func_read_cvt( cvtEntry ); + distance = exc->func_read_cvt( exc, cvtEntry ); if ( exc->GS.gep0 == 0 ) /* If in twilight zone */ { @@ -6417,7 +6354,7 @@ distance = 0; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - org_dist = CUR_fast_project( &exc->zp0.cur[point] ); + org_dist = fast_project( &exc->zp0.cur[point] ); if ( ( exc->opcode & 1 ) != 0 ) /* rounding and control cut-in flag */ { @@ -6428,15 +6365,17 @@ if ( SUBPIXEL_HINTING && exc->ignore_x_mode && exc->GS.freeVector.x != 0 ) - distance = ROUND_None( distance, + distance = Round_None( exc, + distance, exc->tt_metrics.compensations[0] ); else #endif - distance = CUR_Func_round( distance, - exc->tt_metrics.compensations[0] ); + distance = exc->func_round( exc, + distance, + exc->tt_metrics.compensations[0] ); } - CUR_Func_move( &exc->zp0, point, distance - org_dist ); + exc->func_move( exc, &exc->zp0, point, distance - org_dist ); Fail: exc->GS.rp0 = point; @@ -6488,7 +6427,7 @@ FT_Vector* vec2 = &exc->zp0.org[exc->GS.rp0]; - org_dist = CUR_Func_dualproj( vec1, vec2 ); + org_dist = dualproj( vec1, vec2 ); } else { @@ -6499,7 +6438,7 @@ if ( exc->metrics.x_scale == exc->metrics.y_scale ) { /* this should be faster */ - org_dist = CUR_Func_dualproj( vec1, vec2 ); + org_dist = dualproj( vec1, vec2 ); org_dist = FT_MulFix( org_dist, exc->metrics.x_scale ); } else @@ -6510,7 +6449,7 @@ vec.x = FT_MulFix( vec1->x - vec2->x, exc->metrics.x_scale ); vec.y = FT_MulFix( vec1->y - vec2->y, exc->metrics.y_scale ); - org_dist = CUR_fast_dualproj( &vec ); + org_dist = fast_dualproj( &vec ); } } @@ -6533,17 +6472,20 @@ if ( SUBPIXEL_HINTING && exc->ignore_x_mode && exc->GS.freeVector.x != 0 ) - distance = ROUND_None( + distance = Round_None( + exc, org_dist, exc->tt_metrics.compensations[exc->opcode & 3] ); else #endif - distance = CUR_Func_round( - org_dist, - exc->tt_metrics.compensations[exc->opcode & 3] ); + distance = exc->func_round( + exc, + org_dist, + exc->tt_metrics.compensations[exc->opcode & 3] ); } else - distance = ROUND_None( + distance = Round_None( + exc, org_dist, exc->tt_metrics.compensations[exc->opcode & 3] ); @@ -6565,10 +6507,9 @@ /* now move the point */ - org_dist = CUR_Func_project( exc->zp1.cur + point, - exc->zp0.cur + exc->GS.rp0 ); + org_dist = project( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 ); - CUR_Func_move( &exc->zp1, point, distance - org_dist ); + exc->func_move( exc, &exc->zp1, point, distance - org_dist ); Fail: exc->GS.rp1 = exc->GS.rp0; @@ -6631,7 +6572,7 @@ if ( !cvtEntry ) cvt_dist = 0; else - cvt_dist = CUR_Func_read_cvt( cvtEntry - 1 ); + cvt_dist = exc->func_read_cvt( exc, cvtEntry - 1 ); /* single width test */ @@ -6657,10 +6598,8 @@ exc->zp1.cur[point] = exc->zp1.org[point]; } - org_dist = CUR_Func_dualproj( &exc->zp1.org[point], - &exc->zp0.org[exc->GS.rp0] ); - cur_dist = CUR_Func_project ( &exc->zp1.cur[point], - &exc->zp0.cur[exc->GS.rp0] ); + org_dist = dualproj( &exc->zp1.org[point], &exc->zp0.org[exc->GS.rp0] ); + cur_dist = project ( &exc->zp1.cur[point], &exc->zp0.cur[exc->GS.rp0] ); /* auto-flip test */ @@ -6708,7 +6647,8 @@ cvt_dist = org_dist; } - distance = CUR_Func_round( + distance = exc->func_round( + exc, cvt_dist, exc->tt_metrics.compensations[exc->opcode & 3] ); } @@ -6726,7 +6666,8 @@ } #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - distance = ROUND_None( + distance = Round_None( + exc, cvt_dist, exc->tt_metrics.compensations[exc->opcode & 3] ); } @@ -6767,7 +6708,7 @@ } #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - CUR_Func_move( &exc->zp1, point, distance - cur_dist ); + exc->func_move( exc, &exc->zp1, point, distance - cur_dist ); #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING if ( SUBPIXEL_HINTING ) @@ -6791,7 +6732,7 @@ } if ( reverse_move ) - CUR_Func_move( &exc->zp1, point, -( distance - cur_dist ) ); + exc->func_move( exc, &exc->zp1, point, -( distance - cur_dist ) ); } #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ @@ -6856,10 +6797,10 @@ } else { - distance = CUR_Func_project( exc->zp1.cur + point, - exc->zp0.cur + exc->GS.rp0 ); + distance = project( exc->zp1.cur + point, + exc->zp0.cur + exc->GS.rp0 ); - CUR_Func_move( &exc->zp1, point, -distance ); + exc->func_move( exc, &exc->zp1, point, -distance ); } exc->GS.loop--; @@ -6989,11 +6930,10 @@ return; } - distance = CUR_Func_project( exc->zp0.cur + p2, - exc->zp1.cur + p1 ) / 2; + distance = project( exc->zp0.cur + p2, exc->zp1.cur + p1 ) / 2; - CUR_Func_move( &exc->zp1, p1, distance ); - CUR_Func_move( &exc->zp0, p2, -distance ); + exc->func_move( exc, &exc->zp1, p1, distance ); + exc->func_move( exc, &exc->zp0, p2, -distance ); } @@ -7058,11 +6998,9 @@ else { if ( twilight ) - old_range = CUR_Func_dualproj( &exc->zp1.org[exc->GS.rp2], - orus_base ); + old_range = dualproj( &exc->zp1.org[exc->GS.rp2], orus_base ); else if ( exc->metrics.x_scale == exc->metrics.y_scale ) - old_range = CUR_Func_dualproj( &exc->zp1.orus[exc->GS.rp2], - orus_base ); + old_range = dualproj( &exc->zp1.orus[exc->GS.rp2], orus_base ); else { FT_Vector vec; @@ -7073,10 +7011,10 @@ vec.y = FT_MulFix( exc->zp1.orus[exc->GS.rp2].y - orus_base->y, exc->metrics.y_scale ); - old_range = CUR_fast_dualproj( &vec ); + old_range = fast_dualproj( &vec ); } - cur_range = CUR_Func_project ( &exc->zp1.cur[exc->GS.rp2], cur_base ); + cur_range = project( &exc->zp1.cur[exc->GS.rp2], cur_base ); } for ( ; exc->GS.loop > 0; --exc->GS.loop ) @@ -7097,9 +7035,9 @@ } if ( twilight ) - org_dist = CUR_Func_dualproj( &exc->zp2.org[point], orus_base ); + org_dist = dualproj( &exc->zp2.org[point], orus_base ); else if ( exc->metrics.x_scale == exc->metrics.y_scale ) - org_dist = CUR_Func_dualproj( &exc->zp2.orus[point], orus_base ); + org_dist = dualproj( &exc->zp2.orus[point], orus_base ); else { FT_Vector vec; @@ -7110,10 +7048,10 @@ vec.y = FT_MulFix( exc->zp2.orus[point].y - orus_base->y, exc->metrics.y_scale ); - org_dist = CUR_fast_dualproj( &vec ); + org_dist = fast_dualproj( &vec ); } - cur_dist = CUR_Func_project( &exc->zp2.cur[point], cur_base ); + cur_dist = project( &exc->zp2.cur[point], cur_base ); if ( org_dist ) { @@ -7143,7 +7081,10 @@ else new_dist = 0; - CUR_Func_move( &exc->zp2, (FT_UShort)point, new_dist - cur_dist ); + exc->func_move( exc, + &exc->zp2, + (FT_UShort)point, + new_dist - cur_dist ); } Fail: @@ -7470,7 +7411,7 @@ } #endif - P = (FT_ULong)CUR_Func_cur_ppem(); + P = (FT_ULong)exc->func_cur_ppem( exc ); nump = (FT_ULong)args[0]; /* some points theoretically may occur more than once, thus UShort isn't enough */ @@ -7537,7 +7478,7 @@ if ( !exc->ignore_x_mode || ( exc->sph_tweak_flags & SPH_TWEAK_ALWAYS_DO_DELTAP ) || ( exc->is_composite && exc->GS.freeVector.y != 0 ) ) - CUR_Func_move( &exc->zp0, A, B ); + exc->func_move( exc, &exc->zp0, A, B ); /* Otherwise, apply subpixel hinting and compatibility mode */ /* rules, always skipping deltas in subpixel direction. */ @@ -7550,7 +7491,7 @@ /* points. This messes up DejaVu ... */ if ( !exc->face->sph_compatibility_mode && ( exc->zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) ) - CUR_Func_move( &exc->zp0, A, B ); + exc->func_move( exc, &exc->zp0, A, B ); /* compatibility mode */ else if ( exc->face->sph_compatibility_mode && @@ -7563,7 +7504,7 @@ /* IUP has not been called, and point is touched on Y. */ if ( !exc->iup_called && ( exc->zp0.tags[A] & FT_CURVE_TAG_TOUCH_Y ) ) - CUR_Func_move( &exc->zp0, A, B ); + exc->func_move( exc, &exc->zp0, A, B ); } B2 = (FT_UShort)exc->zp0.cur[A].y; @@ -7577,13 +7518,13 @@ SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES_DELTAP ) && ( B1 & 63 ) != 0 && ( B2 & 63 ) != 0 ) ) ) - CUR_Func_move( &exc->zp0, A, -B ); + exc->func_move( exc, &exc->zp0, A, -B ); } } else #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - CUR_Func_move( &exc->zp0, A, B ); + exc->func_move( exc, &exc->zp0, A, B ); } } else @@ -7630,7 +7571,7 @@ } #endif - P = (FT_ULong)CUR_Func_cur_ppem(); + P = (FT_ULong)exc->func_cur_ppem( exc ); nump = (FT_ULong)args[0]; for ( k = 1; k <= nump; k++ ) @@ -7683,7 +7624,7 @@ B++; B *= 1L << ( 6 - exc->GS.delta_shift ); - CUR_Func_move_cvt( A, B ); + exc->func_move_cvt( exc, A, B ); } } } @@ -7850,7 +7791,7 @@ call->Cur_Count = 1; call->Def = def; - INS_Goto_CodeRange( def->range, def->start ); + Ins_Goto_CodeRange( exc, def->range, def->start ); exc->step_ins = FALSE; return; @@ -8224,8 +8165,8 @@ exc->func_move_cvt = Move_CVT; } - COMPUTE_Funcs(); - COMPUTE_Round( (FT_Byte)exc->GS.round_state ); + Compute_Funcs( exc ); + Compute_Round( exc, (FT_Byte)exc->GS.round_state ); do { @@ -8361,7 +8302,7 @@ GUESS_VECTOR( freeVector ); } - COMPUTE_Funcs(); + Compute_Funcs( exc ); } break; @@ -8904,7 +8845,9 @@ callrec->Cur_Count = 1; callrec->Def = def; - if ( INS_Goto_CodeRange( def->range, def->start ) == FAILURE ) + if ( Ins_Goto_CodeRange( exc, + def->range, + def->start ) == FAILURE ) goto LErrorLabel_; goto LSuiteLabel_; -- 2.2.2 From 6cc1f123aa7294b5fbf0af3696d941b1f55a216b Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sat, 10 Jan 2015 21:56:59 +0100 Subject: [PATCH] [truetype] More macro expansions. * src/truetype/ttinterp.c, src/truetype/ttinterp.h (EXEC_ARG_, EXEC_ARG): Remove by replacing with expansion. --- ChangeLog | 7 ++++ src/truetype/ttinterp.c | 104 ++++++++++++++++++++++++------------------------ src/truetype/ttinterp.h | 4 -- 3 files changed, 59 insertions(+), 56 deletions(-) diff --git a/ChangeLog b/ChangeLog index a271e5a..3401b17 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,13 @@ [truetype] More macro expansions. + * src/truetype/ttinterp.c, src/truetype/ttinterp.h (EXEC_ARG_, + EXEC_ARG): Remove by replacing with expansion. + +2015-01-10 Werner Lemberg + + [truetype] More macro expansions. + Based on a patch from Behdad. * src/truetype/ttinterp.c (SKIP_Code, GET_ShortIns, NORMalize, diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index 1c5e98a..a845a9a 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -8337,7 +8337,7 @@ break; case 0x0F: /* ISECT */ - Ins_ISECT( EXEC_ARG_ args ); + Ins_ISECT( exc, args ); break; case 0x10: /* SRP0 */ @@ -8353,19 +8353,19 @@ break; case 0x13: /* SZP0 */ - Ins_SZP0( EXEC_ARG_ args ); + Ins_SZP0( exc, args ); break; case 0x14: /* SZP1 */ - Ins_SZP1( EXEC_ARG_ args ); + Ins_SZP1( exc, args ); break; case 0x15: /* SZP2 */ - Ins_SZP2( EXEC_ARG_ args ); + Ins_SZP2( exc, args ); break; case 0x16: /* SZPS */ - Ins_SZPS( EXEC_ARG_ args ); + Ins_SZPS( exc, args ); break; case 0x17: /* SLOOP */ @@ -8385,7 +8385,7 @@ break; case 0x1B: /* ELSE */ - Ins_ELSE( EXEC_ARG_ args ); + Ins_ELSE( exc, args ); break; case 0x1C: /* JMPR */ @@ -8429,77 +8429,77 @@ break; case 0x26: /* MINDEX */ - Ins_MINDEX( EXEC_ARG_ args ); + Ins_MINDEX( exc, args ); break; case 0x27: /* ALIGNPTS */ - Ins_ALIGNPTS( EXEC_ARG_ args ); + Ins_ALIGNPTS( exc, args ); break; case 0x28: /* ???? */ - Ins_UNKNOWN( EXEC_ARG_ args ); + Ins_UNKNOWN( exc, args ); break; case 0x29: /* UTP */ - Ins_UTP( EXEC_ARG_ args ); + Ins_UTP( exc, args ); break; case 0x2A: /* LOOPCALL */ - Ins_LOOPCALL( EXEC_ARG_ args ); + Ins_LOOPCALL( exc, args ); break; case 0x2B: /* CALL */ - Ins_CALL( EXEC_ARG_ args ); + Ins_CALL( exc, args ); break; case 0x2C: /* FDEF */ - Ins_FDEF( EXEC_ARG_ args ); + Ins_FDEF( exc, args ); break; case 0x2D: /* ENDF */ - Ins_ENDF( EXEC_ARG_ args ); + Ins_ENDF( exc, args ); break; case 0x2E: /* MDAP */ case 0x2F: /* MDAP */ - Ins_MDAP( EXEC_ARG_ args ); + Ins_MDAP( exc, args ); break; case 0x30: /* IUP */ case 0x31: /* IUP */ - Ins_IUP( EXEC_ARG_ args ); + Ins_IUP( exc, args ); break; case 0x32: /* SHP */ case 0x33: /* SHP */ - Ins_SHP( EXEC_ARG_ args ); + Ins_SHP( exc, args ); break; case 0x34: /* SHC */ case 0x35: /* SHC */ - Ins_SHC( EXEC_ARG_ args ); + Ins_SHC( exc, args ); break; case 0x36: /* SHZ */ case 0x37: /* SHZ */ - Ins_SHZ( EXEC_ARG_ args ); + Ins_SHZ( exc, args ); break; case 0x38: /* SHPIX */ - Ins_SHPIX( EXEC_ARG_ args ); + Ins_SHPIX( exc, args ); break; case 0x39: /* IP */ - Ins_IP( EXEC_ARG_ args ); + Ins_IP( exc, args ); break; case 0x3A: /* MSIRP */ case 0x3B: /* MSIRP */ - Ins_MSIRP( EXEC_ARG_ args ); + Ins_MSIRP( exc, args ); break; case 0x3C: /* AlignRP */ - Ins_ALIGNRP( EXEC_ARG_ args ); + Ins_ALIGNRP( exc, args ); break; case 0x3D: /* RTDG */ @@ -8508,15 +8508,15 @@ case 0x3E: /* MIAP */ case 0x3F: /* MIAP */ - Ins_MIAP( EXEC_ARG_ args ); + Ins_MIAP( exc, args ); break; case 0x40: /* NPUSHB */ - Ins_NPUSHB( EXEC_ARG_ args ); + Ins_NPUSHB( exc, args ); break; case 0x41: /* NPUSHW */ - Ins_NPUSHW( EXEC_ARG_ args ); + Ins_NPUSHW( exc, args ); break; case 0x42: /* WS */ @@ -8541,16 +8541,16 @@ case 0x46: /* GC */ case 0x47: /* GC */ - Ins_GC( EXEC_ARG_ args ); + Ins_GC( exc, args ); break; case 0x48: /* SCFS */ - Ins_SCFS( EXEC_ARG_ args ); + Ins_SCFS( exc, args ); break; case 0x49: /* MD */ case 0x4A: /* MD */ - Ins_MD( EXEC_ARG_ args ); + Ins_MD( exc, args ); break; case 0x4B: /* MPPEM */ @@ -8606,7 +8606,7 @@ break; case 0x58: /* IF */ - Ins_IF( EXEC_ARG_ args ); + Ins_IF( exc, args ); break; case 0x59: /* EIF */ @@ -8626,7 +8626,7 @@ break; case 0x5D: /* DELTAP1 */ - Ins_DELTAP( EXEC_ARG_ args ); + Ins_DELTAP( exc, args ); break; case 0x5E: /* SDB */ @@ -8689,13 +8689,13 @@ case 0x71: /* DELTAP2 */ case 0x72: /* DELTAP3 */ - Ins_DELTAP( EXEC_ARG_ args ); + Ins_DELTAP( exc, args ); break; case 0x73: /* DELTAC0 */ case 0x74: /* DELTAC1 */ case 0x75: /* DELTAC2 */ - Ins_DELTAC( EXEC_ARG_ args ); + Ins_DELTAC( exc, args ); break; case 0x76: /* SROUND */ @@ -8719,7 +8719,7 @@ break; case 0x7B: /* ???? */ - Ins_UNKNOWN( EXEC_ARG_ args ); + Ins_UNKNOWN( exc, args ); break; case 0x7C: /* RUTG */ @@ -8736,41 +8736,41 @@ break; case 0x80: /* FLIPPT */ - Ins_FLIPPT( EXEC_ARG_ args ); + Ins_FLIPPT( exc, args ); break; case 0x81: /* FLIPRGON */ - Ins_FLIPRGON( EXEC_ARG_ args ); + Ins_FLIPRGON( exc, args ); break; case 0x82: /* FLIPRGOFF */ - Ins_FLIPRGOFF( EXEC_ARG_ args ); + Ins_FLIPRGOFF( exc, args ); break; case 0x83: /* UNKNOWN */ case 0x84: /* UNKNOWN */ - Ins_UNKNOWN( EXEC_ARG_ args ); + Ins_UNKNOWN( exc, args ); break; case 0x85: /* SCANCTRL */ - Ins_SCANCTRL( EXEC_ARG_ args ); + Ins_SCANCTRL( exc, args ); break; case 0x86: /* SDPVTL */ case 0x87: /* SDPVTL */ - Ins_SDPVTL( EXEC_ARG_ args ); + Ins_SDPVTL( exc, args ); break; case 0x88: /* GETINFO */ - Ins_GETINFO( EXEC_ARG_ args ); + Ins_GETINFO( exc, args ); break; case 0x89: /* IDEF */ - Ins_IDEF( EXEC_ARG_ args ); + Ins_IDEF( exc, args ); break; case 0x8A: /* ROLL */ - Ins_ROLL( EXEC_ARG_ args ); + Ins_ROLL( exc, args ); break; case 0x8B: /* MAX */ @@ -8782,35 +8782,35 @@ break; case 0x8D: /* SCANTYPE */ - Ins_SCANTYPE( EXEC_ARG_ args ); + Ins_SCANTYPE( exc, args ); break; case 0x8E: /* INSTCTRL */ - Ins_INSTCTRL( EXEC_ARG_ args ); + Ins_INSTCTRL( exc, args ); break; case 0x8F: - Ins_UNKNOWN( EXEC_ARG_ args ); + Ins_UNKNOWN( exc, args ); break; default: if ( opcode >= 0xE0 ) - Ins_MIRP( EXEC_ARG_ args ); + Ins_MIRP( exc, args ); else if ( opcode >= 0xC0 ) - Ins_MDRP( EXEC_ARG_ args ); + Ins_MDRP( exc, args ); else if ( opcode >= 0xB8 ) - Ins_PUSHW( EXEC_ARG_ args ); + Ins_PUSHW( exc, args ); else if ( opcode >= 0xB0 ) - Ins_PUSHB( EXEC_ARG_ args ); + Ins_PUSHB( exc, args ); else - Ins_UNKNOWN( EXEC_ARG_ args ); + Ins_UNKNOWN( exc, args ); } } #else - Instruct_Dispatch[exc->opcode]( EXEC_ARG_ &exc->stack[exc->args] ); + Instruct_Dispatch[exc->opcode]( exc, &exc->stack[exc->args] ); #endif /* TT_CONFIG_OPTION_INTERPRETER_SWITCH */ diff --git a/src/truetype/ttinterp.h b/src/truetype/ttinterp.h index 50f1acd..2893c56 100644 --- a/src/truetype/ttinterp.h +++ b/src/truetype/ttinterp.h @@ -26,10 +26,6 @@ FT_BEGIN_HEADER -#define EXEC_ARG_ exc, -#define EXEC_ARG exc - - /*************************************************************************/ /* */ /* Rounding mode constants. */ -- 2.2.2 From 01be130d7383d0b7c9c88979a0d0f940a6261e79 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sat, 10 Jan 2015 23:05:37 +0100 Subject: [PATCH] [truetype] Remove TT_CONFIG_OPTION_INTERPRETER_SWITCH. Behdad suggested this code simplification, and nobody objected... * include/config/ftoption.h, devel/ftoption.h (TT_CONFIG_OPTION_INTERPRETER_SWITCH): Remove. * src/truetype/ttinterp.c [TT_CONFIG_OPTION_INTERPRETER_SWITCH]: Remove related code. (ARRAY_BOUND_ERROR): Use do-while loop. --- ChangeLog | 13 ++ devel/ftoption.h | 13 -- include/config/ftoption.h | 13 -- src/truetype/ttinterp.c | 324 +--------------------------------------------- 4 files changed, 16 insertions(+), 347 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3401b17..16f9924 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,18 @@ 2015-01-10 Werner Lemberg + [truetype] Remove TT_CONFIG_OPTION_INTERPRETER_SWITCH. + + Behdad suggested this code simplification, and nobody objected... + + * include/config/ftoption.h, devel/ftoption.h + (TT_CONFIG_OPTION_INTERPRETER_SWITCH): Remove. + + * src/truetype/ttinterp.c [TT_CONFIG_OPTION_INTERPRETER_SWITCH]: + Remove related code. + (ARRAY_BOUND_ERROR): Use do-while loop. + +2015-01-10 Werner Lemberg + [truetype] More macro expansions. * src/truetype/ttinterp.c, src/truetype/ttinterp.h (EXEC_ARG_, diff --git a/devel/ftoption.h b/devel/ftoption.h index 10027bb..5984601 100644 --- a/devel/ftoption.h +++ b/devel/ftoption.h @@ -659,19 +659,6 @@ FT_BEGIN_HEADER /*************************************************************************/ /* */ - /* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType */ - /* bytecode interpreter with a huge switch statement, rather than a call */ - /* table. This results in smaller and faster code for a number of */ - /* architectures. */ - /* */ - /* Note however that on some compiler/processor combinations, undefining */ - /* this macro will generate faster, though larger, code. */ - /* */ -#define TT_CONFIG_OPTION_INTERPRETER_SWITCH - - - /*************************************************************************/ - /* */ /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */ /* TrueType glyph loader to use Apple's definition of how to handle */ /* component offsets in composite glyphs. */ diff --git a/include/config/ftoption.h b/include/config/ftoption.h index 2b0b67e..a40e88c 100644 --- a/include/config/ftoption.h +++ b/include/config/ftoption.h @@ -659,19 +659,6 @@ FT_BEGIN_HEADER /*************************************************************************/ /* */ - /* Define TT_CONFIG_OPTION_INTERPRETER_SWITCH to compile the TrueType */ - /* bytecode interpreter with a huge switch statement, rather than a call */ - /* table. This results in smaller and faster code for a number of */ - /* architectures. */ - /* */ - /* Note however that on some compiler/processor combinations, undefining */ - /* this macro will generate faster, though larger, code. */ - /* */ -#define TT_CONFIG_OPTION_INTERPRETER_SWITCH - - - /*************************************************************************/ - /* */ /* Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the */ /* TrueType glyph loader to use Apple's definition of how to handle */ /* component offsets in composite glyphs. */ diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index a845a9a..6c6f8e8 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -3194,9 +3194,7 @@ if ( BOUNDSL( I, exc->storeSize ) ) \ { \ if ( exc->pedantic_hinting ) \ - { \ ARRAY_BOUND_ERROR; \ - } \ else \ args[0] = 0; \ } \ @@ -3215,9 +3213,7 @@ if ( BOUNDSL( I, exc->storeSize ) ) \ { \ if ( exc->pedantic_hinting ) \ - { \ ARRAY_BOUND_ERROR; \ - } \ } \ else \ exc->storage[I] = args[1]; \ @@ -3232,9 +3228,7 @@ if ( BOUNDSL( I, exc->cvtSize ) ) \ { \ if ( exc->pedantic_hinting ) \ - { \ ARRAY_BOUND_ERROR; \ - } \ else \ args[0] = 0; \ } \ @@ -3251,9 +3245,7 @@ if ( BOUNDSL( I, exc->cvtSize ) ) \ { \ if ( exc->pedantic_hinting ) \ - { \ ARRAY_BOUND_ERROR; \ - } \ } \ else \ exc->func_write_cvt( exc, I, args[1] ); \ @@ -3268,9 +3260,7 @@ if ( BOUNDSL( I, exc->cvtSize ) ) \ { \ if ( exc->pedantic_hinting ) \ - { \ ARRAY_BOUND_ERROR; \ - } \ } \ else \ exc->cvt[I] = FT_MulFix( args[1], exc->tt_metrics.scale ); \ @@ -3304,15 +3294,12 @@ args[0] = args[1]; -#ifndef TT_CONFIG_OPTION_INTERPRETER_SWITCH - - -#undef ARRAY_BOUND_ERROR #define ARRAY_BOUND_ERROR \ + do \ { \ exc->error = FT_THROW( Invalid_Reference ); \ return; \ - } + } while (0) /*************************************************************************/ @@ -4263,16 +4250,6 @@ } -#endif /* !TT_CONFIG_OPTION_INTERPRETER_SWITCH */ - - - /*************************************************************************/ - /* */ - /* The following functions are called as is within the switch statement. */ - /* */ - /*************************************************************************/ - - /*************************************************************************/ /* */ /* MINDEX[]: Move INDEXed element */ @@ -7802,292 +7779,6 @@ } -#ifndef TT_CONFIG_OPTION_INTERPRETER_SWITCH - - - static - TInstruction_Function Instruct_Dispatch[256] = - { - /* Opcodes are gathered in groups of 16. */ - /* Please keep the spaces as they are. */ - - /* SVTCA y */ Ins_SVTCA, - /* SVTCA x */ Ins_SVTCA, - /* SPvTCA y */ Ins_SPVTCA, - /* SPvTCA x */ Ins_SPVTCA, - /* SFvTCA y */ Ins_SFVTCA, - /* SFvTCA x */ Ins_SFVTCA, - /* SPvTL // */ Ins_SPVTL, - /* SPvTL + */ Ins_SPVTL, - /* SFvTL // */ Ins_SFVTL, - /* SFvTL + */ Ins_SFVTL, - /* SPvFS */ Ins_SPVFS, - /* SFvFS */ Ins_SFVFS, - /* GPV */ Ins_GPV, - /* GFV */ Ins_GFV, - /* SFvTPv */ Ins_SFVTPV, - /* ISECT */ Ins_ISECT, - - /* SRP0 */ Ins_SRP0, - /* SRP1 */ Ins_SRP1, - /* SRP2 */ Ins_SRP2, - /* SZP0 */ Ins_SZP0, - /* SZP1 */ Ins_SZP1, - /* SZP2 */ Ins_SZP2, - /* SZPS */ Ins_SZPS, - /* SLOOP */ Ins_SLOOP, - /* RTG */ Ins_RTG, - /* RTHG */ Ins_RTHG, - /* SMD */ Ins_SMD, - /* ELSE */ Ins_ELSE, - /* JMPR */ Ins_JMPR, - /* SCvTCi */ Ins_SCVTCI, - /* SSwCi */ Ins_SSWCI, - /* SSW */ Ins_SSW, - - /* DUP */ Ins_DUP, - /* POP */ Ins_POP, - /* CLEAR */ Ins_CLEAR, - /* SWAP */ Ins_SWAP, - /* DEPTH */ Ins_DEPTH, - /* CINDEX */ Ins_CINDEX, - /* MINDEX */ Ins_MINDEX, - /* AlignPTS */ Ins_ALIGNPTS, - /* INS_0x28 */ Ins_UNKNOWN, - /* UTP */ Ins_UTP, - /* LOOPCALL */ Ins_LOOPCALL, - /* CALL */ Ins_CALL, - /* FDEF */ Ins_FDEF, - /* ENDF */ Ins_ENDF, - /* MDAP[0] */ Ins_MDAP, - /* MDAP[1] */ Ins_MDAP, - - /* IUP[0] */ Ins_IUP, - /* IUP[1] */ Ins_IUP, - /* SHP[0] */ Ins_SHP, - /* SHP[1] */ Ins_SHP, - /* SHC[0] */ Ins_SHC, - /* SHC[1] */ Ins_SHC, - /* SHZ[0] */ Ins_SHZ, - /* SHZ[1] */ Ins_SHZ, - /* SHPIX */ Ins_SHPIX, - /* IP */ Ins_IP, - /* MSIRP[0] */ Ins_MSIRP, - /* MSIRP[1] */ Ins_MSIRP, - /* AlignRP */ Ins_ALIGNRP, - /* RTDG */ Ins_RTDG, - /* MIAP[0] */ Ins_MIAP, - /* MIAP[1] */ Ins_MIAP, - - /* NPushB */ Ins_NPUSHB, - /* NPushW */ Ins_NPUSHW, - /* WS */ Ins_WS, - /* RS */ Ins_RS, - /* WCvtP */ Ins_WCVTP, - /* RCvt */ Ins_RCVT, - /* GC[0] */ Ins_GC, - /* GC[1] */ Ins_GC, - /* SCFS */ Ins_SCFS, - /* MD[0] */ Ins_MD, - /* MD[1] */ Ins_MD, - /* MPPEM */ Ins_MPPEM, - /* MPS */ Ins_MPS, - /* FlipON */ Ins_FLIPON, - /* FlipOFF */ Ins_FLIPOFF, - /* DEBUG */ Ins_DEBUG, - - /* LT */ Ins_LT, - /* LTEQ */ Ins_LTEQ, - /* GT */ Ins_GT, - /* GTEQ */ Ins_GTEQ, - /* EQ */ Ins_EQ, - /* NEQ */ Ins_NEQ, - /* ODD */ Ins_ODD, - /* EVEN */ Ins_EVEN, - /* IF */ Ins_IF, - /* EIF */ Ins_EIF, - /* AND */ Ins_AND, - /* OR */ Ins_OR, - /* NOT */ Ins_NOT, - /* DeltaP1 */ Ins_DELTAP, - /* SDB */ Ins_SDB, - /* SDS */ Ins_SDS, - - /* ADD */ Ins_ADD, - /* SUB */ Ins_SUB, - /* DIV */ Ins_DIV, - /* MUL */ Ins_MUL, - /* ABS */ Ins_ABS, - /* NEG */ Ins_NEG, - /* FLOOR */ Ins_FLOOR, - /* CEILING */ Ins_CEILING, - /* ROUND[0] */ Ins_ROUND, - /* ROUND[1] */ Ins_ROUND, - /* ROUND[2] */ Ins_ROUND, - /* ROUND[3] */ Ins_ROUND, - /* NROUND[0] */ Ins_NROUND, - /* NROUND[1] */ Ins_NROUND, - /* NROUND[2] */ Ins_NROUND, - /* NROUND[3] */ Ins_NROUND, - - /* WCvtF */ Ins_WCVTF, - /* DeltaP2 */ Ins_DELTAP, - /* DeltaP3 */ Ins_DELTAP, - /* DeltaCn[0] */ Ins_DELTAC, - /* DeltaCn[1] */ Ins_DELTAC, - /* DeltaCn[2] */ Ins_DELTAC, - /* SROUND */ Ins_SROUND, - /* S45Round */ Ins_S45ROUND, - /* JROT */ Ins_JROT, - /* JROF */ Ins_JROF, - /* ROFF */ Ins_ROFF, - /* INS_0x7B */ Ins_UNKNOWN, - /* RUTG */ Ins_RUTG, - /* RDTG */ Ins_RDTG, - /* SANGW */ Ins_SANGW, - /* AA */ Ins_AA, - - /* FlipPT */ Ins_FLIPPT, - /* FlipRgON */ Ins_FLIPRGON, - /* FlipRgOFF */ Ins_FLIPRGOFF, - /* INS_0x83 */ Ins_UNKNOWN, - /* INS_0x84 */ Ins_UNKNOWN, - /* ScanCTRL */ Ins_SCANCTRL, - /* SDPVTL[0] */ Ins_SDPVTL, - /* SDPVTL[1] */ Ins_SDPVTL, - /* GetINFO */ Ins_GETINFO, - /* IDEF */ Ins_IDEF, - /* ROLL */ Ins_ROLL, - /* MAX */ Ins_MAX, - /* MIN */ Ins_MIN, - /* ScanTYPE */ Ins_SCANTYPE, - /* InstCTRL */ Ins_INSTCTRL, - /* INS_0x8F */ Ins_UNKNOWN, - - /* INS_0x90 */ Ins_UNKNOWN, - /* INS_0x91 */ Ins_UNKNOWN, - /* INS_0x92 */ Ins_UNKNOWN, - /* INS_0x93 */ Ins_UNKNOWN, - /* INS_0x94 */ Ins_UNKNOWN, - /* INS_0x95 */ Ins_UNKNOWN, - /* INS_0x96 */ Ins_UNKNOWN, - /* INS_0x97 */ Ins_UNKNOWN, - /* INS_0x98 */ Ins_UNKNOWN, - /* INS_0x99 */ Ins_UNKNOWN, - /* INS_0x9A */ Ins_UNKNOWN, - /* INS_0x9B */ Ins_UNKNOWN, - /* INS_0x9C */ Ins_UNKNOWN, - /* INS_0x9D */ Ins_UNKNOWN, - /* INS_0x9E */ Ins_UNKNOWN, - /* INS_0x9F */ Ins_UNKNOWN, - - /* INS_0xA0 */ Ins_UNKNOWN, - /* INS_0xA1 */ Ins_UNKNOWN, - /* INS_0xA2 */ Ins_UNKNOWN, - /* INS_0xA3 */ Ins_UNKNOWN, - /* INS_0xA4 */ Ins_UNKNOWN, - /* INS_0xA5 */ Ins_UNKNOWN, - /* INS_0xA6 */ Ins_UNKNOWN, - /* INS_0xA7 */ Ins_UNKNOWN, - /* INS_0xA8 */ Ins_UNKNOWN, - /* INS_0xA9 */ Ins_UNKNOWN, - /* INS_0xAA */ Ins_UNKNOWN, - /* INS_0xAB */ Ins_UNKNOWN, - /* INS_0xAC */ Ins_UNKNOWN, - /* INS_0xAD */ Ins_UNKNOWN, - /* INS_0xAE */ Ins_UNKNOWN, - /* INS_0xAF */ Ins_UNKNOWN, - - /* PushB[0] */ Ins_PUSHB, - /* PushB[1] */ Ins_PUSHB, - /* PushB[2] */ Ins_PUSHB, - /* PushB[3] */ Ins_PUSHB, - /* PushB[4] */ Ins_PUSHB, - /* PushB[5] */ Ins_PUSHB, - /* PushB[6] */ Ins_PUSHB, - /* PushB[7] */ Ins_PUSHB, - /* PushW[0] */ Ins_PUSHW, - /* PushW[1] */ Ins_PUSHW, - /* PushW[2] */ Ins_PUSHW, - /* PushW[3] */ Ins_PUSHW, - /* PushW[4] */ Ins_PUSHW, - /* PushW[5] */ Ins_PUSHW, - /* PushW[6] */ Ins_PUSHW, - /* PushW[7] */ Ins_PUSHW, - - /* MDRP[00] */ Ins_MDRP, - /* MDRP[01] */ Ins_MDRP, - /* MDRP[02] */ Ins_MDRP, - /* MDRP[03] */ Ins_MDRP, - /* MDRP[04] */ Ins_MDRP, - /* MDRP[05] */ Ins_MDRP, - /* MDRP[06] */ Ins_MDRP, - /* MDRP[07] */ Ins_MDRP, - /* MDRP[08] */ Ins_MDRP, - /* MDRP[09] */ Ins_MDRP, - /* MDRP[10] */ Ins_MDRP, - /* MDRP[11] */ Ins_MDRP, - /* MDRP[12] */ Ins_MDRP, - /* MDRP[13] */ Ins_MDRP, - /* MDRP[14] */ Ins_MDRP, - /* MDRP[15] */ Ins_MDRP, - - /* MDRP[16] */ Ins_MDRP, - /* MDRP[17] */ Ins_MDRP, - /* MDRP[18] */ Ins_MDRP, - /* MDRP[19] */ Ins_MDRP, - /* MDRP[20] */ Ins_MDRP, - /* MDRP[21] */ Ins_MDRP, - /* MDRP[22] */ Ins_MDRP, - /* MDRP[23] */ Ins_MDRP, - /* MDRP[24] */ Ins_MDRP, - /* MDRP[25] */ Ins_MDRP, - /* MDRP[26] */ Ins_MDRP, - /* MDRP[27] */ Ins_MDRP, - /* MDRP[28] */ Ins_MDRP, - /* MDRP[29] */ Ins_MDRP, - /* MDRP[30] */ Ins_MDRP, - /* MDRP[31] */ Ins_MDRP, - - /* MIRP[00] */ Ins_MIRP, - /* MIRP[01] */ Ins_MIRP, - /* MIRP[02] */ Ins_MIRP, - /* MIRP[03] */ Ins_MIRP, - /* MIRP[04] */ Ins_MIRP, - /* MIRP[05] */ Ins_MIRP, - /* MIRP[06] */ Ins_MIRP, - /* MIRP[07] */ Ins_MIRP, - /* MIRP[08] */ Ins_MIRP, - /* MIRP[09] */ Ins_MIRP, - /* MIRP[10] */ Ins_MIRP, - /* MIRP[11] */ Ins_MIRP, - /* MIRP[12] */ Ins_MIRP, - /* MIRP[13] */ Ins_MIRP, - /* MIRP[14] */ Ins_MIRP, - /* MIRP[15] */ Ins_MIRP, - - /* MIRP[16] */ Ins_MIRP, - /* MIRP[17] */ Ins_MIRP, - /* MIRP[18] */ Ins_MIRP, - /* MIRP[19] */ Ins_MIRP, - /* MIRP[20] */ Ins_MIRP, - /* MIRP[21] */ Ins_MIRP, - /* MIRP[22] */ Ins_MIRP, - /* MIRP[23] */ Ins_MIRP, - /* MIRP[24] */ Ins_MIRP, - /* MIRP[25] */ Ins_MIRP, - /* MIRP[26] */ Ins_MIRP, - /* MIRP[27] */ Ins_MIRP, - /* MIRP[28] */ Ins_MIRP, - /* MIRP[29] */ Ins_MIRP, - /* MIRP[30] */ Ins_MIRP, - /* MIRP[31] */ Ins_MIRP - }; - - -#endif /* !TT_CONFIG_OPTION_INTERPRETER_SWITCH */ - - /*************************************************************************/ /* */ /* RUN */ @@ -8253,8 +7944,6 @@ #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ -#ifdef TT_CONFIG_OPTION_INTERPRETER_SWITCH - { FT_Long* args = exc->stack + exc->args; FT_Byte opcode = exc->opcode; @@ -8524,7 +8213,7 @@ break; Set_Invalid_Ref: - exc->error = FT_THROW( Invalid_Reference ); + exc->error = FT_THROW( Invalid_Reference ); break; case 0x43: /* RS */ @@ -8805,15 +8494,8 @@ else Ins_UNKNOWN( exc, args ); } - } -#else - - Instruct_Dispatch[exc->opcode]( exc, &exc->stack[exc->args] ); - -#endif /* TT_CONFIG_OPTION_INTERPRETER_SWITCH */ - if ( exc->error ) { switch ( exc->error ) -- 2.2.2 From eb3413684f9e2a114cd38ab0d49a5d56f52752b2 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sun, 11 Jan 2015 00:23:27 +0100 Subject: [PATCH] [truetype] More macro expansions. Based on a patch from Behdad. * src/truetype/ttinterp.c (DO_*): Expand macros into corresponding `Ins_*' functions. (TT_RunIns): Replace `DO_*' macros with `Ins_*' function calls. (ARRAY_BOUND_ERROR): Remove second definition, which is no longer needed. (Ins_SVTCA, Ins_SPVTCA, Ins_SFVTCA): Replaced with... (Ins_SxyTCA): New function. --- ChangeLog | 14 + src/truetype/ttinterp.c | 1202 ++++++++++++++++------------------------------- 2 files changed, 425 insertions(+), 791 deletions(-) diff --git a/ChangeLog b/ChangeLog index 16f9924..3ca03df 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,19 @@ 2015-01-10 Werner Lemberg + [truetype] More macro expansions. + + Based on a patch from Behdad. + + * src/truetype/ttinterp.c (DO_*): Expand macros into corresponding + `Ins_*' functions. + (TT_RunIns): Replace `DO_*' macros with `Ins_*' function calls. + (ARRAY_BOUND_ERROR): Remove second definition, which is no longer + needed. + (Ins_SVTCA, Ins_SPVTCA, Ins_SFVTCA): Replaced with... + (Ins_SxyTCA): New function. + +2015-01-10 Werner Lemberg + [truetype] Remove TT_CONFIG_OPTION_INTERPRETER_SWITCH. Behdad suggested this code simplification, and nobody objected... diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index 6c6f8e8..c666049 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -2699,601 +2699,6 @@ } - /* When not using the big switch statements, the interpreter uses a */ - /* call table defined later below in this source. Each opcode must */ - /* thus have a corresponding function, even trivial ones. */ - /* */ - /* They are all defined there. */ - -#define DO_SVTCA \ - { \ - FT_Short A, B; \ - \ - \ - A = (FT_Short)( exc->opcode & 1 ) << 14; \ - B = A ^ (FT_Short)0x4000; \ - \ - exc->GS.freeVector.x = A; \ - exc->GS.projVector.x = A; \ - exc->GS.dualVector.x = A; \ - \ - exc->GS.freeVector.y = B; \ - exc->GS.projVector.y = B; \ - exc->GS.dualVector.y = B; \ - \ - Compute_Funcs( exc ); \ - } - - -#define DO_SPVTCA \ - { \ - FT_Short A, B; \ - \ - \ - A = (FT_Short)( exc->opcode & 1 ) << 14; \ - B = A ^ (FT_Short)0x4000; \ - \ - exc->GS.projVector.x = A; \ - exc->GS.dualVector.x = A; \ - \ - exc->GS.projVector.y = B; \ - exc->GS.dualVector.y = B; \ - \ - GUESS_VECTOR( freeVector ); \ - \ - Compute_Funcs( exc ); \ - } - - -#define DO_SFVTCA \ - { \ - FT_Short A, B; \ - \ - \ - A = (FT_Short)( exc->opcode & 1 ) << 14; \ - B = A ^ (FT_Short)0x4000; \ - \ - exc->GS.freeVector.x = A; \ - exc->GS.freeVector.y = B; \ - \ - GUESS_VECTOR( projVector ); \ - \ - Compute_Funcs( exc ); \ - } - - -#define DO_SPVTL \ - if ( Ins_SxVTL( exc, \ - (FT_UShort)args[1], \ - (FT_UShort)args[0], \ - exc->opcode, \ - &exc->GS.projVector ) == SUCCESS ) \ - { \ - exc->GS.dualVector = exc->GS.projVector; \ - GUESS_VECTOR( freeVector ); \ - Compute_Funcs( exc ); \ - } - - -#define DO_SFVTL \ - if ( Ins_SxVTL( exc, \ - (FT_UShort)args[1], \ - (FT_UShort)args[0], \ - exc->opcode, \ - &exc->GS.freeVector ) == SUCCESS ) \ - { \ - GUESS_VECTOR( projVector ); \ - Compute_Funcs( exc ); \ - } - - -#define DO_SFVTPV \ - GUESS_VECTOR( projVector ); \ - exc->GS.freeVector = exc->GS.projVector; \ - Compute_Funcs( exc ); - - -#define DO_SPVFS \ - { \ - FT_Short S; \ - FT_Long X, Y; \ - \ - \ - /* Only use low 16bits, then sign extend */ \ - S = (FT_Short)args[1]; \ - Y = (FT_Long)S; \ - S = (FT_Short)args[0]; \ - X = (FT_Long)S; \ - \ - Normalize( exc, X, Y, &exc->GS.projVector ); \ - \ - exc->GS.dualVector = exc->GS.projVector; \ - GUESS_VECTOR( freeVector ); \ - Compute_Funcs( exc ); \ - } - - -#define DO_SFVFS \ - { \ - FT_Short S; \ - FT_Long X, Y; \ - \ - \ - /* Only use low 16bits, then sign extend */ \ - S = (FT_Short)args[1]; \ - Y = (FT_Long)S; \ - S = (FT_Short)args[0]; \ - X = S; \ - \ - Normalize( exc, X, Y, &exc->GS.freeVector ); \ - GUESS_VECTOR( projVector ); \ - Compute_Funcs( exc ); \ - } - - -#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING -#define DO_GPV \ - if ( exc->face->unpatented_hinting ) \ - { \ - args[0] = exc->GS.both_x_axis ? 0x4000 : 0; \ - args[1] = exc->GS.both_x_axis ? 0 : 0x4000; \ - } \ - else \ - { \ - args[0] = exc->GS.projVector.x; \ - args[1] = exc->GS.projVector.y; \ - } -#else -#define DO_GPV \ - args[0] = exc->GS.projVector.x; \ - args[1] = exc->GS.projVector.y; -#endif - - -#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING -#define DO_GFV \ - if ( exc->face->unpatented_hinting ) \ - { \ - args[0] = exc->GS.both_x_axis ? 0x4000 : 0; \ - args[1] = exc->GS.both_x_axis ? 0 : 0x4000; \ - } \ - else \ - { \ - args[0] = exc->GS.freeVector.x; \ - args[1] = exc->GS.freeVector.y; \ - } -#else -#define DO_GFV \ - args[0] = exc->GS.freeVector.x; \ - args[1] = exc->GS.freeVector.y; -#endif - - -#define DO_SRP0 \ - exc->GS.rp0 = (FT_UShort)args[0]; - - -#define DO_SRP1 \ - exc->GS.rp1 = (FT_UShort)args[0]; - - -#define DO_SRP2 \ - exc->GS.rp2 = (FT_UShort)args[0]; - - -#define DO_RTHG \ - exc->GS.round_state = TT_Round_To_Half_Grid; \ - exc->func_round = (TT_Round_Func)Round_To_Half_Grid; - - -#define DO_RTG \ - exc->GS.round_state = TT_Round_To_Grid; \ - exc->func_round = (TT_Round_Func)Round_To_Grid; - - -#define DO_RTDG \ - exc->GS.round_state = TT_Round_To_Double_Grid; \ - exc->func_round = (TT_Round_Func)Round_To_Double_Grid; - - -#define DO_RUTG \ - exc->GS.round_state = TT_Round_Up_To_Grid; \ - exc->func_round = (TT_Round_Func)Round_Up_To_Grid; - - -#define DO_RDTG \ - exc->GS.round_state = TT_Round_Down_To_Grid; \ - exc->func_round = (TT_Round_Func)Round_Down_To_Grid; - - -#define DO_ROFF \ - exc->GS.round_state = TT_Round_Off; \ - exc->func_round = (TT_Round_Func)Round_None; - - -#define DO_SROUND \ - SetSuperRound( exc, 0x4000, args[0] ); \ - exc->GS.round_state = TT_Round_Super; \ - exc->func_round = (TT_Round_Func)Round_Super; - - -#define DO_S45ROUND \ - SetSuperRound( exc, 0x2D41, args[0] ); \ - exc->GS.round_state = TT_Round_Super_45; \ - exc->func_round = (TT_Round_Func)Round_Super_45; - - -#define DO_SLOOP \ - if ( args[0] < 0 ) \ - exc->error = FT_THROW( Bad_Argument ); \ - else \ - exc->GS.loop = args[0]; - - -#define DO_SMD \ - exc->GS.minimum_distance = args[0]; - - -#define DO_SCVTCI \ - exc->GS.control_value_cutin = (FT_F26Dot6)args[0]; - - -#define DO_SSWCI \ - exc->GS.single_width_cutin = (FT_F26Dot6)args[0]; - - -#define DO_SSW \ - exc->GS.single_width_value = FT_MulFix( args[0], \ - exc->tt_metrics.scale ); - - -#define DO_FLIPON \ - exc->GS.auto_flip = TRUE; - - -#define DO_FLIPOFF \ - exc->GS.auto_flip = FALSE; - - -#define DO_SDB \ - exc->GS.delta_base = (FT_UShort)args[0]; - - -#define DO_SDS \ - if ( (FT_ULong)args[0] > 6UL ) \ - exc->error = FT_THROW( Bad_Argument ); \ - else \ - exc->GS.delta_shift = (FT_UShort)args[0]; - - -#define DO_MD /* nothing */ - - -#define DO_MPPEM \ - args[0] = exc->func_cur_ppem( exc ); - - - /* Note: The pointSize should be irrelevant in a given font program; */ - /* we thus decide to return only the ppem. */ -#if 0 - -#define DO_MPS \ - args[0] = exc->metrics.pointSize; - -#else - -#define DO_MPS \ - args[0] = exc->func_cur_ppem( exc ); - -#endif /* 0 */ - - -#define DO_DUP \ - args[1] = args[0]; - - -#define DO_CLEAR \ - exc->new_top = 0; - - -#define DO_SWAP \ - { \ - FT_Long L; \ - \ - \ - L = args[0]; \ - args[0] = args[1]; \ - args[1] = L; \ - } - - -#define DO_DEPTH \ - args[0] = exc->top; - - -#define DO_CINDEX \ - { \ - FT_Long L; \ - \ - \ - L = args[0]; \ - \ - if ( L <= 0 || L > exc->args ) \ - { \ - if ( exc->pedantic_hinting ) \ - exc->error = FT_THROW( Invalid_Reference ); \ - args[0] = 0; \ - } \ - else \ - args[0] = exc->stack[exc->args - L]; \ - } - - -#define DO_JROT \ - if ( args[1] != 0 ) \ - { \ - if ( args[0] == 0 && exc->args == 0 ) \ - exc->error = FT_THROW( Bad_Argument ); \ - exc->IP += args[0]; \ - if ( exc->IP < 0 || \ - ( exc->callTop > 0 && \ - exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) \ - exc->error = FT_THROW( Bad_Argument ); \ - exc->step_ins = FALSE; \ - } - - -#define DO_JMPR \ - if ( args[0] == 0 && exc->args == 0 ) \ - exc->error = FT_THROW( Bad_Argument ); \ - exc->IP += args[0]; \ - if ( exc->IP < 0 || \ - ( exc->callTop > 0 && \ - exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) \ - exc->error = FT_THROW( Bad_Argument ); \ - exc->step_ins = FALSE; - - -#define DO_JROF \ - if ( args[1] == 0 ) \ - { \ - if ( args[0] == 0 && exc->args == 0 ) \ - exc->error = FT_THROW( Bad_Argument ); \ - exc->IP += args[0]; \ - if ( exc->IP < 0 || \ - ( exc->callTop > 0 && \ - exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) \ - exc->error = FT_THROW( Bad_Argument ); \ - exc->step_ins = FALSE; \ - } - - -#define DO_LT \ - args[0] = ( args[0] < args[1] ); - - -#define DO_LTEQ \ - args[0] = ( args[0] <= args[1] ); - - -#define DO_GT \ - args[0] = ( args[0] > args[1] ); - - -#define DO_GTEQ \ - args[0] = ( args[0] >= args[1] ); - - -#define DO_EQ \ - args[0] = ( args[0] == args[1] ); - - -#define DO_NEQ \ - args[0] = ( args[0] != args[1] ); - - -#define DO_ODD \ - args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 64 ); - - -#define DO_EVEN \ - args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 0 ); - - -#define DO_AND \ - args[0] = ( args[0] && args[1] ); - - -#define DO_OR \ - args[0] = ( args[0] || args[1] ); - - -#define DO_NOT \ - args[0] = !args[0]; - - -#define DO_ADD \ - args[0] += args[1]; - - -#define DO_SUB \ - args[0] -= args[1]; - - -#define DO_DIV \ - if ( args[1] == 0 ) \ - exc->error = FT_THROW( Divide_By_Zero ); \ - else \ - args[0] = FT_MulDiv_No_Round( args[0], 64L, args[1] ); - - -#define DO_MUL \ - args[0] = FT_MulDiv( args[0], args[1], 64L ); - - -#define DO_ABS \ - args[0] = FT_ABS( args[0] ); - - -#define DO_NEG \ - args[0] = -args[0]; - - -#define DO_FLOOR \ - args[0] = FT_PIX_FLOOR( args[0] ); - - -#define DO_CEILING \ - args[0] = FT_PIX_CEIL( args[0] ); - -#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - -#define DO_RS \ - { \ - FT_ULong I = (FT_ULong)args[0]; \ - \ - \ - if ( BOUNDSL( I, exc->storeSize ) ) \ - { \ - if ( exc->pedantic_hinting ) \ - ARRAY_BOUND_ERROR; \ - else \ - args[0] = 0; \ - } \ - else \ - { \ - /* subpixel hinting - avoid Typeman Dstroke and */ \ - /* IStroke and Vacuform rounds */ \ - \ - if ( SUBPIXEL_HINTING && \ - exc->ignore_x_mode && \ - ( ( I == 24 && \ - ( exc->face->sph_found_func_flags & \ - ( SPH_FDEF_SPACING_1 | \ - SPH_FDEF_SPACING_2 ) ) ) || \ - ( I == 22 && \ - ( exc->sph_in_func_flags & \ - SPH_FDEF_TYPEMAN_STROKES ) ) || \ - ( I == 8 && \ - ( exc->face->sph_found_func_flags & \ - SPH_FDEF_VACUFORM_ROUND_1 ) && \ - exc->iup_called ) ) ) \ - args[0] = 0; \ - else \ - args[0] = exc->storage[I]; \ - } \ - } - -#else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - -#define DO_RS \ - { \ - FT_ULong I = (FT_ULong)args[0]; \ - \ - \ - if ( BOUNDSL( I, exc->storeSize ) ) \ - { \ - if ( exc->pedantic_hinting ) \ - ARRAY_BOUND_ERROR; \ - else \ - args[0] = 0; \ - } \ - else \ - args[0] = exc->storage[I]; \ - } - -#endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - - -#define DO_WS \ - { \ - FT_ULong I = (FT_ULong)args[0]; \ - \ - \ - if ( BOUNDSL( I, exc->storeSize ) ) \ - { \ - if ( exc->pedantic_hinting ) \ - ARRAY_BOUND_ERROR; \ - } \ - else \ - exc->storage[I] = args[1]; \ - } - - -#define DO_RCVT \ - { \ - FT_ULong I = (FT_ULong)args[0]; \ - \ - \ - if ( BOUNDSL( I, exc->cvtSize ) ) \ - { \ - if ( exc->pedantic_hinting ) \ - ARRAY_BOUND_ERROR; \ - else \ - args[0] = 0; \ - } \ - else \ - args[0] = exc->func_read_cvt( exc, I ); \ - } - - -#define DO_WCVTP \ - { \ - FT_ULong I = (FT_ULong)args[0]; \ - \ - \ - if ( BOUNDSL( I, exc->cvtSize ) ) \ - { \ - if ( exc->pedantic_hinting ) \ - ARRAY_BOUND_ERROR; \ - } \ - else \ - exc->func_write_cvt( exc, I, args[1] ); \ - } - - -#define DO_WCVTF \ - { \ - FT_ULong I = (FT_ULong)args[0]; \ - \ - \ - if ( BOUNDSL( I, exc->cvtSize ) ) \ - { \ - if ( exc->pedantic_hinting ) \ - ARRAY_BOUND_ERROR; \ - } \ - else \ - exc->cvt[I] = FT_MulFix( args[1], exc->tt_metrics.scale ); \ - } - - -#define DO_DEBUG \ - exc->error = FT_THROW( Debug_OpCode ); - - -#define DO_ROUND \ - args[0] = exc->func_round( \ - exc, \ - args[0], \ - exc->tt_metrics.compensations[exc->opcode - 0x68] ); - - -#define DO_NROUND \ - args[0] = Round_None( exc, \ - args[0], \ - exc->tt_metrics.compensations[exc->opcode - 0x6C] ); - - -#define DO_MAX \ - if ( args[1] > args[0] ) \ - args[0] = args[1]; - - -#define DO_MIN \ - if ( args[1] < args[0] ) \ - args[0] = args[1]; - - #define ARRAY_BOUND_ERROR \ do \ { \ @@ -3308,36 +2713,48 @@ /* Opcode range: 0x00-0x01 */ /* Stack: --> */ /* */ - static void - Ins_SVTCA( INS_ARG ) - { - DO_SVTCA - } - - - /*************************************************************************/ - /* */ /* SPVTCA[a]: Set PVector to Coordinate Axis */ /* Opcode range: 0x02-0x03 */ /* Stack: --> */ /* */ - static void - Ins_SPVTCA( INS_ARG ) - { - DO_SPVTCA - } - - - /*************************************************************************/ - /* */ /* SFVTCA[a]: Set FVector to Coordinate Axis */ /* Opcode range: 0x04-0x05 */ /* Stack: --> */ /* */ static void - Ins_SFVTCA( INS_ARG ) + Ins_SxyTCA( INS_ARG ) { - DO_SFVTCA + FT_Short AA, BB; + FT_Byte opcode = exc->opcode; + + + AA = (FT_Short)( ( opcode & 1 ) << 14 ); + BB = (FT_Short)( AA ^ 0x4000 ); + + if ( opcode < 4 ) + { + exc->GS.projVector.x = AA; + exc->GS.projVector.y = BB; + + exc->GS.dualVector.x = AA; + exc->GS.dualVector.y = BB; + } + else + { + GUESS_VECTOR( projVector ); + } + + if ( ( opcode & 2 ) == 0 ) + { + exc->GS.freeVector.x = AA; + exc->GS.freeVector.y = BB; + } + else + { + GUESS_VECTOR( freeVector ); + } + + Compute_Funcs( exc ); } @@ -3350,7 +2767,16 @@ static void Ins_SPVTL( INS_ARG ) { - DO_SPVTL + if ( Ins_SxVTL( exc, + (FT_UShort)args[1], + (FT_UShort)args[0], + exc->opcode, + &exc->GS.projVector ) == SUCCESS ) + { + exc->GS.dualVector = exc->GS.projVector; + GUESS_VECTOR( freeVector ); + Compute_Funcs( exc ); + } } @@ -3363,7 +2789,15 @@ static void Ins_SFVTL( INS_ARG ) { - DO_SFVTL + if ( Ins_SxVTL( exc, + (FT_UShort)args[1], + (FT_UShort)args[0], + exc->opcode, + &exc->GS.freeVector ) == SUCCESS ) + { + GUESS_VECTOR( projVector ); + Compute_Funcs( exc ); + } } @@ -3376,7 +2810,9 @@ static void Ins_SFVTPV( INS_ARG ) { - DO_SFVTPV + GUESS_VECTOR( projVector ); + exc->GS.freeVector = exc->GS.projVector; + Compute_Funcs( exc ); } @@ -3389,7 +2825,21 @@ static void Ins_SPVFS( INS_ARG ) { - DO_SPVFS + FT_Short S; + FT_Long X, Y; + + + /* Only use low 16bits, then sign extend */ + S = (FT_Short)args[1]; + Y = (FT_Long)S; + S = (FT_Short)args[0]; + X = (FT_Long)S; + + Normalize( exc, X, Y, &exc->GS.projVector ); + + exc->GS.dualVector = exc->GS.projVector; + GUESS_VECTOR( freeVector ); + Compute_Funcs( exc ); } @@ -3402,7 +2852,19 @@ static void Ins_SFVFS( INS_ARG ) { - DO_SFVFS + FT_Short S; + FT_Long X, Y; + + + /* Only use low 16bits, then sign extend */ + S = (FT_Short)args[1]; + Y = (FT_Long)S; + S = (FT_Short)args[0]; + X = S; + + Normalize( exc, X, Y, &exc->GS.freeVector ); + GUESS_VECTOR( projVector ); + Compute_Funcs( exc ); } @@ -3415,7 +2877,21 @@ static void Ins_GPV( INS_ARG ) { - DO_GPV +#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING + if ( exc->face->unpatented_hinting ) + { + args[0] = exc->GS.both_x_axis ? 0x4000 : 0; + args[1] = exc->GS.both_x_axis ? 0 : 0x4000; + } + else + { + args[0] = exc->GS.projVector.x; + args[1] = exc->GS.projVector.y; + } +#else + args[0] = exc->GS.projVector.x; + args[1] = exc->GS.projVector.y; +#endif } @@ -3427,7 +2903,21 @@ static void Ins_GFV( INS_ARG ) { - DO_GFV +#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING + if ( exc->face->unpatented_hinting ) + { + args[0] = exc->GS.both_x_axis ? 0x4000 : 0; + args[1] = exc->GS.both_x_axis ? 0 : 0x4000; + } + else + { + args[0] = exc->GS.freeVector.x; + args[1] = exc->GS.freeVector.y; + } +#else + args[0] = exc->GS.freeVector.x; + args[1] = exc->GS.freeVector.y; +#endif } @@ -3440,7 +2930,7 @@ static void Ins_SRP0( INS_ARG ) { - DO_SRP0 + exc->GS.rp0 = (FT_UShort)args[0]; } @@ -3453,7 +2943,7 @@ static void Ins_SRP1( INS_ARG ) { - DO_SRP1 + exc->GS.rp1 = (FT_UShort)args[0]; } @@ -3466,7 +2956,7 @@ static void Ins_SRP2( INS_ARG ) { - DO_SRP2 + exc->GS.rp2 = (FT_UShort)args[0]; } @@ -3479,7 +2969,8 @@ static void Ins_RTHG( INS_ARG ) { - DO_RTHG + exc->GS.round_state = TT_Round_To_Half_Grid; + exc->func_round = (TT_Round_Func)Round_To_Half_Grid; } @@ -3492,7 +2983,8 @@ static void Ins_RTG( INS_ARG ) { - DO_RTG + exc->GS.round_state = TT_Round_To_Grid; + exc->func_round = (TT_Round_Func)Round_To_Grid; } @@ -3504,7 +2996,8 @@ static void Ins_RTDG( INS_ARG ) { - DO_RTDG + exc->GS.round_state = TT_Round_To_Double_Grid; + exc->func_round = (TT_Round_Func)Round_To_Double_Grid; } @@ -3516,7 +3009,8 @@ static void Ins_RUTG( INS_ARG ) { - DO_RUTG + exc->GS.round_state = TT_Round_Up_To_Grid; + exc->func_round = (TT_Round_Func)Round_Up_To_Grid; } @@ -3529,7 +3023,8 @@ static void Ins_RDTG( INS_ARG ) { - DO_RDTG + exc->GS.round_state = TT_Round_Down_To_Grid; + exc->func_round = (TT_Round_Func)Round_Down_To_Grid; } @@ -3542,7 +3037,8 @@ static void Ins_ROFF( INS_ARG ) { - DO_ROFF + exc->GS.round_state = TT_Round_Off; + exc->func_round = (TT_Round_Func)Round_None; } @@ -3555,7 +3051,10 @@ static void Ins_SROUND( INS_ARG ) { - DO_SROUND + SetSuperRound( exc, 0x4000, args[0] ); + + exc->GS.round_state = TT_Round_Super; + exc->func_round = (TT_Round_Func)Round_Super; } @@ -3568,7 +3067,10 @@ static void Ins_S45ROUND( INS_ARG ) { - DO_S45ROUND + SetSuperRound( exc, 0x2D41, args[0] ); + + exc->GS.round_state = TT_Round_Super_45; + exc->func_round = (TT_Round_Func)Round_Super_45; } @@ -3581,7 +3083,10 @@ static void Ins_SLOOP( INS_ARG ) { - DO_SLOOP + if ( args[0] < 0 ) + exc->error = FT_THROW( Bad_Argument ); + else + exc->GS.loop = args[0]; } @@ -3594,7 +3099,7 @@ static void Ins_SMD( INS_ARG ) { - DO_SMD + exc->GS.minimum_distance = args[0]; } @@ -3607,7 +3112,7 @@ static void Ins_SCVTCI( INS_ARG ) { - DO_SCVTCI + exc->GS.control_value_cutin = (FT_F26Dot6)args[0]; } @@ -3620,7 +3125,7 @@ static void Ins_SSWCI( INS_ARG ) { - DO_SSWCI + exc->GS.single_width_cutin = (FT_F26Dot6)args[0]; } @@ -3633,7 +3138,8 @@ static void Ins_SSW( INS_ARG ) { - DO_SSW + exc->GS.single_width_value = FT_MulFix( args[0], + exc->tt_metrics.scale ); } @@ -3646,7 +3152,7 @@ static void Ins_FLIPON( INS_ARG ) { - DO_FLIPON + exc->GS.auto_flip = TRUE; } @@ -3659,7 +3165,7 @@ static void Ins_FLIPOFF( INS_ARG ) { - DO_FLIPOFF + exc->GS.auto_flip = FALSE; } @@ -3685,7 +3191,7 @@ static void Ins_SDB( INS_ARG ) { - DO_SDB + exc->GS.delta_base = (FT_UShort)args[0]; } @@ -3698,7 +3204,10 @@ static void Ins_SDS( INS_ARG ) { - DO_SDS + if ( (FT_ULong)args[0] > 6UL ) + exc->error = FT_THROW( Bad_Argument ); + else + exc->GS.delta_shift = (FT_UShort)args[0]; } @@ -3711,7 +3220,7 @@ static void Ins_MPPEM( INS_ARG ) { - DO_MPPEM + args[0] = exc->func_cur_ppem( exc ); } @@ -3724,7 +3233,13 @@ static void Ins_MPS( INS_ARG ) { - DO_MPS + /* Note: The point size should be irrelevant in a given font program; */ + /* we thus decide to return only the PPEM value. */ +#if 0 + args[0] = exc->metrics.pointSize; +#else + args[0] = exc->func_cur_ppem( exc ); +#endif } @@ -3737,7 +3252,7 @@ static void Ins_DUP( INS_ARG ) { - DO_DUP + args[1] = args[0]; } @@ -3763,7 +3278,7 @@ static void Ins_CLEAR( INS_ARG ) { - DO_CLEAR + exc->new_top = 0; } @@ -3776,7 +3291,12 @@ static void Ins_SWAP( INS_ARG ) { - DO_SWAP + FT_Long L; + + + L = args[0]; + args[0] = args[1]; + args[1] = L; } @@ -3789,7 +3309,7 @@ static void Ins_DEPTH( INS_ARG ) { - DO_DEPTH + args[0] = exc->top; } @@ -3802,7 +3322,19 @@ static void Ins_CINDEX( INS_ARG ) { - DO_CINDEX + FT_Long L; + + + L = args[0]; + + if ( L <= 0 || L > exc->args ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + args[0] = 0; + } + else + args[0] = exc->stack[exc->args - L]; } @@ -3828,7 +3360,17 @@ static void Ins_JROT( INS_ARG ) { - DO_JROT + if ( args[1] != 0 ) + { + if ( args[0] == 0 && exc->args == 0 ) + exc->error = FT_THROW( Bad_Argument ); + exc->IP += args[0]; + if ( exc->IP < 0 || + ( exc->callTop > 0 && + exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) + exc->error = FT_THROW( Bad_Argument ); + exc->step_ins = FALSE; + } } @@ -3841,7 +3383,14 @@ static void Ins_JMPR( INS_ARG ) { - DO_JMPR + if ( args[0] == 0 && exc->args == 0 ) + exc->error = FT_THROW( Bad_Argument ); + exc->IP += args[0]; + if ( exc->IP < 0 || + ( exc->callTop > 0 && + exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) + exc->error = FT_THROW( Bad_Argument ); + exc->step_ins = FALSE; } @@ -3854,7 +3403,17 @@ static void Ins_JROF( INS_ARG ) { - DO_JROF + if ( args[1] == 0 ) + { + if ( args[0] == 0 && exc->args == 0 ) + exc->error = FT_THROW( Bad_Argument ); + exc->IP += args[0]; + if ( exc->IP < 0 || + ( exc->callTop > 0 && + exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) + exc->error = FT_THROW( Bad_Argument ); + exc->step_ins = FALSE; + } } @@ -3867,7 +3426,7 @@ static void Ins_LT( INS_ARG ) { - DO_LT + args[0] = ( args[0] < args[1] ); } @@ -3880,7 +3439,7 @@ static void Ins_LTEQ( INS_ARG ) { - DO_LTEQ + args[0] = ( args[0] <= args[1] ); } @@ -3893,7 +3452,7 @@ static void Ins_GT( INS_ARG ) { - DO_GT + args[0] = ( args[0] > args[1] ); } @@ -3906,7 +3465,7 @@ static void Ins_GTEQ( INS_ARG ) { - DO_GTEQ + args[0] = ( args[0] >= args[1] ); } @@ -3919,7 +3478,7 @@ static void Ins_EQ( INS_ARG ) { - DO_EQ + args[0] = ( args[0] == args[1] ); } @@ -3932,7 +3491,7 @@ static void Ins_NEQ( INS_ARG ) { - DO_NEQ + args[0] = ( args[0] != args[1] ); } @@ -3945,7 +3504,7 @@ static void Ins_ODD( INS_ARG ) { - DO_ODD + args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 64 ); } @@ -3958,7 +3517,7 @@ static void Ins_EVEN( INS_ARG ) { - DO_EVEN + args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 0 ); } @@ -3971,7 +3530,7 @@ static void Ins_AND( INS_ARG ) { - DO_AND + args[0] = ( args[0] && args[1] ); } @@ -3984,7 +3543,7 @@ static void Ins_OR( INS_ARG ) { - DO_OR + args[0] = ( args[0] || args[1] ); } @@ -3997,7 +3556,7 @@ static void Ins_NOT( INS_ARG ) { - DO_NOT + args[0] = !args[0]; } @@ -4010,7 +3569,7 @@ static void Ins_ADD( INS_ARG ) { - DO_ADD + args[0] += args[1]; } @@ -4023,7 +3582,7 @@ static void Ins_SUB( INS_ARG ) { - DO_SUB + args[0] -= args[1]; } @@ -4036,7 +3595,10 @@ static void Ins_DIV( INS_ARG ) { - DO_DIV + if ( args[1] == 0 ) + exc->error = FT_THROW( Divide_By_Zero ); + else + args[0] = FT_MulDiv_No_Round( args[0], 64L, args[1] ); } @@ -4049,7 +3611,7 @@ static void Ins_MUL( INS_ARG ) { - DO_MUL + args[0] = FT_MulDiv( args[0], args[1], 64L ); } @@ -4062,7 +3624,7 @@ static void Ins_ABS( INS_ARG ) { - DO_ABS + args[0] = FT_ABS( args[0] ); } @@ -4075,7 +3637,7 @@ static void Ins_NEG( INS_ARG ) { - DO_NEG + args[0] = -args[0]; } @@ -4088,7 +3650,7 @@ static void Ins_FLOOR( INS_ARG ) { - DO_FLOOR + args[0] = FT_PIX_FLOOR( args[0] ); } @@ -4101,7 +3663,7 @@ static void Ins_CEILING( INS_ARG ) { - DO_CEILING + args[0] = FT_PIX_CEIL( args[0] ); } @@ -4114,7 +3676,56 @@ static void Ins_RS( INS_ARG ) { - DO_RS +#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING + + FT_ULong I = (FT_ULong)args[0]; + + + if ( BOUNDSL( I, exc->storeSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + else + args[0] = 0; + } + else + { + /* subpixel hinting - avoid Typeman Dstroke and */ + /* IStroke and Vacuform rounds */ + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + ( ( I == 24 && + ( exc->face->sph_found_func_flags & + ( SPH_FDEF_SPACING_1 | + SPH_FDEF_SPACING_2 ) ) ) || + ( I == 22 && + ( exc->sph_in_func_flags & + SPH_FDEF_TYPEMAN_STROKES ) ) || + ( I == 8 && + ( exc->face->sph_found_func_flags & + SPH_FDEF_VACUFORM_ROUND_1 ) && + exc->iup_called ) ) ) + args[0] = 0; + else + args[0] = exc->storage[I]; + } + +#else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ + + FT_ULong I = (FT_ULong)args[0]; + + + if ( BOUNDSL( I, exc->storeSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + else + args[0] = 0; + } + else + args[0] = exc->storage[I]; + +#endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ } @@ -4127,7 +3738,16 @@ static void Ins_WS( INS_ARG ) { - DO_WS + FT_ULong I = (FT_ULong)args[0]; + + + if ( BOUNDSL( I, exc->storeSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + } + else + exc->storage[I] = args[1]; } @@ -4140,7 +3760,16 @@ static void Ins_WCVTP( INS_ARG ) { - DO_WCVTP + FT_ULong I = (FT_ULong)args[0]; + + + if ( BOUNDSL( I, exc->cvtSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + } + else + exc->func_write_cvt( exc, I, args[1] ); } @@ -4153,7 +3782,16 @@ static void Ins_WCVTF( INS_ARG ) { - DO_WCVTF + FT_ULong I = (FT_ULong)args[0]; + + + if ( BOUNDSL( I, exc->cvtSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + } + else + exc->cvt[I] = FT_MulFix( args[1], exc->tt_metrics.scale ); } @@ -4166,7 +3804,18 @@ static void Ins_RCVT( INS_ARG ) { - DO_RCVT + FT_ULong I = (FT_ULong)args[0]; + + + if ( BOUNDSL( I, exc->cvtSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + else + args[0] = 0; + } + else + args[0] = exc->func_read_cvt( exc, I ); } @@ -4194,7 +3843,7 @@ static void Ins_DEBUG( INS_ARG ) { - DO_DEBUG + exc->error = FT_THROW( Debug_OpCode ); } @@ -4207,7 +3856,10 @@ static void Ins_ROUND( INS_ARG ) { - DO_ROUND + args[0] = exc->func_round( + exc, + args[0], + exc->tt_metrics.compensations[exc->opcode - 0x68] ); } @@ -4220,7 +3872,9 @@ static void Ins_NROUND( INS_ARG ) { - DO_NROUND + args[0] = Round_None( exc, + args[0], + exc->tt_metrics.compensations[exc->opcode - 0x6C] ); } @@ -4233,7 +3887,8 @@ static void Ins_MAX( INS_ARG ) { - DO_MAX + if ( args[1] > args[0] ) + args[0] = args[1]; } @@ -4246,7 +3901,8 @@ static void Ins_MIN( INS_ARG ) { - DO_MIN + if ( args[1] < args[0] ) + args[0] = args[1]; } @@ -7949,10 +7605,6 @@ FT_Byte opcode = exc->opcode; -#undef ARRAY_BOUND_ERROR -#define ARRAY_BOUND_ERROR goto Set_Invalid_Ref - - switch ( opcode ) { case 0x00: /* SVTCA y */ @@ -7961,68 +7613,37 @@ case 0x03: /* SPvTCA x */ case 0x04: /* SFvTCA y */ case 0x05: /* SFvTCA x */ - { - FT_Short AA, BB; - - - AA = (FT_Short)( ( opcode & 1 ) << 14 ); - BB = (FT_Short)( AA ^ 0x4000 ); - - if ( opcode < 4 ) - { - exc->GS.projVector.x = AA; - exc->GS.projVector.y = BB; - - exc->GS.dualVector.x = AA; - exc->GS.dualVector.y = BB; - } - else - { - GUESS_VECTOR( projVector ); - } - - if ( ( opcode & 2 ) == 0 ) - { - exc->GS.freeVector.x = AA; - exc->GS.freeVector.y = BB; - } - else - { - GUESS_VECTOR( freeVector ); - } - - Compute_Funcs( exc ); - } + Ins_SxyTCA( exc, args ); break; case 0x06: /* SPvTL // */ case 0x07: /* SPvTL + */ - DO_SPVTL + Ins_SPVTL( exc, args ); break; case 0x08: /* SFvTL // */ case 0x09: /* SFvTL + */ - DO_SFVTL + Ins_SFVTL( exc, args ); break; case 0x0A: /* SPvFS */ - DO_SPVFS + Ins_SPVFS( exc, args ); break; case 0x0B: /* SFvFS */ - DO_SFVFS + Ins_SFVFS( exc, args ); break; case 0x0C: /* GPV */ - DO_GPV + Ins_GPV( exc, args ); break; case 0x0D: /* GFV */ - DO_GFV + Ins_GFV( exc, args ); break; case 0x0E: /* SFvTPv */ - DO_SFVTPV + Ins_SFVTPV( exc, args ); break; case 0x0F: /* ISECT */ @@ -8030,15 +7651,15 @@ break; case 0x10: /* SRP0 */ - DO_SRP0 + Ins_SRP0( exc, args ); break; case 0x11: /* SRP1 */ - DO_SRP1 + Ins_SRP1( exc, args ); break; case 0x12: /* SRP2 */ - DO_SRP2 + Ins_SRP2( exc, args ); break; case 0x13: /* SZP0 */ @@ -8058,19 +7679,19 @@ break; case 0x17: /* SLOOP */ - DO_SLOOP + Ins_SLOOP( exc, args ); break; case 0x18: /* RTG */ - DO_RTG + Ins_RTG( exc, args ); break; case 0x19: /* RTHG */ - DO_RTHG + Ins_RTHG( exc, args ); break; case 0x1A: /* SMD */ - DO_SMD + Ins_SMD( exc, args ); break; case 0x1B: /* ELSE */ @@ -8078,43 +7699,43 @@ break; case 0x1C: /* JMPR */ - DO_JMPR + Ins_JMPR( exc, args ); break; case 0x1D: /* SCVTCI */ - DO_SCVTCI + Ins_SCVTCI( exc, args ); break; case 0x1E: /* SSWCI */ - DO_SSWCI + Ins_SSWCI( exc, args ); break; case 0x1F: /* SSW */ - DO_SSW + Ins_SSW( exc, args ); break; case 0x20: /* DUP */ - DO_DUP + Ins_DUP( exc, args ); break; case 0x21: /* POP */ - /* nothing :-) */ + Ins_POP( exc, args ); break; case 0x22: /* CLEAR */ - DO_CLEAR + Ins_CLEAR( exc, args ); break; case 0x23: /* SWAP */ - DO_SWAP + Ins_SWAP( exc, args ); break; case 0x24: /* DEPTH */ - DO_DEPTH + Ins_DEPTH( exc, args ); break; case 0x25: /* CINDEX */ - DO_CINDEX + Ins_CINDEX( exc, args ); break; case 0x26: /* MINDEX */ @@ -8192,7 +7813,7 @@ break; case 0x3D: /* RTDG */ - DO_RTDG + Ins_RTDG( exc, args ); break; case 0x3E: /* MIAP */ @@ -8209,23 +7830,19 @@ break; case 0x42: /* WS */ - DO_WS - break; - - Set_Invalid_Ref: - exc->error = FT_THROW( Invalid_Reference ); + Ins_WS( exc, args ); break; case 0x43: /* RS */ - DO_RS + Ins_RS( exc, args ); break; case 0x44: /* WCVTP */ - DO_WCVTP + Ins_WCVTP( exc, args ); break; case 0x45: /* RCVT */ - DO_RCVT + Ins_RCVT( exc, args ); break; case 0x46: /* GC */ @@ -8243,55 +7860,55 @@ break; case 0x4B: /* MPPEM */ - DO_MPPEM + Ins_MPPEM( exc, args ); break; case 0x4C: /* MPS */ - DO_MPS + Ins_MPS( exc, args ); break; case 0x4D: /* FLIPON */ - DO_FLIPON + Ins_FLIPON( exc, args ); break; case 0x4E: /* FLIPOFF */ - DO_FLIPOFF + Ins_FLIPOFF( exc, args ); break; case 0x4F: /* DEBUG */ - DO_DEBUG + Ins_DEBUG( exc, args ); break; case 0x50: /* LT */ - DO_LT + Ins_LT( exc, args ); break; case 0x51: /* LTEQ */ - DO_LTEQ + Ins_LTEQ( exc, args ); break; case 0x52: /* GT */ - DO_GT + Ins_GT( exc, args ); break; case 0x53: /* GTEQ */ - DO_GTEQ + Ins_GTEQ( exc, args ); break; case 0x54: /* EQ */ - DO_EQ + Ins_EQ( exc, args ); break; case 0x55: /* NEQ */ - DO_NEQ + Ins_NEQ( exc, args ); break; case 0x56: /* ODD */ - DO_ODD + Ins_ODD( exc, args ); break; case 0x57: /* EVEN */ - DO_EVEN + Ins_EVEN( exc, args ); break; case 0x58: /* IF */ @@ -8299,19 +7916,19 @@ break; case 0x59: /* EIF */ - /* do nothing */ + Ins_EIF( exc, args ); break; case 0x5A: /* AND */ - DO_AND + Ins_AND( exc, args ); break; case 0x5B: /* OR */ - DO_OR + Ins_OR( exc, args ); break; case 0x5C: /* NOT */ - DO_NOT + Ins_NOT( exc, args ); break; case 0x5D: /* DELTAP1 */ @@ -8319,61 +7936,61 @@ break; case 0x5E: /* SDB */ - DO_SDB + Ins_SDB( exc, args ); break; case 0x5F: /* SDS */ - DO_SDS + Ins_SDS( exc, args ); break; case 0x60: /* ADD */ - DO_ADD + Ins_ADD( exc, args ); break; case 0x61: /* SUB */ - DO_SUB + Ins_SUB( exc, args ); break; case 0x62: /* DIV */ - DO_DIV + Ins_DIV( exc, args ); break; case 0x63: /* MUL */ - DO_MUL + Ins_MUL( exc, args ); break; case 0x64: /* ABS */ - DO_ABS + Ins_ABS( exc, args ); break; case 0x65: /* NEG */ - DO_NEG + Ins_NEG( exc, args ); break; case 0x66: /* FLOOR */ - DO_FLOOR + Ins_FLOOR( exc, args ); break; case 0x67: /* CEILING */ - DO_CEILING + Ins_CEILING( exc, args ); break; case 0x68: /* ROUND */ case 0x69: /* ROUND */ case 0x6A: /* ROUND */ case 0x6B: /* ROUND */ - DO_ROUND + Ins_ROUND( exc, args ); break; case 0x6C: /* NROUND */ case 0x6D: /* NROUND */ case 0x6E: /* NRRUND */ case 0x6F: /* NROUND */ - DO_NROUND + Ins_NROUND( exc, args ); break; case 0x70: /* WCVTF */ - DO_WCVTF + Ins_WCVTF( exc, args ); break; case 0x71: /* DELTAP2 */ @@ -8388,23 +8005,23 @@ break; case 0x76: /* SROUND */ - DO_SROUND + Ins_SROUND( exc, args ); break; case 0x77: /* S45Round */ - DO_S45ROUND + Ins_S45ROUND( exc, args ); break; case 0x78: /* JROT */ - DO_JROT + Ins_JROT( exc, args ); break; case 0x79: /* JROF */ - DO_JROF + Ins_JROF( exc, args ); break; case 0x7A: /* ROFF */ - DO_ROFF + Ins_ROFF( exc, args ); break; case 0x7B: /* ???? */ @@ -8412,16 +8029,19 @@ break; case 0x7C: /* RUTG */ - DO_RUTG + Ins_RUTG( exc, args ); break; case 0x7D: /* RDTG */ - DO_RDTG + Ins_RDTG( exc, args ); break; case 0x7E: /* SANGW */ - case 0x7F: /* AA */ - /* nothing - obsolete */ + Ins_SANGW( exc, args ); + break; + + case 0x7F: /* AA */ + Ins_AA( exc, args ); break; case 0x80: /* FLIPPT */ @@ -8463,11 +8083,11 @@ break; case 0x8B: /* MAX */ - DO_MAX + Ins_MAX( exc, args ); break; case 0x8C: /* MIN */ - DO_MIN + Ins_MIN( exc, args ); break; case 0x8D: /* SCANTYPE */ -- 2.2.2 From 7e1db6d42d553f019d9a3c9dba9fe6d400da2b35 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sun, 11 Jan 2015 00:56:55 +0100 Subject: [PATCH] Formatting, typos. --- src/truetype/ttinterp.c | 87 ++++++++++++++++++++++++------------------------- 1 file changed, 42 insertions(+), 45 deletions(-) diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index c666049..7b23025 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -113,8 +113,7 @@ /* */ /* This macro computes (a*2^14)/b and complements TT_MulFix14. */ /* */ -#define TT_DivFix14( a, b ) \ - FT_DivFix( a, (b) << 2 ) +#define TT_DivFix14( a, b ) FT_DivFix( a, (b) << 2 ) #undef SUCCESS @@ -124,14 +123,17 @@ #define FAILURE 1 #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING -#define GUESS_VECTOR( V ) \ - if ( exc->face->unpatented_hinting ) \ - { \ - exc->GS.V.x = (FT_F2Dot14)( exc->GS.both_x_axis ? 0x4000 : 0 ); \ - exc->GS.V.y = (FT_F2Dot14)( exc->GS.both_x_axis ? 0 : 0x4000 ); \ - } +#define GUESS_VECTOR( V ) \ + do \ + { \ + if ( exc->face->unpatented_hinting ) \ + { \ + exc->GS.V.x = (FT_F2Dot14)( exc->GS.both_x_axis ? 0x4000 : 0 ); \ + exc->GS.V.y = (FT_F2Dot14)( exc->GS.both_x_axis ? 0 : 0x4000 ); \ + } \ + } while (0) #else -#define GUESS_VECTOR( V ) +#define GUESS_VECTOR( V ) do { } while (0) #endif /*************************************************************************/ @@ -713,8 +715,8 @@ /* SFvTL + */ PACK( 2, 0 ), /* SPvFS */ PACK( 2, 0 ), /* SFvFS */ PACK( 2, 0 ), - /* GPV */ PACK( 0, 2 ), - /* GFV */ PACK( 0, 2 ), + /* GPv */ PACK( 0, 2 ), + /* GFv */ PACK( 0, 2 ), /* SFvTPv */ PACK( 0, 0 ), /* ISECT */ PACK( 5, 0 ), @@ -843,8 +845,8 @@ /* INS_$83 */ PACK( 0, 0 ), /* INS_$84 */ PACK( 0, 0 ), /* ScanCTRL */ PACK( 1, 0 ), - /* SDPVTL[0] */ PACK( 2, 0 ), - /* SDPVTL[1] */ PACK( 2, 0 ), + /* SDPvTL[0] */ PACK( 2, 0 ), + /* SDPvTL[1] */ PACK( 2, 0 ), /* GetINFO */ PACK( 1, 1 ), /* IDEF */ PACK( 1, 0 ), /* ROLL */ PACK( 3, 3 ), @@ -992,8 +994,8 @@ "SFvTL +", "SPvFS", "SFvFS", - "GPV", - "GFV", + "GPv", + "GFv", "SFvTPv", "ISECT", @@ -1122,8 +1124,8 @@ "INS_$83", "INS_$84", "ScanCTRL", - "SDVPTL[0]", - "SDVPTL[1]", + "SDPvTL[0]", + "SDPvTL[1]", "GetINFO", "IDEF", "ROLL", @@ -2541,9 +2543,9 @@ else if ( exc->GS.freeVector.y == 0x4000 ) exc->F_dot_P = exc->GS.projVector.y; else - exc->F_dot_P = ( (FT_Long)exc->GS.projVector.x * exc->GS.freeVector.x + - (FT_Long)exc->GS.projVector.y * exc->GS.freeVector.y ) >> - 14; + exc->F_dot_P = + ( (FT_Long)exc->GS.projVector.x * exc->GS.freeVector.x + + (FT_Long)exc->GS.projVector.y * exc->GS.freeVector.y ) >> 14; if ( exc->GS.projVector.x == 0x4000 ) exc->func_project = (TT_Project_Func)Project_x; @@ -2675,8 +2677,8 @@ A = p1->x - p2->x; B = p1->y - p2->y; - /* If p1 == p2, SPVTL and SFVTL behave the same as */ - /* SPVTCA[X] and SFVTCA[X], respectively. */ + /* If p1 == p2, SPvTL and SFvTL behave the same as */ + /* SPvTCA[X] and SFvTCA[X], respectively. */ /* */ /* Confirmed by Greg Hitchcock. */ @@ -2713,11 +2715,11 @@ /* Opcode range: 0x00-0x01 */ /* Stack: --> */ /* */ - /* SPVTCA[a]: Set PVector to Coordinate Axis */ + /* SPvTCA[a]: Set PVector to Coordinate Axis */ /* Opcode range: 0x02-0x03 */ /* Stack: --> */ /* */ - /* SFVTCA[a]: Set FVector to Coordinate Axis */ + /* SFvTCA[a]: Set FVector to Coordinate Axis */ /* Opcode range: 0x04-0x05 */ /* Stack: --> */ /* */ @@ -2740,9 +2742,7 @@ exc->GS.dualVector.y = BB; } else - { GUESS_VECTOR( projVector ); - } if ( ( opcode & 2 ) == 0 ) { @@ -2750,9 +2750,7 @@ exc->GS.freeVector.y = BB; } else - { GUESS_VECTOR( freeVector ); - } Compute_Funcs( exc ); } @@ -2760,7 +2758,7 @@ /*************************************************************************/ /* */ - /* SPVTL[a]: Set PVector To Line */ + /* SPvTL[a]: Set PVector To Line */ /* Opcode range: 0x06-0x07 */ /* Stack: uint32 uint32 --> */ /* */ @@ -2782,7 +2780,7 @@ /*************************************************************************/ /* */ - /* SFVTL[a]: Set FVector To Line */ + /* SFvTL[a]: Set FVector To Line */ /* Opcode range: 0x08-0x09 */ /* Stack: uint32 uint32 --> */ /* */ @@ -2803,7 +2801,7 @@ /*************************************************************************/ /* */ - /* SFVTPV[]: Set FVector To PVector */ + /* SFvTPv[]: Set FVector To PVector */ /* Opcode range: 0x0E */ /* Stack: --> */ /* */ @@ -2818,7 +2816,7 @@ /*************************************************************************/ /* */ - /* SPVFS[]: Set PVector From Stack */ + /* SPvFS[]: Set PVector From Stack */ /* Opcode range: 0x0A */ /* Stack: f2.14 f2.14 --> */ /* */ @@ -2845,7 +2843,7 @@ /*************************************************************************/ /* */ - /* SFVFS[]: Set FVector From Stack */ + /* SFvFS[]: Set FVector From Stack */ /* Opcode range: 0x0B */ /* Stack: f2.14 f2.14 --> */ /* */ @@ -2870,7 +2868,7 @@ /*************************************************************************/ /* */ - /* GPV[]: Get Projection Vector */ + /* GPv[]: Get Projection Vector */ /* Opcode range: 0x0C */ /* Stack: ef2.14 --> ef2.14 */ /* */ @@ -2896,7 +2894,8 @@ /*************************************************************************/ - /* GFV[]: Get Freedom Vector */ + /* */ + /* GFv[]: Get Freedom Vector */ /* Opcode range: 0x0D */ /* Stack: ef2.14 --> ef2.14 */ /* */ @@ -3245,7 +3244,7 @@ /*************************************************************************/ /* */ - /* DUP[]: DUPlicate the top stack's element */ + /* DUP[]: DUPlicate the stack's top element */ /* Opcode range: 0x20 */ /* Stack: StkElt --> StkElt StkElt */ /* */ @@ -4962,7 +4961,7 @@ /*************************************************************************/ /* */ - /* SDPVTL[a]: Set Dual PVector to Line */ + /* SDPvTL[a]: Set Dual PVector to Line */ /* Opcode range: 0x86-0x87 */ /* Stack: uint32 uint32 --> */ /* */ @@ -4993,7 +4992,7 @@ A = v1->x - v2->x; B = v1->y - v2->y; - /* If v1 == v2, SDPVTL behaves the same as */ + /* If v1 == v2, SDPvTL behaves the same as */ /* SVTCA[X], respectively. */ /* */ /* Confirmed by Greg Hitchcock. */ @@ -5037,9 +5036,7 @@ } Normalize( exc, A, B, &exc->GS.projVector ); - GUESS_VECTOR( freeVector ); - Compute_Funcs( exc ); } @@ -6406,7 +6403,7 @@ } #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - if ( exc->top < exc->GS.loop || + if ( exc->top < exc->GS.loop || BOUNDS( exc->GS.rp0, exc->zp0.n_points ) ) { if ( exc->pedantic_hinting ) @@ -7634,11 +7631,11 @@ Ins_SFVFS( exc, args ); break; - case 0x0C: /* GPV */ + case 0x0C: /* GPv */ Ins_GPV( exc, args ); break; - case 0x0D: /* GFV */ + case 0x0D: /* GFv */ Ins_GFV( exc, args ); break; @@ -8065,8 +8062,8 @@ Ins_SCANCTRL( exc, args ); break; - case 0x86: /* SDPVTL */ - case 0x87: /* SDPVTL */ + case 0x86: /* SDPvTL */ + case 0x87: /* SDPvTL */ Ins_SDPVTL( exc, args ); break; -- 2.2.2 From d03a67a12c3feca6c2fb21052ef4d2e83b5d5171 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sun, 11 Jan 2015 08:39:14 +0100 Subject: [PATCH] [truetype] More macro expansions. * src/truetype/ttinterp.c (INS_ARG): Remove macro by expansion, adjusting funtion calls where necessary. (FT_UNUSED_ARG): Removed, no longer needed. --- ChangeLog | 8 + src/truetype/ttinterp.c | 451 ++++++++++++++++++++++++++---------------------- 2 files changed, 253 insertions(+), 206 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3ca03df..878c82b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2015-01-11 Werner Lemberg + + [truetype] More macro expansions. + + * src/truetype/ttinterp.c (INS_ARG): Remove macro by expansion, + adjusting funtion calls where necessary. + (FT_UNUSED_ARG): Removed, no longer needed. + 2015-01-10 Werner Lemberg [truetype] More macro expansions. diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index 7b23025..91ddb9b 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -61,22 +61,6 @@ #define FT_UNUSED_EXEC FT_UNUSED( exc ) - /*************************************************************************/ - /* */ - /* The instruction argument stack. */ - /* */ -#define INS_ARG TT_ExecContext exc, \ - FT_Long* args - - - /*************************************************************************/ - /* */ - /* This macro is used whenever `args' is unused in a function, to avoid */ - /* stupid warnings from pedantic compilers. */ - /* */ -#define FT_UNUSED_ARG FT_UNUSED_EXEC; FT_UNUSED( args ) - - #define SUBPIXEL_HINTING \ ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \ TT_INTERPRETER_VERSION_38 ) @@ -99,7 +83,8 @@ /* */ /* Instruction dispatch function, as used by the interpreter. */ /* */ - typedef void (*TInstruction_Function)( INS_ARG ); + typedef void (*TInstruction_Function)( TT_ExecContext exc, + FT_Long* args ); /*************************************************************************/ @@ -2724,7 +2709,7 @@ /* Stack: --> */ /* */ static void - Ins_SxyTCA( INS_ARG ) + Ins_SxyTCA( TT_ExecContext exc ) { FT_Short AA, BB; FT_Byte opcode = exc->opcode; @@ -2763,7 +2748,8 @@ /* Stack: uint32 uint32 --> */ /* */ static void - Ins_SPVTL( INS_ARG ) + Ins_SPVTL( TT_ExecContext exc, + FT_Long* args ) { if ( Ins_SxVTL( exc, (FT_UShort)args[1], @@ -2785,7 +2771,8 @@ /* Stack: uint32 uint32 --> */ /* */ static void - Ins_SFVTL( INS_ARG ) + Ins_SFVTL( TT_ExecContext exc, + FT_Long* args ) { if ( Ins_SxVTL( exc, (FT_UShort)args[1], @@ -2806,7 +2793,7 @@ /* Stack: --> */ /* */ static void - Ins_SFVTPV( INS_ARG ) + Ins_SFVTPV( TT_ExecContext exc ) { GUESS_VECTOR( projVector ); exc->GS.freeVector = exc->GS.projVector; @@ -2821,7 +2808,8 @@ /* Stack: f2.14 f2.14 --> */ /* */ static void - Ins_SPVFS( INS_ARG ) + Ins_SPVFS( TT_ExecContext exc, + FT_Long* args ) { FT_Short S; FT_Long X, Y; @@ -2848,7 +2836,8 @@ /* Stack: f2.14 f2.14 --> */ /* */ static void - Ins_SFVFS( INS_ARG ) + Ins_SFVFS( TT_ExecContext exc, + FT_Long* args ) { FT_Short S; FT_Long X, Y; @@ -2873,7 +2862,8 @@ /* Stack: ef2.14 --> ef2.14 */ /* */ static void - Ins_GPV( INS_ARG ) + Ins_GPV( TT_ExecContext exc, + FT_Long* args ) { #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING if ( exc->face->unpatented_hinting ) @@ -2900,7 +2890,8 @@ /* Stack: ef2.14 --> ef2.14 */ /* */ static void - Ins_GFV( INS_ARG ) + Ins_GFV( TT_ExecContext exc, + FT_Long* args ) { #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING if ( exc->face->unpatented_hinting ) @@ -2927,7 +2918,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_SRP0( INS_ARG ) + Ins_SRP0( TT_ExecContext exc, + FT_Long* args ) { exc->GS.rp0 = (FT_UShort)args[0]; } @@ -2940,7 +2932,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_SRP1( INS_ARG ) + Ins_SRP1( TT_ExecContext exc, + FT_Long* args ) { exc->GS.rp1 = (FT_UShort)args[0]; } @@ -2953,7 +2946,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_SRP2( INS_ARG ) + Ins_SRP2( TT_ExecContext exc, + FT_Long* args ) { exc->GS.rp2 = (FT_UShort)args[0]; } @@ -2966,7 +2960,7 @@ /* Stack: --> */ /* */ static void - Ins_RTHG( INS_ARG ) + Ins_RTHG( TT_ExecContext exc ) { exc->GS.round_state = TT_Round_To_Half_Grid; exc->func_round = (TT_Round_Func)Round_To_Half_Grid; @@ -2980,7 +2974,7 @@ /* Stack: --> */ /* */ static void - Ins_RTG( INS_ARG ) + Ins_RTG( TT_ExecContext exc ) { exc->GS.round_state = TT_Round_To_Grid; exc->func_round = (TT_Round_Func)Round_To_Grid; @@ -2993,7 +2987,7 @@ /* Stack: --> */ /* */ static void - Ins_RTDG( INS_ARG ) + Ins_RTDG( TT_ExecContext exc ) { exc->GS.round_state = TT_Round_To_Double_Grid; exc->func_round = (TT_Round_Func)Round_To_Double_Grid; @@ -3006,7 +3000,7 @@ /* Stack: --> */ /* */ static void - Ins_RUTG( INS_ARG ) + Ins_RUTG( TT_ExecContext exc ) { exc->GS.round_state = TT_Round_Up_To_Grid; exc->func_round = (TT_Round_Func)Round_Up_To_Grid; @@ -3020,7 +3014,7 @@ /* Stack: --> */ /* */ static void - Ins_RDTG( INS_ARG ) + Ins_RDTG( TT_ExecContext exc ) { exc->GS.round_state = TT_Round_Down_To_Grid; exc->func_round = (TT_Round_Func)Round_Down_To_Grid; @@ -3034,7 +3028,7 @@ /* Stack: --> */ /* */ static void - Ins_ROFF( INS_ARG ) + Ins_ROFF( TT_ExecContext exc ) { exc->GS.round_state = TT_Round_Off; exc->func_round = (TT_Round_Func)Round_None; @@ -3048,7 +3042,8 @@ /* Stack: Eint8 --> */ /* */ static void - Ins_SROUND( INS_ARG ) + Ins_SROUND( TT_ExecContext exc, + FT_Long* args ) { SetSuperRound( exc, 0x4000, args[0] ); @@ -3064,7 +3059,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_S45ROUND( INS_ARG ) + Ins_S45ROUND( TT_ExecContext exc, + FT_Long* args ) { SetSuperRound( exc, 0x2D41, args[0] ); @@ -3080,7 +3076,8 @@ /* Stack: int32? --> */ /* */ static void - Ins_SLOOP( INS_ARG ) + Ins_SLOOP( TT_ExecContext exc, + FT_Long* args ) { if ( args[0] < 0 ) exc->error = FT_THROW( Bad_Argument ); @@ -3096,7 +3093,8 @@ /* Stack: f26.6 --> */ /* */ static void - Ins_SMD( INS_ARG ) + Ins_SMD( TT_ExecContext exc, + FT_Long* args ) { exc->GS.minimum_distance = args[0]; } @@ -3109,7 +3107,8 @@ /* Stack: f26.6 --> */ /* */ static void - Ins_SCVTCI( INS_ARG ) + Ins_SCVTCI( TT_ExecContext exc, + FT_Long* args ) { exc->GS.control_value_cutin = (FT_F26Dot6)args[0]; } @@ -3122,7 +3121,8 @@ /* Stack: f26.6 --> */ /* */ static void - Ins_SSWCI( INS_ARG ) + Ins_SSWCI( TT_ExecContext exc, + FT_Long* args ) { exc->GS.single_width_cutin = (FT_F26Dot6)args[0]; } @@ -3135,7 +3135,8 @@ /* Stack: int32? --> */ /* */ static void - Ins_SSW( INS_ARG ) + Ins_SSW( TT_ExecContext exc, + FT_Long* args ) { exc->GS.single_width_value = FT_MulFix( args[0], exc->tt_metrics.scale ); @@ -3149,7 +3150,7 @@ /* Stack: --> */ /* */ static void - Ins_FLIPON( INS_ARG ) + Ins_FLIPON( TT_ExecContext exc ) { exc->GS.auto_flip = TRUE; } @@ -3162,7 +3163,7 @@ /* Stack: --> */ /* */ static void - Ins_FLIPOFF( INS_ARG ) + Ins_FLIPOFF( TT_ExecContext exc ) { exc->GS.auto_flip = FALSE; } @@ -3175,7 +3176,7 @@ /* Stack: uint32 --> */ /* */ static void - Ins_SANGW( INS_ARG ) + Ins_SANGW( void ) { /* instruction not supported anymore */ } @@ -3188,7 +3189,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_SDB( INS_ARG ) + Ins_SDB( TT_ExecContext exc, + FT_Long* args ) { exc->GS.delta_base = (FT_UShort)args[0]; } @@ -3201,7 +3203,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_SDS( INS_ARG ) + Ins_SDS( TT_ExecContext exc, + FT_Long* args ) { if ( (FT_ULong)args[0] > 6UL ) exc->error = FT_THROW( Bad_Argument ); @@ -3217,7 +3220,8 @@ /* Stack: --> Euint16 */ /* */ static void - Ins_MPPEM( INS_ARG ) + Ins_MPPEM( TT_ExecContext exc, + FT_Long* args ) { args[0] = exc->func_cur_ppem( exc ); } @@ -3230,7 +3234,8 @@ /* Stack: --> Euint16 */ /* */ static void - Ins_MPS( INS_ARG ) + Ins_MPS( TT_ExecContext exc, + FT_Long* args ) { /* Note: The point size should be irrelevant in a given font program; */ /* we thus decide to return only the PPEM value. */ @@ -3249,7 +3254,7 @@ /* Stack: StkElt --> StkElt StkElt */ /* */ static void - Ins_DUP( INS_ARG ) + Ins_DUP( FT_Long* args ) { args[1] = args[0]; } @@ -3262,7 +3267,7 @@ /* Stack: StkElt --> */ /* */ static void - Ins_POP( INS_ARG ) + Ins_POP( void ) { /* nothing to do */ } @@ -3275,7 +3280,7 @@ /* Stack: StkElt... --> */ /* */ static void - Ins_CLEAR( INS_ARG ) + Ins_CLEAR( TT_ExecContext exc ) { exc->new_top = 0; } @@ -3288,7 +3293,7 @@ /* Stack: 2 * StkElt --> 2 * StkElt */ /* */ static void - Ins_SWAP( INS_ARG ) + Ins_SWAP( FT_Long* args ) { FT_Long L; @@ -3306,7 +3311,8 @@ /* Stack: --> uint32 */ /* */ static void - Ins_DEPTH( INS_ARG ) + Ins_DEPTH( TT_ExecContext exc, + FT_Long* args ) { args[0] = exc->top; } @@ -3319,7 +3325,8 @@ /* Stack: int32 --> StkElt */ /* */ static void - Ins_CINDEX( INS_ARG ) + Ins_CINDEX( TT_ExecContext exc, + FT_Long* args ) { FT_Long L; @@ -3344,7 +3351,7 @@ /* Stack: --> */ /* */ static void - Ins_EIF( INS_ARG ) + Ins_EIF( void ) { /* nothing to do */ } @@ -3357,7 +3364,8 @@ /* Stack: StkElt int32 --> */ /* */ static void - Ins_JROT( INS_ARG ) + Ins_JROT( TT_ExecContext exc, + FT_Long* args ) { if ( args[1] != 0 ) { @@ -3380,7 +3388,8 @@ /* Stack: int32 --> */ /* */ static void - Ins_JMPR( INS_ARG ) + Ins_JMPR( TT_ExecContext exc, + FT_Long* args ) { if ( args[0] == 0 && exc->args == 0 ) exc->error = FT_THROW( Bad_Argument ); @@ -3400,7 +3409,8 @@ /* Stack: StkElt int32 --> */ /* */ static void - Ins_JROF( INS_ARG ) + Ins_JROF( TT_ExecContext exc, + FT_Long* args ) { if ( args[1] == 0 ) { @@ -3423,7 +3433,7 @@ /* Stack: int32? int32? --> bool */ /* */ static void - Ins_LT( INS_ARG ) + Ins_LT( FT_Long* args ) { args[0] = ( args[0] < args[1] ); } @@ -3436,7 +3446,7 @@ /* Stack: int32? int32? --> bool */ /* */ static void - Ins_LTEQ( INS_ARG ) + Ins_LTEQ( FT_Long* args ) { args[0] = ( args[0] <= args[1] ); } @@ -3449,7 +3459,7 @@ /* Stack: int32? int32? --> bool */ /* */ static void - Ins_GT( INS_ARG ) + Ins_GT( FT_Long* args ) { args[0] = ( args[0] > args[1] ); } @@ -3462,7 +3472,7 @@ /* Stack: int32? int32? --> bool */ /* */ static void - Ins_GTEQ( INS_ARG ) + Ins_GTEQ( FT_Long* args ) { args[0] = ( args[0] >= args[1] ); } @@ -3475,7 +3485,7 @@ /* Stack: StkElt StkElt --> bool */ /* */ static void - Ins_EQ( INS_ARG ) + Ins_EQ( FT_Long* args ) { args[0] = ( args[0] == args[1] ); } @@ -3488,7 +3498,7 @@ /* Stack: StkElt StkElt --> bool */ /* */ static void - Ins_NEQ( INS_ARG ) + Ins_NEQ( FT_Long* args ) { args[0] = ( args[0] != args[1] ); } @@ -3501,7 +3511,8 @@ /* Stack: f26.6 --> bool */ /* */ static void - Ins_ODD( INS_ARG ) + Ins_ODD( TT_ExecContext exc, + FT_Long* args ) { args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 64 ); } @@ -3514,7 +3525,8 @@ /* Stack: f26.6 --> bool */ /* */ static void - Ins_EVEN( INS_ARG ) + Ins_EVEN( TT_ExecContext exc, + FT_Long* args ) { args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 0 ); } @@ -3527,7 +3539,7 @@ /* Stack: uint32 uint32 --> uint32 */ /* */ static void - Ins_AND( INS_ARG ) + Ins_AND( FT_Long* args ) { args[0] = ( args[0] && args[1] ); } @@ -3540,7 +3552,7 @@ /* Stack: uint32 uint32 --> uint32 */ /* */ static void - Ins_OR( INS_ARG ) + Ins_OR( FT_Long* args ) { args[0] = ( args[0] || args[1] ); } @@ -3553,7 +3565,7 @@ /* Stack: StkElt --> uint32 */ /* */ static void - Ins_NOT( INS_ARG ) + Ins_NOT( FT_Long* args ) { args[0] = !args[0]; } @@ -3566,7 +3578,7 @@ /* Stack: f26.6 f26.6 --> f26.6 */ /* */ static void - Ins_ADD( INS_ARG ) + Ins_ADD( FT_Long* args ) { args[0] += args[1]; } @@ -3579,7 +3591,7 @@ /* Stack: f26.6 f26.6 --> f26.6 */ /* */ static void - Ins_SUB( INS_ARG ) + Ins_SUB( FT_Long* args ) { args[0] -= args[1]; } @@ -3592,7 +3604,8 @@ /* Stack: f26.6 f26.6 --> f26.6 */ /* */ static void - Ins_DIV( INS_ARG ) + Ins_DIV( TT_ExecContext exc, + FT_Long* args ) { if ( args[1] == 0 ) exc->error = FT_THROW( Divide_By_Zero ); @@ -3608,7 +3621,7 @@ /* Stack: f26.6 f26.6 --> f26.6 */ /* */ static void - Ins_MUL( INS_ARG ) + Ins_MUL( FT_Long* args ) { args[0] = FT_MulDiv( args[0], args[1], 64L ); } @@ -3621,7 +3634,7 @@ /* Stack: f26.6 --> f26.6 */ /* */ static void - Ins_ABS( INS_ARG ) + Ins_ABS( FT_Long* args ) { args[0] = FT_ABS( args[0] ); } @@ -3634,7 +3647,7 @@ /* Stack: f26.6 --> f26.6 */ /* */ static void - Ins_NEG( INS_ARG ) + Ins_NEG( FT_Long* args ) { args[0] = -args[0]; } @@ -3647,7 +3660,7 @@ /* Stack: f26.6 --> f26.6 */ /* */ static void - Ins_FLOOR( INS_ARG ) + Ins_FLOOR( FT_Long* args ) { args[0] = FT_PIX_FLOOR( args[0] ); } @@ -3660,7 +3673,7 @@ /* Stack: f26.6 --> f26.6 */ /* */ static void - Ins_CEILING( INS_ARG ) + Ins_CEILING( FT_Long* args ) { args[0] = FT_PIX_CEIL( args[0] ); } @@ -3673,7 +3686,8 @@ /* Stack: uint32 --> uint32 */ /* */ static void - Ins_RS( INS_ARG ) + Ins_RS( TT_ExecContext exc, + FT_Long* args ) { #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING @@ -3735,7 +3749,8 @@ /* Stack: uint32 uint32 --> */ /* */ static void - Ins_WS( INS_ARG ) + Ins_WS( TT_ExecContext exc, + FT_Long* args ) { FT_ULong I = (FT_ULong)args[0]; @@ -3757,7 +3772,8 @@ /* Stack: f26.6 uint32 --> */ /* */ static void - Ins_WCVTP( INS_ARG ) + Ins_WCVTP( TT_ExecContext exc, + FT_Long* args ) { FT_ULong I = (FT_ULong)args[0]; @@ -3779,7 +3795,8 @@ /* Stack: uint32 uint32 --> */ /* */ static void - Ins_WCVTF( INS_ARG ) + Ins_WCVTF( TT_ExecContext exc, + FT_Long* args ) { FT_ULong I = (FT_ULong)args[0]; @@ -3801,7 +3818,8 @@ /* Stack: uint32 --> f26.6 */ /* */ static void - Ins_RCVT( INS_ARG ) + Ins_RCVT( TT_ExecContext exc, + FT_Long* args ) { FT_ULong I = (FT_ULong)args[0]; @@ -3825,7 +3843,7 @@ /* Stack: uint32 --> */ /* */ static void - Ins_AA( INS_ARG ) + Ins_AA( void ) { /* intentionally no longer supported */ } @@ -3840,7 +3858,7 @@ /* Note: The original instruction pops a value from the stack. */ /* */ static void - Ins_DEBUG( INS_ARG ) + Ins_DEBUG( TT_ExecContext exc ) { exc->error = FT_THROW( Debug_OpCode ); } @@ -3853,7 +3871,8 @@ /* Stack: f26.6 --> f26.6 */ /* */ static void - Ins_ROUND( INS_ARG ) + Ins_ROUND( TT_ExecContext exc, + FT_Long* args ) { args[0] = exc->func_round( exc, @@ -3869,11 +3888,13 @@ /* Stack: f26.6 --> f26.6 */ /* */ static void - Ins_NROUND( INS_ARG ) + Ins_NROUND( TT_ExecContext exc, + FT_Long* args ) { - args[0] = Round_None( exc, - args[0], - exc->tt_metrics.compensations[exc->opcode - 0x6C] ); + args[0] = Round_None( + exc, + args[0], + exc->tt_metrics.compensations[exc->opcode - 0x6C] ); } @@ -3884,7 +3905,7 @@ /* Stack: int32? int32? --> int32 */ /* */ static void - Ins_MAX( INS_ARG ) + Ins_MAX( FT_Long* args ) { if ( args[1] > args[0] ) args[0] = args[1]; @@ -3898,7 +3919,7 @@ /* Stack: int32? int32? --> int32 */ /* */ static void - Ins_MIN( INS_ARG ) + Ins_MIN( FT_Long* args ) { if ( args[1] < args[0] ) args[0] = args[1]; @@ -3912,7 +3933,8 @@ /* Stack: int32? --> StkElt */ /* */ static void - Ins_MINDEX( INS_ARG ) + Ins_MINDEX( TT_ExecContext exc, + FT_Long* args ) { FT_Long L, K; @@ -3944,12 +3966,10 @@ /* Stack: 3 * StkElt --> 3 * StkElt */ /* */ static void - Ins_ROLL( INS_ARG ) + Ins_ROLL( FT_Long* args ) { FT_Long A, B, C; - FT_UNUSED_EXEC; - A = args[2]; B = args[1]; @@ -4004,7 +4024,8 @@ /* Stack: StkElt --> */ /* */ static void - Ins_IF( INS_ARG ) + Ins_IF( TT_ExecContext exc, + FT_Long* args ) { FT_Int nIfs; FT_Bool Out; @@ -4047,12 +4068,10 @@ /* Stack: --> */ /* */ static void - Ins_ELSE( INS_ARG ) + Ins_ELSE( TT_ExecContext exc ) { FT_Int nIfs; - FT_UNUSED_ARG; - nIfs = 1; @@ -4091,7 +4110,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_FDEF( INS_ARG ) + Ins_FDEF( TT_ExecContext exc, + FT_Long* args ) { FT_ULong n; TT_DefRecord* rec; @@ -4386,12 +4406,10 @@ /* Stack: --> */ /* */ static void - Ins_ENDF( INS_ARG ) + Ins_ENDF( TT_ExecContext exc ) { TT_CallRec* pRec; - FT_UNUSED_ARG; - #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING exc->sph_in_func_flags = 0x0000; @@ -4437,7 +4455,8 @@ /* Stack: uint32? --> */ /* */ static void - Ins_CALL( INS_ARG ) + Ins_CALL( TT_ExecContext exc, + FT_Long* args ) { FT_ULong F; TT_CallRec* pCrec; @@ -4525,7 +4544,8 @@ /* Stack: uint32? Eint16? --> */ /* */ static void - Ins_LOOPCALL( INS_ARG ) + Ins_LOOPCALL( TT_ExecContext exc, + FT_Long* args ) { FT_ULong F; TT_CallRec* pCrec; @@ -4613,7 +4633,8 @@ /* Stack: Eint8 --> */ /* */ static void - Ins_IDEF( INS_ARG ) + Ins_IDEF( TT_ExecContext exc, + FT_Long* args ) { TT_DefRecord* def; TT_DefRecord* limit; @@ -4688,7 +4709,8 @@ /* Stack: --> uint32... */ /* */ static void - Ins_NPUSHB( INS_ARG ) + Ins_NPUSHB( TT_ExecContext exc, + FT_Long* args ) { FT_UShort L, K; @@ -4715,7 +4737,8 @@ /* Stack: --> int32... */ /* */ static void - Ins_NPUSHW( INS_ARG ) + Ins_NPUSHW( TT_ExecContext exc, + FT_Long* args ) { FT_UShort L, K; @@ -4745,7 +4768,8 @@ /* Stack: --> uint32... */ /* */ static void - Ins_PUSHB( INS_ARG ) + Ins_PUSHB( TT_ExecContext exc, + FT_Long* args ) { FT_UShort L, K; @@ -4770,7 +4794,8 @@ /* Stack: --> int32... */ /* */ static void - Ins_PUSHW( INS_ARG ) + Ins_PUSHW( TT_ExecContext exc, + FT_Long* args ) { FT_UShort L, K; @@ -4811,7 +4836,8 @@ /* along the dual projection vector! */ /* */ static void - Ins_GC( INS_ARG ) + Ins_GC( TT_ExecContext exc, + FT_Long* args ) { FT_ULong L; FT_F26Dot6 R; @@ -4848,7 +4874,8 @@ /* OA := OA + ( value - OA.p )/( f.p ) * f */ /* */ static void - Ins_SCFS( INS_ARG ) + Ins_SCFS( TT_ExecContext exc, + FT_Long* args ) { FT_Long K; FT_UShort L; @@ -4890,7 +4917,8 @@ /* XXX: UNDOCUMENTED: `zp0 - zp1', and not `zp2 - zp1! */ /* */ static void - Ins_MD( INS_ARG ) + Ins_MD( TT_ExecContext exc, + FT_Long* args ) { FT_UShort K, L; FT_F26Dot6 D; @@ -4966,7 +4994,8 @@ /* Stack: uint32 uint32 --> */ /* */ static void - Ins_SDPVTL( INS_ARG ) + Ins_SDPVTL( TT_ExecContext exc, + FT_Long* args ) { FT_Long A, B, C; FT_UShort p1, p2; /* was FT_Int in pas type ERROR */ @@ -5048,7 +5077,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_SZP0( INS_ARG ) + Ins_SZP0( TT_ExecContext exc, + FT_Long* args ) { switch ( (FT_Int)args[0] ) { @@ -5077,7 +5107,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_SZP1( INS_ARG ) + Ins_SZP1( TT_ExecContext exc, + FT_Long* args ) { switch ( (FT_Int)args[0] ) { @@ -5106,7 +5137,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_SZP2( INS_ARG ) + Ins_SZP2( TT_ExecContext exc, + FT_Long* args ) { switch ( (FT_Int)args[0] ) { @@ -5135,7 +5167,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_SZPS( INS_ARG ) + Ins_SZPS( TT_ExecContext exc, + FT_Long* args ) { switch ( (FT_Int)args[0] ) { @@ -5169,7 +5202,8 @@ /* Stack: int32 int32 --> */ /* */ static void - Ins_INSTCTRL( INS_ARG ) + Ins_INSTCTRL( TT_ExecContext exc, + FT_Long* args ) { FT_Long K, L; @@ -5199,7 +5233,8 @@ /* Stack: uint32? --> */ /* */ static void - Ins_SCANCTRL( INS_ARG ) + Ins_SCANCTRL( TT_ExecContext exc, + FT_Long* args ) { FT_Int A; @@ -5245,7 +5280,8 @@ /* Stack: uint32? --> */ /* */ static void - Ins_SCANTYPE( INS_ARG ) + Ins_SCANTYPE( TT_ExecContext exc, + FT_Long* args ) { if ( args[0] >= 0 ) exc->GS.scan_type = (FT_Int)args[0]; @@ -5268,12 +5304,10 @@ /* Stack: uint32... --> */ /* */ static void - Ins_FLIPPT( INS_ARG ) + Ins_FLIPPT( TT_ExecContext exc ) { FT_UShort point; - FT_UNUSED_ARG; - if ( exc->top < exc->GS.loop ) { @@ -5315,7 +5349,8 @@ /* Stack: uint32 uint32 --> */ /* */ static void - Ins_FLIPRGON( INS_ARG ) + Ins_FLIPRGON( TT_ExecContext exc, + FT_Long* args ) { FT_UShort I, K, L; @@ -5343,7 +5378,8 @@ /* Stack: uint32 uint32 --> */ /* */ static void - Ins_FLIPRGOFF( INS_ARG ) + Ins_FLIPRGOFF( TT_ExecContext exc, + FT_Long* args ) { FT_UShort I, K, L; @@ -5474,17 +5510,14 @@ /* Stack: uint32... --> */ /* */ static void - Ins_SHP( INS_ARG ) + Ins_SHP( TT_ExecContext exc ) { TT_GlyphZoneRec zp; FT_UShort refp; - FT_F26Dot6 dx, - dy; + FT_F26Dot6 dx, dy; FT_UShort point; - FT_UNUSED_ARG; - if ( exc->top < exc->GS.loop ) { @@ -5539,7 +5572,8 @@ /* zero which includes all points of it. */ /* */ static void - Ins_SHC( INS_ARG ) + Ins_SHC( TT_ExecContext exc, + FT_Long* args ) { TT_GlyphZoneRec zp; FT_UShort refp; @@ -5590,7 +5624,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_SHZ( INS_ARG ) + Ins_SHZ( TT_ExecContext exc, + FT_Long* args ) { TT_GlyphZoneRec zp; FT_UShort refp; @@ -5637,7 +5672,8 @@ /* Stack: f26.6 uint32... --> */ /* */ static void - Ins_SHPIX( INS_ARG ) + Ins_SHPIX( TT_ExecContext exc, + FT_Long* args ) { FT_F26Dot6 dx, dy; FT_UShort point; @@ -5789,7 +5825,8 @@ /* Stack: f26.6 uint32 --> */ /* */ static void - Ins_MSIRP( INS_ARG ) + Ins_MSIRP( TT_ExecContext exc, + FT_Long* args ) { FT_UShort point; FT_F26Dot6 distance; @@ -5857,7 +5894,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_MDAP( INS_ARG ) + Ins_MDAP( TT_ExecContext exc, + FT_Long* args ) { FT_UShort point; FT_F26Dot6 cur_dist; @@ -5908,7 +5946,8 @@ /* Stack: uint32 uint32 --> */ /* */ static void - Ins_MIAP( INS_ARG ) + Ins_MIAP( TT_ExecContext exc, + FT_Long* args ) { FT_ULong cvtEntry; FT_UShort point; @@ -6020,7 +6059,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_MDRP( INS_ARG ) + Ins_MDRP( TT_ExecContext exc, + FT_Long* args ) { FT_UShort point; FT_F26Dot6 org_dist, distance, minimum_distance; @@ -6157,7 +6197,8 @@ /* Stack: int32? uint32 --> */ /* */ static void - Ins_MIRP( INS_ARG ) + Ins_MIRP( TT_ExecContext exc, + FT_Long* args ) { FT_UShort point; FT_ULong cvtEntry; @@ -6384,13 +6425,11 @@ /* Stack: uint32 uint32... --> */ /* */ static void - Ins_ALIGNRP( INS_ARG ) + Ins_ALIGNRP( TT_ExecContext exc ) { FT_UShort point; FT_F26Dot6 distance; - FT_UNUSED_ARG; - #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING if ( SUBPIXEL_HINTING && @@ -6449,7 +6488,8 @@ /* Stack: 5 * uint32 --> */ /* */ static void - Ins_ISECT( INS_ARG ) + Ins_ISECT( TT_ExecContext exc, + FT_Long* args ) { FT_UShort point, a0, a1, @@ -6543,7 +6583,8 @@ /* Stack: uint32 uint32 --> */ /* */ static void - Ins_ALIGNPTS( INS_ARG ) + Ins_ALIGNPTS( TT_ExecContext exc, + FT_Long* args ) { FT_UShort p1, p2; FT_F26Dot6 distance; @@ -6577,15 +6618,13 @@ /* SOMETIMES, DUMBER CODE IS BETTER CODE */ static void - Ins_IP( INS_ARG ) + Ins_IP( TT_ExecContext exc ) { FT_F26Dot6 old_range, cur_range; FT_Vector* orus_base; FT_Vector* cur_base; FT_Int twilight; - FT_UNUSED_ARG; - if ( exc->top < exc->GS.loop ) { @@ -6730,7 +6769,8 @@ /* Stack: uint32 --> */ /* */ static void - Ins_UTP( INS_ARG ) + Ins_UTP( TT_ExecContext exc, + FT_Long* args ) { FT_UShort point; FT_Byte mask; @@ -6890,7 +6930,7 @@ /* Stack: --> */ /* */ static void - Ins_IUP( INS_ARG ) + Ins_IUP( TT_ExecContext exc ) { IUP_WorkerRec V; FT_Byte mask; @@ -6904,8 +6944,6 @@ FT_UInt point; /* current point */ FT_Short contour; /* current contour */ - FT_UNUSED_ARG; - /* ignore empty outlines */ if ( exc->pts.n_contours == 0 ) @@ -7003,7 +7041,8 @@ /* Stack: uint32 (2 * uint32)... --> */ /* */ static void - Ins_DELTAP( INS_ARG ) + Ins_DELTAP( TT_ExecContext exc, + FT_Long* args ) { FT_ULong nump, k; FT_UShort A; @@ -7174,7 +7213,8 @@ /* Stack: uint32 (2 * uint32)... --> */ /* */ static void - Ins_DELTAC( INS_ARG ) + Ins_DELTAC( TT_ExecContext exc, + FT_Long* args ) { FT_ULong nump, k; FT_ULong A, C, P; @@ -7278,7 +7318,8 @@ /* Stack: uint32 --> uint32 */ /* */ static void - Ins_GETINFO( INS_ARG ) + Ins_GETINFO( TT_ExecContext exc, + FT_Long* args ) { FT_Long K; @@ -7393,13 +7434,11 @@ static void - Ins_UNKNOWN( INS_ARG ) + Ins_UNKNOWN( TT_ExecContext exc ) { TT_DefRecord* def = exc->IDefs; TT_DefRecord* limit = def + exc->numIDefs; - FT_UNUSED_ARG; - for ( ; def < limit; def++ ) { @@ -7610,7 +7649,7 @@ case 0x03: /* SPvTCA x */ case 0x04: /* SFvTCA y */ case 0x05: /* SFvTCA x */ - Ins_SxyTCA( exc, args ); + Ins_SxyTCA( exc ); break; case 0x06: /* SPvTL // */ @@ -7640,7 +7679,7 @@ break; case 0x0E: /* SFvTPv */ - Ins_SFVTPV( exc, args ); + Ins_SFVTPV( exc ); break; case 0x0F: /* ISECT */ @@ -7680,11 +7719,11 @@ break; case 0x18: /* RTG */ - Ins_RTG( exc, args ); + Ins_RTG( exc ); break; case 0x19: /* RTHG */ - Ins_RTHG( exc, args ); + Ins_RTHG( exc ); break; case 0x1A: /* SMD */ @@ -7692,7 +7731,7 @@ break; case 0x1B: /* ELSE */ - Ins_ELSE( exc, args ); + Ins_ELSE( exc ); break; case 0x1C: /* JMPR */ @@ -7712,19 +7751,19 @@ break; case 0x20: /* DUP */ - Ins_DUP( exc, args ); + Ins_DUP( args ); break; case 0x21: /* POP */ - Ins_POP( exc, args ); + Ins_POP(); break; case 0x22: /* CLEAR */ - Ins_CLEAR( exc, args ); + Ins_CLEAR( exc ); break; case 0x23: /* SWAP */ - Ins_SWAP( exc, args ); + Ins_SWAP( args ); break; case 0x24: /* DEPTH */ @@ -7744,7 +7783,7 @@ break; case 0x28: /* ???? */ - Ins_UNKNOWN( exc, args ); + Ins_UNKNOWN( exc ); break; case 0x29: /* UTP */ @@ -7764,7 +7803,7 @@ break; case 0x2D: /* ENDF */ - Ins_ENDF( exc, args ); + Ins_ENDF( exc ); break; case 0x2E: /* MDAP */ @@ -7774,12 +7813,12 @@ case 0x30: /* IUP */ case 0x31: /* IUP */ - Ins_IUP( exc, args ); + Ins_IUP( exc ); break; case 0x32: /* SHP */ case 0x33: /* SHP */ - Ins_SHP( exc, args ); + Ins_SHP( exc ); break; case 0x34: /* SHC */ @@ -7797,7 +7836,7 @@ break; case 0x39: /* IP */ - Ins_IP( exc, args ); + Ins_IP( exc ); break; case 0x3A: /* MSIRP */ @@ -7806,11 +7845,11 @@ break; case 0x3C: /* AlignRP */ - Ins_ALIGNRP( exc, args ); + Ins_ALIGNRP( exc ); break; case 0x3D: /* RTDG */ - Ins_RTDG( exc, args ); + Ins_RTDG( exc ); break; case 0x3E: /* MIAP */ @@ -7865,39 +7904,39 @@ break; case 0x4D: /* FLIPON */ - Ins_FLIPON( exc, args ); + Ins_FLIPON( exc ); break; case 0x4E: /* FLIPOFF */ - Ins_FLIPOFF( exc, args ); + Ins_FLIPOFF( exc ); break; case 0x4F: /* DEBUG */ - Ins_DEBUG( exc, args ); + Ins_DEBUG( exc ); break; case 0x50: /* LT */ - Ins_LT( exc, args ); + Ins_LT( args ); break; case 0x51: /* LTEQ */ - Ins_LTEQ( exc, args ); + Ins_LTEQ( args ); break; case 0x52: /* GT */ - Ins_GT( exc, args ); + Ins_GT( args ); break; case 0x53: /* GTEQ */ - Ins_GTEQ( exc, args ); + Ins_GTEQ( args ); break; case 0x54: /* EQ */ - Ins_EQ( exc, args ); + Ins_EQ( args ); break; case 0x55: /* NEQ */ - Ins_NEQ( exc, args ); + Ins_NEQ( args ); break; case 0x56: /* ODD */ @@ -7913,19 +7952,19 @@ break; case 0x59: /* EIF */ - Ins_EIF( exc, args ); + Ins_EIF(); break; case 0x5A: /* AND */ - Ins_AND( exc, args ); + Ins_AND( args ); break; case 0x5B: /* OR */ - Ins_OR( exc, args ); + Ins_OR( args ); break; case 0x5C: /* NOT */ - Ins_NOT( exc, args ); + Ins_NOT( args ); break; case 0x5D: /* DELTAP1 */ @@ -7941,11 +7980,11 @@ break; case 0x60: /* ADD */ - Ins_ADD( exc, args ); + Ins_ADD( args ); break; case 0x61: /* SUB */ - Ins_SUB( exc, args ); + Ins_SUB( args ); break; case 0x62: /* DIV */ @@ -7953,23 +7992,23 @@ break; case 0x63: /* MUL */ - Ins_MUL( exc, args ); + Ins_MUL( args ); break; case 0x64: /* ABS */ - Ins_ABS( exc, args ); + Ins_ABS( args ); break; case 0x65: /* NEG */ - Ins_NEG( exc, args ); + Ins_NEG( args ); break; case 0x66: /* FLOOR */ - Ins_FLOOR( exc, args ); + Ins_FLOOR( args ); break; case 0x67: /* CEILING */ - Ins_CEILING( exc, args ); + Ins_CEILING( args ); break; case 0x68: /* ROUND */ @@ -8018,31 +8057,31 @@ break; case 0x7A: /* ROFF */ - Ins_ROFF( exc, args ); + Ins_ROFF( exc ); break; case 0x7B: /* ???? */ - Ins_UNKNOWN( exc, args ); + Ins_UNKNOWN( exc ); break; case 0x7C: /* RUTG */ - Ins_RUTG( exc, args ); + Ins_RUTG( exc ); break; case 0x7D: /* RDTG */ - Ins_RDTG( exc, args ); + Ins_RDTG( exc ); break; case 0x7E: /* SANGW */ - Ins_SANGW( exc, args ); + Ins_SANGW(); break; case 0x7F: /* AA */ - Ins_AA( exc, args ); + Ins_AA(); break; case 0x80: /* FLIPPT */ - Ins_FLIPPT( exc, args ); + Ins_FLIPPT( exc ); break; case 0x81: /* FLIPRGON */ @@ -8055,7 +8094,7 @@ case 0x83: /* UNKNOWN */ case 0x84: /* UNKNOWN */ - Ins_UNKNOWN( exc, args ); + Ins_UNKNOWN( exc ); break; case 0x85: /* SCANCTRL */ @@ -8076,15 +8115,15 @@ break; case 0x8A: /* ROLL */ - Ins_ROLL( exc, args ); + Ins_ROLL( args ); break; case 0x8B: /* MAX */ - Ins_MAX( exc, args ); + Ins_MAX( args ); break; case 0x8C: /* MIN */ - Ins_MIN( exc, args ); + Ins_MIN( args ); break; case 0x8D: /* SCANTYPE */ @@ -8096,7 +8135,7 @@ break; case 0x8F: - Ins_UNKNOWN( exc, args ); + Ins_UNKNOWN( exc ); break; default: @@ -8109,7 +8148,7 @@ else if ( opcode >= 0xB0 ) Ins_PUSHB( exc, args ); else - Ins_UNKNOWN( exc, args ); + Ins_UNKNOWN( exc ); } } -- 2.2.2 From 4aaadf4610b37f73a868697274506e31a71104e4 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sun, 11 Jan 2015 08:42:28 +0100 Subject: [PATCH] [truetype] More macro expansions. * src/truetype/ttinterp.c (FT_UNUSED_EXEC): Remove macro by expansion. --- ChangeLog | 7 +++++++ src/truetype/ttinterp.c | 34 +++++++++++++--------------------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 878c82b..8ab57c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,13 @@ [truetype] More macro expansions. + * src/truetype/ttinterp.c (FT_UNUSED_EXEC): Remove macro by + expansion. + +2015-01-11 Werner Lemberg + + [truetype] More macro expansions. + * src/truetype/ttinterp.c (INS_ARG): Remove macro by expansion, adjusting funtion calls where necessary. (FT_UNUSED_ARG): Removed, no longer needed. diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index 91ddb9b..82e79d0 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -53,14 +53,6 @@ #define MAX_RUNNABLE_OPCODES 1000000L - /*************************************************************************/ - /* */ - /* This macro is used whenever `exec' is unused in a function, to avoid */ - /* stupid warnings from pedantic compilers. */ - /* */ -#define FT_UNUSED_EXEC FT_UNUSED( exc ) - - #define SUBPIXEL_HINTING \ ( ((TT_Driver)FT_FACE_DRIVER( exc->face ))->interpreter_version == \ TT_INTERPRETER_VERSION_38 ) @@ -1809,7 +1801,7 @@ FT_UShort point, FT_F26Dot6 distance ) { - FT_UNUSED_EXEC; + FT_UNUSED( exc ); #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING if ( !SUBPIXEL_HINTING || @@ -1827,7 +1819,7 @@ FT_UShort point, FT_F26Dot6 distance ) { - FT_UNUSED_EXEC; + FT_UNUSED( exc ); zone->cur[point].y += distance; zone->tags[point] |= FT_CURVE_TAG_TOUCH_Y; @@ -1850,7 +1842,7 @@ FT_UShort point, FT_F26Dot6 distance ) { - FT_UNUSED_EXEC; + FT_UNUSED( exc ); zone->org[point].x += distance; } @@ -1862,7 +1854,7 @@ FT_UShort point, FT_F26Dot6 distance ) { - FT_UNUSED_EXEC; + FT_UNUSED( exc ); zone->org[point].y += distance; } @@ -1897,7 +1889,7 @@ { FT_F26Dot6 val; - FT_UNUSED_EXEC; + FT_UNUSED( exc ); if ( distance >= 0 ) @@ -1939,7 +1931,7 @@ { FT_F26Dot6 val; - FT_UNUSED_EXEC; + FT_UNUSED( exc ); if ( distance >= 0 ) @@ -1982,7 +1974,7 @@ { FT_F26Dot6 val; - FT_UNUSED_EXEC; + FT_UNUSED( exc ); if ( distance >= 0 ) @@ -2025,7 +2017,7 @@ { FT_F26Dot6 val; - FT_UNUSED_EXEC; + FT_UNUSED( exc ); if ( distance >= 0 ) @@ -2068,7 +2060,7 @@ { FT_F26Dot6 val; - FT_UNUSED_EXEC; + FT_UNUSED( exc ); if ( distance >= 0 ) @@ -2111,7 +2103,7 @@ { FT_F26Dot6 val; - FT_UNUSED_EXEC; + FT_UNUSED( exc ); if ( distance >= 0 ) @@ -2431,7 +2423,7 @@ FT_Pos dx, FT_Pos dy ) { - FT_UNUSED_EXEC; + FT_UNUSED( exc ); FT_UNUSED( dy ); return dx; @@ -2459,7 +2451,7 @@ FT_Pos dx, FT_Pos dy ) { - FT_UNUSED_EXEC; + FT_UNUSED( exc ); FT_UNUSED( dx ); return dy; @@ -2604,7 +2596,7 @@ { FT_F26Dot6 W; - FT_UNUSED_EXEC; + FT_UNUSED( exc ); if ( FT_ABS( Vx ) < 0x4000L && FT_ABS( Vy ) < 0x4000L ) -- 2.2.2 From 08e7909a5818de4c71c9a54b7ae66b3ad01c65d8 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sun, 11 Jan 2015 08:45:50 +0100 Subject: [PATCH] * src/truetype/ttinterp.c (Normalize): Remove unused argument. --- ChangeLog | 4 ++++ src/truetype/ttinterp.c | 17 +++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8ab57c4..755db2c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2015-01-11 Werner Lemberg + * src/truetype/ttinterp.c (Normalize): Remove unused argument. + +2015-01-11 Werner Lemberg + [truetype] More macro expansions. * src/truetype/ttinterp.c (FT_UNUSED_EXEC): Remove macro by diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index 82e79d0..f35c5c6 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -2585,19 +2585,16 @@ /* Returns FAILURE if a vector parameter is zero. */ /* */ /* */ - /* In case Vx and Vy are both zero, Normalize() returns SUCCESS, and */ + /* In case Vx and Vy are both zero, `Normalize' returns SUCCESS, and */ /* R is undefined. */ /* */ static FT_Bool - Normalize( TT_ExecContext exc, - FT_F26Dot6 Vx, + Normalize( FT_F26Dot6 Vx, FT_F26Dot6 Vy, FT_UnitVector* R ) { FT_F26Dot6 W; - FT_UNUSED( exc ); - if ( FT_ABS( Vx ) < 0x4000L && FT_ABS( Vy ) < 0x4000L ) { @@ -2672,7 +2669,7 @@ A = -C; } - Normalize( exc, A, B, Vec ); + Normalize( A, B, Vec ); return SUCCESS; } @@ -2813,7 +2810,7 @@ S = (FT_Short)args[0]; X = (FT_Long)S; - Normalize( exc, X, Y, &exc->GS.projVector ); + Normalize( X, Y, &exc->GS.projVector ); exc->GS.dualVector = exc->GS.projVector; GUESS_VECTOR( freeVector ); @@ -2841,7 +2838,7 @@ S = (FT_Short)args[0]; X = S; - Normalize( exc, X, Y, &exc->GS.freeVector ); + Normalize( X, Y, &exc->GS.freeVector ); GUESS_VECTOR( projVector ); Compute_Funcs( exc ); } @@ -5032,7 +5029,7 @@ A = -C; } - Normalize( exc, A, B, &exc->GS.dualVector ); + Normalize( A, B, &exc->GS.dualVector ); { FT_Vector* v1 = exc->zp1.cur + p2; @@ -5056,7 +5053,7 @@ A = -C; } - Normalize( exc, A, B, &exc->GS.projVector ); + Normalize( A, B, &exc->GS.projVector ); GUESS_VECTOR( freeVector ); Compute_Funcs( exc ); } -- 2.2.2 From 628578c6558abe6e1106f7d23e6466c06b9ce153 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sun, 11 Jan 2015 08:53:31 +0100 Subject: [PATCH] * src/truetype/ttinterp.c (Ins_SxVTL): Simplify function call. --- ChangeLog | 4 ++++ src/truetype/ttinterp.c | 29 +++++++++++++++-------------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 755db2c..8b3fe5f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2015-01-11 Werner Lemberg + * src/truetype/ttinterp.c (Ins_SxVTL): Simplify function call. + +2015-01-11 Werner Lemberg + * src/truetype/ttinterp.c (Normalize): Remove unused argument. 2015-01-11 Werner Lemberg diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index f35c5c6..b530ec8 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -2629,13 +2629,14 @@ Ins_SxVTL( TT_ExecContext exc, FT_UShort aIdx1, FT_UShort aIdx2, - FT_Int aOpc, FT_UnitVector* Vec ) { FT_Long A, B, C; FT_Vector* p1; FT_Vector* p2; + FT_Byte opcode = exc->opcode; + if ( BOUNDS( aIdx1, exc->zp2.n_points ) || BOUNDS( aIdx2, exc->zp1.n_points ) ) @@ -2658,11 +2659,11 @@ if ( A == 0 && B == 0 ) { - A = 0x4000; - aOpc = 0; + A = 0x4000; + opcode = 0; } - if ( ( aOpc & 1 ) != 0 ) + if ( ( opcode & 1 ) != 0 ) { C = B; /* counter clockwise rotation */ B = A; @@ -2701,7 +2702,8 @@ Ins_SxyTCA( TT_ExecContext exc ) { FT_Short AA, BB; - FT_Byte opcode = exc->opcode; + + FT_Byte opcode = exc->opcode; AA = (FT_Short)( ( opcode & 1 ) << 14 ); @@ -2743,7 +2745,6 @@ if ( Ins_SxVTL( exc, (FT_UShort)args[1], (FT_UShort)args[0], - exc->opcode, &exc->GS.projVector ) == SUCCESS ) { exc->GS.dualVector = exc->GS.projVector; @@ -2766,7 +2767,6 @@ if ( Ins_SxVTL( exc, (FT_UShort)args[1], (FT_UShort)args[0], - exc->opcode, &exc->GS.freeVector ) == SUCCESS ) { GUESS_VECTOR( projVector ); @@ -4988,7 +4988,8 @@ { FT_Long A, B, C; FT_UShort p1, p2; /* was FT_Int in pas type ERROR */ - FT_Int aOpc = exc->opcode; + + FT_Byte opcode = exc->opcode; p1 = (FT_UShort)args[1]; @@ -5017,12 +5018,12 @@ if ( A == 0 && B == 0 ) { - A = 0x4000; - aOpc = 0; + A = 0x4000; + opcode = 0; } } - if ( ( aOpc & 1 ) != 0 ) + if ( ( opcode & 1 ) != 0 ) { C = B; /* counter clockwise rotation */ B = A; @@ -5041,12 +5042,12 @@ if ( A == 0 && B == 0 ) { - A = 0x4000; - aOpc = 0; + A = 0x4000; + opcode = 0; } } - if ( ( aOpc & 1 ) != 0 ) + if ( ( opcode & 1 ) != 0 ) { C = B; /* counter clockwise rotation */ B = A; -- 2.2.2 From ea173c04933e43fc920f9d5515a59bbc006fb5ce Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sun, 11 Jan 2015 08:58:54 +0100 Subject: [PATCH] * src/truetype/ttinterp.c (Ins_JROT, Ins_JROF): Simplify. Based on a patch from Behdad. --- ChangeLog | 6 ++++++ src/truetype/ttinterp.c | 50 ++++++++++++++++--------------------------------- 2 files changed, 22 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8b3fe5f..53946aa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2015-01-11 Werner Lemberg + * src/truetype/ttinterp.c (Ins_JROT, Ins_JROF): Simplify. + + Based on a patch from Behdad. + +2015-01-11 Werner Lemberg + * src/truetype/ttinterp.c (Ins_SxVTL): Simplify function call. 2015-01-11 Werner Lemberg diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index b530ec8..f929000 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -3348,30 +3348,6 @@ /*************************************************************************/ /* */ - /* JROT[]: Jump Relative On True */ - /* Opcode range: 0x78 */ - /* Stack: StkElt int32 --> */ - /* */ - static void - Ins_JROT( TT_ExecContext exc, - FT_Long* args ) - { - if ( args[1] != 0 ) - { - if ( args[0] == 0 && exc->args == 0 ) - exc->error = FT_THROW( Bad_Argument ); - exc->IP += args[0]; - if ( exc->IP < 0 || - ( exc->callTop > 0 && - exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) - exc->error = FT_THROW( Bad_Argument ); - exc->step_ins = FALSE; - } - } - - - /*************************************************************************/ - /* */ /* JMPR[]: JuMP Relative */ /* Opcode range: 0x1C */ /* Stack: int32 --> */ @@ -3393,6 +3369,21 @@ /*************************************************************************/ /* */ + /* JROT[]: Jump Relative On True */ + /* Opcode range: 0x78 */ + /* Stack: StkElt int32 --> */ + /* */ + static void + Ins_JROT( TT_ExecContext exc, + FT_Long* args ) + { + if ( args[1] != 0 ) + Ins_JMPR( exc, args ); + } + + + /*************************************************************************/ + /* */ /* JROF[]: Jump Relative On False */ /* Opcode range: 0x79 */ /* Stack: StkElt int32 --> */ @@ -3402,16 +3393,7 @@ FT_Long* args ) { if ( args[1] == 0 ) - { - if ( args[0] == 0 && exc->args == 0 ) - exc->error = FT_THROW( Bad_Argument ); - exc->IP += args[0]; - if ( exc->IP < 0 || - ( exc->callTop > 0 && - exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) - exc->error = FT_THROW( Bad_Argument ); - exc->step_ins = FALSE; - } + Ins_JMPR( exc, args ); } -- 2.2.2 From 95b57052737daaa1633a36e706b6ae8f3299de52 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sun, 11 Jan 2015 09:50:49 +0100 Subject: [PATCH] [truetype] Prettyfing. * src/truetype/ttinterp.c (project, dualproj, fast_project, fast_dualproj): Rename to... (PROJECT, DUALPROJ, FAST_PROJECT, FAST_DUALPROJ): ... this. --- ChangeLog | 8 +++++ src/truetype/ttinterp.c | 89 +++++++++++++++++++++++++------------------------ 2 files changed, 54 insertions(+), 43 deletions(-) diff --git a/ChangeLog b/ChangeLog index 53946aa..084f67d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2015-01-11 Werner Lemberg + [truetype] Prettyfing. + + * src/truetype/ttinterp.c (project, dualproj, fast_project, + fast_dualproj): Rename to... + (PROJECT, DUALPROJ, FAST_PROJECT, FAST_DUALPROJ): ... this. + +2015-01-11 Werner Lemberg + * src/truetype/ttinterp.c (Ins_JROT, Ins_JROF): Simplify. Based on a patch from Behdad. diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index f929000..7bcf089 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -44,6 +44,7 @@ #undef FT_COMPONENT #define FT_COMPONENT trace_ttinterp + /*************************************************************************/ /* */ /* In order to detect infinite loops in the code, we set up a counter */ @@ -58,16 +59,16 @@ TT_INTERPRETER_VERSION_38 ) -#define project( v1, v2 ) \ +#define PROJECT( v1, v2 ) \ exc->func_project( exc, (v1)->x - (v2)->x, (v1)->y - (v2)->y ) -#define dualproj( v1, v2 ) \ +#define DUALPROJ( v1, v2 ) \ exc->func_dualproj( exc, (v1)->x - (v2)->x, (v1)->y - (v2)->y ) -#define fast_project( v ) \ +#define FAST_PROJECT( v ) \ exc->func_project( exc, (v)->x, (v)->y ) -#define fast_dualproj( v ) \ +#define FAST_DUALPROJ( v ) \ exc->func_dualproj( exc, (v)->x, (v)->y ) @@ -86,6 +87,7 @@ #define BOUNDS( x, n ) ( (FT_UInt)(x) >= (FT_UInt)(n) ) #define BOUNDSL( x, n ) ( (FT_ULong)(x) >= (FT_ULong)(n) ) + /*************************************************************************/ /* */ /* This macro computes (a*2^14)/b and complements TT_MulFix14. */ @@ -113,6 +115,7 @@ #define GUESS_VECTOR( V ) do { } while (0) #endif + /*************************************************************************/ /* */ /* CODERANGE FUNCTIONS */ @@ -2473,10 +2476,10 @@ #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING if ( exc->face->unpatented_hinting ) { - /* If both vectors point rightwards along the x axis, set */ - /* `both-x-axis' true, otherwise set it false. The x values only */ - /* need be tested because the vector has been normalised to a unit */ - /* vector of length 0x4000 = unity. */ + /* If both vectors point rightwards along the x axis, set */ + /* `both-x-axis' true, otherwise set it false. The x values only */ + /* need be tested because the vector has been normalised to a unit */ + /* vector of length 0x4000 = unity. */ exc->GS.both_x_axis = (FT_Bool)( exc->GS.projVector.x == 0x4000 && exc->GS.freeVector.x == 0x4000 ); @@ -4825,9 +4828,9 @@ else { if ( exc->opcode & 1 ) - R = fast_dualproj( &exc->zp2.org[L] ); + R = FAST_DUALPROJ( &exc->zp2.org[L] ); else - R = fast_project( &exc->zp2.cur[L] ); + R = FAST_PROJECT( &exc->zp2.cur[L] ); } args[0] = R; @@ -4861,7 +4864,7 @@ return; } - K = fast_project( &exc->zp2.cur[L] ); + K = FAST_PROJECT( &exc->zp2.cur[L] ); exc->func_move( exc, &exc->zp2, L, args[1] - K ); @@ -4908,7 +4911,7 @@ else { if ( exc->opcode & 1 ) - D = project( exc->zp0.cur + L, exc->zp1.cur + K ); + D = PROJECT( exc->zp0.cur + L, exc->zp1.cur + K ); else { /* XXX: UNDOCUMENTED: twilight zone special case */ @@ -4919,7 +4922,7 @@ FT_Vector* vec2 = exc->zp1.org + K; - D = dualproj( vec1, vec2 ); + D = DUALPROJ( vec1, vec2 ); } else { @@ -4930,7 +4933,7 @@ if ( exc->metrics.x_scale == exc->metrics.y_scale ) { /* this should be faster */ - D = dualproj( vec1, vec2 ); + D = DUALPROJ( vec1, vec2 ); D = FT_MulFix( D, exc->metrics.x_scale ); } else @@ -4941,7 +4944,7 @@ vec.x = FT_MulFix( vec1->x - vec2->x, exc->metrics.x_scale ); vec.y = FT_MulFix( vec1->y - vec2->y, exc->metrics.y_scale ); - D = fast_dualproj( &vec ); + D = FAST_DUALPROJ( &vec ); } } } @@ -5406,7 +5409,7 @@ *zone = zp; *refp = p; - d = project( zp.cur + p, zp.org + p ); + d = PROJECT( zp.cur + p, zp.org + p ); #ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING if ( exc->face->unpatented_hinting ) @@ -5699,13 +5702,13 @@ else #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING { - /* If not using ignore_x_mode rendering, allow ZP2 move. */ - /* If inline deltas aren't allowed, skip ZP2 move. */ - /* If using ignore_x_mode rendering, allow ZP2 point move if: */ - /* - freedom vector is y and sph_compatibility_mode is off */ - /* - the glyph is composite and the move is in the Y direction */ - /* - the glyph is specifically set to allow SHPIX moves */ - /* - the move is on a previously Y-touched point */ + /* If not using ignore_x_mode rendering, allow ZP2 move. */ + /* If inline deltas aren't allowed, skip ZP2 move. */ + /* If using ignore_x_mode rendering, allow ZP2 point move if: */ + /* - freedom vector is y and sph_compatibility_mode is off */ + /* - the glyph is composite and the move is in the Y direction */ + /* - the glyph is specifically set to allow SHPIX moves */ + /* - the move is on a previously Y-touched point */ if ( SUBPIXEL_HINTING && exc->ignore_x_mode ) @@ -5730,7 +5733,7 @@ if ( ( exc->sph_tweak_flags & SPH_TWEAK_SKIP_NONPIXEL_Y_MOVES ) && ( B1 & 63 ) != 0 && ( B2 & 63 ) != 0 && - B1 != B2 ) + B1 != B2 ) Move_Zp2_Point( exc, point, -dx, -dy, TRUE ); } } @@ -5838,7 +5841,7 @@ exc->zp1.cur[point] = exc->zp1.org[point]; } - distance = project( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 ); + distance = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 ); #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING /* subpixel hinting - make MSIRP respect CVT cut-in; */ @@ -5885,7 +5888,7 @@ if ( ( exc->opcode & 1 ) != 0 ) { - cur_dist = fast_project( &exc->zp0.cur[point] ); + cur_dist = FAST_PROJECT( &exc->zp0.cur[point] ); #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING if ( SUBPIXEL_HINTING && exc->ignore_x_mode && @@ -5995,7 +5998,7 @@ distance = 0; #endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - org_dist = fast_project( &exc->zp0.cur[point] ); + org_dist = FAST_PROJECT( &exc->zp0.cur[point] ); if ( ( exc->opcode & 1 ) != 0 ) /* rounding and control cut-in flag */ { @@ -6069,7 +6072,7 @@ FT_Vector* vec2 = &exc->zp0.org[exc->GS.rp0]; - org_dist = dualproj( vec1, vec2 ); + org_dist = DUALPROJ( vec1, vec2 ); } else { @@ -6080,7 +6083,7 @@ if ( exc->metrics.x_scale == exc->metrics.y_scale ) { /* this should be faster */ - org_dist = dualproj( vec1, vec2 ); + org_dist = DUALPROJ( vec1, vec2 ); org_dist = FT_MulFix( org_dist, exc->metrics.x_scale ); } else @@ -6091,7 +6094,7 @@ vec.x = FT_MulFix( vec1->x - vec2->x, exc->metrics.x_scale ); vec.y = FT_MulFix( vec1->y - vec2->y, exc->metrics.y_scale ); - org_dist = fast_dualproj( &vec ); + org_dist = FAST_DUALPROJ( &vec ); } } @@ -6149,7 +6152,7 @@ /* now move the point */ - org_dist = project( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 ); + org_dist = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 ); exc->func_move( exc, &exc->zp1, point, distance - org_dist ); @@ -6241,8 +6244,8 @@ exc->zp1.cur[point] = exc->zp1.org[point]; } - org_dist = dualproj( &exc->zp1.org[point], &exc->zp0.org[exc->GS.rp0] ); - cur_dist = project ( &exc->zp1.cur[point], &exc->zp0.cur[exc->GS.rp0] ); + org_dist = DUALPROJ( &exc->zp1.org[point], &exc->zp0.org[exc->GS.rp0] ); + cur_dist = PROJECT ( &exc->zp1.cur[point], &exc->zp0.cur[exc->GS.rp0] ); /* auto-flip test */ @@ -6438,7 +6441,7 @@ } else { - distance = project( exc->zp1.cur + point, + distance = PROJECT( exc->zp1.cur + point, exc->zp0.cur + exc->GS.rp0 ); exc->func_move( exc, &exc->zp1, point, -distance ); @@ -6573,7 +6576,7 @@ return; } - distance = project( exc->zp0.cur + p2, exc->zp1.cur + p1 ) / 2; + distance = PROJECT( exc->zp0.cur + p2, exc->zp1.cur + p1 ) / 2; exc->func_move( exc, &exc->zp1, p1, distance ); exc->func_move( exc, &exc->zp0, p2, -distance ); @@ -6639,9 +6642,9 @@ else { if ( twilight ) - old_range = dualproj( &exc->zp1.org[exc->GS.rp2], orus_base ); + old_range = DUALPROJ( &exc->zp1.org[exc->GS.rp2], orus_base ); else if ( exc->metrics.x_scale == exc->metrics.y_scale ) - old_range = dualproj( &exc->zp1.orus[exc->GS.rp2], orus_base ); + old_range = DUALPROJ( &exc->zp1.orus[exc->GS.rp2], orus_base ); else { FT_Vector vec; @@ -6652,10 +6655,10 @@ vec.y = FT_MulFix( exc->zp1.orus[exc->GS.rp2].y - orus_base->y, exc->metrics.y_scale ); - old_range = fast_dualproj( &vec ); + old_range = FAST_DUALPROJ( &vec ); } - cur_range = project( &exc->zp1.cur[exc->GS.rp2], cur_base ); + cur_range = PROJECT( &exc->zp1.cur[exc->GS.rp2], cur_base ); } for ( ; exc->GS.loop > 0; --exc->GS.loop ) @@ -6676,9 +6679,9 @@ } if ( twilight ) - org_dist = dualproj( &exc->zp2.org[point], orus_base ); + org_dist = DUALPROJ( &exc->zp2.org[point], orus_base ); else if ( exc->metrics.x_scale == exc->metrics.y_scale ) - org_dist = dualproj( &exc->zp2.orus[point], orus_base ); + org_dist = DUALPROJ( &exc->zp2.orus[point], orus_base ); else { FT_Vector vec; @@ -6689,10 +6692,10 @@ vec.y = FT_MulFix( exc->zp2.orus[point].y - orus_base->y, exc->metrics.y_scale ); - org_dist = fast_dualproj( &vec ); + org_dist = FAST_DUALPROJ( &vec ); } - cur_dist = project( &exc->zp2.cur[point], cur_base ); + cur_dist = PROJECT( &exc->zp2.cur[point], cur_base ); if ( org_dist ) { -- 2.2.2 From 2af74c9b87d4a35f019d54ad89c9ef1c2208f7bb Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sun, 11 Jan 2015 10:08:09 +0100 Subject: [PATCH] [truetype] Better grouping of functions in `ttinterp.c'. No code change. --- src/truetype/ttinterp.c | 2918 +++++++++++++++++++++++------------------------ 1 file changed, 1453 insertions(+), 1465 deletions(-) diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index 7bcf089..293af9d 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -2628,57 +2628,6 @@ /*************************************************************************/ - static FT_Bool - Ins_SxVTL( TT_ExecContext exc, - FT_UShort aIdx1, - FT_UShort aIdx2, - FT_UnitVector* Vec ) - { - FT_Long A, B, C; - FT_Vector* p1; - FT_Vector* p2; - - FT_Byte opcode = exc->opcode; - - - if ( BOUNDS( aIdx1, exc->zp2.n_points ) || - BOUNDS( aIdx2, exc->zp1.n_points ) ) - { - if ( exc->pedantic_hinting ) - exc->error = FT_THROW( Invalid_Reference ); - return FAILURE; - } - - p1 = exc->zp1.cur + aIdx2; - p2 = exc->zp2.cur + aIdx1; - - A = p1->x - p2->x; - B = p1->y - p2->y; - - /* If p1 == p2, SPvTL and SFvTL behave the same as */ - /* SPvTCA[X] and SFvTCA[X], respectively. */ - /* */ - /* Confirmed by Greg Hitchcock. */ - - if ( A == 0 && B == 0 ) - { - A = 0x4000; - opcode = 0; - } - - if ( ( opcode & 1 ) != 0 ) - { - C = B; /* counter clockwise rotation */ - B = A; - A = -C; - } - - Normalize( A, B, Vec ); - - return SUCCESS; - } - - #define ARRAY_BOUND_ERROR \ do \ { \ @@ -2689,2115 +2638,2158 @@ /*************************************************************************/ /* */ - /* SVTCA[a]: Set (F and P) Vectors to Coordinate Axis */ - /* Opcode range: 0x00-0x01 */ - /* Stack: --> */ - /* */ - /* SPvTCA[a]: Set PVector to Coordinate Axis */ - /* Opcode range: 0x02-0x03 */ - /* Stack: --> */ - /* */ - /* SFvTCA[a]: Set FVector to Coordinate Axis */ - /* Opcode range: 0x04-0x05 */ - /* Stack: --> */ + /* MPPEM[]: Measure Pixel Per EM */ + /* Opcode range: 0x4B */ + /* Stack: --> Euint16 */ /* */ static void - Ins_SxyTCA( TT_ExecContext exc ) + Ins_MPPEM( TT_ExecContext exc, + FT_Long* args ) { - FT_Short AA, BB; - - FT_Byte opcode = exc->opcode; - - - AA = (FT_Short)( ( opcode & 1 ) << 14 ); - BB = (FT_Short)( AA ^ 0x4000 ); - - if ( opcode < 4 ) - { - exc->GS.projVector.x = AA; - exc->GS.projVector.y = BB; - - exc->GS.dualVector.x = AA; - exc->GS.dualVector.y = BB; - } - else - GUESS_VECTOR( projVector ); - - if ( ( opcode & 2 ) == 0 ) - { - exc->GS.freeVector.x = AA; - exc->GS.freeVector.y = BB; - } - else - GUESS_VECTOR( freeVector ); - - Compute_Funcs( exc ); + args[0] = exc->func_cur_ppem( exc ); } /*************************************************************************/ /* */ - /* SPvTL[a]: Set PVector To Line */ - /* Opcode range: 0x06-0x07 */ - /* Stack: uint32 uint32 --> */ + /* MPS[]: Measure Point Size */ + /* Opcode range: 0x4C */ + /* Stack: --> Euint16 */ /* */ static void - Ins_SPVTL( TT_ExecContext exc, - FT_Long* args ) + Ins_MPS( TT_ExecContext exc, + FT_Long* args ) { - if ( Ins_SxVTL( exc, - (FT_UShort)args[1], - (FT_UShort)args[0], - &exc->GS.projVector ) == SUCCESS ) - { - exc->GS.dualVector = exc->GS.projVector; - GUESS_VECTOR( freeVector ); - Compute_Funcs( exc ); - } + /* Note: The point size should be irrelevant in a given font program; */ + /* we thus decide to return only the PPEM value. */ +#if 0 + args[0] = exc->metrics.pointSize; +#else + args[0] = exc->func_cur_ppem( exc ); +#endif } /*************************************************************************/ /* */ - /* SFvTL[a]: Set FVector To Line */ - /* Opcode range: 0x08-0x09 */ - /* Stack: uint32 uint32 --> */ + /* DUP[]: DUPlicate the stack's top element */ + /* Opcode range: 0x20 */ + /* Stack: StkElt --> StkElt StkElt */ /* */ static void - Ins_SFVTL( TT_ExecContext exc, - FT_Long* args ) + Ins_DUP( FT_Long* args ) { - if ( Ins_SxVTL( exc, - (FT_UShort)args[1], - (FT_UShort)args[0], - &exc->GS.freeVector ) == SUCCESS ) - { - GUESS_VECTOR( projVector ); - Compute_Funcs( exc ); - } + args[1] = args[0]; } /*************************************************************************/ /* */ - /* SFvTPv[]: Set FVector To PVector */ - /* Opcode range: 0x0E */ - /* Stack: --> */ + /* POP[]: POP the stack's top element */ + /* Opcode range: 0x21 */ + /* Stack: StkElt --> */ /* */ static void - Ins_SFVTPV( TT_ExecContext exc ) + Ins_POP( void ) { - GUESS_VECTOR( projVector ); - exc->GS.freeVector = exc->GS.projVector; - Compute_Funcs( exc ); + /* nothing to do */ } /*************************************************************************/ /* */ - /* SPvFS[]: Set PVector From Stack */ - /* Opcode range: 0x0A */ - /* Stack: f2.14 f2.14 --> */ + /* CLEAR[]: CLEAR the entire stack */ + /* Opcode range: 0x22 */ + /* Stack: StkElt... --> */ /* */ static void - Ins_SPVFS( TT_ExecContext exc, - FT_Long* args ) + Ins_CLEAR( TT_ExecContext exc ) { - FT_Short S; - FT_Long X, Y; - - - /* Only use low 16bits, then sign extend */ - S = (FT_Short)args[1]; - Y = (FT_Long)S; - S = (FT_Short)args[0]; - X = (FT_Long)S; - - Normalize( X, Y, &exc->GS.projVector ); - - exc->GS.dualVector = exc->GS.projVector; - GUESS_VECTOR( freeVector ); - Compute_Funcs( exc ); + exc->new_top = 0; } /*************************************************************************/ /* */ - /* SFvFS[]: Set FVector From Stack */ - /* Opcode range: 0x0B */ - /* Stack: f2.14 f2.14 --> */ + /* SWAP[]: SWAP the stack's top two elements */ + /* Opcode range: 0x23 */ + /* Stack: 2 * StkElt --> 2 * StkElt */ /* */ static void - Ins_SFVFS( TT_ExecContext exc, - FT_Long* args ) + Ins_SWAP( FT_Long* args ) { - FT_Short S; - FT_Long X, Y; - + FT_Long L; - /* Only use low 16bits, then sign extend */ - S = (FT_Short)args[1]; - Y = (FT_Long)S; - S = (FT_Short)args[0]; - X = S; - Normalize( X, Y, &exc->GS.freeVector ); - GUESS_VECTOR( projVector ); - Compute_Funcs( exc ); + L = args[0]; + args[0] = args[1]; + args[1] = L; } /*************************************************************************/ /* */ - /* GPv[]: Get Projection Vector */ - /* Opcode range: 0x0C */ - /* Stack: ef2.14 --> ef2.14 */ + /* DEPTH[]: return the stack DEPTH */ + /* Opcode range: 0x24 */ + /* Stack: --> uint32 */ /* */ static void - Ins_GPV( TT_ExecContext exc, - FT_Long* args ) + Ins_DEPTH( TT_ExecContext exc, + FT_Long* args ) { -#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING - if ( exc->face->unpatented_hinting ) - { - args[0] = exc->GS.both_x_axis ? 0x4000 : 0; - args[1] = exc->GS.both_x_axis ? 0 : 0x4000; - } - else - { - args[0] = exc->GS.projVector.x; - args[1] = exc->GS.projVector.y; - } -#else - args[0] = exc->GS.projVector.x; - args[1] = exc->GS.projVector.y; -#endif + args[0] = exc->top; } /*************************************************************************/ /* */ - /* GFv[]: Get Freedom Vector */ - /* Opcode range: 0x0D */ - /* Stack: ef2.14 --> ef2.14 */ + /* LT[]: Less Than */ + /* Opcode range: 0x50 */ + /* Stack: int32? int32? --> bool */ /* */ static void - Ins_GFV( TT_ExecContext exc, - FT_Long* args ) + Ins_LT( FT_Long* args ) { -#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING - if ( exc->face->unpatented_hinting ) - { - args[0] = exc->GS.both_x_axis ? 0x4000 : 0; - args[1] = exc->GS.both_x_axis ? 0 : 0x4000; - } - else - { - args[0] = exc->GS.freeVector.x; - args[1] = exc->GS.freeVector.y; - } -#else - args[0] = exc->GS.freeVector.x; - args[1] = exc->GS.freeVector.y; -#endif + args[0] = ( args[0] < args[1] ); } /*************************************************************************/ /* */ - /* SRP0[]: Set Reference Point 0 */ - /* Opcode range: 0x10 */ - /* Stack: uint32 --> */ + /* LTEQ[]: Less Than or EQual */ + /* Opcode range: 0x51 */ + /* Stack: int32? int32? --> bool */ /* */ static void - Ins_SRP0( TT_ExecContext exc, - FT_Long* args ) + Ins_LTEQ( FT_Long* args ) { - exc->GS.rp0 = (FT_UShort)args[0]; + args[0] = ( args[0] <= args[1] ); } /*************************************************************************/ /* */ - /* SRP1[]: Set Reference Point 1 */ - /* Opcode range: 0x11 */ - /* Stack: uint32 --> */ + /* GT[]: Greater Than */ + /* Opcode range: 0x52 */ + /* Stack: int32? int32? --> bool */ /* */ static void - Ins_SRP1( TT_ExecContext exc, - FT_Long* args ) + Ins_GT( FT_Long* args ) { - exc->GS.rp1 = (FT_UShort)args[0]; + args[0] = ( args[0] > args[1] ); } /*************************************************************************/ /* */ - /* SRP2[]: Set Reference Point 2 */ - /* Opcode range: 0x12 */ - /* Stack: uint32 --> */ + /* GTEQ[]: Greater Than or EQual */ + /* Opcode range: 0x53 */ + /* Stack: int32? int32? --> bool */ /* */ static void - Ins_SRP2( TT_ExecContext exc, - FT_Long* args ) + Ins_GTEQ( FT_Long* args ) { - exc->GS.rp2 = (FT_UShort)args[0]; + args[0] = ( args[0] >= args[1] ); } /*************************************************************************/ /* */ - /* RTHG[]: Round To Half Grid */ - /* Opcode range: 0x19 */ - /* Stack: --> */ + /* EQ[]: EQual */ + /* Opcode range: 0x54 */ + /* Stack: StkElt StkElt --> bool */ /* */ static void - Ins_RTHG( TT_ExecContext exc ) + Ins_EQ( FT_Long* args ) { - exc->GS.round_state = TT_Round_To_Half_Grid; - exc->func_round = (TT_Round_Func)Round_To_Half_Grid; + args[0] = ( args[0] == args[1] ); } /*************************************************************************/ /* */ - /* RTG[]: Round To Grid */ - /* Opcode range: 0x18 */ - /* Stack: --> */ + /* NEQ[]: Not EQual */ + /* Opcode range: 0x55 */ + /* Stack: StkElt StkElt --> bool */ /* */ static void - Ins_RTG( TT_ExecContext exc ) + Ins_NEQ( FT_Long* args ) { - exc->GS.round_state = TT_Round_To_Grid; - exc->func_round = (TT_Round_Func)Round_To_Grid; + args[0] = ( args[0] != args[1] ); } /*************************************************************************/ - /* RTDG[]: Round To Double Grid */ - /* Opcode range: 0x3D */ - /* Stack: --> */ /* */ - static void - Ins_RTDG( TT_ExecContext exc ) - { - exc->GS.round_state = TT_Round_To_Double_Grid; - exc->func_round = (TT_Round_Func)Round_To_Double_Grid; - } - - - /*************************************************************************/ - /* RUTG[]: Round Up To Grid */ - /* Opcode range: 0x7C */ - /* Stack: --> */ + /* ODD[]: Is ODD */ + /* Opcode range: 0x56 */ + /* Stack: f26.6 --> bool */ /* */ static void - Ins_RUTG( TT_ExecContext exc ) + Ins_ODD( TT_ExecContext exc, + FT_Long* args ) { - exc->GS.round_state = TT_Round_Up_To_Grid; - exc->func_round = (TT_Round_Func)Round_Up_To_Grid; + args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 64 ); } /*************************************************************************/ /* */ - /* RDTG[]: Round Down To Grid */ - /* Opcode range: 0x7D */ - /* Stack: --> */ + /* EVEN[]: Is EVEN */ + /* Opcode range: 0x57 */ + /* Stack: f26.6 --> bool */ /* */ static void - Ins_RDTG( TT_ExecContext exc ) + Ins_EVEN( TT_ExecContext exc, + FT_Long* args ) { - exc->GS.round_state = TT_Round_Down_To_Grid; - exc->func_round = (TT_Round_Func)Round_Down_To_Grid; + args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 0 ); } /*************************************************************************/ /* */ - /* ROFF[]: Round OFF */ - /* Opcode range: 0x7A */ - /* Stack: --> */ + /* AND[]: logical AND */ + /* Opcode range: 0x5A */ + /* Stack: uint32 uint32 --> uint32 */ /* */ static void - Ins_ROFF( TT_ExecContext exc ) + Ins_AND( FT_Long* args ) { - exc->GS.round_state = TT_Round_Off; - exc->func_round = (TT_Round_Func)Round_None; + args[0] = ( args[0] && args[1] ); } /*************************************************************************/ /* */ - /* SROUND[]: Super ROUND */ - /* Opcode range: 0x76 */ - /* Stack: Eint8 --> */ + /* OR[]: logical OR */ + /* Opcode range: 0x5B */ + /* Stack: uint32 uint32 --> uint32 */ /* */ static void - Ins_SROUND( TT_ExecContext exc, - FT_Long* args ) + Ins_OR( FT_Long* args ) { - SetSuperRound( exc, 0x4000, args[0] ); - - exc->GS.round_state = TT_Round_Super; - exc->func_round = (TT_Round_Func)Round_Super; + args[0] = ( args[0] || args[1] ); } /*************************************************************************/ /* */ - /* S45ROUND[]: Super ROUND 45 degrees */ - /* Opcode range: 0x77 */ - /* Stack: uint32 --> */ + /* NOT[]: logical NOT */ + /* Opcode range: 0x5C */ + /* Stack: StkElt --> uint32 */ /* */ static void - Ins_S45ROUND( TT_ExecContext exc, - FT_Long* args ) + Ins_NOT( FT_Long* args ) { - SetSuperRound( exc, 0x2D41, args[0] ); - - exc->GS.round_state = TT_Round_Super_45; - exc->func_round = (TT_Round_Func)Round_Super_45; + args[0] = !args[0]; } /*************************************************************************/ /* */ - /* SLOOP[]: Set LOOP variable */ - /* Opcode range: 0x17 */ - /* Stack: int32? --> */ + /* ADD[]: ADD */ + /* Opcode range: 0x60 */ + /* Stack: f26.6 f26.6 --> f26.6 */ /* */ static void - Ins_SLOOP( TT_ExecContext exc, - FT_Long* args ) + Ins_ADD( FT_Long* args ) { - if ( args[0] < 0 ) - exc->error = FT_THROW( Bad_Argument ); - else - exc->GS.loop = args[0]; + args[0] += args[1]; } /*************************************************************************/ /* */ - /* SMD[]: Set Minimum Distance */ - /* Opcode range: 0x1A */ - /* Stack: f26.6 --> */ + /* SUB[]: SUBtract */ + /* Opcode range: 0x61 */ + /* Stack: f26.6 f26.6 --> f26.6 */ /* */ static void - Ins_SMD( TT_ExecContext exc, - FT_Long* args ) + Ins_SUB( FT_Long* args ) { - exc->GS.minimum_distance = args[0]; + args[0] -= args[1]; } /*************************************************************************/ /* */ - /* SCVTCI[]: Set Control Value Table Cut In */ - /* Opcode range: 0x1D */ - /* Stack: f26.6 --> */ + /* DIV[]: DIVide */ + /* Opcode range: 0x62 */ + /* Stack: f26.6 f26.6 --> f26.6 */ /* */ static void - Ins_SCVTCI( TT_ExecContext exc, - FT_Long* args ) + Ins_DIV( TT_ExecContext exc, + FT_Long* args ) { - exc->GS.control_value_cutin = (FT_F26Dot6)args[0]; + if ( args[1] == 0 ) + exc->error = FT_THROW( Divide_By_Zero ); + else + args[0] = FT_MulDiv_No_Round( args[0], 64L, args[1] ); } /*************************************************************************/ /* */ - /* SSWCI[]: Set Single Width Cut In */ - /* Opcode range: 0x1E */ - /* Stack: f26.6 --> */ + /* MUL[]: MULtiply */ + /* Opcode range: 0x63 */ + /* Stack: f26.6 f26.6 --> f26.6 */ /* */ static void - Ins_SSWCI( TT_ExecContext exc, - FT_Long* args ) + Ins_MUL( FT_Long* args ) { - exc->GS.single_width_cutin = (FT_F26Dot6)args[0]; + args[0] = FT_MulDiv( args[0], args[1], 64L ); } /*************************************************************************/ /* */ - /* SSW[]: Set Single Width */ - /* Opcode range: 0x1F */ - /* Stack: int32? --> */ + /* ABS[]: ABSolute value */ + /* Opcode range: 0x64 */ + /* Stack: f26.6 --> f26.6 */ /* */ static void - Ins_SSW( TT_ExecContext exc, - FT_Long* args ) + Ins_ABS( FT_Long* args ) { - exc->GS.single_width_value = FT_MulFix( args[0], - exc->tt_metrics.scale ); + args[0] = FT_ABS( args[0] ); } /*************************************************************************/ /* */ - /* FLIPON[]: Set auto-FLIP to ON */ - /* Opcode range: 0x4D */ - /* Stack: --> */ + /* NEG[]: NEGate */ + /* Opcode range: 0x65 */ + /* Stack: f26.6 --> f26.6 */ /* */ static void - Ins_FLIPON( TT_ExecContext exc ) + Ins_NEG( FT_Long* args ) { - exc->GS.auto_flip = TRUE; + args[0] = -args[0]; } /*************************************************************************/ /* */ - /* FLIPOFF[]: Set auto-FLIP to OFF */ - /* Opcode range: 0x4E */ - /* Stack: --> */ + /* FLOOR[]: FLOOR */ + /* Opcode range: 0x66 */ + /* Stack: f26.6 --> f26.6 */ /* */ static void - Ins_FLIPOFF( TT_ExecContext exc ) + Ins_FLOOR( FT_Long* args ) { - exc->GS.auto_flip = FALSE; + args[0] = FT_PIX_FLOOR( args[0] ); } /*************************************************************************/ /* */ - /* SANGW[]: Set ANGle Weight */ - /* Opcode range: 0x7E */ - /* Stack: uint32 --> */ + /* CEILING[]: CEILING */ + /* Opcode range: 0x67 */ + /* Stack: f26.6 --> f26.6 */ /* */ static void - Ins_SANGW( void ) + Ins_CEILING( FT_Long* args ) { - /* instruction not supported anymore */ + args[0] = FT_PIX_CEIL( args[0] ); } /*************************************************************************/ /* */ - /* SDB[]: Set Delta Base */ - /* Opcode range: 0x5E */ - /* Stack: uint32 --> */ + /* RS[]: Read Store */ + /* Opcode range: 0x43 */ + /* Stack: uint32 --> uint32 */ /* */ static void - Ins_SDB( TT_ExecContext exc, - FT_Long* args ) + Ins_RS( TT_ExecContext exc, + FT_Long* args ) { - exc->GS.delta_base = (FT_UShort)args[0]; - } - +#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - /*************************************************************************/ - /* */ - /* SDS[]: Set Delta Shift */ - /* Opcode range: 0x5F */ - /* Stack: uint32 --> */ - /* */ - static void - Ins_SDS( TT_ExecContext exc, - FT_Long* args ) - { - if ( (FT_ULong)args[0] > 6UL ) - exc->error = FT_THROW( Bad_Argument ); - else - exc->GS.delta_shift = (FT_UShort)args[0]; - } + FT_ULong I = (FT_ULong)args[0]; - /*************************************************************************/ - /* */ - /* MPPEM[]: Measure Pixel Per EM */ - /* Opcode range: 0x4B */ - /* Stack: --> Euint16 */ - /* */ - static void - Ins_MPPEM( TT_ExecContext exc, - FT_Long* args ) - { - args[0] = exc->func_cur_ppem( exc ); - } + if ( BOUNDSL( I, exc->storeSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + else + args[0] = 0; + } + else + { + /* subpixel hinting - avoid Typeman Dstroke and */ + /* IStroke and Vacuform rounds */ + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + ( ( I == 24 && + ( exc->face->sph_found_func_flags & + ( SPH_FDEF_SPACING_1 | + SPH_FDEF_SPACING_2 ) ) ) || + ( I == 22 && + ( exc->sph_in_func_flags & + SPH_FDEF_TYPEMAN_STROKES ) ) || + ( I == 8 && + ( exc->face->sph_found_func_flags & + SPH_FDEF_VACUFORM_ROUND_1 ) && + exc->iup_called ) ) ) + args[0] = 0; + else + args[0] = exc->storage[I]; + } +#else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - /*************************************************************************/ - /* */ - /* MPS[]: Measure Point Size */ - /* Opcode range: 0x4C */ - /* Stack: --> Euint16 */ - /* */ - static void - Ins_MPS( TT_ExecContext exc, - FT_Long* args ) - { - /* Note: The point size should be irrelevant in a given font program; */ - /* we thus decide to return only the PPEM value. */ -#if 0 - args[0] = exc->metrics.pointSize; -#else - args[0] = exc->func_cur_ppem( exc ); -#endif - } + FT_ULong I = (FT_ULong)args[0]; - /*************************************************************************/ - /* */ - /* DUP[]: DUPlicate the stack's top element */ - /* Opcode range: 0x20 */ - /* Stack: StkElt --> StkElt StkElt */ - /* */ - static void - Ins_DUP( FT_Long* args ) - { - args[1] = args[0]; + if ( BOUNDSL( I, exc->storeSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + else + args[0] = 0; + } + else + args[0] = exc->storage[I]; + +#endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ } /*************************************************************************/ /* */ - /* POP[]: POP the stack's top element */ - /* Opcode range: 0x21 */ - /* Stack: StkElt --> */ + /* WS[]: Write Store */ + /* Opcode range: 0x42 */ + /* Stack: uint32 uint32 --> */ /* */ static void - Ins_POP( void ) + Ins_WS( TT_ExecContext exc, + FT_Long* args ) { - /* nothing to do */ - } + FT_ULong I = (FT_ULong)args[0]; - /*************************************************************************/ - /* */ - /* CLEAR[]: CLEAR the entire stack */ - /* Opcode range: 0x22 */ - /* Stack: StkElt... --> */ - /* */ - static void - Ins_CLEAR( TT_ExecContext exc ) - { - exc->new_top = 0; + if ( BOUNDSL( I, exc->storeSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + } + else + exc->storage[I] = args[1]; } /*************************************************************************/ /* */ - /* SWAP[]: SWAP the stack's top two elements */ - /* Opcode range: 0x23 */ - /* Stack: 2 * StkElt --> 2 * StkElt */ + /* WCVTP[]: Write CVT in Pixel units */ + /* Opcode range: 0x44 */ + /* Stack: f26.6 uint32 --> */ /* */ static void - Ins_SWAP( FT_Long* args ) + Ins_WCVTP( TT_ExecContext exc, + FT_Long* args ) { - FT_Long L; + FT_ULong I = (FT_ULong)args[0]; - L = args[0]; - args[0] = args[1]; - args[1] = L; + if ( BOUNDSL( I, exc->cvtSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + } + else + exc->func_write_cvt( exc, I, args[1] ); } /*************************************************************************/ /* */ - /* DEPTH[]: return the stack DEPTH */ - /* Opcode range: 0x24 */ - /* Stack: --> uint32 */ + /* WCVTF[]: Write CVT in Funits */ + /* Opcode range: 0x70 */ + /* Stack: uint32 uint32 --> */ /* */ static void - Ins_DEPTH( TT_ExecContext exc, + Ins_WCVTF( TT_ExecContext exc, FT_Long* args ) { - args[0] = exc->top; + FT_ULong I = (FT_ULong)args[0]; + + + if ( BOUNDSL( I, exc->cvtSize ) ) + { + if ( exc->pedantic_hinting ) + ARRAY_BOUND_ERROR; + } + else + exc->cvt[I] = FT_MulFix( args[1], exc->tt_metrics.scale ); } /*************************************************************************/ /* */ - /* CINDEX[]: Copy INDEXed element */ - /* Opcode range: 0x25 */ - /* Stack: int32 --> StkElt */ + /* RCVT[]: Read CVT */ + /* Opcode range: 0x45 */ + /* Stack: uint32 --> f26.6 */ /* */ static void - Ins_CINDEX( TT_ExecContext exc, - FT_Long* args ) + Ins_RCVT( TT_ExecContext exc, + FT_Long* args ) { - FT_Long L; - + FT_ULong I = (FT_ULong)args[0]; - L = args[0]; - if ( L <= 0 || L > exc->args ) + if ( BOUNDSL( I, exc->cvtSize ) ) { if ( exc->pedantic_hinting ) - exc->error = FT_THROW( Invalid_Reference ); - args[0] = 0; + ARRAY_BOUND_ERROR; + else + args[0] = 0; } else - args[0] = exc->stack[exc->args - L]; + args[0] = exc->func_read_cvt( exc, I ); } /*************************************************************************/ /* */ - /* EIF[]: End IF */ - /* Opcode range: 0x59 */ - /* Stack: --> */ + /* AA[]: Adjust Angle */ + /* Opcode range: 0x7F */ + /* Stack: uint32 --> */ /* */ static void - Ins_EIF( void ) + Ins_AA( void ) { - /* nothing to do */ + /* intentionally no longer supported */ } /*************************************************************************/ /* */ - /* JMPR[]: JuMP Relative */ - /* Opcode range: 0x1C */ - /* Stack: int32 --> */ + /* DEBUG[]: DEBUG. Unsupported. */ + /* Opcode range: 0x4F */ + /* Stack: uint32 --> */ + /* */ + /* Note: The original instruction pops a value from the stack. */ /* */ static void - Ins_JMPR( TT_ExecContext exc, - FT_Long* args ) + Ins_DEBUG( TT_ExecContext exc ) { - if ( args[0] == 0 && exc->args == 0 ) - exc->error = FT_THROW( Bad_Argument ); - exc->IP += args[0]; - if ( exc->IP < 0 || - ( exc->callTop > 0 && - exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) - exc->error = FT_THROW( Bad_Argument ); - exc->step_ins = FALSE; + exc->error = FT_THROW( Debug_OpCode ); } /*************************************************************************/ /* */ - /* JROT[]: Jump Relative On True */ - /* Opcode range: 0x78 */ - /* Stack: StkElt int32 --> */ + /* ROUND[ab]: ROUND value */ + /* Opcode range: 0x68-0x6B */ + /* Stack: f26.6 --> f26.6 */ /* */ static void - Ins_JROT( TT_ExecContext exc, - FT_Long* args ) + Ins_ROUND( TT_ExecContext exc, + FT_Long* args ) { - if ( args[1] != 0 ) - Ins_JMPR( exc, args ); + args[0] = exc->func_round( + exc, + args[0], + exc->tt_metrics.compensations[exc->opcode - 0x68] ); } /*************************************************************************/ /* */ - /* JROF[]: Jump Relative On False */ - /* Opcode range: 0x79 */ - /* Stack: StkElt int32 --> */ + /* NROUND[ab]: No ROUNDing of value */ + /* Opcode range: 0x6C-0x6F */ + /* Stack: f26.6 --> f26.6 */ /* */ static void - Ins_JROF( TT_ExecContext exc, - FT_Long* args ) + Ins_NROUND( TT_ExecContext exc, + FT_Long* args ) { - if ( args[1] == 0 ) - Ins_JMPR( exc, args ); + args[0] = Round_None( + exc, + args[0], + exc->tt_metrics.compensations[exc->opcode - 0x6C] ); } /*************************************************************************/ /* */ - /* LT[]: Less Than */ - /* Opcode range: 0x50 */ - /* Stack: int32? int32? --> bool */ + /* MAX[]: MAXimum */ + /* Opcode range: 0x68 */ + /* Stack: int32? int32? --> int32 */ /* */ static void - Ins_LT( FT_Long* args ) + Ins_MAX( FT_Long* args ) { - args[0] = ( args[0] < args[1] ); + if ( args[1] > args[0] ) + args[0] = args[1]; } /*************************************************************************/ /* */ - /* LTEQ[]: Less Than or EQual */ - /* Opcode range: 0x51 */ - /* Stack: int32? int32? --> bool */ + /* MIN[]: MINimum */ + /* Opcode range: 0x69 */ + /* Stack: int32? int32? --> int32 */ /* */ static void - Ins_LTEQ( FT_Long* args ) + Ins_MIN( FT_Long* args ) { - args[0] = ( args[0] <= args[1] ); + if ( args[1] < args[0] ) + args[0] = args[1]; } /*************************************************************************/ /* */ - /* GT[]: Greater Than */ - /* Opcode range: 0x52 */ - /* Stack: int32? int32? --> bool */ - /* */ - static void - Ins_GT( FT_Long* args ) + /* MINDEX[]: Move INDEXed element */ + /* Opcode range: 0x26 */ + /* Stack: int32? --> StkElt */ + /* */ + static void + Ins_MINDEX( TT_ExecContext exc, + FT_Long* args ) { - args[0] = ( args[0] > args[1] ); + FT_Long L, K; + + + L = args[0]; + + if ( L <= 0 || L > exc->args ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + } + else + { + K = exc->stack[exc->args - L]; + + FT_ARRAY_MOVE( &exc->stack[exc->args - L ], + &exc->stack[exc->args - L + 1], + ( L - 1 ) ); + + exc->stack[exc->args - 1] = K; + } } /*************************************************************************/ /* */ - /* GTEQ[]: Greater Than or EQual */ - /* Opcode range: 0x53 */ - /* Stack: int32? int32? --> bool */ + /* CINDEX[]: Copy INDEXed element */ + /* Opcode range: 0x25 */ + /* Stack: int32 --> StkElt */ /* */ static void - Ins_GTEQ( FT_Long* args ) + Ins_CINDEX( TT_ExecContext exc, + FT_Long* args ) { - args[0] = ( args[0] >= args[1] ); + FT_Long L; + + + L = args[0]; + + if ( L <= 0 || L > exc->args ) + { + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + args[0] = 0; + } + else + args[0] = exc->stack[exc->args - L]; } /*************************************************************************/ /* */ - /* EQ[]: EQual */ - /* Opcode range: 0x54 */ - /* Stack: StkElt StkElt --> bool */ + /* ROLL[]: ROLL top three elements */ + /* Opcode range: 0x8A */ + /* Stack: 3 * StkElt --> 3 * StkElt */ /* */ static void - Ins_EQ( FT_Long* args ) + Ins_ROLL( FT_Long* args ) { - args[0] = ( args[0] == args[1] ); + FT_Long A, B, C; + + + A = args[2]; + B = args[1]; + C = args[0]; + + args[2] = C; + args[1] = A; + args[0] = B; } /*************************************************************************/ /* */ - /* NEQ[]: Not EQual */ - /* Opcode range: 0x55 */ - /* Stack: StkElt StkElt --> bool */ + /* MANAGING THE FLOW OF CONTROL */ /* */ - static void - Ins_NEQ( FT_Long* args ) - { - args[0] = ( args[0] != args[1] ); - } + /*************************************************************************/ /*************************************************************************/ /* */ - /* ODD[]: Is ODD */ - /* Opcode range: 0x56 */ - /* Stack: f26.6 --> bool */ + /* SLOOP[]: Set LOOP variable */ + /* Opcode range: 0x17 */ + /* Stack: int32? --> */ /* */ static void - Ins_ODD( TT_ExecContext exc, - FT_Long* args ) + Ins_SLOOP( TT_ExecContext exc, + FT_Long* args ) { - args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 64 ); + if ( args[0] < 0 ) + exc->error = FT_THROW( Bad_Argument ); + else + exc->GS.loop = args[0]; } - /*************************************************************************/ - /* */ - /* EVEN[]: Is EVEN */ - /* Opcode range: 0x57 */ - /* Stack: f26.6 --> bool */ - /* */ - static void - Ins_EVEN( TT_ExecContext exc, - FT_Long* args ) + static FT_Bool + SkipCode( TT_ExecContext exc ) { - args[0] = ( ( exc->func_round( exc, args[0], 0 ) & 127 ) == 0 ); + exc->IP += exc->length; + + if ( exc->IP < exc->codeSize ) + { + exc->opcode = exc->code[exc->IP]; + + exc->length = opcode_length[exc->opcode]; + if ( exc->length < 0 ) + { + if ( exc->IP + 1 >= exc->codeSize ) + goto Fail_Overflow; + exc->length = 2 - exc->length * exc->code[exc->IP + 1]; + } + + if ( exc->IP + exc->length <= exc->codeSize ) + return SUCCESS; + } + + Fail_Overflow: + exc->error = FT_THROW( Code_Overflow ); + return FAILURE; } /*************************************************************************/ /* */ - /* AND[]: logical AND */ - /* Opcode range: 0x5A */ - /* Stack: uint32 uint32 --> uint32 */ + /* IF[]: IF test */ + /* Opcode range: 0x58 */ + /* Stack: StkElt --> */ /* */ static void - Ins_AND( FT_Long* args ) + Ins_IF( TT_ExecContext exc, + FT_Long* args ) { - args[0] = ( args[0] && args[1] ); + FT_Int nIfs; + FT_Bool Out; + + + if ( args[0] != 0 ) + return; + + nIfs = 1; + Out = 0; + + do + { + if ( SkipCode( exc ) == FAILURE ) + return; + + switch ( exc->opcode ) + { + case 0x58: /* IF */ + nIfs++; + break; + + case 0x1B: /* ELSE */ + Out = FT_BOOL( nIfs == 1 ); + break; + + case 0x59: /* EIF */ + nIfs--; + Out = FT_BOOL( nIfs == 0 ); + break; + } + } while ( Out == 0 ); } /*************************************************************************/ /* */ - /* OR[]: logical OR */ - /* Opcode range: 0x5B */ - /* Stack: uint32 uint32 --> uint32 */ + /* ELSE[]: ELSE */ + /* Opcode range: 0x1B */ + /* Stack: --> */ /* */ static void - Ins_OR( FT_Long* args ) + Ins_ELSE( TT_ExecContext exc ) { - args[0] = ( args[0] || args[1] ); + FT_Int nIfs; + + + nIfs = 1; + + do + { + if ( SkipCode( exc ) == FAILURE ) + return; + + switch ( exc->opcode ) + { + case 0x58: /* IF */ + nIfs++; + break; + + case 0x59: /* EIF */ + nIfs--; + break; + } + } while ( nIfs != 0 ); } /*************************************************************************/ /* */ - /* NOT[]: logical NOT */ - /* Opcode range: 0x5C */ - /* Stack: StkElt --> uint32 */ + /* EIF[]: End IF */ + /* Opcode range: 0x59 */ + /* Stack: --> */ /* */ static void - Ins_NOT( FT_Long* args ) + Ins_EIF( void ) { - args[0] = !args[0]; + /* nothing to do */ } /*************************************************************************/ /* */ - /* ADD[]: ADD */ - /* Opcode range: 0x60 */ - /* Stack: f26.6 f26.6 --> f26.6 */ + /* JMPR[]: JuMP Relative */ + /* Opcode range: 0x1C */ + /* Stack: int32 --> */ /* */ static void - Ins_ADD( FT_Long* args ) + Ins_JMPR( TT_ExecContext exc, + FT_Long* args ) { - args[0] += args[1]; + if ( args[0] == 0 && exc->args == 0 ) + exc->error = FT_THROW( Bad_Argument ); + exc->IP += args[0]; + if ( exc->IP < 0 || + ( exc->callTop > 0 && + exc->IP > exc->callStack[exc->callTop - 1].Def->end ) ) + exc->error = FT_THROW( Bad_Argument ); + exc->step_ins = FALSE; } /*************************************************************************/ /* */ - /* SUB[]: SUBtract */ - /* Opcode range: 0x61 */ - /* Stack: f26.6 f26.6 --> f26.6 */ + /* JROT[]: Jump Relative On True */ + /* Opcode range: 0x78 */ + /* Stack: StkElt int32 --> */ /* */ static void - Ins_SUB( FT_Long* args ) + Ins_JROT( TT_ExecContext exc, + FT_Long* args ) { - args[0] -= args[1]; + if ( args[1] != 0 ) + Ins_JMPR( exc, args ); } /*************************************************************************/ /* */ - /* DIV[]: DIVide */ - /* Opcode range: 0x62 */ - /* Stack: f26.6 f26.6 --> f26.6 */ + /* JROF[]: Jump Relative On False */ + /* Opcode range: 0x79 */ + /* Stack: StkElt int32 --> */ /* */ static void - Ins_DIV( TT_ExecContext exc, - FT_Long* args ) + Ins_JROF( TT_ExecContext exc, + FT_Long* args ) { if ( args[1] == 0 ) - exc->error = FT_THROW( Divide_By_Zero ); - else - args[0] = FT_MulDiv_No_Round( args[0], 64L, args[1] ); + Ins_JMPR( exc, args ); } /*************************************************************************/ /* */ - /* MUL[]: MULtiply */ - /* Opcode range: 0x63 */ - /* Stack: f26.6 f26.6 --> f26.6 */ - /* */ - static void - Ins_MUL( FT_Long* args ) - { - args[0] = FT_MulDiv( args[0], args[1], 64L ); - } - - - /*************************************************************************/ - /* */ - /* ABS[]: ABSolute value */ - /* Opcode range: 0x64 */ - /* Stack: f26.6 --> f26.6 */ - /* */ - static void - Ins_ABS( FT_Long* args ) - { - args[0] = FT_ABS( args[0] ); - } - - - /*************************************************************************/ - /* */ - /* NEG[]: NEGate */ - /* Opcode range: 0x65 */ - /* Stack: f26.6 --> f26.6 */ + /* DEFINING AND USING FUNCTIONS AND INSTRUCTIONS */ /* */ - static void - Ins_NEG( FT_Long* args ) - { - args[0] = -args[0]; - } - - /*************************************************************************/ - /* */ - /* FLOOR[]: FLOOR */ - /* Opcode range: 0x66 */ - /* Stack: f26.6 --> f26.6 */ - /* */ - static void - Ins_FLOOR( FT_Long* args ) - { - args[0] = FT_PIX_FLOOR( args[0] ); - } /*************************************************************************/ /* */ - /* CEILING[]: CEILING */ - /* Opcode range: 0x67 */ - /* Stack: f26.6 --> f26.6 */ + /* FDEF[]: Function DEFinition */ + /* Opcode range: 0x2C */ + /* Stack: uint32 --> */ /* */ static void - Ins_CEILING( FT_Long* args ) + Ins_FDEF( TT_ExecContext exc, + FT_Long* args ) { - args[0] = FT_PIX_CEIL( args[0] ); - } - + FT_ULong n; + TT_DefRecord* rec; + TT_DefRecord* limit; - /*************************************************************************/ - /* */ - /* RS[]: Read Store */ - /* Opcode range: 0x43 */ - /* Stack: uint32 --> uint32 */ - /* */ - static void - Ins_RS( TT_ExecContext exc, - FT_Long* args ) - { #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING + /* arguments to opcodes are skipped by `SKIP_Code' */ + FT_Byte opcode_pattern[9][12] = { + /* #0 inline delta function 1 */ + { + 0x4B, /* PPEM */ + 0x53, /* GTEQ */ + 0x23, /* SWAP */ + 0x4B, /* PPEM */ + 0x51, /* LTEQ */ + 0x5A, /* AND */ + 0x58, /* IF */ + 0x38, /* SHPIX */ + 0x1B, /* ELSE */ + 0x21, /* POP */ + 0x21, /* POP */ + 0x59 /* EIF */ + }, + /* #1 inline delta function 2 */ + { + 0x4B, /* PPEM */ + 0x54, /* EQ */ + 0x58, /* IF */ + 0x38, /* SHPIX */ + 0x1B, /* ELSE */ + 0x21, /* POP */ + 0x21, /* POP */ + 0x59 /* EIF */ + }, + /* #2 diagonal stroke function */ + { + 0x20, /* DUP */ + 0x20, /* DUP */ + 0xB0, /* PUSHB_1 */ + /* 1 */ + 0x60, /* ADD */ + 0x46, /* GC_cur */ + 0xB0, /* PUSHB_1 */ + /* 64 */ + 0x23, /* SWAP */ + 0x42 /* WS */ + }, + /* #3 VacuFormRound function */ + { + 0x45, /* RCVT */ + 0x23, /* SWAP */ + 0x46, /* GC_cur */ + 0x60, /* ADD */ + 0x20, /* DUP */ + 0xB0 /* PUSHB_1 */ + /* 38 */ + }, + /* #4 TTFautohint bytecode (old) */ + { + 0x20, /* DUP */ + 0x64, /* ABS */ + 0xB0, /* PUSHB_1 */ + /* 32 */ + 0x60, /* ADD */ + 0x66, /* FLOOR */ + 0x23, /* SWAP */ + 0xB0 /* PUSHB_1 */ + }, + /* #5 spacing function 1 */ + { + 0x01, /* SVTCA_x */ + 0xB0, /* PUSHB_1 */ + /* 24 */ + 0x43, /* RS */ + 0x58 /* IF */ + }, + /* #6 spacing function 2 */ + { + 0x01, /* SVTCA_x */ + 0x18, /* RTG */ + 0xB0, /* PUSHB_1 */ + /* 24 */ + 0x43, /* RS */ + 0x58 /* IF */ + }, + /* #7 TypeMan Talk DiagEndCtrl function */ + { + 0x01, /* SVTCA_x */ + 0x20, /* DUP */ + 0xB0, /* PUSHB_1 */ + /* 3 */ + 0x25, /* CINDEX */ + }, + /* #8 TypeMan Talk Align */ + { + 0x06, /* SPVTL */ + 0x7D, /* RDTG */ + }, + }; + FT_UShort opcode_patterns = 9; + FT_UShort opcode_pointer[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + FT_UShort opcode_size[9] = { 12, 8, 8, 6, 7, 4, 5, 4, 2 }; + FT_UShort i; +#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - FT_ULong I = (FT_ULong)args[0]; + /* some font programs are broken enough to redefine functions! */ + /* We will then parse the current table. */ - if ( BOUNDSL( I, exc->storeSize ) ) - { - if ( exc->pedantic_hinting ) - ARRAY_BOUND_ERROR; - else - args[0] = 0; - } - else + rec = exc->FDefs; + limit = rec + exc->numFDefs; + n = args[0]; + + for ( ; rec < limit; rec++ ) { - /* subpixel hinting - avoid Typeman Dstroke and */ - /* IStroke and Vacuform rounds */ - if ( SUBPIXEL_HINTING && - exc->ignore_x_mode && - ( ( I == 24 && - ( exc->face->sph_found_func_flags & - ( SPH_FDEF_SPACING_1 | - SPH_FDEF_SPACING_2 ) ) ) || - ( I == 22 && - ( exc->sph_in_func_flags & - SPH_FDEF_TYPEMAN_STROKES ) ) || - ( I == 8 && - ( exc->face->sph_found_func_flags & - SPH_FDEF_VACUFORM_ROUND_1 ) && - exc->iup_called ) ) ) - args[0] = 0; - else - args[0] = exc->storage[I]; + if ( rec->opc == n ) + break; } -#else /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - - FT_ULong I = (FT_ULong)args[0]; - - - if ( BOUNDSL( I, exc->storeSize ) ) + if ( rec == limit ) { - if ( exc->pedantic_hinting ) - ARRAY_BOUND_ERROR; - else - args[0] = 0; + /* check that there is enough room for new functions */ + if ( exc->numFDefs >= exc->maxFDefs ) + { + exc->error = FT_THROW( Too_Many_Function_Defs ); + return; + } + exc->numFDefs++; } - else - args[0] = exc->storage[I]; - -#endif /* !TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - } - - - /*************************************************************************/ - /* */ - /* WS[]: Write Store */ - /* Opcode range: 0x42 */ - /* Stack: uint32 uint32 --> */ - /* */ - static void - Ins_WS( TT_ExecContext exc, - FT_Long* args ) - { - FT_ULong I = (FT_ULong)args[0]; - - if ( BOUNDSL( I, exc->storeSize ) ) + /* Although FDEF takes unsigned 32-bit integer, */ + /* func # must be within unsigned 16-bit integer */ + if ( n > 0xFFFFU ) { - if ( exc->pedantic_hinting ) - ARRAY_BOUND_ERROR; + exc->error = FT_THROW( Too_Many_Function_Defs ); + return; } - else - exc->storage[I] = args[1]; - } + rec->range = exc->curRange; + rec->opc = (FT_UInt16)n; + rec->start = exc->IP + 1; + rec->active = TRUE; + rec->inline_delta = FALSE; + rec->sph_fdef_flags = 0x0000; - /*************************************************************************/ - /* */ - /* WCVTP[]: Write CVT in Pixel units */ - /* Opcode range: 0x44 */ - /* Stack: f26.6 uint32 --> */ - /* */ - static void - Ins_WCVTP( TT_ExecContext exc, - FT_Long* args ) - { - FT_ULong I = (FT_ULong)args[0]; + if ( n > exc->maxFunc ) + exc->maxFunc = (FT_UInt16)n; + +#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING + /* We don't know for sure these are typeman functions, */ + /* however they are only active when RS 22 is called */ + if ( n >= 64 && n <= 66 ) + rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_STROKES; +#endif + /* Now skip the whole function definition. */ + /* We don't allow nested IDEFS & FDEFs. */ - if ( BOUNDSL( I, exc->cvtSize ) ) + while ( SkipCode( exc ) == SUCCESS ) { - if ( exc->pedantic_hinting ) - ARRAY_BOUND_ERROR; - } - else - exc->func_write_cvt( exc, I, args[1] ); - } +#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - /*************************************************************************/ - /* */ - /* WCVTF[]: Write CVT in Funits */ - /* Opcode range: 0x70 */ - /* Stack: uint32 uint32 --> */ - /* */ - static void - Ins_WCVTF( TT_ExecContext exc, - FT_Long* args ) - { - FT_ULong I = (FT_ULong)args[0]; + if ( SUBPIXEL_HINTING ) + { + for ( i = 0; i < opcode_patterns; i++ ) + { + if ( opcode_pointer[i] < opcode_size[i] && + exc->opcode == opcode_pattern[i][opcode_pointer[i]] ) + { + opcode_pointer[i] += 1; + if ( opcode_pointer[i] == opcode_size[i] ) + { + FT_TRACE7(( "sph: Function %d, opcode ptrn: %d, %s %s\n", + i, n, + exc->face->root.family_name, + exc->face->root.style_name )); - if ( BOUNDSL( I, exc->cvtSize ) ) - { - if ( exc->pedantic_hinting ) - ARRAY_BOUND_ERROR; - } - else - exc->cvt[I] = FT_MulFix( args[1], exc->tt_metrics.scale ); - } + switch ( i ) + { + case 0: + rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_1; + exc->face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_1; + break; + case 1: + rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_2; + exc->face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_2; + break; - /*************************************************************************/ - /* */ - /* RCVT[]: Read CVT */ - /* Opcode range: 0x45 */ - /* Stack: uint32 --> f26.6 */ - /* */ - static void - Ins_RCVT( TT_ExecContext exc, - FT_Long* args ) - { - FT_ULong I = (FT_ULong)args[0]; + case 2: + switch ( n ) + { + /* needs to be implemented still */ + case 58: + rec->sph_fdef_flags |= SPH_FDEF_DIAGONAL_STROKE; + exc->face->sph_found_func_flags |= SPH_FDEF_DIAGONAL_STROKE; + } + break; + case 3: + switch ( n ) + { + case 0: + rec->sph_fdef_flags |= SPH_FDEF_VACUFORM_ROUND_1; + exc->face->sph_found_func_flags |= SPH_FDEF_VACUFORM_ROUND_1; + } + break; - if ( BOUNDSL( I, exc->cvtSize ) ) - { - if ( exc->pedantic_hinting ) - ARRAY_BOUND_ERROR; - else - args[0] = 0; - } - else - args[0] = exc->func_read_cvt( exc, I ); - } + case 4: + /* probably not necessary to detect anymore */ + rec->sph_fdef_flags |= SPH_FDEF_TTFAUTOHINT_1; + exc->face->sph_found_func_flags |= SPH_FDEF_TTFAUTOHINT_1; + break; + case 5: + switch ( n ) + { + case 0: + case 1: + case 2: + case 4: + case 7: + case 8: + rec->sph_fdef_flags |= SPH_FDEF_SPACING_1; + exc->face->sph_found_func_flags |= SPH_FDEF_SPACING_1; + } + break; - /*************************************************************************/ - /* */ - /* AA[]: Adjust Angle */ - /* Opcode range: 0x7F */ - /* Stack: uint32 --> */ - /* */ - static void - Ins_AA( void ) - { - /* intentionally no longer supported */ - } + case 6: + switch ( n ) + { + case 0: + case 1: + case 2: + case 4: + case 7: + case 8: + rec->sph_fdef_flags |= SPH_FDEF_SPACING_2; + exc->face->sph_found_func_flags |= SPH_FDEF_SPACING_2; + } + break; + case 7: + rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; + exc->face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; + break; - /*************************************************************************/ - /* */ - /* DEBUG[]: DEBUG. Unsupported. */ - /* Opcode range: 0x4F */ - /* Stack: uint32 --> */ - /* */ - /* Note: The original instruction pops a value from the stack. */ - /* */ - static void - Ins_DEBUG( TT_ExecContext exc ) - { - exc->error = FT_THROW( Debug_OpCode ); - } + case 8: +#if 0 + rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; + exc->face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; +#endif + break; + } + opcode_pointer[i] = 0; + } + } + else + opcode_pointer[i] = 0; + } - /*************************************************************************/ - /* */ - /* ROUND[ab]: ROUND value */ - /* Opcode range: 0x68-0x6B */ - /* Stack: f26.6 --> f26.6 */ - /* */ - static void - Ins_ROUND( TT_ExecContext exc, - FT_Long* args ) - { - args[0] = exc->func_round( - exc, - args[0], - exc->tt_metrics.compensations[exc->opcode - 0x68] ); - } + /* Set sph_compatibility_mode only when deltas are detected */ + exc->face->sph_compatibility_mode = + ( ( exc->face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_1 ) | + ( exc->face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ); + } +#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - /*************************************************************************/ - /* */ - /* NROUND[ab]: No ROUNDing of value */ - /* Opcode range: 0x6C-0x6F */ - /* Stack: f26.6 --> f26.6 */ - /* */ - static void - Ins_NROUND( TT_ExecContext exc, - FT_Long* args ) - { - args[0] = Round_None( - exc, - args[0], - exc->tt_metrics.compensations[exc->opcode - 0x6C] ); + switch ( exc->opcode ) + { + case 0x89: /* IDEF */ + case 0x2C: /* FDEF */ + exc->error = FT_THROW( Nested_DEFS ); + return; + + case 0x2D: /* ENDF */ + rec->end = exc->IP; + return; + } + } } /*************************************************************************/ /* */ - /* MAX[]: MAXimum */ - /* Opcode range: 0x68 */ - /* Stack: int32? int32? --> int32 */ + /* ENDF[]: END Function definition */ + /* Opcode range: 0x2D */ + /* Stack: --> */ /* */ static void - Ins_MAX( FT_Long* args ) + Ins_ENDF( TT_ExecContext exc ) { - if ( args[1] > args[0] ) - args[0] = args[1]; - } + TT_CallRec* pRec; - /*************************************************************************/ - /* */ - /* MIN[]: MINimum */ - /* Opcode range: 0x69 */ - /* Stack: int32? int32? --> int32 */ - /* */ - static void - Ins_MIN( FT_Long* args ) - { - if ( args[1] < args[0] ) - args[0] = args[1]; - } +#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING + exc->sph_in_func_flags = 0x0000; +#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ + if ( exc->callTop <= 0 ) /* We encountered an ENDF without a call */ + { + exc->error = FT_THROW( ENDF_In_Exec_Stream ); + return; + } - /*************************************************************************/ - /* */ - /* MINDEX[]: Move INDEXed element */ - /* Opcode range: 0x26 */ - /* Stack: int32? --> StkElt */ - /* */ - static void - Ins_MINDEX( TT_ExecContext exc, - FT_Long* args ) - { - FT_Long L, K; + exc->callTop--; + pRec = &exc->callStack[exc->callTop]; - L = args[0]; + pRec->Cur_Count--; - if ( L <= 0 || L > exc->args ) + exc->step_ins = FALSE; + + if ( pRec->Cur_Count > 0 ) { - if ( exc->pedantic_hinting ) - exc->error = FT_THROW( Invalid_Reference ); + exc->callTop++; + exc->IP = pRec->Def->start; } else - { - K = exc->stack[exc->args - L]; + /* Loop through the current function */ + Ins_Goto_CodeRange( exc, pRec->Caller_Range, pRec->Caller_IP ); - FT_ARRAY_MOVE( &exc->stack[exc->args - L ], - &exc->stack[exc->args - L + 1], - ( L - 1 ) ); + /* Exit the current call frame. */ - exc->stack[exc->args - 1] = K; - } + /* NOTE: If the last instruction of a program is a */ + /* CALL or LOOPCALL, the return address is */ + /* always out of the code range. This is a */ + /* valid address, and it is why we do not test */ + /* the result of Ins_Goto_CodeRange() here! */ } /*************************************************************************/ /* */ - /* ROLL[]: ROLL top three elements */ - /* Opcode range: 0x8A */ - /* Stack: 3 * StkElt --> 3 * StkElt */ + /* CALL[]: CALL function */ + /* Opcode range: 0x2B */ + /* Stack: uint32? --> */ /* */ static void - Ins_ROLL( FT_Long* args ) + Ins_CALL( TT_ExecContext exc, + FT_Long* args ) { - FT_Long A, B, C; - - - A = args[2]; - B = args[1]; - C = args[0]; + FT_ULong F; + TT_CallRec* pCrec; + TT_DefRecord* def; - args[2] = C; - args[1] = A; - args[0] = B; - } + /* first of all, check the index */ - /*************************************************************************/ - /* */ - /* MANAGING THE FLOW OF CONTROL */ - /* */ - /* Instructions appear in the specification's order. */ - /* */ - /*************************************************************************/ + F = args[0]; + if ( BOUNDSL( F, exc->maxFunc + 1 ) ) + goto Fail; + /* Except for some old Apple fonts, all functions in a TrueType */ + /* font are defined in increasing order, starting from 0. This */ + /* means that we normally have */ + /* */ + /* exc->maxFunc+1 == exc->numFDefs */ + /* exc->FDefs[n].opc == n for n in 0..exc->maxFunc */ + /* */ + /* If this isn't true, we need to look up the function table. */ - static FT_Bool - SkipCode( TT_ExecContext exc ) - { - exc->IP += exc->length; + def = exc->FDefs + F; + if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F ) + { + /* look up the FDefs table */ + TT_DefRecord* limit; - if ( exc->IP < exc->codeSize ) - { - exc->opcode = exc->code[exc->IP]; - exc->length = opcode_length[exc->opcode]; - if ( exc->length < 0 ) - { - if ( exc->IP + 1 >= exc->codeSize ) - goto Fail_Overflow; - exc->length = 2 - exc->length * exc->code[exc->IP + 1]; - } + def = exc->FDefs; + limit = def + exc->numFDefs; - if ( exc->IP + exc->length <= exc->codeSize ) - return SUCCESS; + while ( def < limit && def->opc != F ) + def++; + + if ( def == limit ) + goto Fail; } - Fail_Overflow: - exc->error = FT_THROW( Code_Overflow ); - return FAILURE; - } + /* check that the function is active */ + if ( !def->active ) + goto Fail; +#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + ( ( exc->iup_called && + ( exc->sph_tweak_flags & SPH_TWEAK_NO_CALL_AFTER_IUP ) ) || + ( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) ) ) + goto Fail; + else + exc->sph_in_func_flags = def->sph_fdef_flags; +#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - /*************************************************************************/ - /* */ - /* IF[]: IF test */ - /* Opcode range: 0x58 */ - /* Stack: StkElt --> */ - /* */ - static void - Ins_IF( TT_ExecContext exc, - FT_Long* args ) - { - FT_Int nIfs; - FT_Bool Out; + /* check the call stack */ + if ( exc->callTop >= exc->callSize ) + { + exc->error = FT_THROW( Stack_Overflow ); + return; + } + pCrec = exc->callStack + exc->callTop; - if ( args[0] != 0 ) - return; + pCrec->Caller_Range = exc->curRange; + pCrec->Caller_IP = exc->IP + 1; + pCrec->Cur_Count = 1; + pCrec->Def = def; - nIfs = 1; - Out = 0; + exc->callTop++; - do - { - if ( SkipCode( exc ) == FAILURE ) - return; + Ins_Goto_CodeRange( exc, def->range, def->start ); - switch ( exc->opcode ) - { - case 0x58: /* IF */ - nIfs++; - break; + exc->step_ins = FALSE; - case 0x1B: /* ELSE */ - Out = FT_BOOL( nIfs == 1 ); - break; + return; - case 0x59: /* EIF */ - nIfs--; - Out = FT_BOOL( nIfs == 0 ); - break; - } - } while ( Out == 0 ); + Fail: + exc->error = FT_THROW( Invalid_Reference ); } /*************************************************************************/ /* */ - /* ELSE[]: ELSE */ - /* Opcode range: 0x1B */ - /* Stack: --> */ + /* LOOPCALL[]: LOOP and CALL function */ + /* Opcode range: 0x2A */ + /* Stack: uint32? Eint16? --> */ /* */ static void - Ins_ELSE( TT_ExecContext exc ) + Ins_LOOPCALL( TT_ExecContext exc, + FT_Long* args ) { - FT_Int nIfs; - - - nIfs = 1; - - do - { - if ( SkipCode( exc ) == FAILURE ) - return; + FT_ULong F; + TT_CallRec* pCrec; + TT_DefRecord* def; - switch ( exc->opcode ) - { - case 0x58: /* IF */ - nIfs++; - break; - case 0x59: /* EIF */ - nIfs--; - break; - } - } while ( nIfs != 0 ); - } + /* first of all, check the index */ + F = args[1]; + if ( BOUNDSL( F, exc->maxFunc + 1 ) ) + goto Fail; + /* Except for some old Apple fonts, all functions in a TrueType */ + /* font are defined in increasing order, starting from 0. This */ + /* means that we normally have */ + /* */ + /* exc->maxFunc+1 == exc->numFDefs */ + /* exc->FDefs[n].opc == n for n in 0..exc->maxFunc */ + /* */ + /* If this isn't true, we need to look up the function table. */ - /*************************************************************************/ - /* */ - /* DEFINING AND USING FUNCTIONS AND INSTRUCTIONS */ - /* */ - /* Instructions appear in the specification's order. */ - /* */ - /*************************************************************************/ + def = exc->FDefs + F; + if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F ) + { + /* look up the FDefs table */ + TT_DefRecord* limit; - /*************************************************************************/ - /* */ - /* FDEF[]: Function DEFinition */ - /* Opcode range: 0x2C */ - /* Stack: uint32 --> */ - /* */ - static void - Ins_FDEF( TT_ExecContext exc, - FT_Long* args ) - { - FT_ULong n; - TT_DefRecord* rec; - TT_DefRecord* limit; + def = exc->FDefs; + limit = def + exc->numFDefs; -#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - /* arguments to opcodes are skipped by `SKIP_Code' */ - FT_Byte opcode_pattern[9][12] = { - /* #0 inline delta function 1 */ - { - 0x4B, /* PPEM */ - 0x53, /* GTEQ */ - 0x23, /* SWAP */ - 0x4B, /* PPEM */ - 0x51, /* LTEQ */ - 0x5A, /* AND */ - 0x58, /* IF */ - 0x38, /* SHPIX */ - 0x1B, /* ELSE */ - 0x21, /* POP */ - 0x21, /* POP */ - 0x59 /* EIF */ - }, - /* #1 inline delta function 2 */ - { - 0x4B, /* PPEM */ - 0x54, /* EQ */ - 0x58, /* IF */ - 0x38, /* SHPIX */ - 0x1B, /* ELSE */ - 0x21, /* POP */ - 0x21, /* POP */ - 0x59 /* EIF */ - }, - /* #2 diagonal stroke function */ - { - 0x20, /* DUP */ - 0x20, /* DUP */ - 0xB0, /* PUSHB_1 */ - /* 1 */ - 0x60, /* ADD */ - 0x46, /* GC_cur */ - 0xB0, /* PUSHB_1 */ - /* 64 */ - 0x23, /* SWAP */ - 0x42 /* WS */ - }, - /* #3 VacuFormRound function */ - { - 0x45, /* RCVT */ - 0x23, /* SWAP */ - 0x46, /* GC_cur */ - 0x60, /* ADD */ - 0x20, /* DUP */ - 0xB0 /* PUSHB_1 */ - /* 38 */ - }, - /* #4 TTFautohint bytecode (old) */ - { - 0x20, /* DUP */ - 0x64, /* ABS */ - 0xB0, /* PUSHB_1 */ - /* 32 */ - 0x60, /* ADD */ - 0x66, /* FLOOR */ - 0x23, /* SWAP */ - 0xB0 /* PUSHB_1 */ - }, - /* #5 spacing function 1 */ - { - 0x01, /* SVTCA_x */ - 0xB0, /* PUSHB_1 */ - /* 24 */ - 0x43, /* RS */ - 0x58 /* IF */ - }, - /* #6 spacing function 2 */ - { - 0x01, /* SVTCA_x */ - 0x18, /* RTG */ - 0xB0, /* PUSHB_1 */ - /* 24 */ - 0x43, /* RS */ - 0x58 /* IF */ - }, - /* #7 TypeMan Talk DiagEndCtrl function */ - { - 0x01, /* SVTCA_x */ - 0x20, /* DUP */ - 0xB0, /* PUSHB_1 */ - /* 3 */ - 0x25, /* CINDEX */ - }, - /* #8 TypeMan Talk Align */ - { - 0x06, /* SPVTL */ - 0x7D, /* RDTG */ - }, - }; - FT_UShort opcode_patterns = 9; - FT_UShort opcode_pointer[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - FT_UShort opcode_size[9] = { 12, 8, 8, 6, 7, 4, 5, 4, 2 }; - FT_UShort i; -#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ + while ( def < limit && def->opc != F ) + def++; + if ( def == limit ) + goto Fail; + } - /* some font programs are broken enough to redefine functions! */ - /* We will then parse the current table. */ + /* check that the function is active */ + if ( !def->active ) + goto Fail; - rec = exc->FDefs; - limit = rec + exc->numFDefs; - n = args[0]; +#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING + if ( SUBPIXEL_HINTING && + exc->ignore_x_mode && + ( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) ) + goto Fail; + else + exc->sph_in_func_flags = def->sph_fdef_flags; +#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - for ( ; rec < limit; rec++ ) + /* check stack */ + if ( exc->callTop >= exc->callSize ) { - if ( rec->opc == n ) - break; + exc->error = FT_THROW( Stack_Overflow ); + return; } - if ( rec == limit ) + if ( args[0] > 0 ) { - /* check that there is enough room for new functions */ - if ( exc->numFDefs >= exc->maxFDefs ) + pCrec = exc->callStack + exc->callTop; + + pCrec->Caller_Range = exc->curRange; + pCrec->Caller_IP = exc->IP + 1; + pCrec->Cur_Count = (FT_Int)args[0]; + pCrec->Def = def; + + exc->callTop++; + + Ins_Goto_CodeRange( exc, def->range, def->start ); + + exc->step_ins = FALSE; + } + + return; + + Fail: + exc->error = FT_THROW( Invalid_Reference ); + } + + + /*************************************************************************/ + /* */ + /* IDEF[]: Instruction DEFinition */ + /* Opcode range: 0x89 */ + /* Stack: Eint8 --> */ + /* */ + static void + Ins_IDEF( TT_ExecContext exc, + FT_Long* args ) + { + TT_DefRecord* def; + TT_DefRecord* limit; + + + /* First of all, look for the same function in our table */ + + def = exc->IDefs; + limit = def + exc->numIDefs; + + for ( ; def < limit; def++ ) + if ( def->opc == (FT_ULong)args[0] ) + break; + + if ( def == limit ) + { + /* check that there is enough room for a new instruction */ + if ( exc->numIDefs >= exc->maxIDefs ) { - exc->error = FT_THROW( Too_Many_Function_Defs ); + exc->error = FT_THROW( Too_Many_Instruction_Defs ); return; } - exc->numFDefs++; + exc->numIDefs++; } - /* Although FDEF takes unsigned 32-bit integer, */ - /* func # must be within unsigned 16-bit integer */ - if ( n > 0xFFFFU ) + /* opcode must be unsigned 8-bit integer */ + if ( 0 > args[0] || args[0] > 0x00FF ) { - exc->error = FT_THROW( Too_Many_Function_Defs ); + exc->error = FT_THROW( Too_Many_Instruction_Defs ); return; } - rec->range = exc->curRange; - rec->opc = (FT_UInt16)n; - rec->start = exc->IP + 1; - rec->active = TRUE; - rec->inline_delta = FALSE; - rec->sph_fdef_flags = 0x0000; - - if ( n > exc->maxFunc ) - exc->maxFunc = (FT_UInt16)n; + def->opc = (FT_Byte)args[0]; + def->start = exc->IP + 1; + def->range = exc->curRange; + def->active = TRUE; -#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - /* We don't know for sure these are typeman functions, */ - /* however they are only active when RS 22 is called */ - if ( n >= 64 && n <= 66 ) - rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_STROKES; -#endif + if ( (FT_ULong)args[0] > exc->maxIns ) + exc->maxIns = (FT_Byte)args[0]; /* Now skip the whole function definition. */ - /* We don't allow nested IDEFS & FDEFs. */ + /* We don't allow nested IDEFs & FDEFs. */ while ( SkipCode( exc ) == SUCCESS ) { - -#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - - if ( SUBPIXEL_HINTING ) + switch ( exc->opcode ) { - for ( i = 0; i < opcode_patterns; i++ ) - { - if ( opcode_pointer[i] < opcode_size[i] && - exc->opcode == opcode_pattern[i][opcode_pointer[i]] ) - { - opcode_pointer[i] += 1; - - if ( opcode_pointer[i] == opcode_size[i] ) - { - FT_TRACE7(( "sph: Function %d, opcode ptrn: %d, %s %s\n", - i, n, - exc->face->root.family_name, - exc->face->root.style_name )); + case 0x89: /* IDEF */ + case 0x2C: /* FDEF */ + exc->error = FT_THROW( Nested_DEFS ); + return; + case 0x2D: /* ENDF */ + return; + } + } + } - switch ( i ) - { - case 0: - rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_1; - exc->face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_1; - break; - case 1: - rec->sph_fdef_flags |= SPH_FDEF_INLINE_DELTA_2; - exc->face->sph_found_func_flags |= SPH_FDEF_INLINE_DELTA_2; - break; + /*************************************************************************/ + /* */ + /* PUSHING DATA ONTO THE INTERPRETER STACK */ + /* */ + /*************************************************************************/ - case 2: - switch ( n ) - { - /* needs to be implemented still */ - case 58: - rec->sph_fdef_flags |= SPH_FDEF_DIAGONAL_STROKE; - exc->face->sph_found_func_flags |= SPH_FDEF_DIAGONAL_STROKE; - } - break; - case 3: - switch ( n ) - { - case 0: - rec->sph_fdef_flags |= SPH_FDEF_VACUFORM_ROUND_1; - exc->face->sph_found_func_flags |= SPH_FDEF_VACUFORM_ROUND_1; - } - break; + /*************************************************************************/ + /* */ + /* NPUSHB[]: PUSH N Bytes */ + /* Opcode range: 0x40 */ + /* Stack: --> uint32... */ + /* */ + static void + Ins_NPUSHB( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort L, K; - case 4: - /* probably not necessary to detect anymore */ - rec->sph_fdef_flags |= SPH_FDEF_TTFAUTOHINT_1; - exc->face->sph_found_func_flags |= SPH_FDEF_TTFAUTOHINT_1; - break; - case 5: - switch ( n ) - { - case 0: - case 1: - case 2: - case 4: - case 7: - case 8: - rec->sph_fdef_flags |= SPH_FDEF_SPACING_1; - exc->face->sph_found_func_flags |= SPH_FDEF_SPACING_1; - } - break; + L = (FT_UShort)exc->code[exc->IP + 1]; - case 6: - switch ( n ) - { - case 0: - case 1: - case 2: - case 4: - case 7: - case 8: - rec->sph_fdef_flags |= SPH_FDEF_SPACING_2; - exc->face->sph_found_func_flags |= SPH_FDEF_SPACING_2; - } - break; + if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) + { + exc->error = FT_THROW( Stack_Overflow ); + return; + } - case 7: - rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; - exc->face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; - break; + for ( K = 1; K <= L; K++ ) + args[K - 1] = exc->code[exc->IP + K + 1]; - case 8: -#if 0 - rec->sph_fdef_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; - exc->face->sph_found_func_flags |= SPH_FDEF_TYPEMAN_DIAGENDCTRL; -#endif - break; - } - opcode_pointer[i] = 0; - } - } + exc->new_top += L; + } - else - opcode_pointer[i] = 0; - } - /* Set sph_compatibility_mode only when deltas are detected */ - exc->face->sph_compatibility_mode = - ( ( exc->face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_1 ) | - ( exc->face->sph_found_func_flags & SPH_FDEF_INLINE_DELTA_2 ) ); - } + /*************************************************************************/ + /* */ + /* NPUSHW[]: PUSH N Words */ + /* Opcode range: 0x41 */ + /* Stack: --> int32... */ + /* */ + static void + Ins_NPUSHW( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort L, K; -#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - switch ( exc->opcode ) - { - case 0x89: /* IDEF */ - case 0x2C: /* FDEF */ - exc->error = FT_THROW( Nested_DEFS ); - return; + L = (FT_UShort)exc->code[exc->IP + 1]; - case 0x2D: /* ENDF */ - rec->end = exc->IP; - return; - } + if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) + { + exc->error = FT_THROW( Stack_Overflow ); + return; } + + exc->IP += 2; + + for ( K = 0; K < L; K++ ) + args[K] = GetShortIns( exc ); + + exc->step_ins = FALSE; + exc->new_top += L; } /*************************************************************************/ /* */ - /* ENDF[]: END Function definition */ - /* Opcode range: 0x2D */ - /* Stack: --> */ + /* PUSHB[abc]: PUSH Bytes */ + /* Opcode range: 0xB0-0xB7 */ + /* Stack: --> uint32... */ /* */ static void - Ins_ENDF( TT_ExecContext exc ) + Ins_PUSHB( TT_ExecContext exc, + FT_Long* args ) { - TT_CallRec* pRec; + FT_UShort L, K; -#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - exc->sph_in_func_flags = 0x0000; -#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ + L = (FT_UShort)( exc->opcode - 0xB0 + 1 ); - if ( exc->callTop <= 0 ) /* We encountered an ENDF without a call */ + if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) { - exc->error = FT_THROW( ENDF_In_Exec_Stream ); + exc->error = FT_THROW( Stack_Overflow ); return; } - exc->callTop--; + for ( K = 1; K <= L; K++ ) + args[K - 1] = exc->code[exc->IP + K]; + } - pRec = &exc->callStack[exc->callTop]; - pRec->Cur_Count--; + /*************************************************************************/ + /* */ + /* PUSHW[abc]: PUSH Words */ + /* Opcode range: 0xB8-0xBF */ + /* Stack: --> int32... */ + /* */ + static void + Ins_PUSHW( TT_ExecContext exc, + FT_Long* args ) + { + FT_UShort L, K; - exc->step_ins = FALSE; - if ( pRec->Cur_Count > 0 ) + L = (FT_UShort)( exc->opcode - 0xB8 + 1 ); + + if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) { - exc->callTop++; - exc->IP = pRec->Def->start; + exc->error = FT_THROW( Stack_Overflow ); + return; } - else - /* Loop through the current function */ - Ins_Goto_CodeRange( exc, pRec->Caller_Range, pRec->Caller_IP ); - /* Exit the current call frame. */ + exc->IP++; - /* NOTE: If the last instruction of a program is a */ - /* CALL or LOOPCALL, the return address is */ - /* always out of the code range. This is a */ - /* valid address, and it is why we do not test */ - /* the result of Ins_Goto_CodeRange() here! */ + for ( K = 0; K < L; K++ ) + args[K] = GetShortIns( exc ); + + exc->step_ins = FALSE; } /*************************************************************************/ /* */ - /* CALL[]: CALL function */ - /* Opcode range: 0x2B */ - /* Stack: uint32? --> */ + /* MANAGING THE GRAPHICS STATE */ /* */ - static void - Ins_CALL( TT_ExecContext exc, - FT_Long* args ) - { - FT_ULong F; - TT_CallRec* pCrec; - TT_DefRecord* def; + /*************************************************************************/ - /* first of all, check the index */ + static FT_Bool + Ins_SxVTL( TT_ExecContext exc, + FT_UShort aIdx1, + FT_UShort aIdx2, + FT_UnitVector* Vec ) + { + FT_Long A, B, C; + FT_Vector* p1; + FT_Vector* p2; - F = args[0]; - if ( BOUNDSL( F, exc->maxFunc + 1 ) ) - goto Fail; + FT_Byte opcode = exc->opcode; - /* Except for some old Apple fonts, all functions in a TrueType */ - /* font are defined in increasing order, starting from 0. This */ - /* means that we normally have */ - /* */ - /* exc->maxFunc+1 == exc->numFDefs */ - /* exc->FDefs[n].opc == n for n in 0..exc->maxFunc */ - /* */ - /* If this isn't true, we need to look up the function table. */ - def = exc->FDefs + F; - if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F ) + if ( BOUNDS( aIdx1, exc->zp2.n_points ) || + BOUNDS( aIdx2, exc->zp1.n_points ) ) { - /* look up the FDefs table */ - TT_DefRecord* limit; + if ( exc->pedantic_hinting ) + exc->error = FT_THROW( Invalid_Reference ); + return FAILURE; + } + p1 = exc->zp1.cur + aIdx2; + p2 = exc->zp2.cur + aIdx1; - def = exc->FDefs; - limit = def + exc->numFDefs; + A = p1->x - p2->x; + B = p1->y - p2->y; - while ( def < limit && def->opc != F ) - def++; + /* If p1 == p2, SPvTL and SFvTL behave the same as */ + /* SPvTCA[X] and SFvTCA[X], respectively. */ + /* */ + /* Confirmed by Greg Hitchcock. */ - if ( def == limit ) - goto Fail; + if ( A == 0 && B == 0 ) + { + A = 0x4000; + opcode = 0; } - /* check that the function is active */ - if ( !def->active ) - goto Fail; + if ( ( opcode & 1 ) != 0 ) + { + C = B; /* counter clockwise rotation */ + B = A; + A = -C; + } -#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - exc->ignore_x_mode && - ( ( exc->iup_called && - ( exc->sph_tweak_flags & SPH_TWEAK_NO_CALL_AFTER_IUP ) ) || - ( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) ) ) - goto Fail; + Normalize( A, B, Vec ); + + return SUCCESS; + } + + + /*************************************************************************/ + /* */ + /* SVTCA[a]: Set (F and P) Vectors to Coordinate Axis */ + /* Opcode range: 0x00-0x01 */ + /* Stack: --> */ + /* */ + /* SPvTCA[a]: Set PVector to Coordinate Axis */ + /* Opcode range: 0x02-0x03 */ + /* Stack: --> */ + /* */ + /* SFvTCA[a]: Set FVector to Coordinate Axis */ + /* Opcode range: 0x04-0x05 */ + /* Stack: --> */ + /* */ + static void + Ins_SxyTCA( TT_ExecContext exc ) + { + FT_Short AA, BB; + + FT_Byte opcode = exc->opcode; + + + AA = (FT_Short)( ( opcode & 1 ) << 14 ); + BB = (FT_Short)( AA ^ 0x4000 ); + + if ( opcode < 4 ) + { + exc->GS.projVector.x = AA; + exc->GS.projVector.y = BB; + + exc->GS.dualVector.x = AA; + exc->GS.dualVector.y = BB; + } else - exc->sph_in_func_flags = def->sph_fdef_flags; -#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ + GUESS_VECTOR( projVector ); - /* check the call stack */ - if ( exc->callTop >= exc->callSize ) + if ( ( opcode & 2 ) == 0 ) { - exc->error = FT_THROW( Stack_Overflow ); - return; + exc->GS.freeVector.x = AA; + exc->GS.freeVector.y = BB; + } + else + GUESS_VECTOR( freeVector ); + + Compute_Funcs( exc ); + } + + + /*************************************************************************/ + /* */ + /* SPvTL[a]: Set PVector To Line */ + /* Opcode range: 0x06-0x07 */ + /* Stack: uint32 uint32 --> */ + /* */ + static void + Ins_SPVTL( TT_ExecContext exc, + FT_Long* args ) + { + if ( Ins_SxVTL( exc, + (FT_UShort)args[1], + (FT_UShort)args[0], + &exc->GS.projVector ) == SUCCESS ) + { + exc->GS.dualVector = exc->GS.projVector; + GUESS_VECTOR( freeVector ); + Compute_Funcs( exc ); + } + } + + + /*************************************************************************/ + /* */ + /* SFvTL[a]: Set FVector To Line */ + /* Opcode range: 0x08-0x09 */ + /* Stack: uint32 uint32 --> */ + /* */ + static void + Ins_SFVTL( TT_ExecContext exc, + FT_Long* args ) + { + if ( Ins_SxVTL( exc, + (FT_UShort)args[1], + (FT_UShort)args[0], + &exc->GS.freeVector ) == SUCCESS ) + { + GUESS_VECTOR( projVector ); + Compute_Funcs( exc ); } + } - pCrec = exc->callStack + exc->callTop; - - pCrec->Caller_Range = exc->curRange; - pCrec->Caller_IP = exc->IP + 1; - pCrec->Cur_Count = 1; - pCrec->Def = def; - - exc->callTop++; - - Ins_Goto_CodeRange( exc, def->range, def->start ); - - exc->step_ins = FALSE; - - return; - Fail: - exc->error = FT_THROW( Invalid_Reference ); + /*************************************************************************/ + /* */ + /* SFvTPv[]: Set FVector To PVector */ + /* Opcode range: 0x0E */ + /* Stack: --> */ + /* */ + static void + Ins_SFVTPV( TT_ExecContext exc ) + { + GUESS_VECTOR( projVector ); + exc->GS.freeVector = exc->GS.projVector; + Compute_Funcs( exc ); } /*************************************************************************/ /* */ - /* LOOPCALL[]: LOOP and CALL function */ - /* Opcode range: 0x2A */ - /* Stack: uint32? Eint16? --> */ + /* SPvFS[]: Set PVector From Stack */ + /* Opcode range: 0x0A */ + /* Stack: f2.14 f2.14 --> */ /* */ static void - Ins_LOOPCALL( TT_ExecContext exc, - FT_Long* args ) + Ins_SPVFS( TT_ExecContext exc, + FT_Long* args ) { - FT_ULong F; - TT_CallRec* pCrec; - TT_DefRecord* def; + FT_Short S; + FT_Long X, Y; - /* first of all, check the index */ - F = args[1]; - if ( BOUNDSL( F, exc->maxFunc + 1 ) ) - goto Fail; + /* Only use low 16bits, then sign extend */ + S = (FT_Short)args[1]; + Y = (FT_Long)S; + S = (FT_Short)args[0]; + X = (FT_Long)S; - /* Except for some old Apple fonts, all functions in a TrueType */ - /* font are defined in increasing order, starting from 0. This */ - /* means that we normally have */ - /* */ - /* exc->maxFunc+1 == exc->numFDefs */ - /* exc->FDefs[n].opc == n for n in 0..exc->maxFunc */ - /* */ - /* If this isn't true, we need to look up the function table. */ + Normalize( X, Y, &exc->GS.projVector ); - def = exc->FDefs + F; - if ( exc->maxFunc + 1 != exc->numFDefs || def->opc != F ) - { - /* look up the FDefs table */ - TT_DefRecord* limit; + exc->GS.dualVector = exc->GS.projVector; + GUESS_VECTOR( freeVector ); + Compute_Funcs( exc ); + } - def = exc->FDefs; - limit = def + exc->numFDefs; + /*************************************************************************/ + /* */ + /* SFvFS[]: Set FVector From Stack */ + /* Opcode range: 0x0B */ + /* Stack: f2.14 f2.14 --> */ + /* */ + static void + Ins_SFVFS( TT_ExecContext exc, + FT_Long* args ) + { + FT_Short S; + FT_Long X, Y; - while ( def < limit && def->opc != F ) - def++; - if ( def == limit ) - goto Fail; - } + /* Only use low 16bits, then sign extend */ + S = (FT_Short)args[1]; + Y = (FT_Long)S; + S = (FT_Short)args[0]; + X = S; - /* check that the function is active */ - if ( !def->active ) - goto Fail; + Normalize( X, Y, &exc->GS.freeVector ); + GUESS_VECTOR( projVector ); + Compute_Funcs( exc ); + } -#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING - if ( SUBPIXEL_HINTING && - exc->ignore_x_mode && - ( def->sph_fdef_flags & SPH_FDEF_VACUFORM_ROUND_1 ) ) - goto Fail; - else - exc->sph_in_func_flags = def->sph_fdef_flags; -#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ - /* check stack */ - if ( exc->callTop >= exc->callSize ) + /*************************************************************************/ + /* */ + /* GPv[]: Get Projection Vector */ + /* Opcode range: 0x0C */ + /* Stack: ef2.14 --> ef2.14 */ + /* */ + static void + Ins_GPV( TT_ExecContext exc, + FT_Long* args ) + { +#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING + if ( exc->face->unpatented_hinting ) { - exc->error = FT_THROW( Stack_Overflow ); - return; + args[0] = exc->GS.both_x_axis ? 0x4000 : 0; + args[1] = exc->GS.both_x_axis ? 0 : 0x4000; } - - if ( args[0] > 0 ) + else { - pCrec = exc->callStack + exc->callTop; - - pCrec->Caller_Range = exc->curRange; - pCrec->Caller_IP = exc->IP + 1; - pCrec->Cur_Count = (FT_Int)args[0]; - pCrec->Def = def; - - exc->callTop++; - - Ins_Goto_CodeRange( exc, def->range, def->start ); - - exc->step_ins = FALSE; + args[0] = exc->GS.projVector.x; + args[1] = exc->GS.projVector.y; } - - return; - - Fail: - exc->error = FT_THROW( Invalid_Reference ); +#else + args[0] = exc->GS.projVector.x; + args[1] = exc->GS.projVector.y; +#endif } /*************************************************************************/ /* */ - /* IDEF[]: Instruction DEFinition */ - /* Opcode range: 0x89 */ - /* Stack: Eint8 --> */ + /* GFv[]: Get Freedom Vector */ + /* Opcode range: 0x0D */ + /* Stack: ef2.14 --> ef2.14 */ /* */ static void - Ins_IDEF( TT_ExecContext exc, - FT_Long* args ) + Ins_GFV( TT_ExecContext exc, + FT_Long* args ) { - TT_DefRecord* def; - TT_DefRecord* limit; - - - /* First of all, look for the same function in our table */ - - def = exc->IDefs; - limit = def + exc->numIDefs; - - for ( ; def < limit; def++ ) - if ( def->opc == (FT_ULong)args[0] ) - break; - - if ( def == limit ) +#ifdef TT_CONFIG_OPTION_UNPATENTED_HINTING + if ( exc->face->unpatented_hinting ) { - /* check that there is enough room for a new instruction */ - if ( exc->numIDefs >= exc->maxIDefs ) - { - exc->error = FT_THROW( Too_Many_Instruction_Defs ); - return; - } - exc->numIDefs++; + args[0] = exc->GS.both_x_axis ? 0x4000 : 0; + args[1] = exc->GS.both_x_axis ? 0 : 0x4000; } - - /* opcode must be unsigned 8-bit integer */ - if ( 0 > args[0] || args[0] > 0x00FF ) + else { - exc->error = FT_THROW( Too_Many_Instruction_Defs ); - return; + args[0] = exc->GS.freeVector.x; + args[1] = exc->GS.freeVector.y; } +#else + args[0] = exc->GS.freeVector.x; + args[1] = exc->GS.freeVector.y; +#endif + } - def->opc = (FT_Byte)args[0]; - def->start = exc->IP + 1; - def->range = exc->curRange; - def->active = TRUE; - if ( (FT_ULong)args[0] > exc->maxIns ) - exc->maxIns = (FT_Byte)args[0]; + /*************************************************************************/ + /* */ + /* SRP0[]: Set Reference Point 0 */ + /* Opcode range: 0x10 */ + /* Stack: uint32 --> */ + /* */ + static void + Ins_SRP0( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.rp0 = (FT_UShort)args[0]; + } - /* Now skip the whole function definition. */ - /* We don't allow nested IDEFs & FDEFs. */ - while ( SkipCode( exc ) == SUCCESS ) - { - switch ( exc->opcode ) - { - case 0x89: /* IDEF */ - case 0x2C: /* FDEF */ - exc->error = FT_THROW( Nested_DEFS ); - return; - case 0x2D: /* ENDF */ - return; - } - } + /*************************************************************************/ + /* */ + /* SRP1[]: Set Reference Point 1 */ + /* Opcode range: 0x11 */ + /* Stack: uint32 --> */ + /* */ + static void + Ins_SRP1( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.rp1 = (FT_UShort)args[0]; + } + + + /*************************************************************************/ + /* */ + /* SRP2[]: Set Reference Point 2 */ + /* Opcode range: 0x12 */ + /* Stack: uint32 --> */ + /* */ + static void + Ins_SRP2( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.rp2 = (FT_UShort)args[0]; } /*************************************************************************/ /* */ - /* PUSHING DATA ONTO THE INTERPRETER STACK */ - /* */ - /* Instructions appear in the specification's order. */ + /* SMD[]: Set Minimum Distance */ + /* Opcode range: 0x1A */ + /* Stack: f26.6 --> */ /* */ - /*************************************************************************/ + static void + Ins_SMD( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.minimum_distance = args[0]; + } /*************************************************************************/ /* */ - /* NPUSHB[]: PUSH N Bytes */ - /* Opcode range: 0x40 */ - /* Stack: --> uint32... */ + /* SCVTCI[]: Set Control Value Table Cut In */ + /* Opcode range: 0x1D */ + /* Stack: f26.6 --> */ /* */ static void - Ins_NPUSHB( TT_ExecContext exc, + Ins_SCVTCI( TT_ExecContext exc, FT_Long* args ) { - FT_UShort L, K; - - - L = (FT_UShort)exc->code[exc->IP + 1]; - - if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) - { - exc->error = FT_THROW( Stack_Overflow ); - return; - } + exc->GS.control_value_cutin = (FT_F26Dot6)args[0]; + } - for ( K = 1; K <= L; K++ ) - args[K - 1] = exc->code[exc->IP + K + 1]; - exc->new_top += L; + /*************************************************************************/ + /* */ + /* SSWCI[]: Set Single Width Cut In */ + /* Opcode range: 0x1E */ + /* Stack: f26.6 --> */ + /* */ + static void + Ins_SSWCI( TT_ExecContext exc, + FT_Long* args ) + { + exc->GS.single_width_cutin = (FT_F26Dot6)args[0]; } /*************************************************************************/ /* */ - /* NPUSHW[]: PUSH N Words */ - /* Opcode range: 0x41 */ - /* Stack: --> int32... */ + /* SSW[]: Set Single Width */ + /* Opcode range: 0x1F */ + /* Stack: int32? --> */ /* */ static void - Ins_NPUSHW( TT_ExecContext exc, - FT_Long* args ) + Ins_SSW( TT_ExecContext exc, + FT_Long* args ) { - FT_UShort L, K; + exc->GS.single_width_value = FT_MulFix( args[0], + exc->tt_metrics.scale ); + } - L = (FT_UShort)exc->code[exc->IP + 1]; + /*************************************************************************/ + /* */ + /* FLIPON[]: Set auto-FLIP to ON */ + /* Opcode range: 0x4D */ + /* Stack: --> */ + /* */ + static void + Ins_FLIPON( TT_ExecContext exc ) + { + exc->GS.auto_flip = TRUE; + } - if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) - { - exc->error = FT_THROW( Stack_Overflow ); - return; - } - exc->IP += 2; + /*************************************************************************/ + /* */ + /* FLIPOFF[]: Set auto-FLIP to OFF */ + /* Opcode range: 0x4E */ + /* Stack: --> */ + /* */ + static void + Ins_FLIPOFF( TT_ExecContext exc ) + { + exc->GS.auto_flip = FALSE; + } - for ( K = 0; K < L; K++ ) - args[K] = GetShortIns( exc ); - exc->step_ins = FALSE; - exc->new_top += L; + /*************************************************************************/ + /* */ + /* SANGW[]: Set ANGle Weight */ + /* Opcode range: 0x7E */ + /* Stack: uint32 --> */ + /* */ + static void + Ins_SANGW( void ) + { + /* instruction not supported anymore */ } /*************************************************************************/ /* */ - /* PUSHB[abc]: PUSH Bytes */ - /* Opcode range: 0xB0-0xB7 */ - /* Stack: --> uint32... */ + /* SDB[]: Set Delta Base */ + /* Opcode range: 0x5E */ + /* Stack: uint32 --> */ /* */ static void - Ins_PUSHB( TT_ExecContext exc, - FT_Long* args ) + Ins_SDB( TT_ExecContext exc, + FT_Long* args ) { - FT_UShort L, K; + exc->GS.delta_base = (FT_UShort)args[0]; + } - L = (FT_UShort)( exc->opcode - 0xB0 + 1 ); + /*************************************************************************/ + /* */ + /* SDS[]: Set Delta Shift */ + /* Opcode range: 0x5F */ + /* Stack: uint32 --> */ + /* */ + static void + Ins_SDS( TT_ExecContext exc, + FT_Long* args ) + { + if ( (FT_ULong)args[0] > 6UL ) + exc->error = FT_THROW( Bad_Argument ); + else + exc->GS.delta_shift = (FT_UShort)args[0]; + } - if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) - { - exc->error = FT_THROW( Stack_Overflow ); - return; - } - for ( K = 1; K <= L; K++ ) - args[K - 1] = exc->code[exc->IP + K]; + /*************************************************************************/ + /* */ + /* RTHG[]: Round To Half Grid */ + /* Opcode range: 0x19 */ + /* Stack: --> */ + /* */ + static void + Ins_RTHG( TT_ExecContext exc ) + { + exc->GS.round_state = TT_Round_To_Half_Grid; + exc->func_round = (TT_Round_Func)Round_To_Half_Grid; } /*************************************************************************/ /* */ - /* PUSHW[abc]: PUSH Words */ - /* Opcode range: 0xB8-0xBF */ - /* Stack: --> int32... */ + /* RTG[]: Round To Grid */ + /* Opcode range: 0x18 */ + /* Stack: --> */ /* */ static void - Ins_PUSHW( TT_ExecContext exc, - FT_Long* args ) + Ins_RTG( TT_ExecContext exc ) { - FT_UShort L, K; + exc->GS.round_state = TT_Round_To_Grid; + exc->func_round = (TT_Round_Func)Round_To_Grid; + } - L = (FT_UShort)( exc->opcode - 0xB8 + 1 ); + /*************************************************************************/ + /* RTDG[]: Round To Double Grid */ + /* Opcode range: 0x3D */ + /* Stack: --> */ + /* */ + static void + Ins_RTDG( TT_ExecContext exc ) + { + exc->GS.round_state = TT_Round_To_Double_Grid; + exc->func_round = (TT_Round_Func)Round_To_Double_Grid; + } - if ( BOUNDS( L, exc->stackSize + 1 - exc->top ) ) - { - exc->error = FT_THROW( Stack_Overflow ); - return; - } - exc->IP++; + /*************************************************************************/ + /* RUTG[]: Round Up To Grid */ + /* Opcode range: 0x7C */ + /* Stack: --> */ + /* */ + static void + Ins_RUTG( TT_ExecContext exc ) + { + exc->GS.round_state = TT_Round_Up_To_Grid; + exc->func_round = (TT_Round_Func)Round_Up_To_Grid; + } - for ( K = 0; K < L; K++ ) - args[K] = GetShortIns( exc ); - exc->step_ins = FALSE; + /*************************************************************************/ + /* */ + /* RDTG[]: Round Down To Grid */ + /* Opcode range: 0x7D */ + /* Stack: --> */ + /* */ + static void + Ins_RDTG( TT_ExecContext exc ) + { + exc->GS.round_state = TT_Round_Down_To_Grid; + exc->func_round = (TT_Round_Func)Round_Down_To_Grid; } /*************************************************************************/ /* */ - /* MANAGING THE GRAPHICS STATE */ + /* ROFF[]: Round OFF */ + /* Opcode range: 0x7A */ + /* Stack: --> */ + /* */ + static void + Ins_ROFF( TT_ExecContext exc ) + { + exc->GS.round_state = TT_Round_Off; + exc->func_round = (TT_Round_Func)Round_None; + } + + + /*************************************************************************/ /* */ - /* Instructions appear in the specs' order. */ + /* SROUND[]: Super ROUND */ + /* Opcode range: 0x76 */ + /* Stack: Eint8 --> */ /* */ + static void + Ins_SROUND( TT_ExecContext exc, + FT_Long* args ) + { + SetSuperRound( exc, 0x4000, args[0] ); + + exc->GS.round_state = TT_Round_Super; + exc->func_round = (TT_Round_Func)Round_Super; + } + + /*************************************************************************/ + /* */ + /* S45ROUND[]: Super ROUND 45 degrees */ + /* Opcode range: 0x77 */ + /* Stack: uint32 --> */ + /* */ + static void + Ins_S45ROUND( TT_ExecContext exc, + FT_Long* args ) + { + SetSuperRound( exc, 0x2D41, args[0] ); + + exc->GS.round_state = TT_Round_Super_45; + exc->func_round = (TT_Round_Func)Round_Super_45; + } /*************************************************************************/ @@ -5267,8 +5259,6 @@ /* */ /* MANAGING OUTLINES */ /* */ - /* Instructions appear in the specification's order. */ - /* */ /*************************************************************************/ @@ -7473,8 +7463,6 @@ /* */ /* THIS IS THE INTERPRETER'S MAIN LOOP. */ /* */ - /* Instructions appear in the specification's order. */ - /* */ /*************************************************************************/ -- 2.2.2 From 36d03c9f583f4c4b2ad2870784e2fe50814820c9 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Mon, 12 Jan 2015 11:26:30 +0100 Subject: [PATCH] Fix Savannah bug #43976. Assure that FreeType's internal include directories are found before `CPPFLAGS' (which might be set by the user in the environment), and `CPPFLAGS' before `CFLAGS'. * builds/freetype.mk (FT_CFLAGS): Don't add `INCLUDE_FLAGS'. (FT_COMPILE): Make this a special variable for compiling only the files handled in `freetype.mk'. (.c.$O): Removed, unused. * src/*/rules.mk (*_COMPILE): Fix order of include directories. --- ChangeLog | 15 +++++++++++++++ builds/freetype.mk | 9 +++------ src/autofit/rules.mk | 5 ++++- src/base/rules.mk | 5 ++++- src/bdf/rules.mk | 5 ++++- src/bzip2/rules.mk | 4 +++- src/cache/rules.mk | 7 ++++++- src/cff/rules.mk | 5 ++++- src/cid/rules.mk | 5 ++++- src/gxvalid/rules.mk | 5 ++++- src/gzip/rules.mk | 9 +++++++-- src/lzw/rules.mk | 5 ++++- src/otvalid/rules.mk | 5 ++++- src/pcf/rules.mk | 5 ++++- src/pfr/rules.mk | 5 ++++- src/psaux/rules.mk | 5 ++++- src/pshinter/rules.mk | 5 ++++- src/psnames/rules.mk | 5 ++++- src/raster/rules.mk | 5 ++++- src/sfnt/rules.mk | 5 ++++- src/smooth/rules.mk | 6 +++++- src/truetype/rules.mk | 5 ++++- src/type1/rules.mk | 5 ++++- src/type42/rules.mk | 5 ++++- src/winfonts/rules.mk | 5 ++++- 25 files changed, 115 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index 084f67d..027a293 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2015-01-12 Werner Lemberg + + Fix Savannah bug #43976. + + Assure that FreeType's internal include directories are found before + `CPPFLAGS' (which might be set by the user in the environment), and + `CPPFLAGS' before `CFLAGS'. + + * builds/freetype.mk (FT_CFLAGS): Don't add `INCLUDE_FLAGS'. + (FT_COMPILE): Make this a special variable for compiling only the + files handled in `freetype.mk'. + (.c.$O): Removed, unused. + + * src/*/rules.mk (*_COMPILE): Fix order of include directories. + 2015-01-11 Werner Lemberg [truetype] Prettyfing. diff --git a/builds/freetype.mk b/builds/freetype.mk index 8b2e2ea..5e874ac 100644 --- a/builds/freetype.mk +++ b/builds/freetype.mk @@ -155,15 +155,13 @@ ifneq ($(wildcard $(OBJ_DIR)/ftoption.h),) FTOPTION_FLAG := $DFT_CONFIG_OPTIONS_H="" endif -# Note that a build with the `configure' script uses $(CFLAGS) only. +# `CPPFLAGS' might be specified by the user in the environment. # FT_CFLAGS = $(CPPFLAGS) \ - $(INCLUDE_FLAGS) \ $(CFLAGS) \ $DFT2_BUILD_LIBRARY \ $DFT_CONFIG_MODULES_H="" \ $(FTOPTION_FLAG) -FT_COMPILE = $(CC) $(ANSIFLAGS) $(FT_CFLAGS) # Include the `exports' rules file. @@ -195,6 +193,8 @@ DEVEL_H := $(wildcard $(TOP_DIR)/devel/*.h) FREETYPE_H := $(PUBLIC_H) $(INTERNAL_H) $(CONFIG_H) $(DEVEL_H) +FT_COMPILE := $(CC) $(ANSIFLAGS) $(INCLUDE_FLAGS) $(FT_CFLAGS) + # ftsystem component # FTSYS_SRC ?= $(BASE_DIR)/ftsystem.c @@ -270,9 +270,6 @@ objects: $(OBJECTS_LIST) library: $(PROJECT_LIBRARY) -.c.$O: - $(FT_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - ifneq ($(findstring refdoc,$(MAKECMDGOALS)),) # poor man's `sed' emulation with make's built-in string functions diff --git a/src/autofit/rules.mk b/src/autofit/rules.mk index 658f04e..5849cbe 100644 --- a/src/autofit/rules.mk +++ b/src/autofit/rules.mk @@ -20,7 +20,10 @@ AUTOF_DIR := $(SRC_DIR)/autofit # compilation flags for the driver # -AUTOF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(AUTOF_DIR)) +AUTOF_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(AUTOF_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # AUTOF driver sources (i.e., C files) diff --git a/src/base/rules.mk b/src/base/rules.mk index cbd8107..640ab6d 100644 --- a/src/base/rules.mk +++ b/src/base/rules.mk @@ -23,7 +23,10 @@ # layer proper. -BASE_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SRC_DIR)/base) +BASE_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(BASE_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # Base layer sources diff --git a/src/bdf/rules.mk b/src/bdf/rules.mk index 6ff1614..d1dd76b 100644 --- a/src/bdf/rules.mk +++ b/src/bdf/rules.mk @@ -32,7 +32,10 @@ BDF_DIR := $(SRC_DIR)/bdf -BDF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(BDF_DIR)) +BDF_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(BDF_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # bdf driver sources (i.e., C files) diff --git a/src/bzip2/rules.mk b/src/bzip2/rules.mk index 0ff2628..845066d 100644 --- a/src/bzip2/rules.mk +++ b/src/bzip2/rules.mk @@ -22,7 +22,9 @@ BZIP2_DIR := $(SRC_DIR)/bzip2 # compilation flags for the driver # -BZIP2_COMPILE := $(FT_COMPILE) +BZIP2_COMPILE := $(CC) $(ANSIFLAGS) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # BZIP2 support sources (i.e., C files) diff --git a/src/cache/rules.mk b/src/cache/rules.mk index ed75a6a..d64d9bc 100644 --- a/src/cache/rules.mk +++ b/src/cache/rules.mk @@ -17,9 +17,13 @@ # CACHE_DIR := $(SRC_DIR)/cache + # compilation flags for the driver # -CACHE_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(CACHE_DIR)) +CACHE_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(CACHE_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # Cache driver sources (i.e., C files) @@ -33,6 +37,7 @@ CACHE_DRV_SRC := $(CACHE_DIR)/ftcbasic.c \ $(CACHE_DIR)/ftcmru.c \ $(CACHE_DIR)/ftcsbits.c + # Cache driver headers # CACHE_DRV_H := $(CACHE_DIR)/ftccache.h \ diff --git a/src/cff/rules.mk b/src/cff/rules.mk index 13115c2..23b4730 100644 --- a/src/cff/rules.mk +++ b/src/cff/rules.mk @@ -18,7 +18,10 @@ CFF_DIR := $(SRC_DIR)/cff -CFF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(CFF_DIR)) +CFF_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(CFF_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # CFF driver sources (i.e., C files) diff --git a/src/cid/rules.mk b/src/cid/rules.mk index f362744..9926c8a 100644 --- a/src/cid/rules.mk +++ b/src/cid/rules.mk @@ -18,7 +18,10 @@ CID_DIR := $(SRC_DIR)/cid -CID_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(CID_DIR)) +CID_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(CID_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # CID driver sources (i.e., C files) diff --git a/src/gxvalid/rules.mk b/src/gxvalid/rules.mk index 57bc082..c4bd4c8 100644 --- a/src/gxvalid/rules.mk +++ b/src/gxvalid/rules.mk @@ -20,7 +20,10 @@ GXV_DIR := $(SRC_DIR)/gxvalid # compilation flags for the driver # -GXV_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(GXV_DIR)) +GXV_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(GXV_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # GXV driver sources (i.e., C files) diff --git a/src/gzip/rules.mk b/src/gzip/rules.mk index 37cd991..23222a1 100644 --- a/src/gzip/rules.mk +++ b/src/gzip/rules.mk @@ -21,9 +21,14 @@ GZIP_DIR := $(SRC_DIR)/gzip # compilation flags for the driver # ifeq ($(SYSTEM_ZLIB),) - GZIP_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(GZIP_DIR)) + GZIP_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(GZIP_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) else - GZIP_COMPILE := $(FT_COMPILE) + GZIP_COMPILE := $(CC) $(ANSIFLAGS) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) endif diff --git a/src/lzw/rules.mk b/src/lzw/rules.mk index 5550a48..4362939 100644 --- a/src/lzw/rules.mk +++ b/src/lzw/rules.mk @@ -23,7 +23,10 @@ LZW_DIR := $(SRC_DIR)/lzw # compilation flags for the driver # -LZW_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(LZW_DIR)) +LZW_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(LZW_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # LZW support sources (i.e., C files) diff --git a/src/otvalid/rules.mk b/src/otvalid/rules.mk index 53bd41e..7454335 100644 --- a/src/otvalid/rules.mk +++ b/src/otvalid/rules.mk @@ -20,7 +20,10 @@ OTV_DIR := $(SRC_DIR)/otvalid # compilation flags for the driver # -OTV_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(OTV_DIR)) +OTV_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(OTV_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # OTV driver sources (i.e., C files) diff --git a/src/pcf/rules.mk b/src/pcf/rules.mk index 7864152..1b55daf 100644 --- a/src/pcf/rules.mk +++ b/src/pcf/rules.mk @@ -30,7 +30,10 @@ PCF_DIR := $(SRC_DIR)/pcf -PCF_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PCF_DIR)) +PCF_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(PCF_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # pcf driver sources (i.e., C files) diff --git a/src/pfr/rules.mk b/src/pfr/rules.mk index 60b96c7..01f44f1 100644 --- a/src/pfr/rules.mk +++ b/src/pfr/rules.mk @@ -20,7 +20,10 @@ PFR_DIR := $(SRC_DIR)/pfr # compilation flags for the driver # -PFR_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PFR_DIR)) +PFR_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(PFR_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # pfr driver sources (i.e., C files) diff --git a/src/psaux/rules.mk b/src/psaux/rules.mk index 7a1be37..788d813 100644 --- a/src/psaux/rules.mk +++ b/src/psaux/rules.mk @@ -20,7 +20,10 @@ PSAUX_DIR := $(SRC_DIR)/psaux # compilation flags for the driver # -PSAUX_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PSAUX_DIR)) +PSAUX_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(PSAUX_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # PSAUX driver sources (i.e., C files) diff --git a/src/pshinter/rules.mk b/src/pshinter/rules.mk index 888ece1..afc4a40 100644 --- a/src/pshinter/rules.mk +++ b/src/pshinter/rules.mk @@ -20,7 +20,10 @@ PSHINTER_DIR := $(SRC_DIR)/pshinter # compilation flags for the driver # -PSHINTER_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PSHINTER_DIR)) +PSHINTER_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(PSHINTER_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # PSHINTER driver sources (i.e., C files) diff --git a/src/psnames/rules.mk b/src/psnames/rules.mk index f321de2..278f659 100644 --- a/src/psnames/rules.mk +++ b/src/psnames/rules.mk @@ -20,7 +20,10 @@ PSNAMES_DIR := $(SRC_DIR)/psnames # compilation flags for the driver # -PSNAMES_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(PSNAMES_DIR)) +PSNAMES_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(PSNAMES_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # PSNames driver sources (i.e., C files) diff --git a/src/raster/rules.mk b/src/raster/rules.mk index 0e0b5e4..6683ed7 100644 --- a/src/raster/rules.mk +++ b/src/raster/rules.mk @@ -19,7 +19,10 @@ RASTER_DIR := $(SRC_DIR)/raster # compilation flags for the driver # -RASTER_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(RASTER_DIR)) +RASTER_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(RASTER_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # raster driver sources (i.e., C files) diff --git a/src/sfnt/rules.mk b/src/sfnt/rules.mk index a6c956a..b6e5aa0 100644 --- a/src/sfnt/rules.mk +++ b/src/sfnt/rules.mk @@ -20,7 +20,10 @@ SFNT_DIR := $(SRC_DIR)/sfnt # compilation flags for the driver # -SFNT_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SFNT_DIR)) +SFNT_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(SFNT_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # SFNT driver sources (i.e., C files) diff --git a/src/smooth/rules.mk b/src/smooth/rules.mk index 88d0aa5..c8ac81c 100644 --- a/src/smooth/rules.mk +++ b/src/smooth/rules.mk @@ -17,9 +17,13 @@ # SMOOTH_DIR := $(SRC_DIR)/smooth + # compilation flags for the driver # -SMOOTH_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SMOOTH_DIR)) +SMOOTH_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(SMOOTH_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # smooth driver sources (i.e., C files) diff --git a/src/truetype/rules.mk b/src/truetype/rules.mk index d4b69f5..e39235b 100644 --- a/src/truetype/rules.mk +++ b/src/truetype/rules.mk @@ -20,7 +20,10 @@ TT_DIR := $(SRC_DIR)/truetype # compilation flags for the driver # -TT_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(TT_DIR)) +TT_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(TT_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # TrueType driver sources (i.e., C files) diff --git a/src/type1/rules.mk b/src/type1/rules.mk index 15087b0..160946a 100644 --- a/src/type1/rules.mk +++ b/src/type1/rules.mk @@ -20,7 +20,10 @@ T1_DIR := $(SRC_DIR)/type1 # compilation flags for the driver # -T1_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(T1_DIR)) +T1_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(T1_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # Type1 driver sources (i.e., C files) diff --git a/src/type42/rules.mk b/src/type42/rules.mk index eac1081..34a31e8 100644 --- a/src/type42/rules.mk +++ b/src/type42/rules.mk @@ -20,7 +20,10 @@ T42_DIR := $(SRC_DIR)/type42 # compilation flags for the driver # -T42_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(T42_DIR)) +T42_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(T42_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # Type42 driver source diff --git a/src/winfonts/rules.mk b/src/winfonts/rules.mk index 71a7df2..1a78171 100644 --- a/src/winfonts/rules.mk +++ b/src/winfonts/rules.mk @@ -18,7 +18,10 @@ FNT_DIR := $(SRC_DIR)/winfonts -FNT_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(FNT_DIR)) +FNT_COMPILE := $(CC) $(ANSIFLAGS) \ + $I$(subst /,$(COMPILER_SEP),$(FNT_DIR)) \ + $(INCLUDE_FLAGS) \ + $(FT_CFLAGS) # Windows driver sources (i.e., C files) -- 2.2.2 From 3f9b3d882d0b1050450f0f1b3e77c9b5ab3e8c4d Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 15:48:12 +0100 Subject: [PATCH] * src/type42/t42objs.h (T42_DriverRec): Remove unused member. --- ChangeLog | 4 ++++ src/type42/t42objs.h | 1 - 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 027a293..9de08bb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-01-14 Behdad Esfahbod + + * src/type42/t42objs.h (T42_DriverRec): Remove unused member. + 2015-01-12 Werner Lemberg Fix Savannah bug #43976. diff --git a/src/type42/t42objs.h b/src/type42/t42objs.h index 02d1325..a93fa39 100644 --- a/src/type42/t42objs.h +++ b/src/type42/t42objs.h @@ -55,7 +55,6 @@ FT_BEGIN_HEADER { FT_DriverRec root; FT_Driver_Class ttclazz; - void* extension_component; } T42_DriverRec, *T42_Driver; -- 2.2.2 From 89bc8d4de7bf93336e182bd42507851f5b46f66f Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 16:01:19 +0100 Subject: [PATCH] [autofit] Allocate AF_Loader on the stack instead of AF_Module. Stop sharing a global `AF_Loader'. Allocate one on the stack during glyph load. Right now this results in about 25% slowdown, to be fixed in a following commit. With this patch loading glyphs from different faces from different threads doesn't immediately crash in the autohinting loader code. Bugs: https://bugzilla.redhat.com/show_bug.cgi?id=1164941 * src/autofit/afloader.c (af_loader_init): Pass `AF_Loader' and `FT_Memory' instead of `AF_Module' as arguments. (af_loader_reset, af_loader_load_glyph): Also pass `loader' as argument. (af_loader_done): Use `AF_Loader' instead of `AF_Module' as argument. * src/autofit/afmodule.c (af_autofitter_init): Don't call `af_loader_init'. (af_autofitter_done): Don't call `af_loader_done'. (af_autofitter_load_glyph): Use a local `AF_Loader' object. * src/autofit/afloader.h: Include `afmodule.h'. Update prototypes. Move typedef for `AF_Module' to... * src/autofit/afmodule.h: ... this place. No longer include `afloader.h'. --- ChangeLog | 36 ++++++++++++++++++++++++++++++++++++ src/autofit/afloader.c | 24 +++++++++--------------- src/autofit/afloader.h | 14 ++++++++------ src/autofit/afmodule.c | 21 +++++++++++++++------ src/autofit/afmodule.h | 10 ++-------- 5 files changed, 70 insertions(+), 35 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9de08bb..bc8c725 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,41 @@ 2015-01-14 Behdad Esfahbod + [autofit] Allocate AF_Loader on the stack instead of AF_Module. + + Stop sharing a global `AF_Loader'. Allocate one on the stack during + glyph load. + + Right now this results in about 25% slowdown, to be fixed in a + following commit. + + With this patch loading glyphs from different faces from different + threads doesn't immediately crash in the autohinting loader code. + + Bugs: + + https://bugzilla.redhat.com/show_bug.cgi?id=1164941 + + * src/autofit/afloader.c (af_loader_init): Pass + `AF_Loader' and `FT_Memory' instead of `AF_Module' as arguments. + (af_loader_reset, af_loader_load_glyph): Also pass `loader' as + argument. + (af_loader_done): Use `AF_Loader' instead of `AF_Module' as + argument. + + * src/autofit/afmodule.c (af_autofitter_init): Don't call + `af_loader_init'. + (af_autofitter_done): Don't call `af_loader_done'. + (af_autofitter_load_glyph): Use a local `AF_Loader' object. + + * src/autofit/afloader.h: Include `afmodule.h'. + Update prototypes. + Move typedef for `AF_Module' to... + + * src/autofit/afmodule.h: ... this place. + No longer include `afloader.h'. + +2015-01-14 Behdad Esfahbod + * src/type42/t42objs.h (T42_DriverRec): Remove unused member. 2015-01-12 Werner Lemberg diff --git a/src/autofit/afloader.c b/src/autofit/afloader.c index fb15c87..612103c 100644 --- a/src/autofit/afloader.c +++ b/src/autofit/afloader.c @@ -27,12 +27,9 @@ /* Initialize glyph loader. */ FT_LOCAL_DEF( FT_Error ) - af_loader_init( AF_Module module ) + af_loader_init( AF_Loader loader, + FT_Memory memory ) { - AF_Loader loader = module->loader; - FT_Memory memory = module->root.library->memory; - - FT_ZERO( loader ); af_glyph_hints_init( &loader->hints, memory ); @@ -46,11 +43,11 @@ /* Reset glyph loader and compute globals if necessary. */ FT_LOCAL_DEF( FT_Error ) - af_loader_reset( AF_Module module, + af_loader_reset( AF_Loader loader, + AF_Module module, FT_Face face ) { - FT_Error error = FT_Err_Ok; - AF_Loader loader = module->loader; + FT_Error error = FT_Err_Ok; loader->face = face; @@ -77,11 +74,8 @@ /* Finalize glyph loader. */ FT_LOCAL_DEF( void ) - af_loader_done( AF_Module module ) + af_loader_done( AF_Loader loader ) { - AF_Loader loader = module->loader; - - af_glyph_hints_done( &loader->hints ); loader->face = NULL; @@ -496,14 +490,14 @@ /* Load a glyph. */ FT_LOCAL_DEF( FT_Error ) - af_loader_load_glyph( AF_Module module, + af_loader_load_glyph( AF_Loader loader, + AF_Module module, FT_Face face, FT_UInt gindex, FT_Int32 load_flags ) { FT_Error error; FT_Size size = face->size; - AF_Loader loader = module->loader; AF_ScalerRec scaler; @@ -521,7 +515,7 @@ scaler.render_mode = FT_LOAD_TARGET_MODE( load_flags ); scaler.flags = 0; /* XXX: fix this */ - error = af_loader_reset( module, face ); + error = af_loader_reset( loader, module, face ); if ( !error ) { AF_StyleMetrics metrics; diff --git a/src/autofit/afloader.h b/src/autofit/afloader.h index 9601e24..5987b27 100644 --- a/src/autofit/afloader.h +++ b/src/autofit/afloader.h @@ -20,13 +20,12 @@ #define __AFLOADER_H__ #include "afhints.h" +#include "afmodule.h" #include "afglobal.h" FT_BEGIN_HEADER - typedef struct AF_ModuleRec_* AF_Module; - /* * The autofitter module's (global) data structure to communicate with * actual fonts. If necessary, `local' data like the current face, the @@ -56,20 +55,23 @@ FT_BEGIN_HEADER FT_LOCAL( FT_Error ) - af_loader_init( AF_Module module ); + af_loader_init( AF_Loader loader, + FT_Memory memory ); FT_LOCAL( FT_Error ) - af_loader_reset( AF_Module module, + af_loader_reset( AF_Loader loader, + AF_Module module, FT_Face face ); FT_LOCAL( void ) - af_loader_done( AF_Module module ); + af_loader_done( AF_Loader loader ); FT_LOCAL( FT_Error ) - af_loader_load_glyph( AF_Module module, + af_loader_load_glyph( AF_Loader loader, + AF_Module module, FT_Face face, FT_UInt gindex, FT_Int32 load_flags ); diff --git a/src/autofit/afmodule.c b/src/autofit/afmodule.c index 641e03e..77e4849 100644 --- a/src/autofit/afmodule.c +++ b/src/autofit/afmodule.c @@ -253,7 +253,7 @@ module->fallback_style = AF_STYLE_FALLBACK; module->default_script = AF_SCRIPT_DEFAULT; - return af_loader_init( module ); + return FT_Err_Ok; } @@ -261,9 +261,6 @@ af_autofitter_done( FT_Module ft_module ) /* AF_Module */ { AF_Module module = (AF_Module)ft_module; - - - af_loader_done( module ); } @@ -274,10 +271,22 @@ FT_UInt glyph_index, FT_Int32 load_flags ) { + FT_Error error = FT_Err_Ok; + AF_LoaderRec loader[1]; + FT_UNUSED( size ); - return af_loader_load_glyph( module, slot->face, - glyph_index, load_flags ); + + error = af_loader_init( loader, module->root.library->memory ); + if ( error ) + return error; + + error = af_loader_load_glyph( loader, module, slot->face, + glyph_index, load_flags ); + + af_loader_done( loader ); + + return error; } diff --git a/src/autofit/afmodule.h b/src/autofit/afmodule.h index 20b7b9f..4f73d1d 100644 --- a/src/autofit/afmodule.h +++ b/src/autofit/afmodule.h @@ -23,17 +23,13 @@ #include FT_INTERNAL_OBJECTS_H #include FT_MODULE_H -#include "afloader.h" - FT_BEGIN_HEADER /* * This is the `extended' FT_Module structure which holds the - * autofitter's global data. Right before hinting a glyph, the data - * specific to the glyph's face (blue zones, stem widths, etc.) are - * loaded into `loader' (see function `af_loader_reset'). + * autofitter's global data. */ typedef struct AF_ModuleRec_ @@ -43,9 +39,7 @@ FT_BEGIN_HEADER FT_UInt fallback_style; FT_UInt default_script; - AF_LoaderRec loader[1]; - - } AF_ModuleRec; + } AF_ModuleRec, *AF_Module; FT_DECLARE_MODULE(autofit_module_class) -- 2.2.2 From 531d463aed365b9790f6065b98e94b9bb14289bb Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 17:46:55 +0100 Subject: [PATCH] [truetype] Allocate TT_ExecContext in TT_Size instead of TT_Driver. Previously the code had stipulation for using a per-TT_Size exec context if `size->debug' was true. But there was no way that `size->debug' could *ever* be true. As such, the code was always using the singleton `TT_ExecContext' that was stored in `TT_Driver'. This was, clearly, not threadsafe. With this patch, loading glyphs from different faces from different threads doesn't crash in the bytecode loader code. * src/truetype/ttobjs.h (TT_SizeRec): Remove `debug' member. (TT_DriverRec): Remove `context' member. * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Remove `TT_ExecContext' code related to a global `TT_Driver' object. (tt_driver_done): Don't remove `TT_ExecContext' object here but ... (tt_size_done_bytecode): ... here. (tt_driver_init): Don't create `TT_ExecContext' object here but ... (tt_size_init_bytecode): ... here, only on demand. * src/truetype/ttinterp.c (TT_Run_Context): Remove defunct debug code. (TT_New_Context): Remove `TT_ExecContext' code related to a global `TT_Driver' object. * src/truetype/ttinterp.h: Updated. * src/truetype/ttgload.c (TT_Hint_Glyph, tt_loader_init): Updated. --- ChangeLog | 34 +++++++++++++++++++++++++++++++++ src/truetype/ttgload.c | 9 ++------- src/truetype/ttinterp.c | 44 ++++++++++++------------------------------- src/truetype/ttinterp.h | 4 ++-- src/truetype/ttobjs.c | 50 ++++++++----------------------------------------- src/truetype/ttobjs.h | 8 -------- 6 files changed, 58 insertions(+), 91 deletions(-) diff --git a/ChangeLog b/ChangeLog index bc8c725..5f34ee4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,39 @@ 2015-01-14 Behdad Esfahbod + [truetype] Allocate TT_ExecContext in TT_Size instead of TT_Driver. + + Previously the code had stipulation for using a per-TT_Size exec + context if `size->debug' was true. But there was no way that + `size->debug' could *ever* be true. As such, the code was always + using the singleton `TT_ExecContext' that was stored in `TT_Driver'. + This was, clearly, not threadsafe. + + With this patch, loading glyphs from different faces from different + threads doesn't crash in the bytecode loader code. + + * src/truetype/ttobjs.h (TT_SizeRec): Remove `debug' member. + (TT_DriverRec): Remove `context' member. + + * src/truetype/ttobjs.c (tt_size_run_fpgm, tt_size_run_prep): Remove + `TT_ExecContext' code related to a global `TT_Driver' object. + + (tt_driver_done): Don't remove `TT_ExecContext' object here but ... + (tt_size_done_bytecode): ... here. + + (tt_driver_init): Don't create `TT_ExecContext' object here but ... + (tt_size_init_bytecode): ... here, only on demand. + + * src/truetype/ttinterp.c (TT_Run_Context): Remove defunct debug + code. + (TT_New_Context): Remove `TT_ExecContext' code related to a global + `TT_Driver' object. + + * src/truetype/ttinterp.h: Updated. + + * src/truetype/ttgload.c (TT_Hint_Glyph, tt_loader_init): Updated. + +2015-01-14 Behdad Esfahbod + [autofit] Allocate AF_Loader on the stack instead of AF_Module. Stop sharing a global `AF_Loader'. Allocate one on the stack during diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c index c5841c3..c780275 100644 --- a/src/truetype/ttgload.c +++ b/src/truetype/ttgload.c @@ -794,7 +794,6 @@ if ( n_ins > 0 ) { - FT_Bool debug; FT_Error error; FT_GlyphLoader gloader = loader->gloader; @@ -807,10 +806,7 @@ loader->exec->is_composite = is_composite; loader->exec->pts = *zone; - debug = FT_BOOL( !( loader->load_flags & FT_LOAD_NO_SCALE ) && - ((TT_Size)loader->size)->debug ); - - error = TT_Run_Context( loader->exec, debug ); + error = TT_Run_Context( loader->exec ); if ( error && loader->exec->pedantic_hinting ) return error; @@ -2137,8 +2133,7 @@ return size->cvt_ready; /* query new execution context */ - exec = size->debug ? size->context - : ( (TT_Driver)FT_FACE_DRIVER( face ) )->context; + exec = size->context; if ( !exec ) return FT_THROW( Could_Not_Find_Context ); diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index 293af9d..feaf8c7 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -544,12 +544,8 @@ /* */ /* TrueType error code. 0 means success. */ /* */ - /* */ - /* Only the glyph loader and debugger should call this function. */ - /* */ FT_LOCAL_DEF( FT_Error ) - TT_Run_Context( TT_ExecContext exec, - FT_Bool debug ) + TT_Run_Context( TT_ExecContext exec ) { TT_Goto_CodeRange( exec, tt_coderange_glyph, 0 ); @@ -579,16 +575,7 @@ exec->top = 0; exec->callTop = 0; -#if 1 - FT_UNUSED( debug ); - return exec->face->interpreter( exec ); -#else - if ( !debug ) - return TT_RunIns( exec ); - else - return FT_Err_Ok; -#endif } @@ -622,6 +609,9 @@ TT_New_Context( TT_Driver driver ) { FT_Memory memory; + FT_Error error; + + TT_ExecContext exec; if ( !driver ) @@ -629,26 +619,16 @@ memory = driver->root.root.memory; - if ( !driver->context ) - { - FT_Error error; - TT_ExecContext exec; - - - /* allocate object */ - if ( FT_NEW( exec ) ) - goto Fail; - - /* initialize it; in case of error this deallocates `exec' too */ - error = Init_Context( exec, memory ); - if ( error ) - goto Fail; + /* allocate object */ + if ( FT_NEW( exec ) ) + goto Fail; - /* store it into the driver */ - driver->context = exec; - } + /* initialize it; in case of error this deallocates `exec' too */ + error = Init_Context( exec, memory ); + if ( error ) + goto Fail; - return driver->context; + return exec; Fail: return NULL; diff --git a/src/truetype/ttinterp.h b/src/truetype/ttinterp.h index 2893c56..8f213be 100644 --- a/src/truetype/ttinterp.h +++ b/src/truetype/ttinterp.h @@ -327,6 +327,7 @@ FT_BEGIN_HEADER /* */ /* */ /* Only the glyph loader and debugger should call this function. */ + /* (And right now only the glyph loader uses it.) */ /* */ FT_EXPORT( TT_ExecContext ) TT_New_Context( TT_Driver driver ); @@ -346,8 +347,7 @@ FT_BEGIN_HEADER TT_Size ins ); FT_LOCAL( FT_Error ) - TT_Run_Context( TT_ExecContext exec, - FT_Bool debug ); + TT_Run_Context( TT_ExecContext exec ); #endif /* TT_USE_BYTECODE_INTERPRETER */ diff --git a/src/truetype/ttobjs.c b/src/truetype/ttobjs.c index 4707dfe..8877c4d 100644 --- a/src/truetype/ttobjs.c +++ b/src/truetype/ttobjs.c @@ -751,14 +751,7 @@ FT_Error error; - /* debugging instances have their own context */ - if ( size->debug ) - exec = size->context; - else - exec = ( (TT_Driver)FT_FACE_DRIVER( face ) )->context; - - if ( !exec ) - return FT_THROW( Could_Not_Find_Context ); + exec = size->context; error = TT_Load_Context( exec, face, size ); if ( error ) @@ -845,14 +838,7 @@ FT_Error error; - /* debugging instances have their own context */ - if ( size->debug ) - exec = size->context; - else - exec = ( (TT_Driver)FT_FACE_DRIVER( face ) )->context; - - if ( !exec ) - return FT_THROW( Could_Not_Find_Context ); + exec = size->context; error = TT_Load_Context( exec, face, size ); if ( error ) @@ -876,12 +862,9 @@ { TT_Goto_CodeRange( exec, tt_coderange_cvt, 0 ); - if ( !size->debug ) - { - FT_TRACE4(( "Executing `prep' table.\n" )); + FT_TRACE4(( "Executing `prep' table.\n" )); - error = face->interpreter( exec ); - } + error = face->interpreter( exec ); } else error = FT_Err_Ok; @@ -924,12 +907,10 @@ TT_Face face = (TT_Face)ftsize->face; FT_Memory memory = face->root.memory; - - if ( size->debug ) + if ( size->context ) { - /* the debug context must be deleted by the debugger itself */ + TT_Done_Context( size->context ); size->context = NULL; - size->debug = FALSE; } FT_FREE( size->cvt ); @@ -976,6 +957,8 @@ size->bytecode_ready = -1; size->cvt_ready = -1; + size->context = TT_New_Context( (TT_Driver)face->root.driver ); + size->max_function_defs = maxp->maxFunctionDefs; size->max_instruction_defs = maxp->maxInstructionDefs; @@ -1259,10 +1242,6 @@ TT_Driver driver = (TT_Driver)ttdriver; - - if ( !TT_New_Context( driver ) ) - return FT_THROW( Could_Not_Find_Context ); - #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING driver->interpreter_version = TT_INTERPRETER_VERSION_38; #else @@ -1293,20 +1272,7 @@ FT_LOCAL_DEF( void ) tt_driver_done( FT_Module ttdriver ) /* TT_Driver */ { -#ifdef TT_USE_BYTECODE_INTERPRETER - TT_Driver driver = (TT_Driver)ttdriver; - - - /* destroy the execution context */ - if ( driver->context ) - { - TT_Done_Context( driver->context ); - driver->context = NULL; - } -#else FT_UNUSED( ttdriver ); -#endif - } diff --git a/src/truetype/ttobjs.h b/src/truetype/ttobjs.h index 859164f..782255c 100644 --- a/src/truetype/ttobjs.h +++ b/src/truetype/ttobjs.h @@ -324,13 +324,6 @@ FT_BEGIN_HEADER TT_GlyphZoneRec twilight; /* The instance's twilight zone */ - /* debugging variables */ - - /* When using the debugger, we must keep the */ - /* execution context tied to the instance */ - /* object rather than asking it on demand. */ - - FT_Bool debug; TT_ExecContext context; /* if negative, `fpgm' (resp. `prep'), wasn't executed yet; */ @@ -351,7 +344,6 @@ FT_BEGIN_HEADER { FT_DriverRec root; - TT_ExecContext context; /* execution context */ TT_GlyphZoneRec zone; /* glyph loader points zone */ FT_UInt interpreter_version; -- 2.2.2 From 747ae2c8aa3d8d3a5b731caf6aca9aae4ffb74fb Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 17:54:26 +0100 Subject: [PATCH] [smooth] Allocate render pool for smooth rasterizer on the stack. Instead of using the `render_pool' member of `FT_Library' that is provided down to the rasterizer, completely ignore that and allocate needed objects on the stack instead. With this patch, rasterizing glyphs from different faces from different threads doesn't crash in the smooth rasterizer. Bugs: https://bugzilla.redhat.com/show_bug.cgi?id=678397 https://bugzilla.redhat.com/show_bug.cgi?id=1004315 https://bugzilla.redhat.com/show_bug.cgi?id=1165471 https://bugs.freedesktop.org/show_bug.cgi?id=69034 * src/smooth/ftgrays.c (gray_TRaster): Remove `buffer', `buffer_size', `band_size', and `worker' members. (gray_raster_render): Create `buffer', `buffer_size', and `band_size' locally. (gray_raster_reset): Updated. --- ChangeLog | 25 ++++++++++++++++++++++++ src/smooth/ftgrays.c | 54 ++++++++++++++-------------------------------------- 2 files changed, 39 insertions(+), 40 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5f34ee4..a85fbad 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,30 @@ 2015-01-14 Behdad Esfahbod + [smooth] Allocate render pool for smooth rasterizer on the stack. + + Instead of using the `render_pool' member of `FT_Library' that is + provided down to the rasterizer, completely ignore that and allocate + needed objects on the stack instead. + + With this patch, rasterizing glyphs from different faces from + different threads doesn't crash in the smooth rasterizer. + + Bugs: + + https://bugzilla.redhat.com/show_bug.cgi?id=678397 + https://bugzilla.redhat.com/show_bug.cgi?id=1004315 + https://bugzilla.redhat.com/show_bug.cgi?id=1165471 + https://bugs.freedesktop.org/show_bug.cgi?id=69034 + + * src/smooth/ftgrays.c (gray_TRaster): Remove `buffer', + `buffer_size', `band_size', and `worker' members. + + (gray_raster_render): Create `buffer', `buffer_size', and + `band_size' locally. + (gray_raster_reset): Updated. + +2015-01-14 Behdad Esfahbod + [truetype] Allocate TT_ExecContext in TT_Size instead of TT_Driver. Previously the code had stipulation for using a per-TT_Size exec diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c index 131ad27..65eb64c 100644 --- a/src/smooth/ftgrays.c +++ b/src/smooth/ftgrays.c @@ -464,11 +464,7 @@ typedef ptrdiff_t FT_PtrDist; typedef struct gray_TRaster_ { - void* buffer; - long buffer_size; - int band_size; void* memory; - gray_PWorker worker; } gray_TRaster, *gray_PRaster; @@ -1918,12 +1914,17 @@ typedef ptrdiff_t FT_PtrDist; gray_raster_render( gray_PRaster raster, const FT_Raster_Params* params ) { - const FT_Outline* outline = (const FT_Outline*)params->source; - const FT_Bitmap* target_map = params->target; - gray_PWorker worker; + const FT_Outline* outline = (const FT_Outline*)params->source; + const FT_Bitmap* target_map = params->target; + gray_TWorker worker[1]; - if ( !raster || !raster->buffer || !raster->buffer_size ) + TCell buffer[FT_MAX( FT_RENDER_POOL_SIZE, 2048 ) / sizeof ( TCell )]; + long buffer_size = sizeof ( buffer ); + int band_size = (int)( buffer_size / ( sizeof ( TCell ) * 8 ) ); + + + if ( !raster ) return FT_THROW( Invalid_Argument ); if ( !outline ) @@ -1940,8 +1941,6 @@ typedef ptrdiff_t FT_PtrDist; outline->contours[outline->n_contours - 1] + 1 ) return FT_THROW( Invalid_Outline ); - worker = raster->worker; - /* if direct mode is not set, we must have a target bitmap */ if ( !( params->flags & FT_RASTER_FLAG_DIRECT ) ) { @@ -1979,12 +1978,12 @@ typedef ptrdiff_t FT_PtrDist; ras.clip_box.yMax = 32767L; } - gray_init_cells( RAS_VAR_ raster->buffer, raster->buffer_size ); + gray_init_cells( RAS_VAR_ buffer, buffer_size ); ras.outline = *outline; ras.num_cells = 0; ras.invalid = 1; - ras.band_size = raster->band_size; + ras.band_size = band_size; ras.num_gray_spans = 0; if ( params->flags & FT_RASTER_FLAG_DIRECT ) @@ -2069,34 +2068,9 @@ typedef ptrdiff_t FT_PtrDist; char* pool_base, long pool_size ) { - gray_PRaster rast = (gray_PRaster)raster; - - - if ( raster ) - { - if ( pool_base && pool_size >= (long)sizeof ( gray_TWorker ) + 2048 ) - { - gray_PWorker worker = (gray_PWorker)pool_base; - - - rast->worker = worker; - rast->buffer = pool_base + - ( ( sizeof ( gray_TWorker ) + - sizeof ( TCell ) - 1 ) & - ~( sizeof ( TCell ) - 1 ) ); - rast->buffer_size = (long)( ( pool_base + pool_size ) - - (char*)rast->buffer ) & - ~( sizeof ( TCell ) - 1 ); - rast->band_size = (int)( rast->buffer_size / - ( sizeof ( TCell ) * 8 ) ); - } - else - { - rast->buffer = NULL; - rast->buffer_size = 0; - rast->worker = NULL; - } - } + FT_UNUSED( raster ); + FT_UNUSED( pool_base ); + FT_UNUSED( pool_size ); } -- 2.2.2 From 8dc863587440d0a1d2eec2a7973a8eda99d2767d Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 18:06:22 +0100 Subject: [PATCH] [raster] Remove 5-level gray AA mode from monochrome rasterizer. It was off by default and couldn't be turned on at runtime. And the smooth rasterizer superceded it over ten years ago. No point in keeping. Comments suggested that it was there for compatibility with FreeType 1. 550 lines down. * src/raster/ftraster.c (FT_RASTER_OPTION_ANTI_ALIASING, RASTER_GRAY_LINES): Remove macros and all associated code. (black_TWorker): Remove `gray_min_x' and `gray_max_x'. (black_TRaster): Remove `grays' and `gray_width'. (Vertical_Sweep_Init, Vertical_Sweep_Span, Vertical_Sweep_Drop, ft_black_render): Updated. * src/raster/ftrend1.c (ft_raster1_render): Simplify code. (ft_raster5_renderer_class): Removed. --- ChangeLog | 23 +++ include/ftrender.h | 9 +- src/raster/ftraster.c | 490 +------------------------------------------------- src/raster/ftrend1.c | 60 +------ 4 files changed, 28 insertions(+), 554 deletions(-) diff --git a/ChangeLog b/ChangeLog index a85fbad..5808490 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,28 @@ 2015-01-14 Behdad Esfahbod + [raster] Remove 5-level gray AA mode from monochrome rasterizer. + + It was off by default and couldn't be turned on at runtime. And the + smooth rasterizer superceded it over ten years ago. No point in + keeping. Comments suggested that it was there for compatibility + with FreeType 1. + + 550 lines down. + + * src/raster/ftraster.c (FT_RASTER_OPTION_ANTI_ALIASING, + RASTER_GRAY_LINES): Remove macros and all associated code. + + (black_TWorker): Remove `gray_min_x' and `gray_max_x'. + (black_TRaster): Remove `grays' and `gray_width'. + + (Vertical_Sweep_Init, Vertical_Sweep_Span, Vertical_Sweep_Drop, + ft_black_render): Updated. + + * src/raster/ftrend1.c (ft_raster1_render): Simplify code. + (ft_raster5_renderer_class): Removed. + +2015-01-14 Behdad Esfahbod + [smooth] Allocate render pool for smooth rasterizer on the stack. Instead of using the `render_pool' member of `FT_Library' that is diff --git a/include/ftrender.h b/include/ftrender.h index e8d3636..58a9716 100644 --- a/include/ftrender.h +++ b/include/ftrender.h @@ -212,13 +212,8 @@ FT_BEGIN_HEADER /* */ /* This doesn't change the current renderer for other formats. */ /* */ - /* Currently, only the B/W renderer, if compiled with */ - /* FT_RASTER_OPTION_ANTI_ALIASING (providing a 5-levels */ - /* anti-aliasing mode; this option must be set directly in */ - /* `ftraster.c' and is undefined by default) accepts a single tag */ - /* `pal5' to set its gray palette as a character string with */ - /* 5~elements. Consequently, the third and fourth argument are zero */ - /* normally. */ + /* Currently, no FreeType renderer module uses `parameters'; you */ + /* should thus always pass NULL as the value. */ /* */ FT_EXPORT( FT_Error ) FT_Set_Renderer( FT_Library library, diff --git a/src/raster/ftraster.c b/src/raster/ftraster.c index b06ac33..54fb579 100644 --- a/src/raster/ftraster.c +++ b/src/raster/ftraster.c @@ -150,14 +150,6 @@ /* define DEBUG_RASTER if you want to compile a debugging version */ /* #define DEBUG_RASTER */ - /* define FT_RASTER_OPTION_ANTI_ALIASING if you want to support */ - /* 5-levels anti-aliasing */ -/* #define FT_RASTER_OPTION_ANTI_ALIASING */ - - /* The size of the two-lines intermediate bitmap used */ - /* for anti-aliasing, in bytes. */ -#define RASTER_GRAY_LINES 2048 - /*************************************************************************/ /*************************************************************************/ @@ -514,9 +506,6 @@ Short traceIncr; /* sweep's increment in target bitmap */ - Short gray_min_x; /* current min x during gray rendering */ - Short gray_max_x; /* current max x during gray rendering */ - /* dispatch variables */ Function_Sweep_Init* Proc_Sweep_Init; @@ -529,34 +518,13 @@ Bool second_pass; /* indicates whether a horizontal pass */ /* should be performed to control */ /* drop-out accurately when calling */ - /* Render_Glyph. Note that there is */ - /* no horizontal pass during gray */ - /* rendering. */ + /* Render_Glyph. */ TPoint arcs[3 * MaxBezier + 1]; /* The Bezier stack */ black_TBand band_stack[16]; /* band stack used for sub-banding */ Int band_top; /* band stack top */ -#ifdef FT_RASTER_OPTION_ANTI_ALIASING - - Byte* grays; - - Byte gray_lines[RASTER_GRAY_LINES]; - /* Intermediate table used to render the */ - /* graylevels pixmaps. */ - /* gray_lines is a buffer holding two */ - /* monochrome scanlines */ - - Short gray_width; /* width in bytes of one monochrome */ - /* intermediate scanline of gray_lines. */ - /* Each gray pixel takes 2 bits long there */ - - /* The gray_lines must hold 2 lines, thus with size */ - /* in bytes of at least `gray_width*2'. */ - -#endif /* FT_RASTER_ANTI_ALIASING */ - }; @@ -566,8 +534,6 @@ long buffer_size; void* memory; black_PWorker worker; - Byte grays[5]; - Short gray_width; } black_TRaster, *black_PRaster; @@ -583,70 +549,6 @@ #endif /* !FT_STATIC_RASTER */ -#ifdef FT_RASTER_OPTION_ANTI_ALIASING - - /* A lookup table used to quickly count set bits in four gray 2x2 */ - /* cells. The values of the table have been produced with the */ - /* following code: */ - /* */ - /* for ( i = 0; i < 256; i++ ) */ - /* { */ - /* l = 0; */ - /* j = i; */ - /* */ - /* for ( c = 0; c < 4; c++ ) */ - /* { */ - /* l <<= 4; */ - /* */ - /* if ( j & 0x80 ) l++; */ - /* if ( j & 0x40 ) l++; */ - /* */ - /* j = ( j << 2 ) & 0xFF; */ - /* } */ - /* printf( "0x%04X", l ); */ - /* } */ - /* */ - - static const short count_table[256] = - { - 0x0000, 0x0001, 0x0001, 0x0002, 0x0010, 0x0011, 0x0011, 0x0012, - 0x0010, 0x0011, 0x0011, 0x0012, 0x0020, 0x0021, 0x0021, 0x0022, - 0x0100, 0x0101, 0x0101, 0x0102, 0x0110, 0x0111, 0x0111, 0x0112, - 0x0110, 0x0111, 0x0111, 0x0112, 0x0120, 0x0121, 0x0121, 0x0122, - 0x0100, 0x0101, 0x0101, 0x0102, 0x0110, 0x0111, 0x0111, 0x0112, - 0x0110, 0x0111, 0x0111, 0x0112, 0x0120, 0x0121, 0x0121, 0x0122, - 0x0200, 0x0201, 0x0201, 0x0202, 0x0210, 0x0211, 0x0211, 0x0212, - 0x0210, 0x0211, 0x0211, 0x0212, 0x0220, 0x0221, 0x0221, 0x0222, - 0x1000, 0x1001, 0x1001, 0x1002, 0x1010, 0x1011, 0x1011, 0x1012, - 0x1010, 0x1011, 0x1011, 0x1012, 0x1020, 0x1021, 0x1021, 0x1022, - 0x1100, 0x1101, 0x1101, 0x1102, 0x1110, 0x1111, 0x1111, 0x1112, - 0x1110, 0x1111, 0x1111, 0x1112, 0x1120, 0x1121, 0x1121, 0x1122, - 0x1100, 0x1101, 0x1101, 0x1102, 0x1110, 0x1111, 0x1111, 0x1112, - 0x1110, 0x1111, 0x1111, 0x1112, 0x1120, 0x1121, 0x1121, 0x1122, - 0x1200, 0x1201, 0x1201, 0x1202, 0x1210, 0x1211, 0x1211, 0x1212, - 0x1210, 0x1211, 0x1211, 0x1212, 0x1220, 0x1221, 0x1221, 0x1222, - 0x1000, 0x1001, 0x1001, 0x1002, 0x1010, 0x1011, 0x1011, 0x1012, - 0x1010, 0x1011, 0x1011, 0x1012, 0x1020, 0x1021, 0x1021, 0x1022, - 0x1100, 0x1101, 0x1101, 0x1102, 0x1110, 0x1111, 0x1111, 0x1112, - 0x1110, 0x1111, 0x1111, 0x1112, 0x1120, 0x1121, 0x1121, 0x1122, - 0x1100, 0x1101, 0x1101, 0x1102, 0x1110, 0x1111, 0x1111, 0x1112, - 0x1110, 0x1111, 0x1111, 0x1112, 0x1120, 0x1121, 0x1121, 0x1122, - 0x1200, 0x1201, 0x1201, 0x1202, 0x1210, 0x1211, 0x1211, 0x1212, - 0x1210, 0x1211, 0x1211, 0x1212, 0x1220, 0x1221, 0x1221, 0x1222, - 0x2000, 0x2001, 0x2001, 0x2002, 0x2010, 0x2011, 0x2011, 0x2012, - 0x2010, 0x2011, 0x2011, 0x2012, 0x2020, 0x2021, 0x2021, 0x2022, - 0x2100, 0x2101, 0x2101, 0x2102, 0x2110, 0x2111, 0x2111, 0x2112, - 0x2110, 0x2111, 0x2111, 0x2112, 0x2120, 0x2121, 0x2121, 0x2122, - 0x2100, 0x2101, 0x2101, 0x2102, 0x2110, 0x2111, 0x2111, 0x2112, - 0x2110, 0x2111, 0x2111, 0x2112, 0x2120, 0x2121, 0x2121, 0x2122, - 0x2200, 0x2201, 0x2201, 0x2202, 0x2210, 0x2211, 0x2211, 0x2212, - 0x2210, 0x2211, 0x2211, 0x2212, 0x2220, 0x2221, 0x2221, 0x2222 - }; - -#endif /* FT_RASTER_OPTION_ANTI_ALIASING */ - - - /*************************************************************************/ /*************************************************************************/ /** **/ @@ -2268,9 +2170,6 @@ ras.traceOfs = -*min * pitch; if ( pitch > 0 ) ras.traceOfs += ( ras.target.rows - 1 ) * pitch; - - ras.gray_min_x = 0; - ras.gray_max_x = 0; } @@ -2318,11 +2217,6 @@ f1 = (Byte) ( 0xFF >> ( e1 & 7 ) ); f2 = (Byte) ~( 0x7F >> ( e2 & 7 ) ); - if ( ras.gray_min_x > c1 ) - ras.gray_min_x = (short)c1; - if ( ras.gray_max_x < c2 ) - ras.gray_max_x = (short)c2; - target = ras.bTarget + ras.traceOfs + c1; c2 -= c1; @@ -2486,11 +2380,6 @@ c1 = (Short)( e1 >> 3 ); f1 = (Short)( e1 & 7 ); - if ( ras.gray_min_x > c1 ) - ras.gray_min_x = c1; - if ( ras.gray_max_x < c1 ) - ras.gray_max_x = c1; - ras.bTarget[ras.traceOfs + c1] |= (char)( 0x80 >> f1 ); } } @@ -2695,249 +2584,6 @@ } -#ifdef FT_RASTER_OPTION_ANTI_ALIASING - - - /*************************************************************************/ - /* */ - /* Vertical Gray Sweep Procedure Set */ - /* */ - /* These two routines are used during the vertical gray-levels sweep */ - /* phase by the generic Draw_Sweep() function. */ - /* */ - /* NOTES */ - /* */ - /* - The target pixmap's width *must* be a multiple of 4. */ - /* */ - /* - You have to use the function Vertical_Sweep_Span() for the gray */ - /* span call. */ - /* */ - /*************************************************************************/ - - static void - Vertical_Gray_Sweep_Init( RAS_ARGS Short* min, - Short* max ) - { - Long pitch, byte_len; - - - *min = *min & -2; - *max = ( *max + 3 ) & -2; - - ras.traceOfs = 0; - pitch = ras.target.pitch; - byte_len = -pitch; - ras.traceIncr = (Short)byte_len; - ras.traceG = ( *min / 2 ) * byte_len; - - if ( pitch > 0 ) - { - ras.traceG += ( ras.target.rows - 1 ) * pitch; - byte_len = -byte_len; - } - - ras.gray_min_x = (Short)byte_len; - ras.gray_max_x = -(Short)byte_len; - } - - - static void - Vertical_Gray_Sweep_Step( RAS_ARG ) - { - short* count = (short*)count_table; - Byte* grays; - - - ras.traceOfs += ras.gray_width; - - if ( ras.traceOfs > ras.gray_width ) - { - PByte pix; - - - pix = ras.gTarget + ras.traceG + ras.gray_min_x * 4; - grays = ras.grays; - - if ( ras.gray_max_x >= 0 ) - { - Long last_pixel = ras.target.width - 1; - Int last_cell = last_pixel >> 2; - Int last_bit = last_pixel & 3; - Bool over = 0; - - Int c1, c2; - PByte bit, bit2; - - - if ( ras.gray_max_x >= last_cell && last_bit != 3 ) - { - ras.gray_max_x = last_cell - 1; - over = 1; - } - - if ( ras.gray_min_x < 0 ) - ras.gray_min_x = 0; - - bit = ras.bTarget + ras.gray_min_x; - bit2 = bit + ras.gray_width; - - c1 = ras.gray_max_x - ras.gray_min_x; - - while ( c1 >= 0 ) - { - c2 = count[*bit] + count[*bit2]; - - if ( c2 ) - { - pix[0] = grays[(c2 >> 12) & 0x000F]; - pix[1] = grays[(c2 >> 8 ) & 0x000F]; - pix[2] = grays[(c2 >> 4 ) & 0x000F]; - pix[3] = grays[ c2 & 0x000F]; - - *bit = 0; - *bit2 = 0; - } - - bit++; - bit2++; - pix += 4; - c1--; - } - - if ( over ) - { - c2 = count[*bit] + count[*bit2]; - if ( c2 ) - { - switch ( last_bit ) - { - case 2: - pix[2] = grays[(c2 >> 4 ) & 0x000F]; - case 1: - pix[1] = grays[(c2 >> 8 ) & 0x000F]; - default: - pix[0] = grays[(c2 >> 12) & 0x000F]; - } - - *bit = 0; - *bit2 = 0; - } - } - } - - ras.traceOfs = 0; - ras.traceG += ras.traceIncr; - - ras.gray_min_x = 32000; - ras.gray_max_x = -32000; - } - } - - - static void - Horizontal_Gray_Sweep_Span( RAS_ARGS Short y, - FT_F26Dot6 x1, - FT_F26Dot6 x2, - PProfile left, - PProfile right ) - { - /* nothing, really */ - FT_UNUSED_RASTER; - FT_UNUSED( y ); - FT_UNUSED( x1 ); - FT_UNUSED( x2 ); - FT_UNUSED( left ); - FT_UNUSED( right ); - } - - - static void - Horizontal_Gray_Sweep_Drop( RAS_ARGS Short y, - FT_F26Dot6 x1, - FT_F26Dot6 x2, - PProfile left, - PProfile right ) - { - Long e1, e2; - PByte pixel; - - - /* During the horizontal sweep, we only take care of drop-outs */ - - e1 = CEILING( x1 ); - e2 = FLOOR ( x2 ); - - if ( e1 > e2 ) - { - Int dropOutControl = left->flags & 7; - - - if ( e1 == e2 + ras.precision ) - { - switch ( dropOutControl ) - { - case 0: /* simple drop-outs including stubs */ - e1 = e2; - break; - - case 4: /* smart drop-outs including stubs */ - e1 = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half ); - break; - - case 1: /* simple drop-outs excluding stubs */ - case 5: /* smart drop-outs excluding stubs */ - /* see Vertical_Sweep_Drop for details */ - - /* rightmost stub test */ - if ( left->next == right && left->height <= 0 ) - return; - - /* leftmost stub test */ - if ( right->next == left && left->start == y ) - return; - - if ( dropOutControl == 1 ) - e1 = e2; - else - e1 = FLOOR( ( x1 + x2 - 1 ) / 2 + ras.precision_half ); - - break; - - default: /* modes 2, 3, 6, 7 */ - return; /* no drop-out control */ - } - } - else - return; - } - - if ( e1 >= 0 ) - { - Byte color; - - - if ( x2 - x1 >= ras.precision_half ) - color = ras.grays[2]; - else - color = ras.grays[1]; - - e1 = TRUNC( e1 ) / 2; - if ( e1 < ras.target.rows ) - { - pixel = ras.gTarget - e1 * ras.target.pitch + y / 2; - if ( ras.target.pitch > 0 ) - pixel += ( ras.target.rows - 1 ) * ras.target.pitch; - - if ( pixel[0] == ras.grays[0] ) - pixel[0] = color; - } - } - } - - -#endif /* FT_RASTER_OPTION_ANTI_ALIASING */ - - /*************************************************************************/ /* */ /* Generic Sweep Drawing routine */ @@ -3332,118 +2978,10 @@ } -#ifdef FT_RASTER_OPTION_ANTI_ALIASING - - /*************************************************************************/ - /* */ - /* */ - /* Render_Gray_Glyph */ - /* */ - /* */ - /* Render a glyph with grayscaling. Sub-banding if needed. */ - /* */ - /* */ - /* FreeType error code. 0 means success. */ - /* */ - FT_LOCAL_DEF( FT_Error ) - Render_Gray_Glyph( RAS_ARG ) - { - Long pixel_width; - FT_Error error; - - - Set_High_Precision( RAS_VARS ras.outline.flags & - FT_OUTLINE_HIGH_PRECISION ); - ras.scale_shift = ras.precision_shift + 1; - - if ( ras.outline.flags & FT_OUTLINE_IGNORE_DROPOUTS ) - ras.dropOutControl = 2; - else - { - if ( ras.outline.flags & FT_OUTLINE_SMART_DROPOUTS ) - ras.dropOutControl = 4; - else - ras.dropOutControl = 0; - - if ( !( ras.outline.flags & FT_OUTLINE_INCLUDE_STUBS ) ) - ras.dropOutControl += 1; - } - - ras.second_pass = !( ras.outline.flags & FT_OUTLINE_SINGLE_PASS ); - - /* Vertical Sweep */ - - ras.band_top = 0; - ras.band_stack[0].y_min = 0; - ras.band_stack[0].y_max = 2 * ras.target.rows - 1; - - ras.bWidth = ras.gray_width; - pixel_width = 2 * ( ( ras.target.width + 3 ) >> 2 ); - - if ( ras.bWidth > pixel_width ) - ras.bWidth = pixel_width; - - ras.bWidth = ras.bWidth * 8; - ras.bTarget = (Byte*)ras.gray_lines; - ras.gTarget = (Byte*)ras.target.buffer; - - ras.Proc_Sweep_Init = Vertical_Gray_Sweep_Init; - ras.Proc_Sweep_Span = Vertical_Sweep_Span; - ras.Proc_Sweep_Drop = Vertical_Sweep_Drop; - ras.Proc_Sweep_Step = Vertical_Gray_Sweep_Step; - - error = Render_Single_Pass( RAS_VARS 0 ); - if ( error ) - return error; - - /* Horizontal Sweep */ - if ( ras.second_pass && ras.dropOutControl != 2 ) - { - ras.Proc_Sweep_Init = Horizontal_Sweep_Init; - ras.Proc_Sweep_Span = Horizontal_Gray_Sweep_Span; - ras.Proc_Sweep_Drop = Horizontal_Gray_Sweep_Drop; - ras.Proc_Sweep_Step = Horizontal_Sweep_Step; - - ras.band_top = 0; - ras.band_stack[0].y_min = 0; - ras.band_stack[0].y_max = ras.target.width * 2 - 1; - - error = Render_Single_Pass( RAS_VARS 1 ); - if ( error ) - return error; - } - - return Raster_Err_None; - } - -#else /* !FT_RASTER_OPTION_ANTI_ALIASING */ - - FT_LOCAL_DEF( FT_Error ) - Render_Gray_Glyph( RAS_ARG ) - { - FT_UNUSED_RASTER; - - return FT_THROW( Unsupported ); - } - -#endif /* !FT_RASTER_OPTION_ANTI_ALIASING */ - - static void ft_black_init( black_PRaster raster ) { -#ifdef FT_RASTER_OPTION_ANTI_ALIASING - FT_UInt n; - - - /* set default 5-levels gray palette */ - for ( n = 0; n < 5; n++ ) - raster->grays[n] = n * 255 / 4; - - raster->gray_width = RASTER_GRAY_LINES / 2; -#else FT_UNUSED( raster ); -#endif } @@ -3547,26 +3085,10 @@ unsigned long mode, const char* palette ) { -#ifdef FT_RASTER_OPTION_ANTI_ALIASING - - if ( mode == FT_MAKE_TAG( 'p', 'a', 'l', '5' ) ) - { - /* set 5-levels gray palette */ - raster->grays[0] = palette[0]; - raster->grays[1] = palette[1]; - raster->grays[2] = palette[2]; - raster->grays[3] = palette[3]; - raster->grays[4] = palette[4]; - } - -#else - FT_UNUSED( raster ); FT_UNUSED( mode ); FT_UNUSED( palette ); -#endif - return 0; } @@ -3619,16 +3141,8 @@ worker->buff = (PLong) raster->buffer; worker->sizeBuff = worker->buff + raster->buffer_size / sizeof ( Long ); -#ifdef FT_RASTER_OPTION_ANTI_ALIASING - worker->grays = raster->grays; - worker->gray_width = raster->gray_width; - - FT_MEM_ZERO( worker->gray_lines, worker->gray_width * 2 ); -#endif - return ( params->flags & FT_RASTER_FLAG_AA ) - ? Render_Gray_Glyph( RAS_VAR ) - : Render_Glyph( RAS_VAR ); + return Render_Glyph( RAS_VAR ); } diff --git a/src/raster/ftrend1.c b/src/raster/ftrend1.c index aa7f6d5..8a468a8 100644 --- a/src/raster/ftrend1.c +++ b/src/raster/ftrend1.c @@ -120,38 +120,11 @@ } /* check rendering mode */ -#ifndef FT_CONFIG_OPTION_PIC if ( mode != FT_RENDER_MODE_MONO ) { /* raster1 is only capable of producing monochrome bitmaps */ - if ( render->clazz == &ft_raster1_renderer_class ) - return FT_THROW( Cannot_Render_Glyph ); + return FT_THROW( Cannot_Render_Glyph ); } - else - { - /* raster5 is only capable of producing 5-gray-levels bitmaps */ - if ( render->clazz == &ft_raster5_renderer_class ) - return FT_THROW( Cannot_Render_Glyph ); - } -#else /* FT_CONFIG_OPTION_PIC */ - /* When PIC is enabled, we cannot get to the class object */ - /* so instead we check the final character in the class name */ - /* ("raster5" or "raster1"). Yes this is a hack. */ - /* The "correct" thing to do is have different render function */ - /* for each of the classes. */ - if ( mode != FT_RENDER_MODE_MONO ) - { - /* raster1 is only capable of producing monochrome bitmaps */ - if ( render->clazz->root.module_name[6] == '1' ) - return FT_THROW( Cannot_Render_Glyph ); - } - else - { - /* raster5 is only capable of producing 5-gray-levels bitmaps */ - if ( render->clazz->root.module_name[6] == '5' ) - return FT_THROW( Cannot_Render_Glyph ); - } -#endif /* FT_CONFIG_OPTION_PIC */ outline = &slot->outline; @@ -272,35 +245,4 @@ ) - /* This renderer is _NOT_ part of the default modules; you will need */ - /* to register it by hand in your application. It should only be */ - /* used for backwards-compatibility with FT 1.x anyway. */ - /* */ - FT_DEFINE_RENDERER( ft_raster5_renderer_class, - - FT_MODULE_RENDERER, - sizeof ( FT_RendererRec ), - - "raster5", - 0x10000L, - 0x20000L, - - 0, /* module specific interface */ - - (FT_Module_Constructor)ft_raster1_init, - (FT_Module_Destructor) 0, - (FT_Module_Requester) 0 - , - - FT_GLYPH_FORMAT_OUTLINE, - - (FT_Renderer_RenderFunc) ft_raster1_render, - (FT_Renderer_TransformFunc)ft_raster1_transform, - (FT_Renderer_GetCBoxFunc) ft_raster1_get_cbox, - (FT_Renderer_SetModeFunc) ft_raster1_set_mode, - - (FT_Raster_Funcs*) &FT_STANDARD_RASTER_GET - ) - - /* END */ -- 2.2.2 From a773c3041e024975241d110989f617f032c4b7e3 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 18:16:20 +0100 Subject: [PATCH] [raster] Allocate render pool for mono rasterizer on the stack. Instead of using the `render_pool' member of `FT_Library' that is provided down to the rasterizer, completely ignore that and allocate needed objects on the stack instead. With this patch, rasterizing glyphs from different faces from different threads doesn't crash in the monochrome rasterizer. * src/raster/ftraster.c (black_TRaster): Remove `buffer', `buffer_size', and `worker' members. (ft_black_render): Create `buffer' locally. (ft_black_reset): Updated. --- ChangeLog | 17 +++++++++++++++++ src/raster/ftraster.c | 39 ++++++++++----------------------------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5808490..51d05a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,22 @@ 2015-01-14 Behdad Esfahbod + [raster] Allocate render pool for mono rasterizer on the stack. + + Instead of using the `render_pool' member of `FT_Library' that is + provided down to the rasterizer, completely ignore that and allocate + needed objects on the stack instead. + + With this patch, rasterizing glyphs from different faces from + different threads doesn't crash in the monochrome rasterizer. + + * src/raster/ftraster.c (black_TRaster): Remove `buffer', + `buffer_size', and `worker' members. + + (ft_black_render): Create `buffer' locally. + (ft_black_reset): Updated. + +2015-01-14 Behdad Esfahbod + [raster] Remove 5-level gray AA mode from monochrome rasterizer. It was off by default and couldn't be turned on at runtime. And the diff --git a/src/raster/ftraster.c b/src/raster/ftraster.c index 54fb579..552a568 100644 --- a/src/raster/ftraster.c +++ b/src/raster/ftraster.c @@ -530,10 +530,7 @@ typedef struct black_TRaster_ { - char* buffer; - long buffer_size; void* memory; - black_PWorker worker; } black_TRaster, *black_PRaster; @@ -3058,25 +3055,9 @@ char* pool_base, long pool_size ) { - if ( raster ) - { - if ( pool_base && pool_size >= (long)sizeof ( black_TWorker ) + 2048 ) - { - black_PWorker worker = (black_PWorker)pool_base; - - - raster->buffer = pool_base + ( ( sizeof ( *worker ) + 7 ) & ~7 ); - raster->buffer_size = (long)( pool_base + pool_size - - (char*)raster->buffer ); - raster->worker = worker; - } - else - { - raster->buffer = NULL; - raster->buffer_size = 0; - raster->worker = NULL; - } - } + FT_UNUSED( raster ); + FT_UNUSED( pool_base ); + FT_UNUSED( pool_size ); } @@ -3099,10 +3080,13 @@ { const FT_Outline* outline = (const FT_Outline*)params->source; const FT_Bitmap* target_map = params->target; - black_PWorker worker; + black_TWorker worker[1]; - if ( !raster || !raster->buffer || !raster->buffer_size ) + Long buffer[FT_MAX( FT_RENDER_POOL_SIZE, 2048 ) / sizeof ( Long )]; + + + if ( !raster ) return FT_THROW( Not_Ini ); if ( !outline ) @@ -3119,8 +3103,6 @@ outline->contours[outline->n_contours - 1] + 1 ) return FT_THROW( Invalid ); - worker = raster->worker; - /* this version of the raster does not support direct rendering, sorry */ if ( params->flags & FT_RASTER_FLAG_DIRECT ) return FT_THROW( Unsupported ); @@ -3138,9 +3120,8 @@ ras.outline = *outline; ras.target = *target_map; - worker->buff = (PLong) raster->buffer; - worker->sizeBuff = worker->buff + - raster->buffer_size / sizeof ( Long ); + worker->buff = buffer; + worker->sizeBuff = (&buffer)[1]; /* Points to right after buffer. */ return Render_Glyph( RAS_VAR ); } -- 2.2.2 From 6dfdaf4d99e435250eb18582fa60b59dc3bbc427 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 18:21:13 +0100 Subject: [PATCH] [base] Do not reorder library->renderers upon use. Instead of keeping `library->renderers' in a MRU order, just leave it as-is. The MRU machinery wasn't thread-safe. With this patch, rasterizing glyphs from different faces from different threads doesn't fail choosing rasterizer (FT_Err_Cannot_Render_Glyph). Easiest to see that crash was to add a `printf' (or otherwise let thread yield in FT_Throw with debugging enabled). * src/base/ftobjs.c (FT_Render_Glyph_Internal), src/base/ftoutln.c (FT_Outline_Render): Don't call `FT_Set_Renderer'. --- ChangeLog | 17 +++++++++++++++++ src/base/ftobjs.c | 13 +------------ src/base/ftoutln.c | 7 ------- 3 files changed, 18 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 51d05a2..b1b6ba8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,22 @@ 2015-01-14 Behdad Esfahbod + [base] Do not reorder library->renderers upon use. + + Instead of keeping `library->renderers' in a MRU order, just leave + it as-is. The MRU machinery wasn't thread-safe. + + With this patch, rasterizing glyphs from different faces from + different threads doesn't fail choosing rasterizer + (FT_Err_Cannot_Render_Glyph). + + Easiest to see that crash was to add a `printf' (or otherwise let + thread yield in FT_Throw with debugging enabled). + + * src/base/ftobjs.c (FT_Render_Glyph_Internal), src/base/ftoutln.c + (FT_Outline_Render): Don't call `FT_Set_Renderer'. + +2015-01-14 Behdad Esfahbod + [raster] Allocate render pool for mono rasterizer on the stack. Instead of using the `render_pool' member of `FT_Library' that is diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index ee15a01..6d685b5 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -4084,8 +4084,7 @@ default: { - FT_ListNode node = 0; - FT_Bool update = 0; + FT_ListNode node = 0; /* small shortcut for the very common case */ @@ -4112,16 +4111,6 @@ /* now, look for another renderer that supports the same */ /* format. */ renderer = FT_Lookup_Renderer( library, slot->format, &node ); - update = 1; - } - - /* if we changed the current renderer for the glyph image format */ - /* we need to select it as the next current one */ - if ( !error && update && renderer ) - { - error = FT_Set_Renderer( library, renderer, 0, 0 ); - if ( error ) - break; } } } diff --git a/src/base/ftoutln.c b/src/base/ftoutln.c index 8749d64..45f074c 100644 --- a/src/base/ftoutln.c +++ b/src/base/ftoutln.c @@ -612,7 +612,6 @@ FT_Raster_Params* params ) { FT_Error error; - FT_Bool update = FALSE; FT_Renderer renderer; FT_ListNode node; @@ -646,14 +645,8 @@ /* format */ renderer = FT_Lookup_Renderer( library, FT_GLYPH_FORMAT_OUTLINE, &node ); - update = TRUE; } - /* if we changed the current renderer for the glyph image format */ - /* we need to select it as the next current one */ - if ( !error && update && renderer ) - error = FT_Set_Renderer( library, renderer, 0, 0 ); - return error; } -- 2.2.2 From 516342534468565abf0dafbd5bbb2891bfc19990 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 18:30:59 +0100 Subject: [PATCH] [base] Don't allocate `library->raster_pool' anymore. It's unused after the following commits: [raster] Allocate render pool for mono rasterizer on the stack. [raster] Remove 5-level gray AA mode from monochrome rasterizer. The value of FT_RENDER_POOL_SIZE still serves the purpose it used to serve, which is, to adjust the pool size. But the pool is now allocated on the stack on demand. * src/base/ftobjs.c (FT_New_Library, FT_Done_Library): Implement. --- ChangeLog | 15 +++++++++++++++ devel/ftoption.h | 4 ---- include/config/ftoption.h | 4 ---- include/ftimage.h | 13 ++++++------- src/base/ftobjs.c | 13 +++---------- 5 files changed, 24 insertions(+), 25 deletions(-) diff --git a/ChangeLog b/ChangeLog index b1b6ba8..6aca637 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,20 @@ 2015-01-14 Behdad Esfahbod + [base] Don't allocate `library->raster_pool' anymore. + + It's unused after the following commits: + + [raster] Allocate render pool for mono rasterizer on the stack. + [raster] Remove 5-level gray AA mode from monochrome rasterizer. + + The value of FT_RENDER_POOL_SIZE still serves the purpose it used to + serve, which is, to adjust the pool size. But the pool is now + allocated on the stack on demand. + + * src/base/ftobjs.c (FT_New_Library, FT_Done_Library): Implement. + +2015-01-14 Behdad Esfahbod + [base] Do not reorder library->renderers upon use. Instead of keeping `library->renderers' in a MRU order, just leave diff --git a/devel/ftoption.h b/devel/ftoption.h index 5984601..3d0c77d 100644 --- a/devel/ftoption.h +++ b/devel/ftoption.h @@ -378,10 +378,6 @@ FT_BEGIN_HEADER /* The size in bytes of the render pool used by the scan-line converter */ /* to do all of its work. */ /* */ - /* This must be greater than 4KByte if you use FreeType to rasterize */ - /* glyphs; otherwise, you may set it to zero to avoid unnecessary */ - /* allocation of the render pool. */ - /* */ #define FT_RENDER_POOL_SIZE 16384L diff --git a/include/config/ftoption.h b/include/config/ftoption.h index a40e88c..c85519d 100644 --- a/include/config/ftoption.h +++ b/include/config/ftoption.h @@ -378,10 +378,6 @@ FT_BEGIN_HEADER /* The size in bytes of the render pool used by the scan-line converter */ /* to do all of its work. */ /* */ - /* This must be greater than 4KByte if you use FreeType to rasterize */ - /* glyphs; otherwise, you may set it to zero to avoid unnecessary */ - /* allocation of the render pool. */ - /* */ #define FT_RENDER_POOL_SIZE 16384L diff --git a/include/ftimage.h b/include/ftimage.h index 2f7ca2a..42815c0 100644 --- a/include/ftimage.h +++ b/include/ftimage.h @@ -1078,10 +1078,10 @@ FT_BEGIN_HEADER /* FT_Raster_ResetFunc */ /* */ /* */ - /* FreeType provides an area of memory called the `render pool', */ - /* available to all registered rasters. This pool can be freely used */ - /* during a given scan-conversion but is shared by all rasters. Its */ - /* content is thus transient. */ + /* FreeType used to provide an area of memory called the `render */ + /* pool' available to all registered rasters. This was not thread */ + /* safe however and now FreeType never allocates this pool. NULL */ + /* is always passed in as pool_base. */ /* */ /* This function is called each time the render pool changes, or just */ /* after a new raster object is created. */ @@ -1094,10 +1094,9 @@ FT_BEGIN_HEADER /* pool_size :: The size in bytes of the render pool. */ /* */ /* */ - /* Rasters can ignore the render pool and rely on dynamic memory */ + /* Rasters should ignore the render pool and rely on dynamic or stack */ /* allocation if they want to (a handle to the memory allocator is */ - /* passed to the raster constructor). However, this is not */ - /* recommended for efficiency purposes. */ + /* passed to the raster constructor). */ /* */ typedef void (*FT_Raster_ResetFunc)( FT_Raster raster, diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 6d685b5..ba5a24b 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -4666,12 +4666,9 @@ goto Fail; #endif - /* allocate the render pool */ - library->raster_pool_size = FT_RENDER_POOL_SIZE; -#if FT_RENDER_POOL_SIZE > 0 - if ( FT_ALLOC( library->raster_pool, FT_RENDER_POOL_SIZE ) ) - goto Fail; -#endif + /* we don't use raster_pool anymore. */ + library->raster_pool_size = 0; + library->raster_pool = NULL; library->version_major = FREETYPE_MAJOR; library->version_minor = FREETYPE_MINOR; @@ -4820,10 +4817,6 @@ } #endif - /* Destroy raster objects */ - FT_FREE( library->raster_pool ); - library->raster_pool_size = 0; - #ifdef FT_CONFIG_OPTION_PIC /* Destroy pic container contents */ ft_pic_container_destroy( library ); -- 2.2.2 From 603292d7b0b2f391bcb11785a74a0b26fd727595 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 18:35:56 +0100 Subject: [PATCH] [base] Don't initialize unused `driver->glyph_loader'. * src/base/ftobjs.c (Destroy_Driver): Don't call `FT_GlyphLoader_Done'. (FT_Add_Module): Don't call `FT_GlyphLoader_New'. --- ChangeLog | 8 ++++++++ include/internal/ftobjs.h | 5 ++--- src/base/ftobjs.c | 20 -------------------- 3 files changed, 10 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6aca637..62bb099 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2015-01-14 Behdad Esfahbod + [base] Don't initialize unused `driver->glyph_loader'. + + * src/base/ftobjs.c (Destroy_Driver): Don't call + `FT_GlyphLoader_Done'. + (FT_Add_Module): Don't call `FT_GlyphLoader_New'. + +2015-01-14 Behdad Esfahbod + [base] Don't allocate `library->raster_pool' anymore. It's unused after the following commits: diff --git a/include/internal/ftobjs.h b/include/internal/ftobjs.h index b45a5ed..2014a95 100644 --- a/include/internal/ftobjs.h +++ b/include/internal/ftobjs.h @@ -740,9 +740,8 @@ FT_BEGIN_HEADER /* faces_list :: The list of faces currently opened by this */ /* driver. */ /* */ - /* glyph_loader :: The glyph loader for all faces managed by this */ - /* driver. This object isn't defined for unscalable */ - /* formats. */ + /* glyph_loader :: Unused. Used to be glyph loader for all faces */ + /* managed by this driver. */ /* */ typedef struct FT_DriverRec_ { diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index ba5a24b..d3a1209 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -968,10 +968,6 @@ (FT_List_Destructor)destroy_face, driver->root.memory, driver ); - - /* check whether we need to drop the driver's glyph loader */ - if ( FT_DRIVER_USES_OUTLINES( driver ) ) - FT_GlyphLoader_Done( driver->glyph_loader ); } @@ -4313,17 +4309,10 @@ /* if the module is a font driver */ if ( FT_MODULE_IS_DRIVER( module ) ) { - /* allocate glyph loader if needed */ FT_Driver driver = FT_DRIVER( module ); driver->clazz = (FT_Driver_Class)module->clazz; - if ( FT_DRIVER_USES_OUTLINES( driver ) ) - { - error = FT_GlyphLoader_New( memory, &driver->glyph_loader ); - if ( error ) - goto Fail; - } } if ( clazz->module_init ) @@ -4340,15 +4329,6 @@ return error; Fail: - if ( FT_MODULE_IS_DRIVER( module ) ) - { - FT_Driver driver = FT_DRIVER( module ); - - - if ( FT_DRIVER_USES_OUTLINES( driver ) ) - FT_GlyphLoader_Done( driver->glyph_loader ); - } - if ( FT_MODULE_IS_RENDERER( module ) ) { FT_Renderer renderer = FT_RENDERER( module ); -- 2.2.2 From b2ba68665f93be2b03b6b27aa30dc9f190cf3fef Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 18:43:13 +0100 Subject: [PATCH] [smooth] Fix uninitialized memory access. Looks like `ras.span_y' could always be used without initialization. This was never detected by valgrind before because the library-wide `raster_pool' was used for the worker object and `raster_pool' was originally zero'ed. But subsequent reuses of it were using `span_y' uninitialized. With the recent change to not use `render_pool' and allocate worker and buffer on the stack, valgrind now detects this uninitialized access. * src/smooth/ftgrays.c (gray_raster_render): Initialize `ras.span_y'. --- ChangeLog | 15 +++++++++++++++ src/smooth/ftgrays.c | 1 + 2 files changed, 16 insertions(+) diff --git a/ChangeLog b/ChangeLog index 62bb099..ee91e3e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,20 @@ 2015-01-14 Behdad Esfahbod + [smooth] Fix uninitialized memory access. + + Looks like `ras.span_y' could always be used without initialization. + This was never detected by valgrind before because the library-wide + `raster_pool' was used for the worker object and `raster_pool' was + originally zero'ed. But subsequent reuses of it were using `span_y' + uninitialized. With the recent change to not use `render_pool' and + allocate worker and buffer on the stack, valgrind now detects this + uninitialized access. + + * src/smooth/ftgrays.c (gray_raster_render): Initialize + `ras.span_y'. + +2015-01-14 Behdad Esfahbod + [base] Don't initialize unused `driver->glyph_loader'. * src/base/ftobjs.c (Destroy_Driver): Don't call diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c index 65eb64c..4240b01 100644 --- a/src/smooth/ftgrays.c +++ b/src/smooth/ftgrays.c @@ -1985,6 +1985,7 @@ typedef ptrdiff_t FT_PtrDist; ras.invalid = 1; ras.band_size = band_size; ras.num_gray_spans = 0; + ras.span_y = 0; if ( params->flags & FT_RASTER_FLAG_DIRECT ) { -- 2.2.2 From c242fe41ec634af32845cd17bcd1a0ee2653feb9 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 18:48:14 +0100 Subject: [PATCH] [raster] Fix uninitialized memory access. Apparently `ras.cProfile' might be uninitialized. This will be the case if `ras.top == ras.cProfile->offset', as can be seen in `End_Profile'. The overshoot code introduced in a change `Fix B/W rasterization of subglyphs with different drop-out modes.' (from 2009-06-18) violated this, accessing `ras.cProfile->flags' unconditionally just before calling `End_Profile' (which then detected that `cProfile' is uninitialized and didn't touch it). This was harmless, and was not detected by valgrind before because the objects were allocated on the `raster_pool', which was always initialized. With recent change to allocate raster buffers on the stack, valgrind now reported this invalid access. * src/raster/ftraster.c (Convert_Glyph): Don't access an uninitialized `cProfile'. --- ChangeLog | 20 ++++++++++++++++++++ src/raster/ftraster.c | 3 ++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ee91e3e..72e4a7c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,25 @@ 2015-01-14 Behdad Esfahbod + [raster] Fix uninitialized memory access. + + Apparently `ras.cProfile' might be uninitialized. This will be the + case if `ras.top == ras.cProfile->offset', as can be seen in + `End_Profile'. The overshoot code introduced in a change `Fix B/W + rasterization of subglyphs with different drop-out modes.' (from + 2009-06-18) violated this, accessing `ras.cProfile->flags' + unconditionally just before calling `End_Profile' (which then + detected that `cProfile' is uninitialized and didn't touch it). + + This was harmless, and was not detected by valgrind before because + the objects were allocated on the `raster_pool', which was always + initialized. With recent change to allocate raster buffers on the + stack, valgrind now reported this invalid access. + + * src/raster/ftraster.c (Convert_Glyph): Don't access an + uninitialized `cProfile'. + +2015-01-14 Behdad Esfahbod + [smooth] Fix uninitialized memory access. Looks like `ras.span_y' could always be used without initialization. diff --git a/src/raster/ftraster.c b/src/raster/ftraster.c index 552a568..2b182f7 100644 --- a/src/raster/ftraster.c +++ b/src/raster/ftraster.c @@ -1982,7 +1982,8 @@ /* to be drawn. */ lastProfile = ras.cProfile; - if ( ras.cProfile->flags & Flow_Up ) + if ( ras.top != ras.cProfile->offset && + ( ras.cProfile->flags & Flow_Up ) ) o = IS_TOP_OVERSHOOT( ras.lastY ); else o = IS_BOTTOM_OVERSHOOT( ras.lastY ); -- 2.2.2 From ae6699f86c42d3f81626eca1833d0537356f196a Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 18:55:39 +0100 Subject: [PATCH] [autofit] Remove (unused) support for composite glyphs. We never have to deal with composite glyphs in the autohinter, as those will be loaded into FORMAT_OUTLINE by the recursed `FT_Load_Glyph' function. In the rare cases that FT_LOAD_NO_RECURSE is set, it will imply FT_LOAD_NO_SCALE as per `FT_Load_Glyph', which then implies FT_LOAD_NO_HINTING: /* resolve load flags dependencies */ if ( load_flags & FT_LOAD_NO_RECURSE ) load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_IGNORE_TRANSFORM; if ( load_flags & FT_LOAD_NO_SCALE ) { load_flags |= FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP; load_flags &= ~FT_LOAD_RENDER; } and as such the auto-hinter is never called. Thus, the recursion in `af_loader_load_g' never actually happens. So remove the depth counter as well. * src/autofit/afloader.c (af_loader_load_g): Remove `depth' parameter. : Remove associated code. (af_loader_load_glyph): Updated. --- ChangeLog | 35 +++++++++++++ src/autofit/afloader.c | 134 +++---------------------------------------------- 2 files changed, 42 insertions(+), 127 deletions(-) diff --git a/ChangeLog b/ChangeLog index 72e4a7c..ba8c3ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,40 @@ 2015-01-14 Behdad Esfahbod + [autofit] Remove (unused) support for composite glyphs. + + We never have to deal with composite glyphs in the autohinter, as + those will be loaded into FORMAT_OUTLINE by the recursed + `FT_Load_Glyph' function. + + In the rare cases that FT_LOAD_NO_RECURSE is set, it will imply + FT_LOAD_NO_SCALE as per `FT_Load_Glyph', which then implies + FT_LOAD_NO_HINTING: + + /* resolve load flags dependencies */ + + if ( load_flags & FT_LOAD_NO_RECURSE ) + load_flags |= FT_LOAD_NO_SCALE | + FT_LOAD_IGNORE_TRANSFORM; + + if ( load_flags & FT_LOAD_NO_SCALE ) + { + load_flags |= FT_LOAD_NO_HINTING | + FT_LOAD_NO_BITMAP; + + load_flags &= ~FT_LOAD_RENDER; + } + + and as such the auto-hinter is never called. Thus, the recursion in + `af_loader_load_g' never actually happens. So remove the depth + counter as well. + + * src/autofit/afloader.c (af_loader_load_g): Remove `depth' + parameter. + : Remove associated code. + (af_loader_load_glyph): Updated. + +2015-01-14 Behdad Esfahbod + [raster] Fix uninitialized memory access. Apparently `ras.cProfile' might be uninitialized. This will be the diff --git a/src/autofit/afloader.c b/src/autofit/afloader.c index 612103c..a4c4968 100644 --- a/src/autofit/afloader.c +++ b/src/autofit/afloader.c @@ -89,16 +89,17 @@ } - /* Load a single glyph component. This routine calls itself */ - /* recursively, if necessary, and does the main work of */ - /* `af_loader_load_glyph.' */ + /* Do the main work of `af_loader_load_glyph'. Note that we never */ + /* have to deal with composite glyphs as those get loaded into */ + /* FT_GLYPH_FORMAT_OUTLINE by the recursed `FT_Load_Glyph' function. */ + /* In the rare cases where FT_LOAD_NO_RECURSE is set, it implies */ + /* FT_LOAD_NO_SCALE and as such the auto-hinter is never called. */ static FT_Error af_loader_load_g( AF_Loader loader, AF_Scaler scaler, FT_UInt glyph_index, - FT_Int32 load_flags, - FT_UInt depth ) + FT_Int32 load_flags ) { FT_Error error; FT_Face face = loader->face; @@ -265,133 +266,12 @@ FT_GlyphLoader_Add( gloader ); break; - case FT_GLYPH_FORMAT_COMPOSITE: - { - FT_UInt nn, num_subglyphs = slot->num_subglyphs; - FT_UInt num_base_subgs, start_point; - FT_SubGlyph subglyph; - - - start_point = gloader->base.outline.n_points; - - /* first of all, copy the subglyph descriptors in the glyph loader */ - error = FT_GlyphLoader_CheckSubGlyphs( gloader, num_subglyphs ); - if ( error ) - goto Exit; - - FT_ARRAY_COPY( gloader->current.subglyphs, - slot->subglyphs, - num_subglyphs ); - - gloader->current.num_subglyphs = num_subglyphs; - num_base_subgs = gloader->base.num_subglyphs; - - /* now read each subglyph independently */ - for ( nn = 0; nn < num_subglyphs; nn++ ) - { - FT_Vector pp1, pp2; - FT_Pos x, y; - FT_UInt num_points, num_new_points, num_base_points; - - - /* gloader.current.subglyphs can change during glyph loading due */ - /* to re-allocation -- we must recompute the current subglyph on */ - /* each iteration */ - subglyph = gloader->base.subglyphs + num_base_subgs + nn; - - pp1 = loader->pp1; - pp2 = loader->pp2; - - num_base_points = gloader->base.outline.n_points; - - error = af_loader_load_g( loader, scaler, subglyph->index, - load_flags, depth + 1 ); - if ( error ) - goto Exit; - - /* recompute subglyph pointer */ - subglyph = gloader->base.subglyphs + num_base_subgs + nn; - - if ( !( subglyph->flags & FT_SUBGLYPH_FLAG_USE_MY_METRICS ) ) - { - loader->pp1 = pp1; - loader->pp2 = pp2; - } - - num_points = gloader->base.outline.n_points; - num_new_points = num_points - num_base_points; - - /* now perform the transformation required for this subglyph */ - - if ( subglyph->flags & ( FT_SUBGLYPH_FLAG_SCALE | - FT_SUBGLYPH_FLAG_XY_SCALE | - FT_SUBGLYPH_FLAG_2X2 ) ) - { - FT_Vector* cur = gloader->base.outline.points + - num_base_points; - FT_Vector* limit = cur + num_new_points; - - - for ( ; cur < limit; cur++ ) - FT_Vector_Transform( cur, &subglyph->transform ); - } - - /* apply offset */ - - if ( !( subglyph->flags & FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES ) ) - { - FT_Int k = subglyph->arg1; - FT_UInt l = subglyph->arg2; - FT_Vector* p1; - FT_Vector* p2; - - - if ( start_point + k >= num_base_points || - l >= (FT_UInt)num_new_points ) - { - error = FT_THROW( Invalid_Composite ); - goto Exit; - } - - l += num_base_points; - - /* for now, only use the current point coordinates; */ - /* we eventually may consider another approach */ - p1 = gloader->base.outline.points + start_point + k; - p2 = gloader->base.outline.points + start_point + l; - - x = p1->x - p2->x; - y = p1->y - p2->y; - } - else - { - x = FT_MulFix( subglyph->arg1, hints->x_scale ) + hints->x_delta; - y = FT_MulFix( subglyph->arg2, hints->y_scale ) + hints->y_delta; - - x = FT_PIX_ROUND( x ); - y = FT_PIX_ROUND( y ); - } - - { - FT_Outline dummy = gloader->base.outline; - - - dummy.points += num_base_points; - dummy.n_points = (short)num_new_points; - - FT_Outline_Translate( &dummy, x, y ); - } - } - } - break; - default: /* we don't support other formats (yet?) */ error = FT_THROW( Unimplemented_Feature ); } Hint_Metrics: - if ( depth == 0 ) { FT_BBox bbox; FT_Vector vvector; @@ -558,7 +438,7 @@ goto Exit; } - error = af_loader_load_g( loader, &scaler, gindex, load_flags, 0 ); + error = af_loader_load_g( loader, &scaler, gindex, load_flags ); } } Exit: -- 2.2.2 From a4117fbda7399e201d4e438d301ab588d28dcea7 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 19:07:54 +0100 Subject: [PATCH] [autofit] Reuse slot glyph loader. No need to create a new glyph loader; we can reuse the one from `slot->internal->loader'. It's hard to tell why it was written that way originally, but new code looks sound and correct to me, and avoids lots of allocations. * src/autofit/afloader.c (af_loader_init): Change return type to `void'. Don't call `FT_GlyphLoader_New'. (af_loader_reset): Don't call `FT_GlyphLoader_Rewind'. (af_loader_load_g): Update code to use `internal->loader', which doesn't need copying of data. * src/autofit/afloader.h (AF_LoaderRec): Remove `gloader' member. Update prototype. * src/autofit/afmodule.c (af_autofitter_load_glyph): Updated. --- ChangeLog | 21 +++++++++++++++++++++ src/autofit/afloader.c | 44 +++++--------------------------------------- src/autofit/afloader.h | 3 +-- src/autofit/afmodule.c | 4 +--- 4 files changed, 28 insertions(+), 44 deletions(-) diff --git a/ChangeLog b/ChangeLog index ba8c3ee..dcd6861 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,26 @@ 2015-01-14 Behdad Esfahbod + [autofit] Reuse slot glyph loader. + + No need to create a new glyph loader; we can reuse the one from + `slot->internal->loader'. It's hard to tell why it was written that + way originally, but new code looks sound and correct to me, and + avoids lots of allocations. + + * src/autofit/afloader.c (af_loader_init): Change return type to + `void'. + Don't call `FT_GlyphLoader_New'. + (af_loader_reset): Don't call `FT_GlyphLoader_Rewind'. + (af_loader_load_g): Update code to use `internal->loader', which + doesn't need copying of data. + + * src/autofit/afloader.h (AF_LoaderRec): Remove `gloader' member. + Update prototype. + + * src/autofit/afmodule.c (af_autofitter_load_glyph): Updated. + +2015-01-14 Behdad Esfahbod + [autofit] Remove (unused) support for composite glyphs. We never have to deal with composite glyphs in the autohinter, as diff --git a/src/autofit/afloader.c b/src/autofit/afloader.c index a4c4968..c407c18 100644 --- a/src/autofit/afloader.c +++ b/src/autofit/afloader.c @@ -26,7 +26,7 @@ /* Initialize glyph loader. */ - FT_LOCAL_DEF( FT_Error ) + FT_LOCAL_DEF( void ) af_loader_init( AF_Loader loader, FT_Memory memory ) { @@ -36,7 +36,6 @@ #ifdef FT_DEBUG_AUTOFIT _af_debug_hints = &loader->hints; #endif - return FT_GlyphLoader_New( memory, &loader->gloader ); } @@ -53,8 +52,6 @@ loader->face = face; loader->globals = (AF_FaceGlobals)face->autohint.data; - FT_GlyphLoader_Rewind( loader->gloader ); - if ( loader->globals == NULL ) { error = af_face_globals_new( face, &loader->globals, module ); @@ -84,8 +81,6 @@ #ifdef FT_DEBUG_AUTOFIT _af_debug_hints = NULL; #endif - FT_GlyphLoader_Done( loader->gloader ); - loader->gloader = NULL; } @@ -103,11 +98,11 @@ { FT_Error error; FT_Face face = loader->face; - FT_GlyphLoader gloader = loader->gloader; AF_StyleMetrics metrics = loader->metrics; AF_GlyphHints hints = &loader->hints; FT_GlyphSlot slot = face->glyph; FT_Slot_Internal internal = slot->internal; + FT_GlyphLoader gloader = internal->loader; FT_Int32 flags; @@ -139,29 +134,6 @@ loader->trans_delta.x, loader->trans_delta.y ); - /* copy the outline points in the loader's current */ - /* extra points which are used to keep original glyph coordinates */ - error = FT_GLYPHLOADER_CHECK_POINTS( gloader, - slot->outline.n_points + 4, - slot->outline.n_contours ); - if ( error ) - goto Exit; - - FT_ARRAY_COPY( gloader->current.outline.points, - slot->outline.points, - slot->outline.n_points ); - - FT_ARRAY_COPY( gloader->current.outline.contours, - slot->outline.contours, - slot->outline.n_contours ); - - FT_ARRAY_COPY( gloader->current.outline.tags, - slot->outline.tags, - slot->outline.n_points ); - - gloader->current.outline.n_points = slot->outline.n_points; - gloader->current.outline.n_contours = slot->outline.n_contours; - /* compute original horizontal phantom points (and ignore */ /* vertical ones) */ loader->pp1.x = hints->x_delta; @@ -187,7 +159,7 @@ if ( writing_system_class->style_hints_apply ) writing_system_class->style_hints_apply( hints, - &gloader->current.outline, + &gloader->base.outline, metrics ); } @@ -262,8 +234,6 @@ slot->rsb_delta = loader->pp2.x - pp2x; } - /* good, we simply add the glyph to our loader's base */ - FT_GlyphLoader_Add( gloader ); break; default: @@ -346,18 +316,14 @@ slot->metrics.horiAdvance = FT_PIX_ROUND( slot->metrics.horiAdvance ); slot->metrics.vertAdvance = FT_PIX_ROUND( slot->metrics.vertAdvance ); - /* now copy outline into glyph slot */ - FT_GlyphLoader_Rewind( internal->loader ); - error = FT_GlyphLoader_CopyPoints( internal->loader, gloader ); - if ( error ) - goto Exit; - +#if 0 /* reassign all outline fields except flags to protect them */ slot->outline.n_contours = internal->loader->base.outline.n_contours; slot->outline.n_points = internal->loader->base.outline.n_points; slot->outline.points = internal->loader->base.outline.points; slot->outline.tags = internal->loader->base.outline.tags; slot->outline.contours = internal->loader->base.outline.contours; +#endif slot->format = FT_GLYPH_FORMAT_OUTLINE; } diff --git a/src/autofit/afloader.h b/src/autofit/afloader.h index 5987b27..3005d00 100644 --- a/src/autofit/afloader.h +++ b/src/autofit/afloader.h @@ -41,7 +41,6 @@ FT_BEGIN_HEADER AF_FaceGlobals globals; /* current glyph data */ - FT_GlyphLoader gloader; AF_GlyphHintsRec hints; AF_StyleMetrics metrics; FT_Bool transformed; @@ -54,7 +53,7 @@ FT_BEGIN_HEADER } AF_LoaderRec, *AF_Loader; - FT_LOCAL( FT_Error ) + FT_LOCAL( void ) af_loader_init( AF_Loader loader, FT_Memory memory ); diff --git a/src/autofit/afmodule.c b/src/autofit/afmodule.c index 77e4849..1eec5bb 100644 --- a/src/autofit/afmodule.c +++ b/src/autofit/afmodule.c @@ -277,9 +277,7 @@ FT_UNUSED( size ); - error = af_loader_init( loader, module->root.library->memory ); - if ( error ) - return error; + af_loader_init( loader, module->root.library->memory ); error = af_loader_load_glyph( loader, module, slot->face, glyph_index, load_flags ); -- 2.2.2 From c27336567bf9ec18734506f68fc03e328c479bc9 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 19:16:12 +0100 Subject: [PATCH] [autofit] Allocate hints object on the stack. This avoids one malloc per load. * src/autofit/afloader.h (AF_LoaderRec): Change type of `hints' to `AF_GlyphHints'. Update prototype. * src/autofit/afloader.c (af_loader_init): Use `AF_GlyphHints' parameter instead of `FT_Memory'. (af_loader_done): Directly reset `load_hints'. (af_loader_load_g): Updated. * src/autofit/afmodule.c (af_autofitter_load_glyph): Use local `hints' object. --- ChangeLog | 18 ++++++++++++++++++ src/autofit/afloader.c | 15 +++++++-------- src/autofit/afloader.h | 6 +++--- src/autofit/afmodule.c | 11 ++++++++--- 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index dcd6861..d2afb85 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,23 @@ 2015-01-14 Behdad Esfahbod + [autofit] Allocate hints object on the stack. + + This avoids one malloc per load. + + * src/autofit/afloader.h (AF_LoaderRec): Change type of `hints' to + `AF_GlyphHints'. + Update prototype. + + * src/autofit/afloader.c (af_loader_init): Use `AF_GlyphHints' + parameter instead of `FT_Memory'. + (af_loader_done): Directly reset `load_hints'. + (af_loader_load_g): Updated. + + * src/autofit/afmodule.c (af_autofitter_load_glyph): Use local + `hints' object. + +2015-01-14 Behdad Esfahbod + [autofit] Reuse slot glyph loader. No need to create a new glyph loader; we can reuse the one from diff --git a/src/autofit/afloader.c b/src/autofit/afloader.c index c407c18..c6be5ac 100644 --- a/src/autofit/afloader.c +++ b/src/autofit/afloader.c @@ -27,14 +27,14 @@ /* Initialize glyph loader. */ FT_LOCAL_DEF( void ) - af_loader_init( AF_Loader loader, - FT_Memory memory ) + af_loader_init( AF_Loader loader, + AF_GlyphHints hints ) { FT_ZERO( loader ); - af_glyph_hints_init( &loader->hints, memory ); + loader->hints = hints; #ifdef FT_DEBUG_AUTOFIT - _af_debug_hints = &loader->hints; + _af_debug_hints = loader->hints; #endif } @@ -73,10 +73,9 @@ FT_LOCAL_DEF( void ) af_loader_done( AF_Loader loader ) { - af_glyph_hints_done( &loader->hints ); - loader->face = NULL; loader->globals = NULL; + loader->hints = NULL; #ifdef FT_DEBUG_AUTOFIT _af_debug_hints = NULL; @@ -99,7 +98,7 @@ FT_Error error; FT_Face face = loader->face; AF_StyleMetrics metrics = loader->metrics; - AF_GlyphHints hints = &loader->hints; + AF_GlyphHints hints = loader->hints; FT_GlyphSlot slot = face->glyph; FT_Slot_Internal internal = slot->internal; FT_GlyphLoader gloader = internal->loader; @@ -398,7 +397,7 @@ if ( writing_system_class->style_hints_init ) { - error = writing_system_class->style_hints_init( &loader->hints, + error = writing_system_class->style_hints_init( loader->hints, metrics ); if ( error ) goto Exit; diff --git a/src/autofit/afloader.h b/src/autofit/afloader.h index 3005d00..b7eff53 100644 --- a/src/autofit/afloader.h +++ b/src/autofit/afloader.h @@ -41,7 +41,7 @@ FT_BEGIN_HEADER AF_FaceGlobals globals; /* current glyph data */ - AF_GlyphHintsRec hints; + AF_GlyphHints hints; AF_StyleMetrics metrics; FT_Bool transformed; FT_Matrix trans_matrix; @@ -54,8 +54,8 @@ FT_BEGIN_HEADER FT_LOCAL( void ) - af_loader_init( AF_Loader loader, - FT_Memory memory ); + af_loader_init( AF_Loader loader, + AF_GlyphHints hints ); FT_LOCAL( FT_Error ) diff --git a/src/autofit/afmodule.c b/src/autofit/afmodule.c index 1eec5bb..24e0228 100644 --- a/src/autofit/afmodule.c +++ b/src/autofit/afmodule.c @@ -271,18 +271,23 @@ FT_UInt glyph_index, FT_Int32 load_flags ) { - FT_Error error = FT_Err_Ok; - AF_LoaderRec loader[1]; + FT_Error error = FT_Err_Ok; + FT_Memory memory = module->root.library->memory; + + AF_GlyphHintsRec hints[1]; + AF_LoaderRec loader[1]; FT_UNUSED( size ); - af_loader_init( loader, module->root.library->memory ); + af_glyph_hints_init( hints, memory ); + af_loader_init( loader, hints ); error = af_loader_load_glyph( loader, module, slot->face, glyph_index, load_flags ); af_loader_done( loader ); + af_glyph_hints_done( hints ); return error; } -- 2.2.2 From 6f16b10019d7699aff4d5bbc64999a5fd1ce7457 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 19:26:49 +0100 Subject: [PATCH] [autofit] Add embedded arrays for points and contours. This avoids at least two malloc calls for typical glyphs. * src/autofit/afhints.h (AF_POINTS_EMBEDDED, AF_CONTOURS_EMBEDDED): New macros. (AF_GlyphHintsRec): Add two arrays for contours and points. * src/autofit/afhints.c (af_glyph_hints_init, af_glyph_hints_done): Updated. (af_glyph_hints_reload): Only allocate data if number of contours or points exceeds given threshold values. --- ChangeLog | 15 +++++++++++++++ src/autofit/afhints.c | 27 +++++++++++++++++++++------ src/autofit/afhints.h | 11 +++++++++++ 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index d2afb85..0ee008e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,20 @@ 2015-01-14 Behdad Esfahbod + [autofit] Add embedded arrays for points and contours. + + This avoids at least two malloc calls for typical glyphs. + + * src/autofit/afhints.h (AF_POINTS_EMBEDDED, AF_CONTOURS_EMBEDDED): + New macros. + (AF_GlyphHintsRec): Add two arrays for contours and points. + + * src/autofit/afhints.c (af_glyph_hints_init, af_glyph_hints_done): + Updated. + (af_glyph_hints_reload): Only allocate data if number of contours or + points exceeds given threshold values. + +2015-01-14 Behdad Esfahbod + [autofit] Allocate hints object on the stack. This avoids one malloc per load. diff --git a/src/autofit/afhints.c b/src/autofit/afhints.c index f3cc50f..32e445b 100644 --- a/src/autofit/afhints.c +++ b/src/autofit/afhints.c @@ -488,7 +488,8 @@ af_glyph_hints_init( AF_GlyphHints hints, FT_Memory memory ) { - FT_ZERO( hints ); + /* no need to initialize the embedded items */ + FT_MEM_ZERO( hints, sizeof ( *hints ) - sizeof ( hints->embedded ) ); hints->memory = memory; } @@ -521,13 +522,15 @@ FT_FREE( axis->edges ); } - FT_FREE( hints->contours ); + if ( hints->contours != hints->embedded.contours ) + FT_FREE( hints->contours ); hints->max_contours = 0; hints->num_contours = 0; - FT_FREE( hints->points ); - hints->num_points = 0; + if ( hints->points != hints->embedded.points ) + FT_FREE( hints->points ); hints->max_points = 0; + hints->num_points = 0; hints->memory = NULL; } @@ -572,8 +575,14 @@ /* first of all, reallocate the contours array if necessary */ new_max = (FT_UInt)outline->n_contours; old_max = hints->max_contours; - if ( new_max > old_max ) + + if ( new_max <= AF_CONTOURS_EMBEDDED ) + hints->contours = hints->embedded.contours; + else if ( new_max > old_max ) { + if ( hints->contours == hints->embedded.contours ) + hints->contours = NULL; + new_max = ( new_max + 3 ) & ~3; /* round up to a multiple of 4 */ if ( FT_RENEW_ARRAY( hints->contours, old_max, new_max ) ) @@ -589,8 +598,14 @@ */ new_max = (FT_UInt)( outline->n_points + 2 ); old_max = hints->max_points; - if ( new_max > old_max ) + + if ( new_max <= AF_POINTS_EMBEDDED ) + hints->points = hints->embedded.points; + else if ( new_max > old_max ) { + if ( hints->points == hints->embedded.points ) + hints->points = NULL; + new_max = ( new_max + 2 + 7 ) & ~7; /* round up to a multiple of 8 */ if ( FT_RENEW_ARRAY( hints->points, old_max, new_max ) ) diff --git a/src/autofit/afhints.h b/src/autofit/afhints.h index 92101de..01e9d70 100644 --- a/src/autofit/afhints.h +++ b/src/autofit/afhints.h @@ -324,6 +324,9 @@ FT_BEGIN_HEADER } AF_AxisHintsRec, *AF_AxisHints; +#define AF_POINTS_EMBEDDED 96 /* number of embedded points */ +#define AF_CONTOURS_EMBEDDED 8 /* number of embedded contours */ + typedef struct AF_GlyphHintsRec_ { FT_Memory memory; @@ -352,6 +355,14 @@ FT_BEGIN_HEADER FT_Pos xmin_delta; /* used for warping */ FT_Pos xmax_delta; + /* Two arrays to avoid allocation penalty. */ + /* The `embedded' structure must be the last element! */ + struct + { + AF_Point contours[AF_CONTOURS_EMBEDDED]; + AF_PointRec points[AF_POINTS_EMBEDDED]; + } embedded; + } AF_GlyphHintsRec; -- 2.2.2 From 56ddafa01ce251d2f1f3adde3b0f72dd8ff7a405 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 19:36:02 +0100 Subject: [PATCH] [autofit] Add embedded array of segments and edges. Avoids multiple mallocs per typical glyphs. With this and recent changes to avoid mallocs, the thread-safe stack-based loader is now as fast as the previous model that had one cached singleton. * src/autofit/afhints.h (AF_SEGMENTS_EMBEDDED, AF_EDGES_EMBEDDED): New macros. (AF_AxisHintsRec): Add two arrays for segments and edges. * src/autofit/afhints.c (af_axis_hints_new_segment): Only allocate data if number of segments exceeds given threshold value. (af_axis_hints_new_edge): Only allocate data if number of edges exceeds given threshold value. (af_glyph_hints_done): Updated. --- ChangeLog | 20 +++++++++++++++++++ src/autofit/afhints.c | 54 +++++++++++++++++++++++++++++++++++++++++++-------- src/autofit/afhints.h | 10 ++++++++++ 3 files changed, 76 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0ee008e..6eaa010 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,25 @@ 2015-01-14 Behdad Esfahbod + [autofit] Add embedded array of segments and edges. + + Avoids multiple mallocs per typical glyphs. + + With this and recent changes to avoid mallocs, the thread-safe + stack-based loader is now as fast as the previous model that had one + cached singleton. + + * src/autofit/afhints.h (AF_SEGMENTS_EMBEDDED, AF_EDGES_EMBEDDED): + New macros. + (AF_AxisHintsRec): Add two arrays for segments and edges. + + * src/autofit/afhints.c (af_axis_hints_new_segment): Only allocate + data if number of segments exceeds given threshold value. + (af_axis_hints_new_edge): Only allocate data if number of edges + exceeds given threshold value. + (af_glyph_hints_done): Updated. + +2015-01-14 Behdad Esfahbod + [autofit] Add embedded arrays for points and contours. This avoids at least two malloc calls for typical glyphs. diff --git a/src/autofit/afhints.c b/src/autofit/afhints.c index 32e445b..eb3b4ff 100644 --- a/src/autofit/afhints.c +++ b/src/autofit/afhints.c @@ -43,7 +43,15 @@ AF_Segment segment = NULL; - if ( axis->num_segments >= axis->max_segments ) + if ( axis->num_segments < AF_SEGMENTS_EMBEDDED ) + { + if ( axis->segments == NULL ) + { + axis->segments = axis->embedded.segments; + axis->max_segments = AF_SEGMENTS_EMBEDDED; + } + } + else if ( axis->num_segments >= axis->max_segments ) { FT_Int old_max = axis->max_segments; FT_Int new_max = old_max; @@ -60,8 +68,18 @@ if ( new_max < old_max || new_max > big_max ) new_max = big_max; - if ( FT_RENEW_ARRAY( axis->segments, old_max, new_max ) ) - goto Exit; + if ( axis->segments == axis->embedded.segments ) + { + if ( FT_NEW_ARRAY( axis->segments, new_max ) ) + goto Exit; + ft_memcpy( axis->segments, axis->embedded.segments, + sizeof ( axis->embedded.segments ) ); + } + else + { + if ( FT_RENEW_ARRAY( axis->segments, old_max, new_max ) ) + goto Exit; + } axis->max_segments = new_max; } @@ -89,7 +107,15 @@ AF_Edge edges; - if ( axis->num_edges >= axis->max_edges ) + if ( axis->num_edges < AF_EDGES_EMBEDDED ) + { + if ( axis->edges == NULL ) + { + axis->edges = axis->embedded.edges; + axis->max_edges = AF_EDGES_EMBEDDED; + } + } + else if ( axis->num_edges >= axis->max_edges ) { FT_Int old_max = axis->max_edges; FT_Int new_max = old_max; @@ -106,8 +132,18 @@ if ( new_max < old_max || new_max > big_max ) new_max = big_max; - if ( FT_RENEW_ARRAY( axis->edges, old_max, new_max ) ) - goto Exit; + if ( axis->edges == axis->embedded.edges ) + { + if ( FT_NEW_ARRAY( axis->edges, new_max ) ) + goto Exit; + ft_memcpy( axis->edges, axis->embedded.edges, + sizeof ( axis->embedded.edges ) ); + } + else + { + if ( FT_RENEW_ARRAY( axis->edges, old_max, new_max ) ) + goto Exit; + } axis->max_edges = new_max; } @@ -515,11 +551,13 @@ axis->num_segments = 0; axis->max_segments = 0; - FT_FREE( axis->segments ); + if ( axis->segments != axis->embedded.segments ) + FT_FREE( axis->segments ); axis->num_edges = 0; axis->max_edges = 0; - FT_FREE( axis->edges ); + if ( axis->edges != axis->embedded.edges ) + FT_FREE( axis->edges ); } if ( hints->contours != hints->embedded.contours ) diff --git a/src/autofit/afhints.h b/src/autofit/afhints.h index 01e9d70..4796466 100644 --- a/src/autofit/afhints.h +++ b/src/autofit/afhints.h @@ -305,6 +305,8 @@ FT_BEGIN_HEADER } AF_EdgeRec; +#define AF_SEGMENTS_EMBEDDED 18 /* number of embedded segments */ +#define AF_EDGES_EMBEDDED 12 /* number of embedded edges */ typedef struct AF_AxisHintsRec_ { @@ -321,6 +323,14 @@ FT_BEGIN_HEADER AF_Direction major_dir; /* either vertical or horizontal */ + /* two arrays to avoid allocation penalty */ + struct + { + AF_SegmentRec segments[AF_SEGMENTS_EMBEDDED]; + AF_EdgeRec edges[AF_EDGES_EMBEDDED]; + } embedded; + + } AF_AxisHintsRec, *AF_AxisHints; -- 2.2.2 From 48c86628deafc87a23a1dc92d3a073fe30b1f1bb Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 14 Jan 2015 19:38:36 +0100 Subject: [PATCH] * src/autofit/afmodule.c (af_autofitter_done): Fix compiler warning. --- ChangeLog | 4 ++++ src/autofit/afmodule.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 6eaa010..0ae7f74 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2015-01-14 Behdad Esfahbod + * src/autofit/afmodule.c (af_autofitter_done): Fix compiler warning. + +2015-01-14 Behdad Esfahbod + [autofit] Add embedded array of segments and edges. Avoids multiple mallocs per typical glyphs. diff --git a/src/autofit/afmodule.c b/src/autofit/afmodule.c index 24e0228..6ed8b02 100644 --- a/src/autofit/afmodule.c +++ b/src/autofit/afmodule.c @@ -260,7 +260,7 @@ FT_CALLBACK_DEF( void ) af_autofitter_done( FT_Module ft_module ) /* AF_Module */ { - AF_Module module = (AF_Module)ft_module; + FT_UNUSED( ft_module ); } -- 2.2.2 From 4eff854c27728aa21751af2c4f3c5f0afe83ebd1 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Wed, 14 Jan 2015 20:06:19 +0100 Subject: [PATCH] * docs/CHANGES: Updated, using a description from Behdad. --- ChangeLog | 4 ++++ docs/CHANGES | 25 +++++++++++++++++++++++++ include/freetype.h | 19 +++++++++++++++---- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0ae7f74..f68af52 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-01-14 Werner Lemberg + + * docs/CHANGES: Updated, using a description from Behdad. + 2015-01-14 Behdad Esfahbod * src/autofit/afmodule.c (af_autofitter_done): Fix compiler warning. diff --git a/docs/CHANGES b/docs/CHANGES index bbc3110..1d2d339 100644 --- a/docs/CHANGES +++ b/docs/CHANGES @@ -1,4 +1,29 @@ +CHANGES BETWEEN 2.5.5 and 2.5.6 + + II. IMPORTANT CHANGES + + - Behdad Esfahbod contributed code for improved thread-safety, + which results in the following model. + + * An `FT_Face' object can only be safely used from one thread at + a time. + + * An `FT_Library' object can now be used without modification + from multiple threads at the same time. + + * `FT_Face' creation and destruction with the same `FT_Library' + object can only be done from one thread at a time. + + One can use a single `FT_Library' object across threads as long + as a mutex lock is used around `FT_New_Face' and `FT_Done_Face'. + Any calls to `FT_Load_Glyph' and similar API are safe and do not + need the lock to be held as long as the same `FT_Face' is not + used from multiple threads at the same time. + + +====================================================================== + CHANGES BETWEEN 2.5.4 and 2.5.5 I. IMPORTANT BUG FIXES diff --git a/include/freetype.h b/include/freetype.h index 27fd44b..1022719 100644 --- a/include/freetype.h +++ b/include/freetype.h @@ -394,8 +394,11 @@ FT_BEGIN_HEADER /* It also embeds a memory manager (see @FT_Memory), as well as a */ /* scan-line converter object (see @FT_Raster). */ /* */ - /* In multi-threaded applications, make sure that the same FT_Library */ - /* object or any of its children doesn't get accessed in parallel. */ + /* In multi-threaded applications it is easiest to use one */ + /* `FT_Library' object per thread. In case this is too cumbersome, */ + /* a single `FT_Library' object across threads is possible also */ + /* (since FreeType version 2.5.6), as long as a mutex lock is used */ + /* around @FT_New_Face and @FT_Done_Face. */ /* */ /* */ /* Library objects are normally created by @FT_Init_FreeType, and */ @@ -477,6 +480,14 @@ FT_BEGIN_HEADER /* */ /* Use @FT_Done_Face to destroy it (along with its slot and sizes). */ /* */ + /* An `FT_Face' object can only be safely used from one thread at a */ + /* time. Similarly, creation and destruction of `FT_Face' with the */ + /* same @FT_Library object can only be done from one thread at a */ + /* time. On the other hand, functions like @FT_Load_Glyph and its */ + /* siblings are thread-safe and do not need the lock to be held as */ + /* long as the same `FT_Face' object is not used from multiple */ + /* threads at the same time. */ + /* */ /* */ /* See @FT_FaceRec for the publicly accessible fields of a given face */ /* object. */ @@ -1769,8 +1780,8 @@ FT_BEGIN_HEADER /* use @FT_New_Library instead, followed by a call to */ /* @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module). */ /* */ - /* For multi-threading applications each thread should have its own */ - /* FT_Library object. */ + /* See the documentation of @FT_Library and @FT_Face for */ + /* multi-threading issues. */ /* */ /* If you need reference-counting (cf. @FT_Reference_Library), use */ /* @FT_New_Library and @FT_Done_Library. */ -- 2.2.2 From f796cf6c6bfead0f527cd79329f26d4ec7ab43d4 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sat, 17 Jan 2015 20:11:10 +0100 Subject: [PATCH] Normalize copyright notice format. --- docs/INSTALL | 4 ++-- docs/INSTALL.CROSS | 4 ++-- include/ftcid.h | 3 ++- include/internal/services/svcid.h | 3 ++- include/internal/services/svttglyf.h | 3 ++- src/base/ftcid.c | 3 ++- src/base/ftpatent.c | 3 ++- src/gxvalid/gxvalid.c | 3 ++- src/gxvalid/gxvalid.h | 3 ++- src/gxvalid/gxvbsln.c | 3 ++- src/gxvalid/gxvcommn.c | 4 ++-- src/gxvalid/gxvcommn.h | 4 ++-- src/gxvalid/gxverror.h | 4 ++-- src/gxvalid/gxvfeat.h | 3 ++- src/gxvalid/gxvfgen.c | 3 ++- src/gxvalid/gxvjust.c | 3 ++- src/gxvalid/gxvkern.c | 4 ++-- src/gxvalid/gxvlcar.c | 3 ++- src/gxvalid/gxvmod.c | 4 ++-- src/gxvalid/gxvmod.h | 3 ++- src/gxvalid/gxvmort.c | 3 ++- src/gxvalid/gxvmort.h | 3 ++- src/gxvalid/gxvmort0.c | 3 ++- src/gxvalid/gxvmort1.c | 3 ++- src/gxvalid/gxvmort2.c | 3 ++- src/gxvalid/gxvmort4.c | 3 ++- src/gxvalid/gxvmort5.c | 3 ++- src/gxvalid/gxvmorx.h | 3 ++- src/gxvalid/gxvmorx0.c | 3 ++- src/gxvalid/gxvmorx1.c | 3 ++- src/gxvalid/gxvmorx2.c | 3 ++- src/gxvalid/gxvmorx4.c | 3 ++- src/gxvalid/gxvmorx5.c | 3 ++- src/gxvalid/gxvopbd.c | 3 ++- src/gxvalid/gxvprop.c | 3 ++- src/gxvalid/gxvtrak.c | 3 ++- src/gxvalid/module.mk | 6 +++--- src/gxvalid/rules.mk | 3 ++- src/lzw/ftzopen.c | 3 ++- src/lzw/ftzopen.h | 3 ++- src/sfnt/pngshim.c | 3 ++- src/sfnt/pngshim.h | 3 ++- src/truetype/ttgload.c | 2 +- src/truetype/ttinterp.c | 4 ++-- src/truetype/ttobjs.c | 2 +- src/type42/t42drivr.h | 3 ++- src/type42/t42objs.c | 4 ++-- src/type42/t42objs.h | 3 ++- src/type42/t42parse.h | 3 ++- src/type42/t42types.h | 3 ++- 50 files changed, 99 insertions(+), 61 deletions(-) diff --git a/docs/INSTALL b/docs/INSTALL index 456b76d..5bf8d65 100644 --- a/docs/INSTALL +++ b/docs/INSTALL @@ -75,8 +75,8 @@ II. Custom builds of the library ---------------------------------------------------------------------- -Copyright 2000-2008, 2010-2011, 2013 -by David Turner, Robert Wilhelm, and Werner Lemberg. +Copyright 2000-2008, 2010-2011, 2013 by +David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, modified, and distributed under the terms of the FreeType project diff --git a/docs/INSTALL.CROSS b/docs/INSTALL.CROSS index d372adc..8745613 100644 --- a/docs/INSTALL.CROSS +++ b/docs/INSTALL.CROSS @@ -163,8 +163,8 @@ procedure. ---------------------------------------------------------------------- -Copyright 2006, 2008, 2012, 2014 by suzuki toshiya -David Turner, Robert Wilhelm, and Werner Lemberg. +Copyright 2006, 2008, 2012, 2014 by +suzuki toshiya, David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/include/ftcid.h b/include/ftcid.h index 17550d8..01b4832 100644 --- a/include/ftcid.h +++ b/include/ftcid.h @@ -4,7 +4,8 @@ /* */ /* FreeType API for accessing CID font information (specification). */ /* */ -/* Copyright 2007, 2009 by Dereg Clegg, Michael Toftdal. */ +/* Copyright 2007, 2009 by */ +/* Dereg Clegg and Michael Toftdal. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/include/internal/services/svcid.h b/include/internal/services/svcid.h index 6be3f93..e0944d6 100644 --- a/include/internal/services/svcid.h +++ b/include/internal/services/svcid.h @@ -4,7 +4,8 @@ /* */ /* The FreeType CID font services (specification). */ /* */ -/* Copyright 2007, 2009, 2012 by Derek Clegg, Michael Toftdal. */ +/* Copyright 2007, 2009, 2012 by */ +/* Derek Clegg and Michael Toftdal. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/include/internal/services/svttglyf.h b/include/internal/services/svttglyf.h index 369eb84..3ba8a1f 100644 --- a/include/internal/services/svttglyf.h +++ b/include/internal/services/svttglyf.h @@ -4,7 +4,8 @@ /* */ /* The FreeType TrueType glyph service. */ /* */ -/* Copyright 2007, 2009, 2012 by David Turner. */ +/* Copyright 2007, 2009, 2012 by */ +/* David Turner. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/src/base/ftcid.c b/src/base/ftcid.c index 741879d..747039c 100644 --- a/src/base/ftcid.c +++ b/src/base/ftcid.c @@ -4,7 +4,8 @@ /* */ /* FreeType API for accessing CID font information. */ /* */ -/* Copyright 2007, 2009, 2013 by Derek Clegg, Michael Toftdal. */ +/* Copyright 2007, 2009, 2013 by */ +/* Derek Clegg and Michael Toftdal. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/src/base/ftpatent.c b/src/base/ftpatent.c index 82b42f0..dc2470d 100644 --- a/src/base/ftpatent.c +++ b/src/base/ftpatent.c @@ -5,7 +5,8 @@ /* FreeType API for checking patented TrueType bytecode instructions */ /* (body). */ /* */ -/* Copyright 2007, 2008, 2010 by David Turner. */ +/* Copyright 2007, 2008, 2010 by */ +/* David Turner. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/src/gxvalid/gxvalid.c b/src/gxvalid/gxvalid.c index bc36e67..f066355 100644 --- a/src/gxvalid/gxvalid.c +++ b/src/gxvalid/gxvalid.c @@ -4,7 +4,8 @@ /* */ /* FreeType validator for TrueTypeGX/AAT tables (body only). */ /* */ -/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005 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, */ diff --git a/src/gxvalid/gxvalid.h b/src/gxvalid/gxvalid.h index 27be9ec..3ed646c 100644 --- a/src/gxvalid/gxvalid.h +++ b/src/gxvalid/gxvalid.h @@ -4,7 +4,8 @@ /* */ /* TrueTyeeGX/AAT table validation (specification only). */ /* */ -/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005 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, */ diff --git a/src/gxvalid/gxvbsln.c b/src/gxvalid/gxvbsln.c index d165118..03ef6cc 100644 --- a/src/gxvalid/gxvbsln.c +++ b/src/gxvalid/gxvbsln.c @@ -4,7 +4,8 @@ /* */ /* TrueTypeGX/AAT bsln table validation (body). */ /* */ -/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004, 2005 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, */ diff --git a/src/gxvalid/gxvcommn.c b/src/gxvalid/gxvcommn.c index 8e72a72..c6cdb9e 100644 --- a/src/gxvalid/gxvcommn.c +++ b/src/gxvalid/gxvcommn.c @@ -4,8 +4,8 @@ /* */ /* TrueTypeGX/AAT common tables validation (body). */ /* */ -/* Copyright 2004, 2005, 2009, 2010, 2013 */ -/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004, 2005, 2009, 2010, 2013 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, */ diff --git a/src/gxvalid/gxvcommn.h b/src/gxvalid/gxvcommn.h index f114345..6594165 100644 --- a/src/gxvalid/gxvcommn.h +++ b/src/gxvalid/gxvcommn.h @@ -4,8 +4,8 @@ /* */ /* TrueTypeGX/AAT common tables validation (specification). */ /* */ -/* Copyright 2004, 2005, 2012, 2014 */ -/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004, 2005, 2012, 2014 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, */ diff --git a/src/gxvalid/gxverror.h b/src/gxvalid/gxverror.h index c573b72..d33de4a 100644 --- a/src/gxvalid/gxverror.h +++ b/src/gxvalid/gxverror.h @@ -4,8 +4,8 @@ /* */ /* TrueTypeGX/AAT validation module error codes (specification only). */ /* */ -/* Copyright 2004, 2005, 2012-2013 */ -/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004, 2005, 2012-2013 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, */ diff --git a/src/gxvalid/gxvfeat.h b/src/gxvalid/gxvfeat.h index 049d23a..636fa66 100644 --- a/src/gxvalid/gxvfeat.h +++ b/src/gxvalid/gxvfeat.h @@ -4,7 +4,8 @@ /* */ /* TrueTypeGX/AAT feat table validation (specification). */ /* */ -/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004, 2005 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, */ diff --git a/src/gxvalid/gxvfgen.c b/src/gxvalid/gxvfgen.c index e48778a..06e3f9c 100644 --- a/src/gxvalid/gxvfgen.c +++ b/src/gxvalid/gxvfgen.c @@ -5,7 +5,8 @@ /* Generate feature registry data for gxv `feat' validator. */ /* This program is derived from gxfeatreg.c in gxlayout. */ /* */ -/* Copyright 2004, 2005, 2006 by Masatake YAMATO and Redhat K.K. */ +/* Copyright 2004, 2005, 2006 by */ +/* Masatake YAMATO and Redhat K.K. */ /* */ /* This file may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/src/gxvalid/gxvjust.c b/src/gxvalid/gxvjust.c index 24c26a5..9610697 100644 --- a/src/gxvalid/gxvjust.c +++ b/src/gxvalid/gxvjust.c @@ -4,7 +4,8 @@ /* */ /* TrueTypeGX/AAT just table validation (body). */ /* */ -/* Copyright 2005, 2014 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005, 2014 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, */ diff --git a/src/gxvalid/gxvkern.c b/src/gxvalid/gxvkern.c index 787e3db..c346619 100644 --- a/src/gxvalid/gxvkern.c +++ b/src/gxvalid/gxvkern.c @@ -4,8 +4,8 @@ /* */ /* TrueTypeGX/AAT kern table validation (body). */ /* */ -/* Copyright 2004-2007, 2013 */ -/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004-2007, 2013 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, */ diff --git a/src/gxvalid/gxvlcar.c b/src/gxvalid/gxvlcar.c index 48308b0..c0542e6 100644 --- a/src/gxvalid/gxvlcar.c +++ b/src/gxvalid/gxvlcar.c @@ -4,7 +4,8 @@ /* */ /* TrueTypeGX/AAT lcar table validation (body). */ /* */ -/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004, 2005 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, */ diff --git a/src/gxvalid/gxvmod.c b/src/gxvalid/gxvmod.c index 278d476..19865c0 100644 --- a/src/gxvalid/gxvmod.c +++ b/src/gxvalid/gxvmod.c @@ -4,8 +4,8 @@ /* */ /* FreeType's TrueTypeGX/AAT validation module implementation (body). */ /* */ -/* Copyright 2004-2006, 2013 */ -/* by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004-2006, 2013 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, */ diff --git a/src/gxvalid/gxvmod.h b/src/gxvalid/gxvmod.h index 22732ba..6f303a1 100644 --- a/src/gxvalid/gxvmod.h +++ b/src/gxvalid/gxvmod.h @@ -5,7 +5,8 @@ /* FreeType's TrueTypeGX/AAT validation module implementation */ /* (specification). */ /* */ -/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004, 2005 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, */ diff --git a/src/gxvalid/gxvmort.c b/src/gxvalid/gxvmort.c index 55ff5a8..52bfade 100644 --- a/src/gxvalid/gxvmort.c +++ b/src/gxvalid/gxvmort.c @@ -4,7 +4,8 @@ /* */ /* TrueTypeGX/AAT mort table validation (body). */ /* */ -/* Copyright 2005, 2013 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005, 2013 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, */ diff --git a/src/gxvalid/gxvmort.h b/src/gxvalid/gxvmort.h index 8e62e52..9bc4a13 100644 --- a/src/gxvalid/gxvmort.h +++ b/src/gxvalid/gxvmort.h @@ -4,7 +4,8 @@ /* */ /* TrueTypeGX/AAT common definition for mort table (specification). */ /* */ -/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004, 2005 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, */ diff --git a/src/gxvalid/gxvmort0.c b/src/gxvalid/gxvmort0.c index f19016e..c66655e 100644 --- a/src/gxvalid/gxvmort0.c +++ b/src/gxvalid/gxvmort0.c @@ -5,7 +5,8 @@ /* TrueTypeGX/AAT mort table validation */ /* body for type0 (Indic Script Rearrangement) subtable. */ /* */ -/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005 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, */ diff --git a/src/gxvalid/gxvmort1.c b/src/gxvalid/gxvmort1.c index 0189504..902dd7a 100644 --- a/src/gxvalid/gxvmort1.c +++ b/src/gxvalid/gxvmort1.c @@ -5,7 +5,8 @@ /* TrueTypeGX/AAT mort table validation */ /* body for type1 (Contextual Substitution) subtable. */ /* */ -/* Copyright 2005, 2007 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005, 2007 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, */ diff --git a/src/gxvalid/gxvmort2.c b/src/gxvalid/gxvmort2.c index 099ffd4..0b0d423 100644 --- a/src/gxvalid/gxvmort2.c +++ b/src/gxvalid/gxvmort2.c @@ -5,7 +5,8 @@ /* TrueTypeGX/AAT mort table validation */ /* body for type2 (Ligature Substitution) subtable. */ /* */ -/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005 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, */ diff --git a/src/gxvalid/gxvmort4.c b/src/gxvalid/gxvmort4.c index 9e86af4..3189a63 100644 --- a/src/gxvalid/gxvmort4.c +++ b/src/gxvalid/gxvmort4.c @@ -5,7 +5,8 @@ /* TrueTypeGX/AAT mort table validation */ /* body for type4 (Non-Contextual Glyph Substitution) subtable. */ /* */ -/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005 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, */ diff --git a/src/gxvalid/gxvmort5.c b/src/gxvalid/gxvmort5.c index 9498b10..49eb44f 100644 --- a/src/gxvalid/gxvmort5.c +++ b/src/gxvalid/gxvmort5.c @@ -5,7 +5,8 @@ /* TrueTypeGX/AAT mort table validation */ /* body for type5 (Contextual Glyph Insertion) subtable. */ /* */ -/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005 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, */ diff --git a/src/gxvalid/gxvmorx.h b/src/gxvalid/gxvmorx.h index 9ed907a..be3334e 100644 --- a/src/gxvalid/gxvmorx.h +++ b/src/gxvalid/gxvmorx.h @@ -4,7 +4,8 @@ /* */ /* TrueTypeGX/AAT common definition for morx table (specification). */ /* */ -/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005 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, */ diff --git a/src/gxvalid/gxvmorx0.c b/src/gxvalid/gxvmorx0.c index db165f4..c42e732 100644 --- a/src/gxvalid/gxvmorx0.c +++ b/src/gxvalid/gxvmorx0.c @@ -5,7 +5,8 @@ /* TrueTypeGX/AAT morx table validation */ /* body for type0 (Indic Script Rearrangement) subtable. */ /* */ -/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005 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, */ diff --git a/src/gxvalid/gxvmorx1.c b/src/gxvalid/gxvmorx1.c index 49f53d1..039f500 100644 --- a/src/gxvalid/gxvmorx1.c +++ b/src/gxvalid/gxvmorx1.c @@ -5,7 +5,8 @@ /* TrueTypeGX/AAT morx table validation */ /* body for type1 (Contextual Substitution) subtable. */ /* */ -/* Copyright 2005, 2007 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005, 2007 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, */ diff --git a/src/gxvalid/gxvmorx2.c b/src/gxvalid/gxvmorx2.c index e44445d..94e2767 100644 --- a/src/gxvalid/gxvmorx2.c +++ b/src/gxvalid/gxvmorx2.c @@ -5,7 +5,8 @@ /* TrueTypeGX/AAT morx table validation */ /* body for type2 (Ligature Substitution) subtable. */ /* */ -/* Copyright 2005, 2013 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005, 2013 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, */ diff --git a/src/gxvalid/gxvmorx4.c b/src/gxvalid/gxvmorx4.c index 68ab678..f6de8b4 100644 --- a/src/gxvalid/gxvmorx4.c +++ b/src/gxvalid/gxvmorx4.c @@ -5,7 +5,8 @@ /* TrueTypeGX/AAT morx table validation */ /* body for "morx" type4 (Non-Contextual Glyph Substitution) subtable. */ /* */ -/* Copyright 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005 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, */ diff --git a/src/gxvalid/gxvmorx5.c b/src/gxvalid/gxvmorx5.c index 5e095dd..88ca59f 100644 --- a/src/gxvalid/gxvmorx5.c +++ b/src/gxvalid/gxvmorx5.c @@ -5,7 +5,8 @@ /* TrueTypeGX/AAT morx table validation */ /* body for type5 (Contextual Glyph Insertion) subtable. */ /* */ -/* Copyright 2005, 2007 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2005, 2007 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, */ diff --git a/src/gxvalid/gxvopbd.c b/src/gxvalid/gxvopbd.c index ab0cd72..34c48f4 100644 --- a/src/gxvalid/gxvopbd.c +++ b/src/gxvalid/gxvopbd.c @@ -4,7 +4,8 @@ /* */ /* TrueTypeGX/AAT opbd table validation (body). */ /* */ -/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004, 2005 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, */ diff --git a/src/gxvalid/gxvprop.c b/src/gxvalid/gxvprop.c index aa5c8ee..0bb7ace 100644 --- a/src/gxvalid/gxvprop.c +++ b/src/gxvalid/gxvprop.c @@ -4,7 +4,8 @@ /* */ /* TrueTypeGX/AAT prop table validation (body). */ /* */ -/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004, 2005 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, */ diff --git a/src/gxvalid/gxvtrak.c b/src/gxvalid/gxvtrak.c index 3ec1a56..2c8e1e1 100644 --- a/src/gxvalid/gxvtrak.c +++ b/src/gxvalid/gxvtrak.c @@ -4,7 +4,8 @@ /* */ /* TrueTypeGX/AAT trak table validation (body). */ /* */ -/* Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ +/* Copyright 2004, 2005 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, */ diff --git a/src/gxvalid/module.mk b/src/gxvalid/module.mk index 9fd098e..0d6b5d9 100644 --- a/src/gxvalid/module.mk +++ b/src/gxvalid/module.mk @@ -2,9 +2,9 @@ # FreeType 2 gxvalid module definition # -# Copyright 2004, 2005, 2006 -# by suzuki toshiya, Masatake YAMATO, Red Hat K.K., -# David Turner, Robert Wilhelm, and Werner Lemberg. +# 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, modified, # and distributed under the terms of the FreeType project license, diff --git a/src/gxvalid/rules.mk b/src/gxvalid/rules.mk index c4bd4c8..7d487b5 100644 --- a/src/gxvalid/rules.mk +++ b/src/gxvalid/rules.mk @@ -3,7 +3,8 @@ # -# Copyright 2004, 2005 by suzuki toshiya, Masatake YAMATO, Red Hat K.K., +# Copyright 2004, 2005 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, modified, diff --git a/src/lzw/ftzopen.c b/src/lzw/ftzopen.c index d7a6457..c020eeb 100644 --- a/src/lzw/ftzopen.c +++ b/src/lzw/ftzopen.c @@ -8,7 +8,8 @@ /* be used to parse compressed PCF fonts, as found with many X11 server */ /* distributions. */ /* */ -/* Copyright 2005-2007, 2009, 2011 by David Turner. */ +/* Copyright 2005-2007, 2009, 2011 by */ +/* David Turner. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/src/lzw/ftzopen.h b/src/lzw/ftzopen.h index cdc8fd7..e9cc792 100644 --- a/src/lzw/ftzopen.h +++ b/src/lzw/ftzopen.h @@ -8,7 +8,8 @@ /* be used to parse compressed PCF fonts, as found with many X11 server */ /* distributions. */ /* */ -/* Copyright 2005, 2006, 2007, 2008 by David Turner. */ +/* Copyright 2005, 2006, 2007, 2008 by */ +/* David Turner. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/src/sfnt/pngshim.c b/src/sfnt/pngshim.c index 9bfcc2a..fb7ce99 100644 --- a/src/sfnt/pngshim.c +++ b/src/sfnt/pngshim.c @@ -4,7 +4,8 @@ /* */ /* PNG Bitmap glyph support. */ /* */ -/* Copyright 2013, 2014 by Google, Inc. */ +/* Copyright 2013, 2014 by */ +/* Google, Inc. */ /* Written by Stuart Gill and Behdad Esfahbod. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/sfnt/pngshim.h b/src/sfnt/pngshim.h index dc9ecaf..0b8cff7 100644 --- a/src/sfnt/pngshim.h +++ b/src/sfnt/pngshim.h @@ -4,7 +4,8 @@ /* */ /* PNG Bitmap glyph support. */ /* */ -/* Copyright 2013 by Google, Inc. */ +/* Copyright 2013 by */ +/* Google, Inc. */ /* Written by Stuart Gill and Behdad Esfahbod. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c index c780275..537e979 100644 --- a/src/truetype/ttgload.c +++ b/src/truetype/ttgload.c @@ -4,7 +4,7 @@ /* */ /* TrueType Glyph Loader (body). */ /* */ -/* Copyright 1996-2014 */ +/* Copyright 1996-2014 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/truetype/ttinterp.c b/src/truetype/ttinterp.c index feaf8c7..8ac2974 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -4,8 +4,8 @@ /* */ /* TrueType bytecode interpreter (body). */ /* */ -/* Copyright 1996-2014 */ -/* by David Turner, Robert Wilhelm, and Werner Lemberg. */ +/* Copyright 1996-2014 by */ +/* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/src/truetype/ttobjs.c b/src/truetype/ttobjs.c index 8877c4d..82d95e1 100644 --- a/src/truetype/ttobjs.c +++ b/src/truetype/ttobjs.c @@ -4,7 +4,7 @@ /* */ /* Objects manager (body). */ /* */ -/* Copyright 1996-2013 */ +/* Copyright 1996-2013 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/type42/t42drivr.h b/src/type42/t42drivr.h index 9a1e97e..78ae2ab 100644 --- a/src/type42/t42drivr.h +++ b/src/type42/t42drivr.h @@ -4,7 +4,8 @@ /* */ /* High-level Type 42 driver interface (specification). */ /* */ -/* Copyright 2002 by Roberto Alameda. */ +/* Copyright 2002 by */ +/* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/src/type42/t42objs.c b/src/type42/t42objs.c index 915e81f..e86ca78 100644 --- a/src/type42/t42objs.c +++ b/src/type42/t42objs.c @@ -4,8 +4,8 @@ /* */ /* Type 42 objects manager (body). */ /* */ -/* Copyright 2002-2009, 2011, 2013 */ -/* by Roberto Alameda. */ +/* Copyright 2002-2009, 2011, 2013 by */ +/* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/src/type42/t42objs.h b/src/type42/t42objs.h index a93fa39..4c31ee8 100644 --- a/src/type42/t42objs.h +++ b/src/type42/t42objs.h @@ -4,7 +4,8 @@ /* */ /* Type 42 objects manager (specification). */ /* */ -/* Copyright 2002, 2003, 2006, 2007, 2011 by Roberto Alameda. */ +/* Copyright 2002, 2003, 2006, 2007, 2011 by */ +/* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/src/type42/t42parse.h b/src/type42/t42parse.h index f77ec4a..fa10edd 100644 --- a/src/type42/t42parse.h +++ b/src/type42/t42parse.h @@ -4,7 +4,8 @@ /* */ /* Type 42 font parser (specification). */ /* */ -/* Copyright 2002, 2003 by Roberto Alameda. */ +/* Copyright 2002, 2003 by */ +/* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ diff --git a/src/type42/t42types.h b/src/type42/t42types.h index c7c2db4..7c3b758 100644 --- a/src/type42/t42types.h +++ b/src/type42/t42types.h @@ -4,7 +4,8 @@ /* */ /* Type 42 font data types (specification only). */ /* */ -/* Copyright 2002, 2003, 2006, 2008 by Roberto Alameda. */ +/* Copyright 2002, 2003, 2006, 2008 by */ +/* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ /* modified, and distributed under the terms of the FreeType project */ -- 2.2.2 From 50be00d3b33fdf5628f38a9cd459c6e9804e4657 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sat, 17 Jan 2015 20:38:31 +0100 Subject: [PATCH] Add some tools to handle yearly copyright notice updates. We are now following the GNU guidelines: A new release automatically means that the copyright year of all affected files gets updated; it is no longer used to track years of modification changes. * src/tools/update-copyright-year: New Perl script. * src/tools/update-copyright: New shell script that calls `update-copyright-year' on all files. * src/tools/no-copyright: Exceptions that should not be handled by `update-copyright' --- ChangeLog | 14 +++++ src/tools/no-copyright | 62 ++++++++++++++++++ src/tools/update-copyright | 14 +++++ src/tools/update-copyright-year | 135 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 225 insertions(+) create mode 100644 src/tools/no-copyright create mode 100755 src/tools/update-copyright create mode 100755 src/tools/update-copyright-year diff --git a/ChangeLog b/ChangeLog index f68af52..1274f95 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2015-01-17 Werner Lemberg + + Add some tools to handle yearly copyright notice updates. + + We are now following the GNU guidelines: A new release automatically + means that the copyright year of all affected files gets updated; it + is no longer used to track years of modification changes. + + * src/tools/update-copyright-year: New Perl script. + * src/tools/update-copyright: New shell script that calls + `update-copyright-year' on all files. + * src/tools/no-copyright: Exceptions that should not be handled by + `update-copyright' + 2015-01-14 Werner Lemberg * docs/CHANGES: Updated, using a description from Behdad. diff --git a/src/tools/no-copyright b/src/tools/no-copyright new file mode 100644 index 0000000..464ece0 --- /dev/null +++ b/src/tools/no-copyright @@ -0,0 +1,62 @@ +# Files that don't get a copyright, or which are taken from elsewhere. +# +# All lines in this file are patterns, including the comment lines; this +# means that e.g. `FTL.TXT' matches all files that have this string in +# the file name (including the path relative to the current directory, +# always starting with `./'). +# +# Don't put empty lines into this file! +# +.gitignore +# +builds/unix/pkg.m4 +# +docs/FTL.TXT +docs/GPLv2.TXT +# +src/base/md5.c +src/base/md5.h +# +src/bdf/bdf.c +src/bdf/bdf.h +src/bdf/bdfdrivr.c +src/bdf/bdfdrivr.h +src/bdf/bdferror.h +src/bdf/bdflib.c +src/bdf/module.mk +src/bdf/README +src/bdf/rules.mk +README +# +src/pcf/module.mk +src/pcf/pcf.c +src/pcf/pcf.h +src/pcf/pcfdrivr.c +src/pcf/pcfdrivr.h +src/pcf/pcferror.h +src/pcf/pcfread.c +src/pcf/pcfread.h +src/pcf/pcfutil.c +src/pcf/pcfutil.h +src/pcf/README +src/pcf/rules.mk +# +src/gzip/adler32.c +src/gzip/infblock.c +src/gzip/infblock.h +src/gzip/infcodes.c +src/gzip/infcodes.h +src/gzip/inffixed.h +src/gzip/inflate.c +src/gzip/inftrees.c +src/gzip/inftrees.h +src/gzip/infutil.c +src/gzip/infutil.h +src/gzip/zconf.h +src/gzip/zlib.h +src/gzip/zutil.c +src/gzip/zutil.h +# +src/tools/ftrandom/ftrandom.c +# +# EOF diff --git a/src/tools/update-copyright b/src/tools/update-copyright new file mode 100755 index 0000000..81add0a --- /dev/null +++ b/src/tools/update-copyright @@ -0,0 +1,14 @@ +#!/bin/sh + +# Run the `update-copyright-year' script on all files in the git repository, +# taking care of exceptions stored in file `no-copyright'. + +topdir=`git rev-parse --show-toplevel` +toolsdir=$topdir/src/tools + +git ls-files $topdir \ +| sed 's|^|./|' \ +| grep -vFf $toolsdir/no-copyright \ +| xargs $toolsdir/update-copyright-year + +# EOF diff --git a/src/tools/update-copyright-year b/src/tools/update-copyright-year new file mode 100755 index 0000000..1077541 --- /dev/null +++ b/src/tools/update-copyright-year @@ -0,0 +1,135 @@ +eval '(exit $?0)' && eval 'exec perl -wS -i "$0" ${1+"$@"}' + & eval 'exec perl -wS -i "$0" $argv:q' + if 0; + +# Copyright 2015 by +# Werner Lemberg. +# +# This file is part of the FreeType project, and may only be used, modified, +# and distributed under the terms of the FreeType project license, +# LICENSE.TXT. By continuing to use, modify, or distribute this file you +# indicate that you have read the license and understand and accept it +# fully. + +# [Note: This script is expected to be called by the shell, which in turn +# calls perl automatically. The nifty start-up code above is based on +# gnulib's `update-copyright' script; it is a more portable replacement for +# the shebang, using the first `perl' program in the shell's path instead.] + +# Usage: +# +# update-copyright-year file1 [file2 ...] + + +# This script handles copyright entries like +# +# Copyright 2000 by +# foobar +# +# or +# +# /* Copyright 2000, 2001, 2004-2007 by */ +# /* foobar */ +# +# and replaces them uniformly with +# +# Copyright 2000-2015 +# foobar +# +# and +# +# /* Copyright 2000-2015 by */ +# /* foobar */ +# +# (assuming that the current year is 2015). As can be seen, the line length +# is retained if there is non-whitespace after the word `by' on the same +# line. + +use strict; + + +my (undef, undef, undef, + undef, undef, $year, + undef, undef, undef) = localtime(time); +$year += 1900; + +my $replaced = 0; + + +# Loop over all input files; option `-i' (issued at the very beginning of +# this script) makes perl edit them in-place. +while (<>) +{ + # Only handle the first copyright notice in a file. + if (!$replaced) + { + # First try: Search multiple copyright years. + s { + (?.*) + Copyright + (?\ +) + (?[12][0-9][0-9][0-9]) + (?.+) + (?[12][0-9][0-9][0-9]) + (?\ +) + by + (?\ *) + (?.*) + } + { + # Fill line to the same length (if appropriate); we skip the middle + # part but insert two spaces and `-'. + my $space = length($+{space1}) - 1 + + length($+{middle}) - 1 + + length($+{space2}) - 1 + + length($+{space3}); + + print "$+{begin}"; + print "Copyright\ $+{first}-$year\ by"; + print ' ' x $space if length($+{end}); + print "$+{end}\n"; + $replaced = 1; + }ex + || + # Second try: Search a single copyright year. + s { + (?.*) + Copyright + (?\ +) + (?[12][0-9][0-9][0-9]) + (?\ +) + by + (?\ *) + (?.*) + } + { + # Fill line to the same length (if appropriate); we insert two + # spaces, a `-', and the current year. + my $space = length($+{space1}) - 1 + + length($+{space2}) - 1 + + length($+{space3}) + - (length($year) + 1); + + print "$+{begin}"; + print "Copyright $+{first}-$year by"; + # If $space is negative this inserts nothing. + print ' ' x $space if length($+{end}); + print "$+{end}\n"; + $replaced = 1; + }ex + || + # Otherwise print line unaltered. + print; + } + else + { + print; + } +} +continue +{ + # Reset $replaced before processing the next file. + $replaced = 0 if eof; +} + +# EOF -- 2.2.2 From f57fc59e016217687362b6fbbc4842fab932175c Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sat, 17 Jan 2015 20:41:43 +0100 Subject: [PATCH] Run `src/tools/update-copyright'. --- CMakeLists.txt | 2 +- ChangeLog | 2 +- ChangeLog.20 | 2 +- ChangeLog.21 | 2 +- ChangeLog.22 | 2 +- ChangeLog.23 | 2 +- ChangeLog.24 | 2 +- Jamfile | 2 +- Jamrules | 2 +- Makefile | 2 +- autogen.sh | 2 +- builds/amiga/include/config/ftconfig.h | 2 +- builds/amiga/include/config/ftmodule.h | 2 +- builds/amiga/makefile | 2 +- builds/amiga/makefile.os4 | 2 +- builds/amiga/smakefile | 2 +- builds/amiga/src/base/ftdebug.c | 2 +- builds/amiga/src/base/ftsystem.c | 2 +- builds/ansi/ansi-def.mk | 2 +- builds/ansi/ansi.mk | 2 +- builds/beos/beos-def.mk | 2 +- builds/beos/beos.mk | 2 +- builds/beos/detect.mk | 2 +- builds/cmake/iOS.cmake | 2 +- builds/compiler/ansi-cc.mk | 2 +- builds/compiler/bcc-dev.mk | 2 +- builds/compiler/bcc.mk | 2 +- builds/compiler/emx.mk | 2 +- builds/compiler/gcc-dev.mk | 2 +- builds/compiler/gcc.mk | 2 +- builds/compiler/intelc.mk | 2 +- builds/compiler/unix-lcc.mk | 2 +- builds/compiler/visualage.mk | 2 +- builds/compiler/visualc.mk | 2 +- builds/compiler/watcom.mk | 2 +- builds/compiler/win-lcc.mk | 2 +- builds/detect.mk | 2 +- builds/dos/detect.mk | 2 +- builds/dos/dos-def.mk | 2 +- builds/dos/dos-emx.mk | 2 +- builds/dos/dos-gcc.mk | 2 +- builds/dos/dos-wat.mk | 2 +- builds/exports.mk | 2 +- builds/freetype.mk | 2 +- builds/link_dos.mk | 2 +- builds/link_std.mk | 2 +- builds/mac/ftmac.c | 2 +- builds/modules.mk | 2 +- builds/os2/detect.mk | 2 +- builds/os2/os2-def.mk | 2 +- builds/os2/os2-dev.mk | 2 +- builds/os2/os2-gcc.mk | 2 +- builds/symbian/bld.inf | 2 +- builds/symbian/freetype.mmp | 2 +- builds/toplevel.mk | 2 +- builds/unix/configure.raw | 2 +- builds/unix/detect.mk | 2 +- builds/unix/freetype-config.in | 2 +- builds/unix/freetype2.m4 | 2 +- builds/unix/ft-munmap.m4 | 2 +- builds/unix/ftconfig.in | 2 +- builds/unix/ftsystem.c | 2 +- builds/unix/install.mk | 2 +- builds/unix/unix-cc.in | 2 +- builds/unix/unix-def.in | 2 +- builds/unix/unix-dev.mk | 2 +- builds/unix/unix-lcc.mk | 2 +- builds/unix/unix.mk | 2 +- builds/unix/unixddef.mk | 2 +- builds/vms/ftconfig.h | 2 +- builds/vms/ftsystem.c | 2 +- builds/wince/ftdebug.c | 2 +- builds/windows/detect.mk | 2 +- builds/windows/ftdebug.c | 2 +- builds/windows/w32-bcc.mk | 2 +- builds/windows/w32-bccd.mk | 2 +- builds/windows/w32-dev.mk | 2 +- builds/windows/w32-gcc.mk | 2 +- builds/windows/w32-icc.mk | 2 +- builds/windows/w32-intl.mk | 2 +- builds/windows/w32-lcc.mk | 2 +- builds/windows/w32-mingw32.mk | 2 +- builds/windows/w32-vcc.mk | 2 +- builds/windows/w32-wat.mk | 2 +- builds/windows/win32-def.mk | 2 +- configure | 2 +- devel/ft2build.h | 2 +- devel/ftoption.h | 2 +- docs/CHANGES | 2 +- docs/CUSTOMIZE | 2 +- docs/DEBUG | 2 +- docs/INSTALL | 2 +- docs/INSTALL.ANY | 2 +- docs/INSTALL.CROSS | 2 +- docs/INSTALL.GNU | 2 +- docs/INSTALL.UNIX | 2 +- docs/INSTALL.VMS | 2 +- docs/TODO | 2 +- docs/VERSION.DLL | 2 +- docs/formats.txt | 2 +- docs/raster.txt | 2 +- docs/release | 2 +- include/config/ftconfig.h | 2 +- include/config/ftheader.h | 2 +- include/config/ftoption.h | 2 +- include/config/ftstdlib.h | 2 +- include/freetype.h | 2 +- include/ft2build.h | 2 +- include/ftadvanc.h | 2 +- include/ftautoh.h | 2 +- include/ftbbox.h | 2 +- include/ftbdf.h | 2 +- include/ftbitmap.h | 2 +- include/ftbzip2.h | 2 +- include/ftcache.h | 2 +- include/ftcffdrv.h | 2 +- include/ftcid.h | 2 +- include/fterrdef.h | 2 +- include/fterrors.h | 2 +- include/ftgasp.h | 2 +- include/ftglyph.h | 2 +- include/ftgxval.h | 2 +- include/ftgzip.h | 2 +- include/ftimage.h | 2 +- include/ftincrem.h | 2 +- include/ftlcdfil.h | 2 +- include/ftlist.h | 2 +- include/ftlzw.h | 2 +- include/ftmac.h | 2 +- include/ftmm.h | 2 +- include/ftmodapi.h | 2 +- include/ftmoderr.h | 2 +- include/ftotval.h | 2 +- include/ftoutln.h | 2 +- include/ftpfr.h | 2 +- include/ftrender.h | 2 +- include/ftsizes.h | 2 +- include/ftsnames.h | 2 +- include/ftstroke.h | 2 +- include/ftsynth.h | 2 +- include/ftsystem.h | 2 +- include/fttrigon.h | 2 +- include/ftttdrv.h | 2 +- include/fttypes.h | 2 +- include/ftwinfnt.h | 2 +- include/ftxf86.h | 2 +- include/internal/autohint.h | 2 +- include/internal/ftcalc.h | 2 +- include/internal/ftdebug.h | 2 +- include/internal/ftdriver.h | 2 +- include/internal/ftgloadr.h | 2 +- include/internal/ftmemory.h | 2 +- include/internal/ftobjs.h | 2 +- include/internal/ftpic.h | 2 +- include/internal/ftrfork.h | 2 +- include/internal/ftserv.h | 2 +- include/internal/ftstream.h | 2 +- include/internal/fttrace.h | 2 +- include/internal/ftvalid.h | 2 +- include/internal/internal.h | 2 +- include/internal/psaux.h | 2 +- include/internal/pshints.h | 2 +- include/internal/services/svbdf.h | 2 +- include/internal/services/svcid.h | 2 +- include/internal/services/svgldict.h | 2 +- include/internal/services/svgxval.h | 2 +- include/internal/services/svkern.h | 2 +- include/internal/services/svmm.h | 2 +- include/internal/services/svotval.h | 2 +- include/internal/services/svpfr.h | 2 +- include/internal/services/svpostnm.h | 2 +- include/internal/services/svprop.h | 2 +- include/internal/services/svpscmap.h | 2 +- include/internal/services/svpsinfo.h | 2 +- include/internal/services/svsfnt.h | 2 +- include/internal/services/svttcmap.h | 2 +- include/internal/services/svtteng.h | 2 +- include/internal/services/svttglyf.h | 2 +- include/internal/services/svwinfnt.h | 2 +- include/internal/services/svxf86nm.h | 2 +- include/internal/sfnt.h | 2 +- include/internal/t1types.h | 2 +- include/internal/tttypes.h | 2 +- include/t1tables.h | 2 +- include/ttnameid.h | 2 +- include/tttables.h | 2 +- include/tttags.h | 2 +- include/ttunpat.h | 2 +- modules.cfg | 2 +- src/Jamfile | 2 +- src/autofit/Jamfile | 2 +- src/autofit/afangles.c | 2 +- src/autofit/afblue.c | 2 +- src/autofit/afblue.cin | 2 +- src/autofit/afblue.dat | 2 +- src/autofit/afblue.h | 2 +- src/autofit/afblue.hin | 2 +- src/autofit/afcjk.c | 2 +- src/autofit/afcjk.h | 2 +- src/autofit/afcover.h | 2 +- src/autofit/afdummy.c | 2 +- src/autofit/afdummy.h | 2 +- src/autofit/aferrors.h | 2 +- src/autofit/afglobal.c | 2 +- src/autofit/afglobal.h | 2 +- src/autofit/afhints.c | 2 +- src/autofit/afhints.h | 2 +- src/autofit/afindic.c | 2 +- src/autofit/afindic.h | 2 +- src/autofit/aflatin.c | 2 +- src/autofit/aflatin.h | 2 +- src/autofit/aflatin2.c | 2 +- src/autofit/aflatin2.h | 2 +- src/autofit/afloader.c | 2 +- src/autofit/afloader.h | 2 +- src/autofit/afmodule.c | 2 +- src/autofit/afmodule.h | 2 +- src/autofit/afpic.c | 2 +- src/autofit/afpic.h | 2 +- src/autofit/afranges.c | 2 +- src/autofit/afranges.h | 2 +- src/autofit/afscript.h | 2 +- src/autofit/afstyles.h | 2 +- src/autofit/aftypes.h | 2 +- src/autofit/afwarp.c | 2 +- src/autofit/afwarp.h | 2 +- src/autofit/afwrtsys.h | 2 +- src/autofit/autofit.c | 2 +- src/autofit/hbshim.c | 2 +- src/autofit/hbshim.h | 2 +- src/autofit/module.mk | 2 +- src/autofit/rules.mk | 2 +- src/base/Jamfile | 2 +- src/base/basepic.c | 2 +- src/base/basepic.h | 2 +- src/base/ftadvanc.c | 2 +- src/base/ftapi.c | 2 +- src/base/ftbase.c | 2 +- src/base/ftbase.h | 2 +- src/base/ftbbox.c | 2 +- src/base/ftbdf.c | 2 +- src/base/ftbitmap.c | 2 +- src/base/ftcalc.c | 2 +- src/base/ftcid.c | 2 +- src/base/ftdbgmem.c | 2 +- src/base/ftdebug.c | 2 +- src/base/ftfstype.c | 2 +- src/base/ftgasp.c | 2 +- src/base/ftgloadr.c | 2 +- src/base/ftglyph.c | 2 +- src/base/ftgxval.c | 2 +- src/base/ftinit.c | 2 +- src/base/ftlcdfil.c | 2 +- src/base/ftmac.c | 2 +- src/base/ftmm.c | 2 +- src/base/ftobjs.c | 2 +- src/base/ftotval.c | 2 +- src/base/ftoutln.c | 2 +- src/base/ftpatent.c | 2 +- src/base/ftpfr.c | 2 +- src/base/ftpic.c | 2 +- src/base/ftrfork.c | 2 +- src/base/ftsnames.c | 2 +- src/base/ftstream.c | 2 +- src/base/ftstroke.c | 2 +- src/base/ftsynth.c | 2 +- src/base/ftsystem.c | 2 +- src/base/fttrigon.c | 2 +- src/base/fttype1.c | 2 +- src/base/ftutil.c | 2 +- src/base/ftwinfnt.c | 2 +- src/base/ftxf86.c | 2 +- src/base/rules.mk | 2 +- src/bdf/Jamfile | 2 +- src/bzip2/Jamfile | 2 +- src/bzip2/ftbzip2.c | 2 +- src/bzip2/rules.mk | 2 +- src/cache/Jamfile | 2 +- src/cache/ftcache.c | 2 +- src/cache/ftcbasic.c | 2 +- src/cache/ftccache.c | 2 +- src/cache/ftccache.h | 2 +- src/cache/ftccback.h | 2 +- src/cache/ftccmap.c | 2 +- src/cache/ftcerror.h | 2 +- src/cache/ftcglyph.c | 2 +- src/cache/ftcglyph.h | 2 +- src/cache/ftcimage.c | 2 +- src/cache/ftcimage.h | 2 +- src/cache/ftcmanag.c | 2 +- src/cache/ftcmanag.h | 2 +- src/cache/ftcmru.c | 2 +- src/cache/ftcmru.h | 2 +- src/cache/ftcsbits.c | 2 +- src/cache/ftcsbits.h | 2 +- src/cache/rules.mk | 2 +- src/cff/Jamfile | 2 +- src/cff/cff.c | 2 +- src/cff/cffcmap.c | 2 +- src/cff/cffcmap.h | 2 +- src/cff/cffdrivr.c | 2 +- src/cff/cffdrivr.h | 2 +- src/cff/cfferrs.h | 2 +- src/cff/cffgload.c | 2 +- src/cff/cffgload.h | 2 +- src/cff/cffload.c | 2 +- src/cff/cffload.h | 2 +- src/cff/cffobjs.c | 2 +- src/cff/cffobjs.h | 2 +- src/cff/cffparse.c | 2 +- src/cff/cffparse.h | 2 +- src/cff/cffpic.c | 2 +- src/cff/cffpic.h | 2 +- src/cff/cfftoken.h | 2 +- src/cff/cfftypes.h | 2 +- src/cff/module.mk | 2 +- src/cff/rules.mk | 2 +- src/cid/Jamfile | 2 +- src/cid/ciderrs.h | 2 +- src/cid/cidgload.c | 2 +- src/cid/cidgload.h | 2 +- src/cid/cidload.c | 2 +- src/cid/cidload.h | 2 +- src/cid/cidobjs.c | 2 +- src/cid/cidobjs.h | 2 +- src/cid/cidparse.c | 2 +- src/cid/cidparse.h | 2 +- src/cid/cidriver.c | 2 +- src/cid/cidriver.h | 2 +- src/cid/cidtoken.h | 2 +- src/cid/module.mk | 2 +- src/cid/rules.mk | 2 +- src/cid/type1cid.c | 2 +- src/gxvalid/Jamfile | 2 +- src/gxvalid/gxvalid.c | 2 +- src/gxvalid/gxvalid.h | 2 +- src/gxvalid/gxvbsln.c | 2 +- src/gxvalid/gxvcommn.c | 2 +- src/gxvalid/gxvcommn.h | 2 +- src/gxvalid/gxverror.h | 2 +- src/gxvalid/gxvfeat.c | 2 +- src/gxvalid/gxvfeat.h | 2 +- src/gxvalid/gxvfgen.c | 2 +- src/gxvalid/gxvjust.c | 2 +- src/gxvalid/gxvkern.c | 2 +- src/gxvalid/gxvlcar.c | 2 +- src/gxvalid/gxvmod.c | 2 +- src/gxvalid/gxvmod.h | 2 +- src/gxvalid/gxvmort.c | 2 +- src/gxvalid/gxvmort.h | 2 +- src/gxvalid/gxvmort0.c | 2 +- src/gxvalid/gxvmort1.c | 2 +- src/gxvalid/gxvmort2.c | 2 +- src/gxvalid/gxvmort4.c | 2 +- src/gxvalid/gxvmort5.c | 2 +- src/gxvalid/gxvmorx.c | 2 +- src/gxvalid/gxvmorx.h | 2 +- src/gxvalid/gxvmorx0.c | 2 +- src/gxvalid/gxvmorx1.c | 2 +- src/gxvalid/gxvmorx2.c | 2 +- src/gxvalid/gxvmorx4.c | 2 +- src/gxvalid/gxvmorx5.c | 2 +- src/gxvalid/gxvopbd.c | 2 +- src/gxvalid/gxvprop.c | 2 +- src/gxvalid/gxvtrak.c | 2 +- src/gxvalid/module.mk | 2 +- src/gxvalid/rules.mk | 2 +- src/gzip/Jamfile | 2 +- src/gzip/ftgzip.c | 2 +- src/gzip/rules.mk | 2 +- src/lzw/Jamfile | 2 +- src/lzw/ftlzw.c | 2 +- src/lzw/ftzopen.c | 2 +- src/lzw/ftzopen.h | 2 +- src/lzw/rules.mk | 2 +- src/otvalid/Jamfile | 2 +- src/otvalid/module.mk | 2 +- src/otvalid/otvalid.c | 2 +- src/otvalid/otvalid.h | 2 +- src/otvalid/otvbase.c | 2 +- src/otvalid/otvcommn.c | 2 +- src/otvalid/otvcommn.h | 2 +- src/otvalid/otverror.h | 2 +- src/otvalid/otvgdef.c | 2 +- src/otvalid/otvgpos.c | 2 +- src/otvalid/otvgpos.h | 2 +- src/otvalid/otvgsub.c | 2 +- src/otvalid/otvjstf.c | 2 +- src/otvalid/otvmath.c | 2 +- src/otvalid/otvmod.c | 2 +- src/otvalid/otvmod.h | 2 +- src/otvalid/rules.mk | 2 +- src/pcf/Jamfile | 2 +- src/pfr/Jamfile | 2 +- src/pfr/module.mk | 2 +- src/pfr/pfr.c | 2 +- src/pfr/pfrcmap.c | 2 +- src/pfr/pfrcmap.h | 2 +- src/pfr/pfrdrivr.c | 2 +- src/pfr/pfrdrivr.h | 2 +- src/pfr/pfrerror.h | 2 +- src/pfr/pfrgload.c | 2 +- src/pfr/pfrgload.h | 2 +- src/pfr/pfrload.c | 2 +- src/pfr/pfrload.h | 2 +- src/pfr/pfrobjs.c | 2 +- src/pfr/pfrobjs.h | 2 +- src/pfr/pfrsbit.c | 2 +- src/pfr/pfrsbit.h | 2 +- src/pfr/pfrtypes.h | 2 +- src/pfr/rules.mk | 2 +- src/psaux/Jamfile | 2 +- src/psaux/afmparse.c | 2 +- src/psaux/afmparse.h | 2 +- src/psaux/module.mk | 2 +- src/psaux/psaux.c | 2 +- src/psaux/psauxerr.h | 2 +- src/psaux/psauxmod.c | 2 +- src/psaux/psauxmod.h | 2 +- src/psaux/psconv.c | 2 +- src/psaux/psconv.h | 2 +- src/psaux/psobjs.c | 2 +- src/psaux/psobjs.h | 2 +- src/psaux/rules.mk | 2 +- src/psaux/t1cmap.c | 2 +- src/psaux/t1cmap.h | 2 +- src/psaux/t1decode.c | 2 +- src/psaux/t1decode.h | 2 +- src/pshinter/Jamfile | 2 +- src/pshinter/module.mk | 2 +- src/pshinter/pshalgo.c | 2 +- src/pshinter/pshalgo.h | 2 +- src/pshinter/pshglob.c | 2 +- src/pshinter/pshglob.h | 2 +- src/pshinter/pshinter.c | 2 +- src/pshinter/pshmod.c | 2 +- src/pshinter/pshmod.h | 2 +- src/pshinter/pshnterr.h | 2 +- src/pshinter/pshpic.c | 2 +- src/pshinter/pshpic.h | 2 +- src/pshinter/pshrec.c | 2 +- src/pshinter/pshrec.h | 2 +- src/pshinter/rules.mk | 2 +- src/psnames/Jamfile | 2 +- src/psnames/module.mk | 2 +- src/psnames/psmodule.c | 2 +- src/psnames/psmodule.h | 2 +- src/psnames/psnamerr.h | 2 +- src/psnames/psnames.c | 2 +- src/psnames/pspic.c | 2 +- src/psnames/pspic.h | 2 +- src/psnames/pstables.h | 2 +- src/psnames/rules.mk | 2 +- src/raster/Jamfile | 2 +- src/raster/ftmisc.h | 2 +- src/raster/ftraster.c | 2 +- src/raster/ftraster.h | 2 +- src/raster/ftrend1.c | 2 +- src/raster/ftrend1.h | 2 +- src/raster/module.mk | 2 +- src/raster/raster.c | 2 +- src/raster/rasterrs.h | 2 +- src/raster/rastpic.c | 2 +- src/raster/rastpic.h | 2 +- src/raster/rules.mk | 2 +- src/sfnt/Jamfile | 2 +- src/sfnt/module.mk | 2 +- src/sfnt/pngshim.c | 2 +- src/sfnt/pngshim.h | 2 +- src/sfnt/rules.mk | 2 +- src/sfnt/sfdriver.c | 2 +- src/sfnt/sfdriver.h | 2 +- src/sfnt/sferrors.h | 2 +- src/sfnt/sfnt.c | 2 +- src/sfnt/sfntpic.c | 2 +- src/sfnt/sfntpic.h | 2 +- src/sfnt/sfobjs.c | 2 +- src/sfnt/sfobjs.h | 2 +- src/sfnt/ttbdf.c | 2 +- src/sfnt/ttbdf.h | 2 +- src/sfnt/ttcmap.c | 2 +- src/sfnt/ttcmap.h | 2 +- src/sfnt/ttcmapc.h | 2 +- src/sfnt/ttkern.c | 2 +- src/sfnt/ttkern.h | 2 +- src/sfnt/ttload.c | 2 +- src/sfnt/ttload.h | 2 +- src/sfnt/ttmtx.c | 2 +- src/sfnt/ttmtx.h | 2 +- src/sfnt/ttpost.c | 2 +- src/sfnt/ttpost.h | 2 +- src/sfnt/ttsbit.c | 2 +- src/sfnt/ttsbit.h | 2 +- src/smooth/Jamfile | 2 +- src/smooth/ftgrays.c | 2 +- src/smooth/ftgrays.h | 2 +- src/smooth/ftsmerrs.h | 2 +- src/smooth/ftsmooth.c | 2 +- src/smooth/ftsmooth.h | 2 +- src/smooth/ftspic.c | 2 +- src/smooth/ftspic.h | 2 +- src/smooth/module.mk | 2 +- src/smooth/rules.mk | 2 +- src/smooth/smooth.c | 2 +- src/tools/afblue.pl | 2 +- src/tools/docmaker/content.py | 2 +- src/tools/docmaker/docmaker.py | 2 +- src/tools/docmaker/formatter.py | 2 +- src/tools/docmaker/sources.py | 2 +- src/tools/docmaker/tohtml.py | 2 +- src/tools/docmaker/utils.py | 2 +- src/tools/glnames.py | 2 +- src/truetype/Jamfile | 2 +- src/truetype/module.mk | 2 +- src/truetype/rules.mk | 2 +- src/truetype/truetype.c | 2 +- src/truetype/ttdriver.c | 2 +- src/truetype/ttdriver.h | 2 +- src/truetype/tterrors.h | 2 +- src/truetype/ttgload.c | 2 +- src/truetype/ttgload.h | 2 +- src/truetype/ttgxvar.c | 2 +- src/truetype/ttgxvar.h | 2 +- src/truetype/ttinterp.c | 2 +- src/truetype/ttinterp.h | 2 +- src/truetype/ttobjs.c | 2 +- src/truetype/ttobjs.h | 2 +- src/truetype/ttpic.c | 2 +- src/truetype/ttpic.h | 2 +- src/truetype/ttpload.c | 2 +- src/truetype/ttpload.h | 2 +- src/truetype/ttsubpix.c | 2 +- src/truetype/ttsubpix.h | 2 +- src/type1/Jamfile | 2 +- src/type1/module.mk | 2 +- src/type1/rules.mk | 2 +- src/type1/t1afm.c | 2 +- src/type1/t1afm.h | 2 +- src/type1/t1driver.c | 2 +- src/type1/t1driver.h | 2 +- src/type1/t1errors.h | 2 +- src/type1/t1gload.c | 2 +- src/type1/t1gload.h | 2 +- src/type1/t1load.c | 2 +- src/type1/t1load.h | 2 +- src/type1/t1objs.c | 2 +- src/type1/t1objs.h | 2 +- src/type1/t1parse.c | 2 +- src/type1/t1parse.h | 2 +- src/type1/t1tokens.h | 2 +- src/type1/type1.c | 2 +- src/type42/Jamfile | 2 +- src/type42/module.mk | 2 +- src/type42/rules.mk | 2 +- src/type42/t42drivr.c | 2 +- src/type42/t42drivr.h | 2 +- src/type42/t42error.h | 2 +- src/type42/t42objs.c | 2 +- src/type42/t42objs.h | 2 +- src/type42/t42parse.c | 2 +- src/type42/t42parse.h | 2 +- src/type42/t42types.h | 2 +- src/type42/type42.c | 2 +- src/winfonts/Jamfile | 2 +- src/winfonts/fnterrs.h | 2 +- src/winfonts/module.mk | 2 +- src/winfonts/rules.mk | 2 +- src/winfonts/winfnt.c | 2 +- src/winfonts/winfnt.h | 2 +- vms_make.com | 2 +- 570 files changed, 570 insertions(+), 570 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8b859a5..6954dc9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ # CMakeLists.txt # -# Copyright 2013, 2014 by +# Copyright 2013-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # Written by John Cary diff --git a/ChangeLog b/ChangeLog index 1274f95..84eee06 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5618,7 +5618,7 @@ ---------------------------------------------------------------------------- -Copyright 2013-2014 by +Copyright 2013-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, modified, diff --git a/ChangeLog.20 b/ChangeLog.20 index 8fcc5e7..6dae58e 100644 --- a/ChangeLog.20 +++ b/ChangeLog.20 @@ -2597,7 +2597,7 @@ ---------------------------------------------------------------------------- -Copyright 2000, 2001, 2002, 2007 by +Copyright 2000-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, modified, diff --git a/ChangeLog.21 b/ChangeLog.21 index 300a094..a6f8be7 100644 --- a/ChangeLog.21 +++ b/ChangeLog.21 @@ -9423,7 +9423,7 @@ ---------------------------------------------------------------------------- -Copyright 2002, 2003, 2004, 2005, 2007, 2008 by +Copyright 2002-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, modified, diff --git a/ChangeLog.22 b/ChangeLog.22 index 4144288..08c5877 100644 --- a/ChangeLog.22 +++ b/ChangeLog.22 @@ -2821,7 +2821,7 @@ ---------------------------------------------------------------------------- -Copyright 2005, 2006, 2007, 2008 by +Copyright 2005-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, modified, diff --git a/ChangeLog.23 b/ChangeLog.23 index 1a23848..93fd33c 100644 --- a/ChangeLog.23 +++ b/ChangeLog.23 @@ -7932,7 +7932,7 @@ ---------------------------------------------------------------------------- -Copyright 2006, 2007, 2008, 2009, 2010 by +Copyright 2006-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, modified, diff --git a/ChangeLog.24 b/ChangeLog.24 index 01eb3b7..df2119d 100644 --- a/ChangeLog.24 +++ b/ChangeLog.24 @@ -6344,7 +6344,7 @@ ---------------------------------------------------------------------------- -Copyright 2010-2013 by +Copyright 2010-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, modified, diff --git a/Jamfile b/Jamfile index 16e097e..e96bede 100644 --- a/Jamfile +++ b/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 top Jamfile. # -# Copyright 2001-2014 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/Jamrules b/Jamrules index d8d1c7e..91d1966 100644 --- a/Jamrules +++ b/Jamrules @@ -1,6 +1,6 @@ # FreeType 2 JamRules. # -# Copyright 2001, 2002, 2003 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/Makefile b/Makefile index c1fa16c..c807b0b 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2002, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/autogen.sh b/autogen.sh index cc0e661..9729af4 100755 --- a/autogen.sh +++ b/autogen.sh @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright 2005-2010, 2013 by +# Copyright 2005-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/amiga/include/config/ftconfig.h b/builds/amiga/include/config/ftconfig.h index a73ace6..790eeec 100644 --- a/builds/amiga/include/config/ftconfig.h +++ b/builds/amiga/include/config/ftconfig.h @@ -4,7 +4,7 @@ /* */ /* Amiga-specific configuration file (specification only). */ /* */ -/* Copyright 2005-2007, 2013 by */ +/* Copyright 2005-2015 by */ /* Werner Lemberg and Detlef Würkner. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/builds/amiga/include/config/ftmodule.h b/builds/amiga/include/config/ftmodule.h index 5873bab..77a66db 100644 --- a/builds/amiga/include/config/ftmodule.h +++ b/builds/amiga/include/config/ftmodule.h @@ -4,7 +4,7 @@ /* */ /* Amiga-specific FreeType module selection. */ /* */ -/* Copyright 2005 by */ +/* Copyright 2005-2015 by */ /* Werner Lemberg and Detlef Würkner. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/builds/amiga/makefile b/builds/amiga/makefile index 8a1e4c6..89e3e77 100644 --- a/builds/amiga/makefile +++ b/builds/amiga/makefile @@ -5,7 +5,7 @@ # -# Copyright 2005-2007, 2009, 2013 by +# Copyright 2005-2015 by # Werner Lemberg and Detlef Würkner. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/amiga/makefile.os4 b/builds/amiga/makefile.os4 index a2e6ffc..f602e73 100644 --- a/builds/amiga/makefile.os4 +++ b/builds/amiga/makefile.os4 @@ -4,7 +4,7 @@ # -# Copyright 2005-2007, 2009, 2013 by +# Copyright 2005-2015 by # Werner Lemberg and Detlef Würkner. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/amiga/smakefile b/builds/amiga/smakefile index aee7fb9..2b82ac6 100644 --- a/builds/amiga/smakefile +++ b/builds/amiga/smakefile @@ -3,7 +3,7 @@ # -# Copyright 2005-2007, 2009, 2013 by +# Copyright 2005-2015 by # Werner Lemberg and Detlef Würkner. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/amiga/src/base/ftdebug.c b/builds/amiga/src/base/ftdebug.c index 39688af..891a597 100644 --- a/builds/amiga/src/base/ftdebug.c +++ b/builds/amiga/src/base/ftdebug.c @@ -4,7 +4,7 @@ /* */ /* Debugging and logging component for amiga (body). */ /* */ -/* Copyright 1996-2002, 2004, 2005, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Würkner. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/builds/amiga/src/base/ftsystem.c b/builds/amiga/src/base/ftsystem.c index 42a552d..bb3ccfd 100644 --- a/builds/amiga/src/base/ftsystem.c +++ b/builds/amiga/src/base/ftsystem.c @@ -4,7 +4,7 @@ /* */ /* Amiga-specific FreeType low-level system interface (body). */ /* */ -/* Copyright 1996-2002, 2005-2007, 2010, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Würkner. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/builds/ansi/ansi-def.mk b/builds/ansi/ansi-def.mk index 2c58572..35b9f32 100644 --- a/builds/ansi/ansi-def.mk +++ b/builds/ansi/ansi-def.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/ansi/ansi.mk b/builds/ansi/ansi.mk index 32b3bac..2816e14 100644 --- a/builds/ansi/ansi.mk +++ b/builds/ansi/ansi.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/beos/beos-def.mk b/builds/beos/beos-def.mk index 4371a30..5ddedc0 100644 --- a/builds/beos/beos-def.mk +++ b/builds/beos/beos-def.mk @@ -5,7 +5,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/beos/beos.mk b/builds/beos/beos.mk index b5c8bda..6c7fca1 100644 --- a/builds/beos/beos.mk +++ b/builds/beos/beos.mk @@ -2,7 +2,7 @@ # FreeType 2 configuration rules for a BeOS system # -# Copyright 1996-2000, 2002, 2005 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/beos/detect.mk b/builds/beos/detect.mk index 24a0878..b23f94e 100644 --- a/builds/beos/detect.mk +++ b/builds/beos/detect.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/cmake/iOS.cmake b/builds/cmake/iOS.cmake index a41a7ac..7970f2b 100644 --- a/builds/cmake/iOS.cmake +++ b/builds/cmake/iOS.cmake @@ -1,6 +1,6 @@ # iOS.cmake # -# Copyright 2014 by +# Copyright 2014-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # Written by David Wimsey diff --git a/builds/compiler/ansi-cc.mk b/builds/compiler/ansi-cc.mk index 3b668e2..c9f6608 100644 --- a/builds/compiler/ansi-cc.mk +++ b/builds/compiler/ansi-cc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/compiler/bcc-dev.mk b/builds/compiler/bcc-dev.mk index 42a99b0..8ab957e 100644 --- a/builds/compiler/bcc-dev.mk +++ b/builds/compiler/bcc-dev.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/compiler/bcc.mk b/builds/compiler/bcc.mk index 855edad..f383840 100644 --- a/builds/compiler/bcc.mk +++ b/builds/compiler/bcc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/compiler/emx.mk b/builds/compiler/emx.mk index c237005..62fe35d 100644 --- a/builds/compiler/emx.mk +++ b/builds/compiler/emx.mk @@ -3,7 +3,7 @@ # -# Copyright 2003, 2006 by +# Copyright 2003-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/compiler/gcc-dev.mk b/builds/compiler/gcc-dev.mk index c63e126..fd789af 100644 --- a/builds/compiler/gcc-dev.mk +++ b/builds/compiler/gcc-dev.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2004, 2005, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/compiler/gcc.mk b/builds/compiler/gcc.mk index f6b7101..0970d1c 100644 --- a/builds/compiler/gcc.mk +++ b/builds/compiler/gcc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2005, 2006, 2009 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/compiler/intelc.mk b/builds/compiler/intelc.mk index 413ce5b..19e5962 100644 --- a/builds/compiler/intelc.mk +++ b/builds/compiler/intelc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/compiler/unix-lcc.mk b/builds/compiler/unix-lcc.mk index d79f508..ebe3306 100644 --- a/builds/compiler/unix-lcc.mk +++ b/builds/compiler/unix-lcc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/compiler/visualage.mk b/builds/compiler/visualage.mk index c109659..db997fa 100644 --- a/builds/compiler/visualage.mk +++ b/builds/compiler/visualage.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/compiler/visualc.mk b/builds/compiler/visualc.mk index 2e19ef8..900c8be 100644 --- a/builds/compiler/visualc.mk +++ b/builds/compiler/visualc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2005, 2006, 2008 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/compiler/watcom.mk b/builds/compiler/watcom.mk index 4db1e7f..f83425e 100644 --- a/builds/compiler/watcom.mk +++ b/builds/compiler/watcom.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/compiler/win-lcc.mk b/builds/compiler/win-lcc.mk index 5d02d82..9e4f79d 100644 --- a/builds/compiler/win-lcc.mk +++ b/builds/compiler/win-lcc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/detect.mk b/builds/detect.mk index ff4045d..4b789d3 100644 --- a/builds/detect.mk +++ b/builds/detect.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2003, 2006, 2008, 2013, 2014 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/dos/detect.mk b/builds/dos/detect.mk index 3e5e967..e49ba98 100644 --- a/builds/dos/detect.mk +++ b/builds/dos/detect.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2004, 2006, 2014 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/dos/dos-def.mk b/builds/dos/dos-def.mk index 950f581..ac0be5e 100644 --- a/builds/dos/dos-def.mk +++ b/builds/dos/dos-def.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2005, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/dos/dos-emx.mk b/builds/dos/dos-emx.mk index 6ea8f6d..c421674 100644 --- a/builds/dos/dos-emx.mk +++ b/builds/dos/dos-emx.mk @@ -3,7 +3,7 @@ # -# Copyright 2003 by +# Copyright 2003-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/dos/dos-gcc.mk b/builds/dos/dos-gcc.mk index e14255c..991fb64 100644 --- a/builds/dos/dos-gcc.mk +++ b/builds/dos/dos-gcc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/dos/dos-wat.mk b/builds/dos/dos-wat.mk index c763b16..0c34a0d 100644 --- a/builds/dos/dos-wat.mk +++ b/builds/dos/dos-wat.mk @@ -3,7 +3,7 @@ # -# Copyright 2003 by +# Copyright 2003-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/exports.mk b/builds/exports.mk index 96b10db..687ced7 100644 --- a/builds/exports.mk +++ b/builds/exports.mk @@ -3,7 +3,7 @@ # -# Copyright 2005, 2006 by +# Copyright 2005-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/freetype.mk b/builds/freetype.mk index 5e874ac..8c2f353 100644 --- a/builds/freetype.mk +++ b/builds/freetype.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2006, 2008, 2013, 2014 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/link_dos.mk b/builds/link_dos.mk index c37ac7e..694845b 100644 --- a/builds/link_dos.mk +++ b/builds/link_dos.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/link_std.mk b/builds/link_std.mk index 0bd2163..886b2e6 100644 --- a/builds/link_std.mk +++ b/builds/link_std.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/mac/ftmac.c b/builds/mac/ftmac.c index 27b5511..7e2f292 100644 --- a/builds/mac/ftmac.c +++ b/builds/mac/ftmac.c @@ -5,7 +5,7 @@ /* Mac FOND support. Written by just@letterror.com. */ /* Heavily Fixed by mpsuzuki, George Williams and Sean McBride */ /* */ -/* Copyright 1996-2008, 2013, 2014 by */ +/* Copyright 1996-2015 by */ /* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/builds/modules.mk b/builds/modules.mk index 3c1b083..0b8b0c1 100644 --- a/builds/modules.mk +++ b/builds/modules.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006, 2008, 2014 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/os2/detect.mk b/builds/os2/detect.mk index 47a40a2..fde9327 100644 --- a/builds/os2/detect.mk +++ b/builds/os2/detect.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/os2/os2-def.mk b/builds/os2/os2-def.mk index 01cda92..691036f 100644 --- a/builds/os2/os2-def.mk +++ b/builds/os2/os2-def.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2005, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/os2/os2-dev.mk b/builds/os2/os2-dev.mk index 83da8de..eacf58f 100644 --- a/builds/os2/os2-dev.mk +++ b/builds/os2/os2-dev.mk @@ -5,7 +5,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/os2/os2-gcc.mk b/builds/os2/os2-gcc.mk index 446073e..8390a36 100644 --- a/builds/os2/os2-gcc.mk +++ b/builds/os2/os2-gcc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/symbian/bld.inf b/builds/symbian/bld.inf index bc8c160..2ab4228 100644 --- a/builds/symbian/bld.inf +++ b/builds/symbian/bld.inf @@ -2,7 +2,7 @@ // FreeType 2 project for the symbian platform // -// Copyright 2008, 2009, 2013 by +// Copyright 2008-2015 by // David Turner, Robert Wilhelm, and Werner Lemberg. // // This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/symbian/freetype.mmp b/builds/symbian/freetype.mmp index cb0008c..9ccdb68 100644 --- a/builds/symbian/freetype.mmp +++ b/builds/symbian/freetype.mmp @@ -2,7 +2,7 @@ // FreeType 2 makefile for the symbian platform // -// Copyright 2008, 2009 by +// Copyright 2008-2015 by // David Turner, Robert Wilhelm, and Werner Lemberg. // // This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/toplevel.mk b/builds/toplevel.mk index 16d4be8..7716068 100644 --- a/builds/toplevel.mk +++ b/builds/toplevel.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2001, 2003, 2006, 2008-2010, 2012-2014 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/unix/configure.raw b/builds/unix/configure.raw index 72543cf..5d11598 100644 --- a/builds/unix/configure.raw +++ b/builds/unix/configure.raw @@ -2,7 +2,7 @@ # # Process this file with autoconf to produce a configure script. # -# Copyright 2001-2014 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/unix/detect.mk b/builds/unix/detect.mk index 0506e7d..c9986df 100644 --- a/builds/unix/detect.mk +++ b/builds/unix/detect.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2002-2004, 2006, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/unix/freetype-config.in b/builds/unix/freetype-config.in index ebc311f..269356c 100644 --- a/builds/unix/freetype-config.in +++ b/builds/unix/freetype-config.in @@ -1,6 +1,6 @@ #! /bin/sh # -# Copyright 2000-2005, 2008, 2009, 2013, 2014 by +# Copyright 2000-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/unix/freetype2.m4 b/builds/unix/freetype2.m4 index 3a806d9..3dc8807 100644 --- a/builds/unix/freetype2.m4 +++ b/builds/unix/freetype2.m4 @@ -1,7 +1,7 @@ # Configure paths for FreeType2 # Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor # -# Copyright 2001, 2003, 2007, 2009, 2014 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/unix/ft-munmap.m4 b/builds/unix/ft-munmap.m4 index 68b3361..72b0864 100644 --- a/builds/unix/ft-munmap.m4 +++ b/builds/unix/ft-munmap.m4 @@ -1,6 +1,6 @@ ## FreeType specific autoconf tests # -# Copyright 2002, 2003, 2004 by +# Copyright 2002-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/unix/ftconfig.in b/builds/unix/ftconfig.in index e66f3ea..6d28b61 100644 --- a/builds/unix/ftconfig.in +++ b/builds/unix/ftconfig.in @@ -4,7 +4,7 @@ /* */ /* UNIX-specific configuration file (specification only). */ /* */ -/* Copyright 1996-2004, 2006-2009, 2011, 2013, 2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/builds/unix/ftsystem.c b/builds/unix/ftsystem.c index 7f7b3ac..d7513d9 100644 --- a/builds/unix/ftsystem.c +++ b/builds/unix/ftsystem.c @@ -4,7 +4,7 @@ /* */ /* Unix-specific FreeType low-level system interface (body). */ /* */ -/* Copyright 1996-2002, 2004-2008, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/builds/unix/install.mk b/builds/unix/install.mk index 83525ee..35cff20 100644 --- a/builds/unix/install.mk +++ b/builds/unix/install.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2002, 2003, 2006, 2013, 2014 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/unix/unix-cc.in b/builds/unix/unix-cc.in index b84bc5d..d53b25f 100644 --- a/builds/unix/unix-cc.in +++ b/builds/unix/unix-cc.in @@ -2,7 +2,7 @@ # FreeType 2 template for Unix-specific compiler definitions # -# Copyright 1996-2000, 2002, 2003, 2005, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/unix/unix-def.in b/builds/unix/unix-def.in index 4c06a05..ed9fd1e 100644 --- a/builds/unix/unix-def.in +++ b/builds/unix/unix-def.in @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2002, 2004, 2006, 2008, 2013, 2014 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/unix/unix-dev.mk b/builds/unix/unix-dev.mk index 76bae38..62de344 100644 --- a/builds/unix/unix-dev.mk +++ b/builds/unix/unix-dev.mk @@ -6,7 +6,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/unix/unix-lcc.mk b/builds/unix/unix-lcc.mk index 6038e52..328cc80 100644 --- a/builds/unix/unix-lcc.mk +++ b/builds/unix/unix-lcc.mk @@ -6,7 +6,7 @@ # -# Copyright 1996-2000 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/unix/unix.mk b/builds/unix/unix.mk index 7f9d9a3..542aa7f 100644 --- a/builds/unix/unix.mk +++ b/builds/unix/unix.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2002, 2004, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/unix/unixddef.mk b/builds/unix/unixddef.mk index 130d6b0..f333640 100644 --- a/builds/unix/unixddef.mk +++ b/builds/unix/unixddef.mk @@ -4,7 +4,7 @@ # -# Copyright 1996-2000, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/vms/ftconfig.h b/builds/vms/ftconfig.h index b309651..0e05028 100644 --- a/builds/vms/ftconfig.h +++ b/builds/vms/ftconfig.h @@ -4,7 +4,7 @@ /* */ /* VMS-specific configuration file (specification only). */ /* */ -/* Copyright 1996-2004, 2006-2008, 2011, 2013, 2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/builds/vms/ftsystem.c b/builds/vms/ftsystem.c index 5c2819e..74d3392 100644 --- a/builds/vms/ftsystem.c +++ b/builds/vms/ftsystem.c @@ -4,7 +4,7 @@ /* */ /* VMS-specific FreeType low-level system interface (body). */ /* */ -/* Copyright 1996-2002, 2005, 2010, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/builds/wince/ftdebug.c b/builds/wince/ftdebug.c index 24f9658..74c73b5 100644 --- a/builds/wince/ftdebug.c +++ b/builds/wince/ftdebug.c @@ -4,7 +4,7 @@ /* */ /* Debugging and logging component for WinCE (body). */ /* */ -/* Copyright 1996-2002, 2005, 2008, 2009, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/builds/windows/detect.mk b/builds/windows/detect.mk index 9dca261..26297f2 100644 --- a/builds/windows/detect.mk +++ b/builds/windows/detect.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2004, 2006, 2007, 2014 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/windows/ftdebug.c b/builds/windows/ftdebug.c index dd2c2ad..2adcc52 100644 --- a/builds/windows/ftdebug.c +++ b/builds/windows/ftdebug.c @@ -4,7 +4,7 @@ /* */ /* Debugging and logging component for Win32 (body). */ /* */ -/* Copyright 1996-2002, 2005, 2008, 2009, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/builds/windows/w32-bcc.mk b/builds/windows/w32-bcc.mk index 87d8ea3..d483df5 100644 --- a/builds/windows/w32-bcc.mk +++ b/builds/windows/w32-bcc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2005, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/windows/w32-bccd.mk b/builds/windows/w32-bccd.mk index dd21edd..bd72ca1 100644 --- a/builds/windows/w32-bccd.mk +++ b/builds/windows/w32-bccd.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2006, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/windows/w32-dev.mk b/builds/windows/w32-dev.mk index 3561229..11d1afd 100644 --- a/builds/windows/w32-dev.mk +++ b/builds/windows/w32-dev.mk @@ -5,7 +5,7 @@ # -# Copyright 1996-2000, 2003, 2006, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/windows/w32-gcc.mk b/builds/windows/w32-gcc.mk index 3bbdd3c..1092fb7 100644 --- a/builds/windows/w32-gcc.mk +++ b/builds/windows/w32-gcc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2005, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/windows/w32-icc.mk b/builds/windows/w32-icc.mk index 44d26bd..b2dcbe5 100644 --- a/builds/windows/w32-icc.mk +++ b/builds/windows/w32-icc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2005, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/windows/w32-intl.mk b/builds/windows/w32-intl.mk index 0f3e22b..de9912f 100644 --- a/builds/windows/w32-intl.mk +++ b/builds/windows/w32-intl.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2005, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/windows/w32-lcc.mk b/builds/windows/w32-lcc.mk index 8bd5b56..75979f3 100644 --- a/builds/windows/w32-lcc.mk +++ b/builds/windows/w32-lcc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/windows/w32-mingw32.mk b/builds/windows/w32-mingw32.mk index b35dbb0..1300a44 100644 --- a/builds/windows/w32-mingw32.mk +++ b/builds/windows/w32-mingw32.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2005, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/windows/w32-vcc.mk b/builds/windows/w32-vcc.mk index 95f7685..fcf1aa0 100644 --- a/builds/windows/w32-vcc.mk +++ b/builds/windows/w32-vcc.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2005, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/windows/w32-wat.mk b/builds/windows/w32-wat.mk index e1ddf66..cc5eaf0 100644 --- a/builds/windows/w32-wat.mk +++ b/builds/windows/w32-wat.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2005, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/builds/windows/win32-def.mk b/builds/windows/win32-def.mk index 61af5df..516c5cd 100644 --- a/builds/windows/win32-def.mk +++ b/builds/windows/win32-def.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2003, 2005, 2006, 2013, 2014 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/configure b/configure index 4d8a945..fd52581 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright 2002-2006, 2008-2010, 2013 by +# Copyright 2002-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/devel/ft2build.h b/devel/ft2build.h index 6cc34b7..8e9653d 100644 --- a/devel/ft2build.h +++ b/devel/ft2build.h @@ -4,7 +4,7 @@ /* */ /* FreeType 2 build and setup macros (development version). */ /* */ -/* Copyright 1996-2001, 2003, 2006, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/devel/ftoption.h b/devel/ftoption.h index 3d0c77d..9dca321 100644 --- a/devel/ftoption.h +++ b/devel/ftoption.h @@ -4,7 +4,7 @@ /* */ /* User-selectable configuration macros (specification only). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/docs/CHANGES b/docs/CHANGES index 1d2d339..3a0dcd2 100644 --- a/docs/CHANGES +++ b/docs/CHANGES @@ -4184,7 +4184,7 @@ Extensions support: ------------------------------------------------------------------------ -Copyright 2000-2013 by +Copyright 2000-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/docs/CUSTOMIZE b/docs/CUSTOMIZE index dfadb46..831edf6 100644 --- a/docs/CUSTOMIZE +++ b/docs/CUSTOMIZE @@ -138,7 +138,7 @@ IV. Overriding default configuration and module headers ---------------------------------------------------------------------- -Copyright 2003, 2005, 2006, 2012, 2013 by +Copyright 2003-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/docs/DEBUG b/docs/DEBUG index d8c79d1..ab2c769 100644 --- a/docs/DEBUG +++ b/docs/DEBUG @@ -191,7 +191,7 @@ behaviour of FreeType at runtime. ------------------------------------------------------------------------ -Copyright 2002-2005, 2009, 2013 by +Copyright 2002-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/docs/INSTALL b/docs/INSTALL index 5bf8d65..193c530 100644 --- a/docs/INSTALL +++ b/docs/INSTALL @@ -75,7 +75,7 @@ II. Custom builds of the library ---------------------------------------------------------------------- -Copyright 2000-2008, 2010-2011, 2013 by +Copyright 2000-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/docs/INSTALL.ANY b/docs/INSTALL.ANY index 8aa394f..9249b23 100644 --- a/docs/INSTALL.ANY +++ b/docs/INSTALL.ANY @@ -143,7 +143,7 @@ II. Support for flat-directory compilation ---------------------------------------------------------------------- -Copyright 2003, 2005, 2006, 2009, 2010, 2013 by +Copyright 2003-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/docs/INSTALL.CROSS b/docs/INSTALL.CROSS index 8745613..a83638d 100644 --- a/docs/INSTALL.CROSS +++ b/docs/INSTALL.CROSS @@ -163,7 +163,7 @@ procedure. ---------------------------------------------------------------------- -Copyright 2006, 2008, 2012, 2014 by +Copyright 2006-2015 by suzuki toshiya, David Turner, Robert Wilhelm, and Werner Lemberg. diff --git a/docs/INSTALL.GNU b/docs/INSTALL.GNU index 3b9e0a2..1a7c097 100644 --- a/docs/INSTALL.GNU +++ b/docs/INSTALL.GNU @@ -148,7 +148,7 @@ instructions in the file `INSTALL.UNIX' instead. ---------------------------------------------------------------------- -Copyright 2003-2006, 2008, 2013, 2014 by +Copyright 2003-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/docs/INSTALL.UNIX b/docs/INSTALL.UNIX index 251c749..0dab2c6 100644 --- a/docs/INSTALL.UNIX +++ b/docs/INSTALL.UNIX @@ -102,7 +102,7 @@ or MSys on Win32: ---------------------------------------------------------------------- -Copyright 2003-2007, 2013, 2014 by +Copyright 2003-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/docs/INSTALL.VMS b/docs/INSTALL.VMS index 994e566..48a323e 100644 --- a/docs/INSTALL.VMS +++ b/docs/INSTALL.VMS @@ -49,7 +49,7 @@ V7.2-1. ------------------------------------------------------------------------ -Copyright 2000, 2004 by +Copyright 2000-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/docs/TODO b/docs/TODO index be60d6f..43eeae3 100644 --- a/docs/TODO +++ b/docs/TODO @@ -27,7 +27,7 @@ Other bugs have been registered at the savannah bugzilla of FreeType. ------------------------------------------------------------------------ -Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007 by +Copyright 2001-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/docs/VERSION.DLL b/docs/VERSION.DLL index dd49261..dcc4579 100644 --- a/docs/VERSION.DLL +++ b/docs/VERSION.DLL @@ -115,7 +115,7 @@ other release numbers. ------------------------------------------------------------------------ -Copyright 2002-2014 by +Copyright 2002-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/docs/formats.txt b/docs/formats.txt index aed885c..4ffc97c 100644 --- a/docs/formats.txt +++ b/docs/formats.txt @@ -161,7 +161,7 @@ MAC --- PS TYPE_1 --- type1 T1_SPEC.pdf ------------------------------------------------------------------------ -Copyright 2004, 2005, 2008, 2009, 2010 by +Copyright 2004-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/docs/raster.txt b/docs/raster.txt index 95d9e24..dc55d64 100644 --- a/docs/raster.txt +++ b/docs/raster.txt @@ -618,7 +618,7 @@ II. Rendering Technology ------------------------------------------------------------------------ -Copyright 2003, 2007 by +Copyright 2003-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/docs/release b/docs/release index 98f16cd..bd92b23 100644 --- a/docs/release +++ b/docs/release @@ -189,7 +189,7 @@ How to prepare a new release ---------------------------------------------------------------------- -Copyright 2003, 2005-2007, 2009, 2011-2014 by +Copyright 2003-2015 by David Turner, Robert Wilhelm, and Werner Lemberg. This file is part of the FreeType project, and may only be used, diff --git a/include/config/ftconfig.h b/include/config/ftconfig.h index 22d70fd..c165fa5 100644 --- a/include/config/ftconfig.h +++ b/include/config/ftconfig.h @@ -4,7 +4,7 @@ /* */ /* ANSI-specific configuration file (specification only). */ /* */ -/* Copyright 1996-2004, 2006-2008, 2010-2011, 2013, 2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/config/ftheader.h b/include/config/ftheader.h index b623629..0a9fcd3 100644 --- a/include/config/ftheader.h +++ b/include/config/ftheader.h @@ -4,7 +4,7 @@ /* */ /* Build macros of the FreeType 2 library. */ /* */ -/* Copyright 1996-2008, 2010, 2012, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/config/ftoption.h b/include/config/ftoption.h index c85519d..86de36b 100644 --- a/include/config/ftoption.h +++ b/include/config/ftoption.h @@ -4,7 +4,7 @@ /* */ /* User-selectable configuration macros (specification only). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/config/ftstdlib.h b/include/config/ftstdlib.h index b940efc..af7aaaf 100644 --- a/include/config/ftstdlib.h +++ b/include/config/ftstdlib.h @@ -5,7 +5,7 @@ /* ANSI-specific library and header configuration file (specification */ /* only). */ /* */ -/* Copyright 2002-2007, 2009, 2011-2012 by */ +/* Copyright 2002-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/freetype.h b/include/freetype.h index 1022719..15455c6 100644 --- a/include/freetype.h +++ b/include/freetype.h @@ -4,7 +4,7 @@ /* */ /* FreeType high-level API and common types (specification only). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ft2build.h b/include/ft2build.h index 6f8eb7f..09c19d4 100644 --- a/include/ft2build.h +++ b/include/ft2build.h @@ -4,7 +4,7 @@ /* */ /* FreeType 2 build and setup macros. */ /* */ -/* Copyright 1996-2001, 2006, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftadvanc.h b/include/ftadvanc.h index 955f93f..05fcd16 100644 --- a/include/ftadvanc.h +++ b/include/ftadvanc.h @@ -4,7 +4,7 @@ /* */ /* Quick computation of advance widths (specification only). */ /* */ -/* Copyright 2008, 2013, 2014 by */ +/* Copyright 2008-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftautoh.h b/include/ftautoh.h index 59191ab..06941da 100644 --- a/include/ftautoh.h +++ b/include/ftautoh.h @@ -4,7 +4,7 @@ /* */ /* FreeType API for controlling the auto-hinter (specification only). */ /* */ -/* Copyright 2012, 2013 by */ +/* Copyright 2012-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftbbox.h b/include/ftbbox.h index d6800e2..9d9d040 100644 --- a/include/ftbbox.h +++ b/include/ftbbox.h @@ -4,7 +4,7 @@ /* */ /* FreeType exact bbox computation (specification). */ /* */ -/* Copyright 1996-2001, 2003, 2007, 2011, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftbdf.h b/include/ftbdf.h index 6d262e4..0bdabf4 100644 --- a/include/ftbdf.h +++ b/include/ftbdf.h @@ -4,7 +4,7 @@ /* */ /* FreeType API for accessing BDF-specific strings (specification). */ /* */ -/* Copyright 2002-2004, 2006, 2009, 2014 by */ +/* Copyright 2002-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftbitmap.h b/include/ftbitmap.h index eae7169..4a1e83c 100644 --- a/include/ftbitmap.h +++ b/include/ftbitmap.h @@ -4,7 +4,7 @@ /* */ /* FreeType utility functions for bitmaps (specification). */ /* */ -/* Copyright 2004-2006, 2008, 2013, 2014 by */ +/* Copyright 2004-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftbzip2.h b/include/ftbzip2.h index 4dce161..c25f946 100644 --- a/include/ftbzip2.h +++ b/include/ftbzip2.h @@ -4,7 +4,7 @@ /* */ /* Bzip2-compressed stream support. */ /* */ -/* Copyright 2010 by */ +/* Copyright 2010-2015 by */ /* Joel Klinghed. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftcache.h b/include/ftcache.h index a30e925..c1a7555 100644 --- a/include/ftcache.h +++ b/include/ftcache.h @@ -4,7 +4,7 @@ /* */ /* FreeType Cache subsystem (specification). */ /* */ -/* Copyright 1996-2008, 2010, 2013, 2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftcffdrv.h b/include/ftcffdrv.h index f7031bc..6c8e416 100644 --- a/include/ftcffdrv.h +++ b/include/ftcffdrv.h @@ -4,7 +4,7 @@ /* */ /* FreeType API for controlling the CFF driver (specification only). */ /* */ -/* Copyright 2013, 2014 by */ +/* Copyright 2013-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftcid.h b/include/ftcid.h index 01b4832..05741c8 100644 --- a/include/ftcid.h +++ b/include/ftcid.h @@ -4,7 +4,7 @@ /* */ /* FreeType API for accessing CID font information (specification). */ /* */ -/* Copyright 2007, 2009 by */ +/* Copyright 2007-2015 by */ /* Dereg Clegg and Michael Toftdal. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/fterrdef.h b/include/fterrdef.h index 99b2fad..1bf0751 100644 --- a/include/fterrdef.h +++ b/include/fterrdef.h @@ -4,7 +4,7 @@ /* */ /* FreeType error codes (specification). */ /* */ -/* Copyright 2002, 2004, 2006, 2007, 2010-2013 by */ +/* Copyright 2002-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/fterrors.h b/include/fterrors.h index 0fa3e4d..376bee6 100644 --- a/include/fterrors.h +++ b/include/fterrors.h @@ -4,7 +4,7 @@ /* */ /* FreeType error code handling (specification). */ /* */ -/* Copyright 1996-2002, 2004, 2007, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftgasp.h b/include/ftgasp.h index 3f3d765..9a9b632 100644 --- a/include/ftgasp.h +++ b/include/ftgasp.h @@ -4,7 +4,7 @@ /* */ /* Access of TrueType's `gasp' table (specification). */ /* */ -/* Copyright 2007, 2008, 2011 by */ +/* Copyright 2007-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftglyph.h b/include/ftglyph.h index 15fa6a9..803ad39 100644 --- a/include/ftglyph.h +++ b/include/ftglyph.h @@ -4,7 +4,7 @@ /* */ /* FreeType convenience functions to handle glyphs (specification). */ /* */ -/* Copyright 1996-2003, 2006, 2008, 2009, 2011, 2013, 2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftgxval.h b/include/ftgxval.h index 88c3d93..0e9ac1d 100644 --- a/include/ftgxval.h +++ b/include/ftgxval.h @@ -4,7 +4,7 @@ /* */ /* FreeType API for validating TrueTypeGX/AAT tables (specification). */ /* */ -/* Copyright 2004-2006, 2013 by */ +/* Copyright 2004-2015 by */ /* Masatake YAMATO, Redhat K.K, */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/include/ftgzip.h b/include/ftgzip.h index eb346c6..b3a532d 100644 --- a/include/ftgzip.h +++ b/include/ftgzip.h @@ -4,7 +4,7 @@ /* */ /* Gzip-compressed stream support. */ /* */ -/* Copyright 2002-2004, 2006, 2013 by */ +/* Copyright 2002-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftimage.h b/include/ftimage.h index 42815c0..6b15b2d 100644 --- a/include/ftimage.h +++ b/include/ftimage.h @@ -5,7 +5,7 @@ /* FreeType glyph image formats and default raster interface */ /* (specification). */ /* */ -/* Copyright 1996-2010, 2013, 2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftincrem.h b/include/ftincrem.h index 4c0246c..840af25 100644 --- a/include/ftincrem.h +++ b/include/ftincrem.h @@ -4,7 +4,7 @@ /* */ /* FreeType incremental loading (specification). */ /* */ -/* Copyright 2002, 2003, 2006-2008, 2010, 2014 by */ +/* Copyright 2002-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftlcdfil.h b/include/ftlcdfil.h index e8679c1..4cd999a 100644 --- a/include/ftlcdfil.h +++ b/include/ftlcdfil.h @@ -5,7 +5,7 @@ /* FreeType API for color filtering of subpixel bitmap glyphs */ /* (specification). */ /* */ -/* Copyright 2006-2008, 2010, 2013, 2014 by */ +/* Copyright 2006-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftlist.h b/include/ftlist.h index 9950a27..12b48c7 100644 --- a/include/ftlist.h +++ b/include/ftlist.h @@ -4,7 +4,7 @@ /* */ /* Generic list support for FreeType (specification). */ /* */ -/* Copyright 1996-2001, 2003, 2007, 2010, 2013, 2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftlzw.h b/include/ftlzw.h index 857c0c5..d3ec28e 100644 --- a/include/ftlzw.h +++ b/include/ftlzw.h @@ -4,7 +4,7 @@ /* */ /* LZW-compressed stream support. */ /* */ -/* Copyright 2004, 2006 by */ +/* Copyright 2004-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftmac.h b/include/ftmac.h index 42874fe..14c55cf 100644 --- a/include/ftmac.h +++ b/include/ftmac.h @@ -4,7 +4,7 @@ /* */ /* Additional Mac-specific API. */ /* */ -/* Copyright 1996-2001, 2004, 2006, 2007, 2013 by */ +/* Copyright 1996-2015 by */ /* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftmm.h b/include/ftmm.h index 2dcfd67..7d079f6 100644 --- a/include/ftmm.h +++ b/include/ftmm.h @@ -4,7 +4,7 @@ /* */ /* FreeType Multiple Master font interface (specification). */ /* */ -/* Copyright 1996-2001, 2003, 2004, 2006, 2009, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftmodapi.h b/include/ftmodapi.h index 980f15d..95aef3a 100644 --- a/include/ftmodapi.h +++ b/include/ftmodapi.h @@ -4,7 +4,7 @@ /* */ /* FreeType modules public interface (specification). */ /* */ -/* Copyright 1996-2003, 2006, 2008-2010, 2012, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftmoderr.h b/include/ftmoderr.h index 5a27db1..9d7f981 100644 --- a/include/ftmoderr.h +++ b/include/ftmoderr.h @@ -4,7 +4,7 @@ /* */ /* FreeType module error offsets (specification). */ /* */ -/* Copyright 2001-2005, 2010, 2013 by */ +/* Copyright 2001-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftotval.h b/include/ftotval.h index 75ba03e..e744b71 100644 --- a/include/ftotval.h +++ b/include/ftotval.h @@ -4,7 +4,7 @@ /* */ /* FreeType API for validating OpenType tables (specification). */ /* */ -/* Copyright 2004-2007, 2013, 2014 by */ +/* Copyright 2004-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftoutln.h b/include/ftoutln.h index d3b8fbd..106cfde 100644 --- a/include/ftoutln.h +++ b/include/ftoutln.h @@ -5,7 +5,7 @@ /* Support for the FT_Outline type used to store glyph shapes of */ /* most scalable font formats (specification). */ /* */ -/* Copyright 1996-2003, 2005-2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftpfr.h b/include/ftpfr.h index 7d50353..a1c02a2 100644 --- a/include/ftpfr.h +++ b/include/ftpfr.h @@ -4,7 +4,7 @@ /* */ /* FreeType API for accessing PFR-specific data (specification only). */ /* */ -/* Copyright 2002, 2003, 2004, 2006, 2008, 2009 by */ +/* Copyright 2002-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftrender.h b/include/ftrender.h index 58a9716..ec8da70 100644 --- a/include/ftrender.h +++ b/include/ftrender.h @@ -4,7 +4,7 @@ /* */ /* FreeType renderer modules public interface (specification). */ /* */ -/* Copyright 1996-2001, 2005, 2006, 2010 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftsizes.h b/include/ftsizes.h index 4167045..bef8424 100644 --- a/include/ftsizes.h +++ b/include/ftsizes.h @@ -4,7 +4,7 @@ /* */ /* FreeType size objects management (specification). */ /* */ -/* Copyright 1996-2001, 2003, 2004, 2006, 2009, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftsnames.h b/include/ftsnames.h index 88af440..0f7fbe1 100644 --- a/include/ftsnames.h +++ b/include/ftsnames.h @@ -7,7 +7,7 @@ /* */ /* This is _not_ used to retrieve glyph names! */ /* */ -/* Copyright 1996-2003, 2006, 2009, 2010, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftstroke.h b/include/ftstroke.h index bd31170..7ebb1e7 100644 --- a/include/ftstroke.h +++ b/include/ftstroke.h @@ -4,7 +4,7 @@ /* */ /* FreeType path stroker (specification). */ /* */ -/* Copyright 2002-2006, 2008, 2009, 2011-2012, 2014 by */ +/* Copyright 2002-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftsynth.h b/include/ftsynth.h index d0ea730..ca7f2c7 100644 --- a/include/ftsynth.h +++ b/include/ftsynth.h @@ -5,7 +5,7 @@ /* FreeType synthesizing code for emboldening and slanting */ /* (specification). */ /* */ -/* Copyright 2000-2001, 2003, 2006, 2008, 2012, 2013 by */ +/* Copyright 2000-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftsystem.h b/include/ftsystem.h index 7436ed2..2bc9999 100644 --- a/include/ftsystem.h +++ b/include/ftsystem.h @@ -4,7 +4,7 @@ /* */ /* FreeType low-level system interface definition (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2005, 2010, 2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/fttrigon.h b/include/fttrigon.h index 9c7b543..3d821ba 100644 --- a/include/fttrigon.h +++ b/include/fttrigon.h @@ -4,7 +4,7 @@ /* */ /* FreeType trigonometric functions (specification). */ /* */ -/* Copyright 2001, 2003, 2005, 2007, 2013 by */ +/* Copyright 2001-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftttdrv.h b/include/ftttdrv.h index 3588413..f1a7714 100644 --- a/include/ftttdrv.h +++ b/include/ftttdrv.h @@ -5,7 +5,7 @@ /* FreeType API for controlling the TrueType driver */ /* (specification only). */ /* */ -/* Copyright 2013 by */ +/* Copyright 2013-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/fttypes.h b/include/fttypes.h index 2c01e87..706a1be 100644 --- a/include/fttypes.h +++ b/include/fttypes.h @@ -4,7 +4,7 @@ /* */ /* FreeType simple types definitions (specification only). */ /* */ -/* Copyright 1996-2002, 2004, 2006-2009, 2012-2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftwinfnt.h b/include/ftwinfnt.h index 5026158..356a710 100644 --- a/include/ftwinfnt.h +++ b/include/ftwinfnt.h @@ -4,7 +4,7 @@ /* */ /* FreeType API for accessing Windows fnt-specific data. */ /* */ -/* Copyright 2003, 2004, 2008 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ftxf86.h b/include/ftxf86.h index 89d1993..2269b4e 100644 --- a/include/ftxf86.h +++ b/include/ftxf86.h @@ -4,7 +4,7 @@ /* */ /* Support functions for X11. */ /* */ -/* Copyright 2002-2004, 2006, 2007, 2013 by */ +/* Copyright 2002-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/autohint.h b/include/internal/autohint.h index 545de93..8d5a977 100644 --- a/include/internal/autohint.h +++ b/include/internal/autohint.h @@ -4,7 +4,7 @@ /* */ /* High-level `autohint' module-specific interface (specification). */ /* */ -/* Copyright 1996-2002, 2007, 2009, 2012 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/ftcalc.h b/include/internal/ftcalc.h index 14ec37b..75752c3 100644 --- a/include/internal/ftcalc.h +++ b/include/internal/ftcalc.h @@ -4,7 +4,7 @@ /* */ /* Arithmetic computations (specification). */ /* */ -/* Copyright 1996-2006, 2008, 2009, 2012-2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/ftdebug.h b/include/internal/ftdebug.h index 58a3916..edd3b49 100644 --- a/include/internal/ftdebug.h +++ b/include/internal/ftdebug.h @@ -4,7 +4,7 @@ /* */ /* Debugging and logging component (specification). */ /* */ -/* Copyright 1996-2002, 2004, 2006-2009, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/ftdriver.h b/include/internal/ftdriver.h index 940218e..16856d3 100644 --- a/include/internal/ftdriver.h +++ b/include/internal/ftdriver.h @@ -4,7 +4,7 @@ /* */ /* FreeType font driver interface (specification). */ /* */ -/* Copyright 1996-2003, 2006, 2008, 2011-2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/ftgloadr.h b/include/internal/ftgloadr.h index f70774f..2364937 100644 --- a/include/internal/ftgloadr.h +++ b/include/internal/ftgloadr.h @@ -4,7 +4,7 @@ /* */ /* The FreeType glyph loader (specification). */ /* */ -/* Copyright 2002, 2003, 2005, 2006 by */ +/* Copyright 2002-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/ftmemory.h b/include/internal/ftmemory.h index 3d51aee..87577af 100644 --- a/include/internal/ftmemory.h +++ b/include/internal/ftmemory.h @@ -4,7 +4,7 @@ /* */ /* The FreeType memory management macros (specification). */ /* */ -/* Copyright 1996-2002, 2004-2007, 2010, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/ftobjs.h b/include/internal/ftobjs.h index 2014a95..f08b8fa 100644 --- a/include/internal/ftobjs.h +++ b/include/internal/ftobjs.h @@ -4,7 +4,7 @@ /* */ /* The FreeType private base classes (specification). */ /* */ -/* Copyright 1996-2006, 2008, 2010, 2012-2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/ftpic.h b/include/internal/ftpic.h index 485ce7a..7f9154f 100644 --- a/include/internal/ftpic.h +++ b/include/internal/ftpic.h @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services (declaration). */ /* */ -/* Copyright 2009, 2012 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/ftrfork.h b/include/internal/ftrfork.h index d750cbe..5885dcd 100644 --- a/include/internal/ftrfork.h +++ b/include/internal/ftrfork.h @@ -4,7 +4,7 @@ /* */ /* Embedded resource forks accessor (specification). */ /* */ -/* Copyright 2004, 2006, 2007, 2012, 2013 by */ +/* Copyright 2004-2015 by */ /* Masatake YAMATO and Redhat K.K. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/ftserv.h b/include/internal/ftserv.h index 1203ec8..af9690d 100644 --- a/include/internal/ftserv.h +++ b/include/internal/ftserv.h @@ -4,7 +4,7 @@ /* */ /* The FreeType services (specification only). */ /* */ -/* Copyright 2003-2007, 2009, 2012, 2013 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/ftstream.h b/include/internal/ftstream.h index 2661858..b37e7fa 100644 --- a/include/internal/ftstream.h +++ b/include/internal/ftstream.h @@ -4,7 +4,7 @@ /* */ /* Stream handling (specification). */ /* */ -/* Copyright 1996-2002, 2004-2006, 2011, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/fttrace.h b/include/internal/fttrace.h index d5253db..9d28d21 100644 --- a/include/internal/fttrace.h +++ b/include/internal/fttrace.h @@ -4,7 +4,7 @@ /* */ /* Tracing handling (specification only). */ /* */ -/* Copyright 2002, 2004-2007, 2009, 2011-2014 by */ +/* Copyright 2002-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/ftvalid.h b/include/internal/ftvalid.h index c281b14..9cda6ee 100644 --- a/include/internal/ftvalid.h +++ b/include/internal/ftvalid.h @@ -4,7 +4,7 @@ /* */ /* FreeType validation support (specification). */ /* */ -/* Copyright 2004, 2013, 2014 by */ +/* Copyright 2004-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/internal.h b/include/internal/internal.h index e0ddb06..1c1fd0e 100644 --- a/include/internal/internal.h +++ b/include/internal/internal.h @@ -4,7 +4,7 @@ /* */ /* Internal header files (specification only). */ /* */ -/* Copyright 1996-2004, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/psaux.h b/include/internal/psaux.h index e903114..4f36111 100644 --- a/include/internal/psaux.h +++ b/include/internal/psaux.h @@ -5,7 +5,7 @@ /* Auxiliary functions and data structures related to PostScript fonts */ /* (specification). */ /* */ -/* Copyright 1996-2004, 2006, 2008, 2009, 2012 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/pshints.h b/include/internal/pshints.h index f05ea68..21e4466 100644 --- a/include/internal/pshints.h +++ b/include/internal/pshints.h @@ -6,7 +6,7 @@ /* recorders (specification only). These are used to support native */ /* T1/T2 hints in the `type1', `cid', and `cff' font drivers. */ /* */ -/* Copyright 2001-2003, 2005-2007, 2009, 2012, 2014 by */ +/* Copyright 2001-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svbdf.h b/include/internal/services/svbdf.h index 0974752..865b536 100644 --- a/include/internal/services/svbdf.h +++ b/include/internal/services/svbdf.h @@ -4,7 +4,7 @@ /* */ /* The FreeType BDF services (specification). */ /* */ -/* Copyright 2003, 2009, 2012 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svcid.h b/include/internal/services/svcid.h index e0944d6..4a535a6 100644 --- a/include/internal/services/svcid.h +++ b/include/internal/services/svcid.h @@ -4,7 +4,7 @@ /* */ /* The FreeType CID font services (specification). */ /* */ -/* Copyright 2007, 2009, 2012 by */ +/* Copyright 2007-2015 by */ /* Derek Clegg and Michael Toftdal. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svgldict.h b/include/internal/services/svgldict.h index 1d12534..f78bca5 100644 --- a/include/internal/services/svgldict.h +++ b/include/internal/services/svgldict.h @@ -4,7 +4,7 @@ /* */ /* The FreeType glyph dictionary services (specification). */ /* */ -/* Copyright 2003, 2009, 2012 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svgxval.h b/include/internal/services/svgxval.h index 2cdab50..59cc3b7 100644 --- a/include/internal/services/svgxval.h +++ b/include/internal/services/svgxval.h @@ -4,7 +4,7 @@ /* */ /* FreeType API for validating TrueTypeGX/AAT tables (specification). */ /* */ -/* Copyright 2004, 2005 by */ +/* Copyright 2004-2015 by */ /* Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/include/internal/services/svkern.h b/include/internal/services/svkern.h index 1488adf..bc26f15 100644 --- a/include/internal/services/svkern.h +++ b/include/internal/services/svkern.h @@ -4,7 +4,7 @@ /* */ /* The FreeType Kerning service (specification). */ /* */ -/* Copyright 2006 by */ +/* Copyright 2006-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svmm.h b/include/internal/services/svmm.h index b08a663..f2cecfb 100644 --- a/include/internal/services/svmm.h +++ b/include/internal/services/svmm.h @@ -4,7 +4,7 @@ /* */ /* The FreeType Multiple Masters and GX var services (specification). */ /* */ -/* Copyright 2003, 2004, 2009, 2012 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svotval.h b/include/internal/services/svotval.h index 970bbd5..a82a642 100644 --- a/include/internal/services/svotval.h +++ b/include/internal/services/svotval.h @@ -4,7 +4,7 @@ /* */ /* The FreeType OpenType validation service (specification). */ /* */ -/* Copyright 2004, 2006 by */ +/* Copyright 2004-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svpfr.h b/include/internal/services/svpfr.h index 462786f..d4eb169 100644 --- a/include/internal/services/svpfr.h +++ b/include/internal/services/svpfr.h @@ -4,7 +4,7 @@ /* */ /* Internal PFR service functions (specification). */ /* */ -/* Copyright 2003, 2006 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svpostnm.h b/include/internal/services/svpostnm.h index a76b4fe..a89f79e 100644 --- a/include/internal/services/svpostnm.h +++ b/include/internal/services/svpostnm.h @@ -4,7 +4,7 @@ /* */ /* The FreeType PostScript name services (specification). */ /* */ -/* Copyright 2003, 2007, 2009, 2012 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svprop.h b/include/internal/services/svprop.h index 22da0bb..c9f07ce 100644 --- a/include/internal/services/svprop.h +++ b/include/internal/services/svprop.h @@ -4,7 +4,7 @@ /* */ /* The FreeType property service (specification). */ /* */ -/* Copyright 2012 by */ +/* Copyright 2012-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svpscmap.h b/include/internal/services/svpscmap.h index 030948e..66da6e1 100644 --- a/include/internal/services/svpscmap.h +++ b/include/internal/services/svpscmap.h @@ -4,7 +4,7 @@ /* */ /* The FreeType PostScript charmap service (specification). */ /* */ -/* Copyright 2003, 2006, 2009, 2012 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svpsinfo.h b/include/internal/services/svpsinfo.h index 4bfb506..752a266 100644 --- a/include/internal/services/svpsinfo.h +++ b/include/internal/services/svpsinfo.h @@ -4,7 +4,7 @@ /* */ /* The FreeType PostScript info service (specification). */ /* */ -/* Copyright 2003, 2004, 2009, 2011, 2012 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svsfnt.h b/include/internal/services/svsfnt.h index d3835aa..252ae1c 100644 --- a/include/internal/services/svsfnt.h +++ b/include/internal/services/svsfnt.h @@ -4,7 +4,7 @@ /* */ /* The FreeType SFNT table loading service (specification). */ /* */ -/* Copyright 2003, 2004, 2009, 2012 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svttcmap.h b/include/internal/services/svttcmap.h index 4370f4c..ed31843 100644 --- a/include/internal/services/svttcmap.h +++ b/include/internal/services/svttcmap.h @@ -4,7 +4,7 @@ /* */ /* The FreeType TrueType/sfnt cmap extra information service. */ /* */ -/* Copyright 2003 by */ +/* Copyright 2003-2015 by */ /* Masatake YAMATO, Redhat K.K. */ /* */ /* Copyright 2003, 2008, 2009, 2012, 2013 by */ diff --git a/include/internal/services/svtteng.h b/include/internal/services/svtteng.h index 58e02a6..272ee8c 100644 --- a/include/internal/services/svtteng.h +++ b/include/internal/services/svtteng.h @@ -4,7 +4,7 @@ /* */ /* The FreeType TrueType engine query service (specification). */ /* */ -/* Copyright 2006 by */ +/* Copyright 2006-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svttglyf.h b/include/internal/services/svttglyf.h index 3ba8a1f..f5cb76a 100644 --- a/include/internal/services/svttglyf.h +++ b/include/internal/services/svttglyf.h @@ -4,7 +4,7 @@ /* */ /* The FreeType TrueType glyph service. */ /* */ -/* Copyright 2007, 2009, 2012 by */ +/* Copyright 2007-2015 by */ /* David Turner. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svwinfnt.h b/include/internal/services/svwinfnt.h index 57f7765..0036929 100644 --- a/include/internal/services/svwinfnt.h +++ b/include/internal/services/svwinfnt.h @@ -4,7 +4,7 @@ /* */ /* The FreeType Windows FNT/FONT service (specification). */ /* */ -/* Copyright 2003 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/services/svxf86nm.h b/include/internal/services/svxf86nm.h index ca5d884..fd447ee 100644 --- a/include/internal/services/svxf86nm.h +++ b/include/internal/services/svxf86nm.h @@ -4,7 +4,7 @@ /* */ /* The FreeType XFree86 services (specification only). */ /* */ -/* Copyright 2003 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/sfnt.h b/include/internal/sfnt.h index d558e86..97ce390 100644 --- a/include/internal/sfnt.h +++ b/include/internal/sfnt.h @@ -4,7 +4,7 @@ /* */ /* High-level `sfnt' driver interface (specification). */ /* */ -/* Copyright 1996-2006, 2009, 2012-2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/t1types.h b/include/internal/t1types.h index e20237c..7dec4fc 100644 --- a/include/internal/t1types.h +++ b/include/internal/t1types.h @@ -5,7 +5,7 @@ /* Basic Type1/Type2 type definitions and interface (specification */ /* only). */ /* */ -/* Copyright 1996-2004, 2006, 2008, 2009, 2011, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/internal/tttypes.h b/include/internal/tttypes.h index ad302b8..6c1b52b 100644 --- a/include/internal/tttypes.h +++ b/include/internal/tttypes.h @@ -5,7 +5,7 @@ /* Basic SFNT/TrueType type definitions and interface (specification */ /* only). */ /* */ -/* Copyright 1996-2002, 2004-2008, 2012-2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/t1tables.h b/include/t1tables.h index 61aefdd..632be5a 100644 --- a/include/t1tables.h +++ b/include/t1tables.h @@ -5,7 +5,7 @@ /* Basic Type 1/Type 2 tables definitions and interface (specification */ /* only). */ /* */ -/* Copyright 1996-2004, 2006, 2008, 2009, 2011, 2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ttnameid.h b/include/ttnameid.h index e65b558..873b266 100644 --- a/include/ttnameid.h +++ b/include/ttnameid.h @@ -4,7 +4,7 @@ /* */ /* TrueType name ID definitions (specification only). */ /* */ -/* Copyright 1996-2004, 2006-2008, 2012-2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/tttables.h b/include/tttables.h index e1d8b05..ec0070a 100644 --- a/include/tttables.h +++ b/include/tttables.h @@ -5,7 +5,7 @@ /* Basic SFNT/TrueType tables definitions and interface */ /* (specification only). */ /* */ -/* Copyright 1996-2005, 2008-2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/tttags.h b/include/tttags.h index d59aa19..3836c7b 100644 --- a/include/tttags.h +++ b/include/tttags.h @@ -4,7 +4,7 @@ /* */ /* Tags for TrueType and OpenType tables (specification only). */ /* */ -/* Copyright 1996-2001, 2004, 2005, 2007, 2008, 2013 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/include/ttunpat.h b/include/ttunpat.h index bf53ddd..8ea5568 100644 --- a/include/ttunpat.h +++ b/include/ttunpat.h @@ -4,7 +4,7 @@ /* */ /* Definitions for the unpatented TrueType hinting system */ /* */ -/* Copyright 2003, 2006 by */ +/* Copyright 2003-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* Written by Graham Asher */ diff --git a/modules.cfg b/modules.cfg index 4e52594..ccb18d5 100644 --- a/modules.cfg +++ b/modules.cfg @@ -1,6 +1,6 @@ # modules.cfg # -# Copyright 2005-2007, 2009-2011, 2013 by +# Copyright 2005-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/Jamfile b/src/Jamfile index 1cc0685..7a9ee96 100644 --- a/src/Jamfile +++ b/src/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src Jamfile # -# Copyright 2001, 2002, 2013 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/autofit/Jamfile b/src/autofit/Jamfile index 2714765..6600a34 100644 --- a/src/autofit/Jamfile +++ b/src/autofit/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/autofit Jamfile # -# Copyright 2003, 2004, 2005, 2006, 2007, 2009 by +# Copyright 2003-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/autofit/afangles.c b/src/autofit/afangles.c index f8b095b..a35c9b3 100644 --- a/src/autofit/afangles.c +++ b/src/autofit/afangles.c @@ -5,7 +5,7 @@ /* Routines used to compute vector angles with limited accuracy */ /* and very high speed. It also contains sorting routines (body). */ /* */ -/* Copyright 2003-2006, 2011-2012 by */ +/* Copyright 2003-2015 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/autofit/afblue.c b/src/autofit/afblue.c index 811226e..03c276c 100644 --- a/src/autofit/afblue.c +++ b/src/autofit/afblue.c @@ -7,7 +7,7 @@ /* */ /* Auto-fitter data for blue strings (body). */ /* */ -/* Copyright 2013 by */ +/* Copyright 2013-2015 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/autofit/afblue.cin b/src/autofit/afblue.cin index c6762be..b303a4b 100644 --- a/src/autofit/afblue.cin +++ b/src/autofit/afblue.cin @@ -4,7 +4,7 @@ /* */ /* Auto-fitter data for blue strings (body). */ /* */ -/* Copyright 2013 by */ +/* Copyright 2013-2015 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/autofit/afblue.dat b/src/autofit/afblue.dat index 3f98c13..4d811a4 100644 --- a/src/autofit/afblue.dat +++ b/src/autofit/afblue.dat @@ -2,7 +2,7 @@ // // Auto-fitter data for blue strings. // -// Copyright 2013, 2014 by +// Copyright 2013-2015 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/autofit/afblue.h b/src/autofit/afblue.h index a861841..6119266 100644 --- a/src/autofit/afblue.h +++ b/src/autofit/afblue.h @@ -7,7 +7,7 @@ /* */ /* Auto-fitter data for blue strings (specification). */ /* */ -/* Copyright 2013, 2014 by */ +/* Copyright 2013-2015 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/autofit/afblue.hin b/src/autofit/afblue.hin index 0b4b48d..7cdd430 100644 --- a/src/autofit/afblue.hin +++ b/src/autofit/afblue.hin @@ -4,7 +4,7 @@ /* */ /* Auto-fitter data for blue strings (specification). */ /* */ -/* Copyright 2013, 2014 by */ +/* Copyright 2013-2015 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/autofit/afcjk.c b/src/autofit/afcjk.c index 048e0e7..f4715c6 100644 --- a/src/autofit/afcjk.c +++ b/src/autofit/afcjk.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter hinting routines for CJK writing system (body). */ /* */ -/* Copyright 2006-2014 by */ +/* Copyright 2006-2015 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/autofit/afcjk.h b/src/autofit/afcjk.h index 4dd4f39..47fac87 100644 --- a/src/autofit/afcjk.h +++ b/src/autofit/afcjk.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter hinting routines for CJK writing system (specification). */ /* */ -/* Copyright 2006, 2007, 2011-2014 by */ +/* Copyright 2006-2015 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/autofit/afcover.h b/src/autofit/afcover.h index d5ac969..520e8a4 100644 --- a/src/autofit/afcover.h +++ b/src/autofit/afcover.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter coverages (specification only). */ /* */ -/* Copyright 2013, 2014 by */ +/* Copyright 2013-2015 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/autofit/afdummy.c b/src/autofit/afdummy.c index f8702a1..03ca25f 100644 --- a/src/autofit/afdummy.c +++ b/src/autofit/afdummy.c @@ -5,7 +5,7 @@ /* Auto-fitter dummy routines to be used if no hinting should be */ /* performed (body). */ /* */ -/* Copyright 2003-2005, 2011, 2013 by */ +/* Copyright 2003-2015 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/autofit/afdummy.h b/src/autofit/afdummy.h index ad1b0d3..b4fdc78 100644 --- a/src/autofit/afdummy.h +++ b/src/autofit/afdummy.h @@ -5,7 +5,7 @@ /* Auto-fitter dummy routines to be used if no hinting should be */ /* performed (specification). */ /* */ -/* Copyright 2003-2005, 2011, 2013 by */ +/* Copyright 2003-2015 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/autofit/aferrors.h b/src/autofit/aferrors.h index 50e1a22..7b416e4 100644 --- a/src/autofit/aferrors.h +++ b/src/autofit/aferrors.h @@ -4,7 +4,7 @@ /* */ /* Autofitter error codes (specification only). */ /* */ -/* Copyright 2005, 2012 by */ +/* Copyright 2005-2015 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/autofit/afglobal.c b/src/autofit/afglobal.c index a54c20c..2d5fe26 100644 --- a/src/autofit/afglobal.c +++ b/src/autofit/afglobal.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter routines to compute global hinting values (body). */ /* */ -/* Copyright 2003-2014 by */ +/* Copyright 2003-2015 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/autofit/afglobal.h b/src/autofit/afglobal.h index 38d8d69..9bbb687 100644 --- a/src/autofit/afglobal.h +++ b/src/autofit/afglobal.h @@ -5,7 +5,7 @@ /* Auto-fitter routines to compute global hinting values */ /* (specification). */ /* */ -/* Copyright 2003-2005, 2007, 2009, 2011-2014 by */ +/* Copyright 2003-2015 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/autofit/afhints.c b/src/autofit/afhints.c index eb3b4ff..56bc386 100644 --- a/src/autofit/afhints.c +++ b/src/autofit/afhints.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter hinting routines (body). */ /* */ -/* Copyright 2003-2007, 2009-2014 by */ +/* Copyright 2003-2015 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/autofit/afhints.h b/src/autofit/afhints.h index 4796466..1da9849 100644 --- a/src/autofit/afhints.h +++ b/src/autofit/afhints.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter hinting routines (specification). */ /* */ -/* Copyright 2003-2008, 2010-2012, 2014 by */ +/* Copyright 2003-2015 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/autofit/afindic.c b/src/autofit/afindic.c index 197881b..7412cd1 100644 --- a/src/autofit/afindic.c +++ b/src/autofit/afindic.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter hinting routines for Indic writing system (body). */ /* */ -/* Copyright 2007, 2011-2013 by */ +/* Copyright 2007-2015 by */ /* Rahul Bhalerao , . */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/autofit/afindic.h b/src/autofit/afindic.h index 9e13cf7..4c36908 100644 --- a/src/autofit/afindic.h +++ b/src/autofit/afindic.h @@ -5,7 +5,7 @@ /* Auto-fitter hinting routines for Indic writing system */ /* (specification). */ /* */ -/* Copyright 2007, 2012, 2013 by */ +/* Copyright 2007-2015 by */ /* Rahul Bhalerao , . */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c index 36a3689..17cb093 100644 --- a/src/autofit/aflatin.c +++ b/src/autofit/aflatin.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter hinting routines for latin writing system (body). */ /* */ -/* Copyright 2003-2014 by */ +/* Copyright 2003-2015 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/autofit/aflatin.h b/src/autofit/aflatin.h index 2c0bfca..2c4a7e2 100644 --- a/src/autofit/aflatin.h +++ b/src/autofit/aflatin.h @@ -5,7 +5,7 @@ /* Auto-fitter hinting routines for latin writing system */ /* (specification). */ /* */ -/* Copyright 2003-2007, 2009, 2011-2014 by */ +/* Copyright 2003-2015 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/autofit/aflatin2.c b/src/autofit/aflatin2.c index 07590b3..2f5f379 100644 --- a/src/autofit/aflatin2.c +++ b/src/autofit/aflatin2.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter hinting routines for latin writing system (body). */ /* */ -/* Copyright 2003-2014 by */ +/* Copyright 2003-2015 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/autofit/aflatin2.h b/src/autofit/aflatin2.h index b5d252a..9326753 100644 --- a/src/autofit/aflatin2.h +++ b/src/autofit/aflatin2.h @@ -5,7 +5,7 @@ /* Auto-fitter hinting routines for latin writing system */ /* (specification). */ /* */ -/* Copyright 2003-2007, 2012, 2013 by */ +/* Copyright 2003-2015 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/autofit/afloader.c b/src/autofit/afloader.c index c6be5ac..5f68c8c 100644 --- a/src/autofit/afloader.c +++ b/src/autofit/afloader.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter glyph loading routines (body). */ /* */ -/* Copyright 2003-2009, 2011-2014 by */ +/* Copyright 2003-2015 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/autofit/afloader.h b/src/autofit/afloader.h index b7eff53..37cfd14 100644 --- a/src/autofit/afloader.h +++ b/src/autofit/afloader.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter glyph loading routines (specification). */ /* */ -/* Copyright 2003-2005, 2011-2013 by */ +/* Copyright 2003-2015 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/autofit/afmodule.c b/src/autofit/afmodule.c index 6ed8b02..35ce6ad 100644 --- a/src/autofit/afmodule.c +++ b/src/autofit/afmodule.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter module implementation (body). */ /* */ -/* Copyright 2003-2006, 2009, 2011-2014 by */ +/* Copyright 2003-2015 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/autofit/afmodule.h b/src/autofit/afmodule.h index 4f73d1d..b3c5979 100644 --- a/src/autofit/afmodule.h +++ b/src/autofit/afmodule.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter module implementation (specification). */ /* */ -/* Copyright 2003-2005, 2009, 2012, 2013 by */ +/* Copyright 2003-2015 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/autofit/afpic.c b/src/autofit/afpic.c index cb29fd7..5589e61 100644 --- a/src/autofit/afpic.c +++ b/src/autofit/afpic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for autofit module. */ /* */ -/* Copyright 2009-2014 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/autofit/afpic.h b/src/autofit/afpic.h index 9a68b4a..25071e3 100644 --- a/src/autofit/afpic.h +++ b/src/autofit/afpic.h @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for autofit module. */ /* */ -/* Copyright 2009, 2011-2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/autofit/afranges.c b/src/autofit/afranges.c index b2c504d..45fdc50 100644 --- a/src/autofit/afranges.c +++ b/src/autofit/afranges.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter Unicode script ranges (body). */ /* */ -/* Copyright 2013, 2014 by */ +/* Copyright 2013-2015 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/autofit/afranges.h b/src/autofit/afranges.h index fe5b2aa..7c78ab0 100644 --- a/src/autofit/afranges.h +++ b/src/autofit/afranges.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter Unicode script ranges (specification). */ /* */ -/* Copyright 2013, 2014 by */ +/* Copyright 2013-2015 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/autofit/afscript.h b/src/autofit/afscript.h index efe8754..79f9b7b 100644 --- a/src/autofit/afscript.h +++ b/src/autofit/afscript.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter scripts (specification only). */ /* */ -/* Copyright 2013, 2014 by */ +/* Copyright 2013-2015 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/autofit/afstyles.h b/src/autofit/afstyles.h index f14d354..20e721c 100644 --- a/src/autofit/afstyles.h +++ b/src/autofit/afstyles.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter styles (specification only). */ /* */ -/* Copyright 2013, 2014 by */ +/* Copyright 2013-2015 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/autofit/aftypes.h b/src/autofit/aftypes.h index 61badd1..8c7ea7d 100644 --- a/src/autofit/aftypes.h +++ b/src/autofit/aftypes.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter types (specification only). */ /* */ -/* Copyright 2003-2009, 2011-2014 by */ +/* Copyright 2003-2015 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/autofit/afwarp.c b/src/autofit/afwarp.c index 34a97ff..7cb7ee2 100644 --- a/src/autofit/afwarp.c +++ b/src/autofit/afwarp.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter warping algorithm (body). */ /* */ -/* Copyright 2006, 2007, 2011 by */ +/* Copyright 2006-2015 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/autofit/afwarp.h b/src/autofit/afwarp.h index 7343fdd..3b1c87a 100644 --- a/src/autofit/afwarp.h +++ b/src/autofit/afwarp.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter warping algorithm (specification). */ /* */ -/* Copyright 2006, 2007 by */ +/* Copyright 2006-2015 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/autofit/afwrtsys.h b/src/autofit/afwrtsys.h index 8aa2ed9..4aa89d2 100644 --- a/src/autofit/afwrtsys.h +++ b/src/autofit/afwrtsys.h @@ -4,7 +4,7 @@ /* */ /* Auto-fitter writing systems (specification only). */ /* */ -/* Copyright 2013 by */ +/* Copyright 2013-2015 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/autofit/autofit.c b/src/autofit/autofit.c index e2b9934..b6ed4a0 100644 --- a/src/autofit/autofit.c +++ b/src/autofit/autofit.c @@ -4,7 +4,7 @@ /* */ /* Auto-fitter module (body). */ /* */ -/* Copyright 2003-2007, 2011, 2013 by */ +/* Copyright 2003-2015 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/autofit/hbshim.c b/src/autofit/hbshim.c index a705cef..9a60001 100644 --- a/src/autofit/hbshim.c +++ b/src/autofit/hbshim.c @@ -4,7 +4,7 @@ /* */ /* HarfBuzz interface for accessing OpenType features (body). */ /* */ -/* Copyright 2013, 2014 by */ +/* Copyright 2013-2015 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/autofit/hbshim.h b/src/autofit/hbshim.h index 02f1513..5636ca6 100644 --- a/src/autofit/hbshim.h +++ b/src/autofit/hbshim.h @@ -4,7 +4,7 @@ /* */ /* HarfBuzz interface for accessing OpenType features (specification). */ /* */ -/* Copyright 2013 by */ +/* Copyright 2013-2015 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/autofit/module.mk b/src/autofit/module.mk index 6ec6091..3321438 100644 --- a/src/autofit/module.mk +++ b/src/autofit/module.mk @@ -3,7 +3,7 @@ # -# Copyright 2003, 2004, 2005, 2006 by +# Copyright 2003-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/autofit/rules.mk b/src/autofit/rules.mk index 5849cbe..6ef959f 100644 --- a/src/autofit/rules.mk +++ b/src/autofit/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 2003-2007, 2011, 2013 by +# Copyright 2003-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/base/Jamfile b/src/base/Jamfile index 832e8b8..ce8114d 100644 --- a/src/base/Jamfile +++ b/src/base/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/base Jamfile # -# Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/base/basepic.c b/src/base/basepic.c index aeb6fd5..9850ed9 100644 --- a/src/base/basepic.c +++ b/src/base/basepic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for base. */ /* */ -/* Copyright 2009, 2012, 2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/base/basepic.h b/src/base/basepic.h index 329d7c8..51ecf9e 100644 --- a/src/base/basepic.h +++ b/src/base/basepic.h @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for base. */ /* */ -/* Copyright 2009 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/base/ftadvanc.c b/src/base/ftadvanc.c index 18884ef..f12908f 100644 --- a/src/base/ftadvanc.c +++ b/src/base/ftadvanc.c @@ -4,7 +4,7 @@ /* */ /* Quick computation of advance widths (body). */ /* */ -/* Copyright 2008, 2009, 2011, 2013, 2014 by */ +/* Copyright 2008-2015 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/base/ftapi.c b/src/base/ftapi.c index 8914d1f..f22a181 100644 --- a/src/base/ftapi.c +++ b/src/base/ftapi.c @@ -4,7 +4,7 @@ /* */ /* The FreeType compatibility functions (body). */ /* */ -/* Copyright 2002 by */ +/* Copyright 2002-2015 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/base/ftbase.c b/src/base/ftbase.c index 5e5d70e..253dfb7 100644 --- a/src/base/ftbase.c +++ b/src/base/ftbase.c @@ -4,7 +4,7 @@ /* */ /* Single object library component (body only). */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 by */ +/* Copyright 1996-2015 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/base/ftbase.h b/src/base/ftbase.h index 51a1db1..cb57f96 100644 --- a/src/base/ftbase.h +++ b/src/base/ftbase.h @@ -4,7 +4,7 @@ /* */ /* The FreeType private functions used in base module (specification). */ /* */ -/* Copyright 2008, 2010 by */ +/* Copyright 2008-2015 by */ /* David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/base/ftbbox.c b/src/base/ftbbox.c index f9a1751..ee1763b 100644 --- a/src/base/ftbbox.c +++ b/src/base/ftbbox.c @@ -4,7 +4,7 @@ /* */ /* FreeType bbox computation (body). */ /* */ -/* Copyright 1996-2002, 2004, 2006, 2010, 2013, 2014 by */ +/* Copyright 1996-2015 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/base/ftbdf.c b/src/base/ftbdf.c index d9dcbad..aa72ddc 100644 --- a/src/base/ftbdf.c +++ b/src/base/ftbdf.c @@ -4,7 +4,7 @@ /* */ /* FreeType API for accessing BDF-specific strings (body). */ /* */ -/* Copyright 2002-2004, 2013, 2014 by */ +/* Copyright 2002-2015 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/base/ftbitmap.c b/src/base/ftbitmap.c index 19a1a80..98d49a3 100644 --- a/src/base/ftbitmap.c +++ b/src/base/ftbitmap.c @@ -4,7 +4,7 @@ /* */ /* FreeType utility functions for bitmaps (body). */ /* */ -/* Copyright 2004-2009, 2011, 2013, 2014 by */ +/* Copyright 2004-2015 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/base/ftcalc.c b/src/base/ftcalc.c index 57f7968..ccc3b4a 100644 --- a/src/base/ftcalc.c +++ b/src/base/ftcalc.c @@ -4,7 +4,7 @@ /* */ /* Arithmetic computations (body). */ /* */ -/* Copyright 1996-2006, 2008, 2012-2014 by */ +/* Copyright 1996-2015 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/base/ftcid.c b/src/base/ftcid.c index 747039c..0734881 100644 --- a/src/base/ftcid.c +++ b/src/base/ftcid.c @@ -4,7 +4,7 @@ /* */ /* FreeType API for accessing CID font information. */ /* */ -/* Copyright 2007, 2009, 2013 by */ +/* Copyright 2007-2015 by */ /* Derek Clegg and Michael Toftdal. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/base/ftdbgmem.c b/src/base/ftdbgmem.c index 6fb86fe..82cedc1 100644 --- a/src/base/ftdbgmem.c +++ b/src/base/ftdbgmem.c @@ -4,7 +4,7 @@ /* */ /* Memory debugger (body). */ /* */ -/* Copyright 2001-2006, 2009, 2013 by */ +/* Copyright 2001-2015 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/base/ftdebug.c b/src/base/ftdebug.c index 39ac6ad..2cdb7c2 100644 --- a/src/base/ftdebug.c +++ b/src/base/ftdebug.c @@ -4,7 +4,7 @@ /* */ /* Debugging and logging component (body). */ /* */ -/* Copyright 1996-2001, 2002, 2004, 2008, 2013 by */ +/* Copyright 1996-2015 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/base/ftfstype.c b/src/base/ftfstype.c index 6b49ef8..cd3458f 100644 --- a/src/base/ftfstype.c +++ b/src/base/ftfstype.c @@ -4,7 +4,7 @@ /* */ /* FreeType utility file to access FSType data (body). */ /* */ -/* Copyright 2008, 2009, 2014 by */ +/* Copyright 2008-2015 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/base/ftgasp.c b/src/base/ftgasp.c index 8485d29..bbd257c 100644 --- a/src/base/ftgasp.c +++ b/src/base/ftgasp.c @@ -4,7 +4,7 @@ /* */ /* Access of TrueType's `gasp' table (body). */ /* */ -/* Copyright 2007 by */ +/* Copyright 2007-2015 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/base/ftgloadr.c b/src/base/ftgloadr.c index 3cc5c7a..1b32d8b 100644 --- a/src/base/ftgloadr.c +++ b/src/base/ftgloadr.c @@ -4,7 +4,7 @@ /* */ /* The FreeType glyph loader (body). */ /* */ -/* Copyright 2002-2006, 2010, 2013 by */ +/* Copyright 2002-2015 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/base/ftglyph.c b/src/base/ftglyph.c index ac178c4..1817c49 100644 --- a/src/base/ftglyph.c +++ b/src/base/ftglyph.c @@ -4,7 +4,7 @@ /* */ /* FreeType convenience functions to handle glyphs (body). */ /* */ -/* Copyright 1996-2005, 2007, 2008, 2010, 2012-2014 by */ +/* Copyright 1996-2015 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/base/ftgxval.c b/src/base/ftgxval.c index a65f4c8..58868f2 100644 --- a/src/base/ftgxval.c +++ b/src/base/ftgxval.c @@ -4,7 +4,7 @@ /* */ /* FreeType API for validating TrueTyepGX/AAT tables (body). */ /* */ -/* Copyright 2004-2006, 2010, 2013, 2014 by */ +/* Copyright 2004-2015 by */ /* Masatake YAMATO, Redhat K.K, */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/base/ftinit.c b/src/base/ftinit.c index c4c8820..6a41f96 100644 --- a/src/base/ftinit.c +++ b/src/base/ftinit.c @@ -4,7 +4,7 @@ /* */ /* FreeType initialization layer (body). */ /* */ -/* Copyright 1996-2002, 2005, 2007, 2009, 2012-2014 by */ +/* Copyright 1996-2015 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/base/ftlcdfil.c b/src/base/ftlcdfil.c index d8bcbbf..787f6b8 100644 --- a/src/base/ftlcdfil.c +++ b/src/base/ftlcdfil.c @@ -4,7 +4,7 @@ /* */ /* FreeType API for color filtering of subpixel bitmap glyphs (body). */ /* */ -/* Copyright 2006, 2008-2010, 2013, 2014 by */ +/* Copyright 2006-2015 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/base/ftmac.c b/src/base/ftmac.c index 5301ab4..446a23a 100644 --- a/src/base/ftmac.c +++ b/src/base/ftmac.c @@ -8,7 +8,7 @@ /* This file is for Mac OS X only; see builds/mac/ftoldmac.c for */ /* classic platforms built by MPW. */ /* */ -/* Copyright 1996-2009, 2013, 2014 by */ +/* Copyright 1996-2015 by */ /* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/base/ftmm.c b/src/base/ftmm.c index 056680b..7c012aa 100644 --- a/src/base/ftmm.c +++ b/src/base/ftmm.c @@ -4,7 +4,7 @@ /* */ /* Multiple Master font support (body). */ /* */ -/* Copyright 1996-2001, 2003, 2004, 2009, 2013, 2014 by */ +/* Copyright 1996-2015 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/base/ftobjs.c b/src/base/ftobjs.c index d3a1209..e7e0c4f 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -4,7 +4,7 @@ /* */ /* The FreeType private base classes (body). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 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/base/ftotval.c b/src/base/ftotval.c index 5fc73d7..786457b 100644 --- a/src/base/ftotval.c +++ b/src/base/ftotval.c @@ -4,7 +4,7 @@ /* */ /* FreeType API for validating OpenType tables (body). */ /* */ -/* Copyright 2004, 2006, 2008, 2010, 2013 by */ +/* Copyright 2004-2015 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/base/ftoutln.c b/src/base/ftoutln.c index 45f074c..c2b2029 100644 --- a/src/base/ftoutln.c +++ b/src/base/ftoutln.c @@ -4,7 +4,7 @@ /* */ /* FreeType outline management (body). */ /* */ -/* Copyright 1996-2008, 2010, 2012-2014 by */ +/* Copyright 1996-2015 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/base/ftpatent.c b/src/base/ftpatent.c index dc2470d..bf2b085 100644 --- a/src/base/ftpatent.c +++ b/src/base/ftpatent.c @@ -5,7 +5,7 @@ /* FreeType API for checking patented TrueType bytecode instructions */ /* (body). */ /* */ -/* Copyright 2007, 2008, 2010 by */ +/* Copyright 2007-2015 by */ /* David Turner. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/base/ftpfr.c b/src/base/ftpfr.c index 7425abe..39f089e 100644 --- a/src/base/ftpfr.c +++ b/src/base/ftpfr.c @@ -4,7 +4,7 @@ /* */ /* FreeType API for accessing PFR-specific data (body). */ /* */ -/* Copyright 2002-2004, 2008, 2010, 2013, 2014 by */ +/* Copyright 2002-2015 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/base/ftpic.c b/src/base/ftpic.c index 9bd92f7..6c4b1cd 100644 --- a/src/base/ftpic.c +++ b/src/base/ftpic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services (body). */ /* */ -/* Copyright 2009, 2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/base/ftrfork.c b/src/base/ftrfork.c index efe24d6..4ee0ba3 100644 --- a/src/base/ftrfork.c +++ b/src/base/ftrfork.c @@ -4,7 +4,7 @@ /* */ /* Embedded resource forks accessor (body). */ /* */ -/* Copyright 2004-2010, 2013, 2014 by */ +/* Copyright 2004-2015 by */ /* Masatake YAMATO and Redhat K.K. */ /* */ /* FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are */ diff --git a/src/base/ftsnames.c b/src/base/ftsnames.c index 260e91c..80304e5 100644 --- a/src/base/ftsnames.c +++ b/src/base/ftsnames.c @@ -7,7 +7,7 @@ /* */ /* This is _not_ used to retrieve glyph names! */ /* */ -/* Copyright 1996-2001, 2002, 2009 by */ +/* Copyright 1996-2015 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/base/ftstream.c b/src/base/ftstream.c index 759fd8f..e115674 100644 --- a/src/base/ftstream.c +++ b/src/base/ftstream.c @@ -4,7 +4,7 @@ /* */ /* I/O stream support (body). */ /* */ -/* Copyright 2000-2002, 2004-2006, 2008-2011, 2013 by */ +/* Copyright 2000-2015 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/base/ftstroke.c b/src/base/ftstroke.c index 5fc41fc..69a403f 100644 --- a/src/base/ftstroke.c +++ b/src/base/ftstroke.c @@ -4,7 +4,7 @@ /* */ /* FreeType path stroker (body). */ /* */ -/* Copyright 2002-2006, 2008-2011, 2013, 2014 by */ +/* Copyright 2002-2015 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/base/ftsynth.c b/src/base/ftsynth.c index 0567bd5..cd68533 100644 --- a/src/base/ftsynth.c +++ b/src/base/ftsynth.c @@ -4,7 +4,7 @@ /* */ /* FreeType synthesizing code for emboldening and slanting (body). */ /* */ -/* Copyright 2000-2006, 2010, 2012-2014 by */ +/* Copyright 2000-2015 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/base/ftsystem.c b/src/base/ftsystem.c index 2c6ddac..10e245d 100644 --- a/src/base/ftsystem.c +++ b/src/base/ftsystem.c @@ -4,7 +4,7 @@ /* */ /* ANSI-specific FreeType low-level system interface (body). */ /* */ -/* Copyright 1996-2002, 2006, 2008-2011, 2013 by */ +/* Copyright 1996-2015 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/base/fttrigon.c b/src/base/fttrigon.c index 22b7ecf..bdbc77b 100644 --- a/src/base/fttrigon.c +++ b/src/base/fttrigon.c @@ -4,7 +4,7 @@ /* */ /* FreeType trigonometric functions (body). */ /* */ -/* Copyright 2001-2005, 2012-2014 by */ +/* Copyright 2001-2015 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/base/fttype1.c b/src/base/fttype1.c index 47af19a..c549382 100644 --- a/src/base/fttype1.c +++ b/src/base/fttype1.c @@ -4,7 +4,7 @@ /* */ /* FreeType utility file for PS names support (body). */ /* */ -/* Copyright 2002-2004, 2011, 2014 by */ +/* Copyright 2002-2015 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/base/ftutil.c b/src/base/ftutil.c index 56e2800..221ce27 100644 --- a/src/base/ftutil.c +++ b/src/base/ftutil.c @@ -4,7 +4,7 @@ /* */ /* FreeType utility file for memory and list management (body). */ /* */ -/* Copyright 2002, 2004-2007, 2013 by */ +/* Copyright 2002-2015 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/base/ftwinfnt.c b/src/base/ftwinfnt.c index 8e337fb..76a19af 100644 --- a/src/base/ftwinfnt.c +++ b/src/base/ftwinfnt.c @@ -4,7 +4,7 @@ /* */ /* FreeType API for accessing Windows FNT specific info (body). */ /* */ -/* Copyright 2003, 2004, 2014 by */ +/* Copyright 2003-2015 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/base/ftxf86.c b/src/base/ftxf86.c index a4bf767..a0f2558 100644 --- a/src/base/ftxf86.c +++ b/src/base/ftxf86.c @@ -4,7 +4,7 @@ /* */ /* FreeType utility file for X11 support (body). */ /* */ -/* Copyright 2002, 2003, 2004 by */ +/* Copyright 2002-2015 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/base/rules.mk b/src/base/rules.mk index 640ab6d..1852e08 100644 --- a/src/base/rules.mk +++ b/src/base/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2002-2009, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/bdf/Jamfile b/src/bdf/Jamfile index da23ccd..006843c 100644 --- a/src/bdf/Jamfile +++ b/src/bdf/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/bdf Jamfile # -# Copyright 2002 by +# Copyright 2002-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/bzip2/Jamfile b/src/bzip2/Jamfile index 3da986d..9ae502d 100644 --- a/src/bzip2/Jamfile +++ b/src/bzip2/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/bzip2 Jamfile # -# Copyright 2010 by +# Copyright 2010-2015 by # Joel Klinghed # # Based on src/lzw/Jamfile, Copyright 2004, 2006 by diff --git a/src/bzip2/ftbzip2.c b/src/bzip2/ftbzip2.c index 7e406b1..a0de1c4 100644 --- a/src/bzip2/ftbzip2.c +++ b/src/bzip2/ftbzip2.c @@ -8,7 +8,7 @@ /* parse compressed PCF fonts, as found with many X11 server */ /* distributions. */ /* */ -/* Copyright 2010, 2012-2014 by */ +/* Copyright 2010-2015 by */ /* Joel Klinghed. */ /* */ /* Based on src/gzip/ftgzip.c, Copyright 2002 - 2010 by */ diff --git a/src/bzip2/rules.mk b/src/bzip2/rules.mk index 845066d..707369e 100644 --- a/src/bzip2/rules.mk +++ b/src/bzip2/rules.mk @@ -2,7 +2,7 @@ # FreeType 2 BZIP2 support configuration rules # -# Copyright 2010 by +# Copyright 2010-2015 by # Joel Klinghed. # # Based on src/lzw/rules.mk, Copyright 2004-2006 by diff --git a/src/cache/Jamfile b/src/cache/Jamfile index 6563991..75d8997 100644 --- a/src/cache/Jamfile +++ b/src/cache/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/cache Jamfile # -# Copyright 2001, 2003, 2004, 2013 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/cache/ftcache.c b/src/cache/ftcache.c index d41e91e..8de527a 100644 --- a/src/cache/ftcache.c +++ b/src/cache/ftcache.c @@ -4,7 +4,7 @@ /* */ /* The FreeType Caching sub-system (body only). */ /* */ -/* Copyright 2000-2001, 2003 by */ +/* Copyright 2000-2015 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/cache/ftcbasic.c b/src/cache/ftcbasic.c index 6bad39d..2233821 100644 --- a/src/cache/ftcbasic.c +++ b/src/cache/ftcbasic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType basic cache interface (body). */ /* */ -/* Copyright 2003-2007, 2009-2011, 2013, 2014 by */ +/* Copyright 2003-2015 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/cache/ftccache.c b/src/cache/ftccache.c index f20dd45..e1d52fa 100644 --- a/src/cache/ftccache.c +++ b/src/cache/ftccache.c @@ -4,7 +4,7 @@ /* */ /* The FreeType internal cache interface (body). */ /* */ -/* Copyright 2000-2007, 2009-2011, 2013 by */ +/* Copyright 2000-2015 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/cache/ftccache.h b/src/cache/ftccache.h index 4155f32..ba1dfee 100644 --- a/src/cache/ftccache.h +++ b/src/cache/ftccache.h @@ -4,7 +4,7 @@ /* */ /* FreeType internal cache interface (specification). */ /* */ -/* Copyright 2000-2007, 2009-2011, 2013 by */ +/* Copyright 2000-2015 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/cache/ftccback.h b/src/cache/ftccback.h index 9528279..b3237d5 100644 --- a/src/cache/ftccback.h +++ b/src/cache/ftccback.h @@ -4,7 +4,7 @@ /* */ /* Callback functions of the caching sub-system (specification only). */ /* */ -/* Copyright 2004-2006, 2011, 2013 by */ +/* Copyright 2004-2015 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/cache/ftccmap.c b/src/cache/ftccmap.c index ab22366..0ef4423 100644 --- a/src/cache/ftccmap.c +++ b/src/cache/ftccmap.c @@ -4,7 +4,7 @@ /* */ /* FreeType CharMap cache (body) */ /* */ -/* Copyright 2000-2014 by */ +/* Copyright 2000-2015 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/cache/ftcerror.h b/src/cache/ftcerror.h index 0e05570..15adec5 100644 --- a/src/cache/ftcerror.h +++ b/src/cache/ftcerror.h @@ -4,7 +4,7 @@ /* */ /* Caching sub-system error codes (specification only). */ /* */ -/* Copyright 2001, 2012 by */ +/* Copyright 2001-2015 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/cache/ftcglyph.c b/src/cache/ftcglyph.c index 441e177..edb745f 100644 --- a/src/cache/ftcglyph.c +++ b/src/cache/ftcglyph.c @@ -4,7 +4,7 @@ /* */ /* FreeType Glyph Image (FT_Glyph) cache (body). */ /* */ -/* Copyright 2000-2001, 2003, 2004, 2006, 2009, 2011 by */ +/* Copyright 2000-2015 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/cache/ftcglyph.h b/src/cache/ftcglyph.h index 5fed19c..af4d0ce 100644 --- a/src/cache/ftcglyph.h +++ b/src/cache/ftcglyph.h @@ -4,7 +4,7 @@ /* */ /* FreeType abstract glyph cache (specification). */ /* */ -/* Copyright 2000-2001, 2003, 2004, 2006, 2007, 2011 by */ +/* Copyright 2000-2015 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/cache/ftcimage.c b/src/cache/ftcimage.c index c242ece..88dc901 100644 --- a/src/cache/ftcimage.c +++ b/src/cache/ftcimage.c @@ -4,7 +4,7 @@ /* */ /* FreeType Image cache (body). */ /* */ -/* Copyright 2000-2001, 2003, 2004, 2006, 2010 by */ +/* Copyright 2000-2015 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/cache/ftcimage.h b/src/cache/ftcimage.h index 20d5d3e..b312eaa 100644 --- a/src/cache/ftcimage.h +++ b/src/cache/ftcimage.h @@ -4,7 +4,7 @@ /* */ /* FreeType Generic Image cache (specification) */ /* */ -/* Copyright 2000-2001, 2002, 2003, 2006 by */ +/* Copyright 2000-2015 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/cache/ftcmanag.c b/src/cache/ftcmanag.c index fff7a08..5d70090 100644 --- a/src/cache/ftcmanag.c +++ b/src/cache/ftcmanag.c @@ -4,7 +4,7 @@ /* */ /* FreeType Cache Manager (body). */ /* */ -/* Copyright 2000-2006, 2008-2010, 2013, 2014 by */ +/* Copyright 2000-2015 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/cache/ftcmanag.h b/src/cache/ftcmanag.h index 0aec33c..c6787b7 100644 --- a/src/cache/ftcmanag.h +++ b/src/cache/ftcmanag.h @@ -4,7 +4,7 @@ /* */ /* FreeType Cache Manager (specification). */ /* */ -/* Copyright 2000-2001, 2003, 2004, 2006, 2010, 2013 by */ +/* Copyright 2000-2015 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/cache/ftcmru.c b/src/cache/ftcmru.c index dc8b4cc..10ce4f3 100644 --- a/src/cache/ftcmru.c +++ b/src/cache/ftcmru.c @@ -4,7 +4,7 @@ /* */ /* FreeType MRU support (body). */ /* */ -/* Copyright 2003, 2004, 2006, 2009 by */ +/* Copyright 2003-2015 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/cache/ftcmru.h b/src/cache/ftcmru.h index 6fccf11..c0c35f9 100644 --- a/src/cache/ftcmru.h +++ b/src/cache/ftcmru.h @@ -4,7 +4,7 @@ /* */ /* Simple MRU list-cache (specification). */ /* */ -/* Copyright 2000-2001, 2003-2006, 2010, 2013 by */ +/* Copyright 2000-2015 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/cache/ftcsbits.c b/src/cache/ftcsbits.c index 59727d1..0945f2b 100644 --- a/src/cache/ftcsbits.c +++ b/src/cache/ftcsbits.c @@ -4,7 +4,7 @@ /* */ /* FreeType sbits manager (body). */ /* */ -/* Copyright 2000-2006, 2009-2011, 2013, 2014 by */ +/* Copyright 2000-2015 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/cache/ftcsbits.h b/src/cache/ftcsbits.h index df55dca..5a2fa1a 100644 --- a/src/cache/ftcsbits.h +++ b/src/cache/ftcsbits.h @@ -4,7 +4,7 @@ /* */ /* A small-bitmap cache (specification). */ /* */ -/* Copyright 2000-2001, 2002, 2003, 2006, 2011 by */ +/* Copyright 2000-2015 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/cache/rules.mk b/src/cache/rules.mk index d64d9bc..6d5cf34 100644 --- a/src/cache/rules.mk +++ b/src/cache/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 2000, 2001, 2003, 2004, 2006, 2008 by +# Copyright 2000-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/cff/Jamfile b/src/cff/Jamfile index 6705d3c..8ffb79c 100644 --- a/src/cff/Jamfile +++ b/src/cff/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/cff Jamfile # -# Copyright 2001, 2002 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/cff/cff.c b/src/cff/cff.c index c3840b5..bb2cfb5 100644 --- a/src/cff/cff.c +++ b/src/cff/cff.c @@ -4,7 +4,7 @@ /* */ /* FreeType OpenType driver component (body only). */ /* */ -/* Copyright 1996-2001, 2002, 2013 by */ +/* Copyright 1996-2015 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/cff/cffcmap.c b/src/cff/cffcmap.c index 52248b2..e7538e9 100644 --- a/src/cff/cffcmap.c +++ b/src/cff/cffcmap.c @@ -4,7 +4,7 @@ /* */ /* CFF character mapping table (cmap) support (body). */ /* */ -/* Copyright 2002-2007, 2010, 2013 by */ +/* Copyright 2002-2015 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/cff/cffcmap.h b/src/cff/cffcmap.h index 3f7f67b..6eaed63 100644 --- a/src/cff/cffcmap.h +++ b/src/cff/cffcmap.h @@ -4,7 +4,7 @@ /* */ /* CFF character mapping table (cmap) support (specification). */ /* */ -/* Copyright 2002, 2003, 2006 by */ +/* Copyright 2002-2015 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/cff/cffdrivr.c b/src/cff/cffdrivr.c index 3e8898e..851dcbf 100644 --- a/src/cff/cffdrivr.c +++ b/src/cff/cffdrivr.c @@ -4,7 +4,7 @@ /* */ /* OpenType font driver implementation (body). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 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/cff/cffdrivr.h b/src/cff/cffdrivr.h index 50e8138..9527f5e 100644 --- a/src/cff/cffdrivr.h +++ b/src/cff/cffdrivr.h @@ -4,7 +4,7 @@ /* */ /* High-level OpenType driver interface (specification). */ /* */ -/* Copyright 1996-2001, 2002 by */ +/* Copyright 1996-2015 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/cff/cfferrs.h b/src/cff/cfferrs.h index 801d73e..543bdb0 100644 --- a/src/cff/cfferrs.h +++ b/src/cff/cfferrs.h @@ -4,7 +4,7 @@ /* */ /* CFF error codes (specification only). */ /* */ -/* Copyright 2001, 2012 by */ +/* Copyright 2001-2015 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/cff/cffgload.c b/src/cff/cffgload.c index 758a3d3..89abb1f 100644 --- a/src/cff/cffgload.c +++ b/src/cff/cffgload.c @@ -4,7 +4,7 @@ /* */ /* OpenType Glyph Loader (body). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 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/cff/cffgload.h b/src/cff/cffgload.h index 41df7db..5c52d43 100644 --- a/src/cff/cffgload.h +++ b/src/cff/cffgload.h @@ -4,7 +4,7 @@ /* */ /* OpenType Glyph Loader (specification). */ /* */ -/* Copyright 1996-2004, 2006-2009, 2013 by */ +/* Copyright 1996-2015 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/cff/cffload.c b/src/cff/cffload.c index d9bec59..71ebaac 100644 --- a/src/cff/cffload.c +++ b/src/cff/cffload.c @@ -4,7 +4,7 @@ /* */ /* OpenType and CFF data/program tables loader (body). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 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/cff/cffload.h b/src/cff/cffload.h index 8049619..459e7b0 100644 --- a/src/cff/cffload.h +++ b/src/cff/cffload.h @@ -4,7 +4,7 @@ /* */ /* OpenType & CFF data/program tables loader (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2007, 2008, 2010 by */ +/* Copyright 1996-2015 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/cff/cffobjs.c b/src/cff/cffobjs.c index da3d019..65dc9b6 100644 --- a/src/cff/cffobjs.c +++ b/src/cff/cffobjs.c @@ -4,7 +4,7 @@ /* */ /* OpenType objects manager (body). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 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/cff/cffobjs.h b/src/cff/cffobjs.h index dfbf9a9..3cc9531 100644 --- a/src/cff/cffobjs.h +++ b/src/cff/cffobjs.h @@ -4,7 +4,7 @@ /* */ /* OpenType objects manager (specification). */ /* */ -/* Copyright 1996-2004, 2006-2008, 2013 by */ +/* Copyright 1996-2015 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/cff/cffparse.c b/src/cff/cffparse.c index c79ab62..9a2d811 100644 --- a/src/cff/cffparse.c +++ b/src/cff/cffparse.c @@ -4,7 +4,7 @@ /* */ /* CFF token stream parser (body) */ /* */ -/* Copyright 1996-2004, 2007-2014 by */ +/* Copyright 1996-2015 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/cff/cffparse.h b/src/cff/cffparse.h index 61d91ed..8ad02ea 100644 --- a/src/cff/cffparse.h +++ b/src/cff/cffparse.h @@ -4,7 +4,7 @@ /* */ /* CFF token stream parser (specification) */ /* */ -/* Copyright 1996-2003, 2011 by */ +/* Copyright 1996-2015 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/cff/cffpic.c b/src/cff/cffpic.c index f22e4f0..d40dec5 100644 --- a/src/cff/cffpic.c +++ b/src/cff/cffpic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for cff module. */ /* */ -/* Copyright 2009, 2010, 2012, 2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/cff/cffpic.h b/src/cff/cffpic.h index 50bab4c..a29620e 100644 --- a/src/cff/cffpic.h +++ b/src/cff/cffpic.h @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for cff module. */ /* */ -/* Copyright 2009, 2012, 2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/cff/cfftoken.h b/src/cff/cfftoken.h index bcb4276..5b32076 100644 --- a/src/cff/cfftoken.h +++ b/src/cff/cfftoken.h @@ -4,7 +4,7 @@ /* */ /* CFF token definitions (specification only). */ /* */ -/* Copyright 1996-2003, 2011 by */ +/* Copyright 1996-2015 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/cff/cfftypes.h b/src/cff/cfftypes.h index 8727446..de8a5ee 100644 --- a/src/cff/cfftypes.h +++ b/src/cff/cfftypes.h @@ -5,7 +5,7 @@ /* Basic OpenType/CFF type definitions and interface (specification */ /* only). */ /* */ -/* Copyright 1996-2003, 2006-2008, 2010-2011, 2013 by */ +/* Copyright 1996-2015 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/cff/module.mk b/src/cff/module.mk index ef1391c..ba08ebc 100644 --- a/src/cff/module.mk +++ b/src/cff/module.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/cff/rules.mk b/src/cff/rules.mk index 23b4730..7f6e857 100644 --- a/src/cff/rules.mk +++ b/src/cff/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2001, 2003, 2011, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/cid/Jamfile b/src/cid/Jamfile index ebeaed5..af00180 100644 --- a/src/cid/Jamfile +++ b/src/cid/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/cid Jamfile # -# Copyright 2001 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/cid/ciderrs.h b/src/cid/ciderrs.h index ef13155..5e0e776 100644 --- a/src/cid/ciderrs.h +++ b/src/cid/ciderrs.h @@ -4,7 +4,7 @@ /* */ /* CID error codes (specification only). */ /* */ -/* Copyright 2001, 2012 by */ +/* Copyright 2001-2015 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/cidgload.c b/src/cid/cidgload.c index 7febab8..07e2d6f 100644 --- a/src/cid/cidgload.c +++ b/src/cid/cidgload.c @@ -4,7 +4,7 @@ /* */ /* CID-keyed Type1 Glyph Loader (body). */ /* */ -/* Copyright 1996-2007, 2009, 2010, 2013 by */ +/* Copyright 1996-2015 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/cidgload.h b/src/cid/cidgload.h index a0a91bf..4a10ce5 100644 --- a/src/cid/cidgload.h +++ b/src/cid/cidgload.h @@ -4,7 +4,7 @@ /* */ /* OpenType Glyph Loader (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2004 by */ +/* Copyright 1996-2015 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/cidload.c b/src/cid/cidload.c index 1cda0ee..4f8009f 100644 --- a/src/cid/cidload.c +++ b/src/cid/cidload.c @@ -4,7 +4,7 @@ /* */ /* CID-keyed Type1 font loader (body). */ /* */ -/* Copyright 1996-2006, 2009, 2011-2014 by */ +/* Copyright 1996-2015 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/cidload.h b/src/cid/cidload.h index 8c172ff..fab41f9 100644 --- a/src/cid/cidload.h +++ b/src/cid/cidload.h @@ -4,7 +4,7 @@ /* */ /* CID-keyed Type1 font loader (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2004 by */ +/* Copyright 1996-2015 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/cidobjs.c b/src/cid/cidobjs.c index 5932ffa..a63130d 100644 --- a/src/cid/cidobjs.c +++ b/src/cid/cidobjs.c @@ -4,7 +4,7 @@ /* */ /* CID objects manager (body). */ /* */ -/* Copyright 1996-2006, 2008, 2010-2011, 2013 by */ +/* Copyright 1996-2015 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/cidobjs.h b/src/cid/cidobjs.h index aee346d..e9095ca 100644 --- a/src/cid/cidobjs.h +++ b/src/cid/cidobjs.h @@ -4,7 +4,7 @@ /* */ /* CID objects manager (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2004, 2006 by */ +/* Copyright 1996-2015 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/cidparse.c b/src/cid/cidparse.c index d8476cd..4c8beff 100644 --- a/src/cid/cidparse.c +++ b/src/cid/cidparse.c @@ -4,7 +4,7 @@ /* */ /* CID-keyed Type1 parser (body). */ /* */ -/* Copyright 1996-2007, 2009, 2013, 2014 by */ +/* Copyright 1996-2015 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/cidparse.h b/src/cid/cidparse.h index f27be65..93318f2 100644 --- a/src/cid/cidparse.h +++ b/src/cid/cidparse.h @@ -4,7 +4,7 @@ /* */ /* CID-keyed Type1 parser (specification). */ /* */ -/* Copyright 1996-2004, 2014 by */ +/* Copyright 1996-2015 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/cidriver.c b/src/cid/cidriver.c index 6132a27..4e86151 100644 --- a/src/cid/cidriver.c +++ b/src/cid/cidriver.c @@ -4,7 +4,7 @@ /* */ /* CID driver interface (body). */ /* */ -/* Copyright 1996-2004, 2006, 2008, 2009, 2011, 2013 by */ +/* Copyright 1996-2015 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/cidriver.h b/src/cid/cidriver.h index 3c45e06..e5b8678 100644 --- a/src/cid/cidriver.h +++ b/src/cid/cidriver.h @@ -4,7 +4,7 @@ /* */ /* High-level CID driver interface (specification). */ /* */ -/* Copyright 1996-2001, 2002 by */ +/* Copyright 1996-2015 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 904cb09..82eae0c 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, 2006, 2008, 2009 by */ +/* Copyright 1996-2015 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/module.mk b/src/cid/module.mk index ce30bfd..e312a3c 100644 --- a/src/cid/module.mk +++ b/src/cid/module.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/cid/rules.mk b/src/cid/rules.mk index 9926c8a..282f2aa 100644 --- a/src/cid/rules.mk +++ b/src/cid/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2001, 2003 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/cid/type1cid.c b/src/cid/type1cid.c index 0b866e9..0d54ca7 100644 --- a/src/cid/type1cid.c +++ b/src/cid/type1cid.c @@ -4,7 +4,7 @@ /* */ /* FreeType OpenType driver component (body only). */ /* */ -/* Copyright 1996-2001 by */ +/* Copyright 1996-2015 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/gxvalid/Jamfile b/src/gxvalid/Jamfile index 88049a6..9419067 100644 --- a/src/gxvalid/Jamfile +++ b/src/gxvalid/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/gxvalid Jamfile # -# Copyright 2005 by +# Copyright 2005-2015 by # suzuki toshiya, Masatake YAMATO and Red Hat K.K. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/gxvalid/gxvalid.c b/src/gxvalid/gxvalid.c index f066355..7b5b091 100644 --- a/src/gxvalid/gxvalid.c +++ b/src/gxvalid/gxvalid.c @@ -4,7 +4,7 @@ /* */ /* FreeType validator for TrueTypeGX/AAT tables (body only). */ /* */ -/* Copyright 2005 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvalid.h b/src/gxvalid/gxvalid.h index 3ed646c..8c227d0 100644 --- a/src/gxvalid/gxvalid.h +++ b/src/gxvalid/gxvalid.h @@ -4,7 +4,7 @@ /* */ /* TrueTyeeGX/AAT table validation (specification only). */ /* */ -/* Copyright 2005 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvbsln.c b/src/gxvalid/gxvbsln.c index 03ef6cc..cc20219 100644 --- a/src/gxvalid/gxvbsln.c +++ b/src/gxvalid/gxvbsln.c @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT bsln table validation (body). */ /* */ -/* Copyright 2004, 2005 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvcommn.c b/src/gxvalid/gxvcommn.c index c6cdb9e..8ee0ce1 100644 --- a/src/gxvalid/gxvcommn.c +++ b/src/gxvalid/gxvcommn.c @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT common tables validation (body). */ /* */ -/* Copyright 2004, 2005, 2009, 2010, 2013 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvcommn.h b/src/gxvalid/gxvcommn.h index 6594165..9ec9956 100644 --- a/src/gxvalid/gxvcommn.h +++ b/src/gxvalid/gxvcommn.h @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT common tables validation (specification). */ /* */ -/* Copyright 2004, 2005, 2012, 2014 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxverror.h b/src/gxvalid/gxverror.h index d33de4a..6bbc23a 100644 --- a/src/gxvalid/gxverror.h +++ b/src/gxvalid/gxverror.h @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT validation module error codes (specification only). */ /* */ -/* Copyright 2004, 2005, 2012-2013 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvfeat.c b/src/gxvalid/gxvfeat.c index 69298b2..0da9777 100644 --- a/src/gxvalid/gxvfeat.c +++ b/src/gxvalid/gxvfeat.c @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT feat table validation (body). */ /* */ -/* Copyright 2004, 2005, 2008, 2012 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvfeat.h b/src/gxvalid/gxvfeat.h index 636fa66..b617df5 100644 --- a/src/gxvalid/gxvfeat.h +++ b/src/gxvalid/gxvfeat.h @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT feat table validation (specification). */ /* */ -/* Copyright 2004, 2005 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvfgen.c b/src/gxvalid/gxvfgen.c index 06e3f9c..75c5e20 100644 --- a/src/gxvalid/gxvfgen.c +++ b/src/gxvalid/gxvfgen.c @@ -5,7 +5,7 @@ /* Generate feature registry data for gxv `feat' validator. */ /* This program is derived from gxfeatreg.c in gxlayout. */ /* */ -/* Copyright 2004, 2005, 2006 by */ +/* Copyright 2004-2015 by */ /* Masatake YAMATO and Redhat K.K. */ /* */ /* This file may only be used, */ diff --git a/src/gxvalid/gxvjust.c b/src/gxvalid/gxvjust.c index 9610697..8caa05b 100644 --- a/src/gxvalid/gxvjust.c +++ b/src/gxvalid/gxvjust.c @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT just table validation (body). */ /* */ -/* Copyright 2005, 2014 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvkern.c b/src/gxvalid/gxvkern.c index c346619..1adb04e 100644 --- a/src/gxvalid/gxvkern.c +++ b/src/gxvalid/gxvkern.c @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT kern table validation (body). */ /* */ -/* Copyright 2004-2007, 2013 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvlcar.c b/src/gxvalid/gxvlcar.c index c0542e6..51db676 100644 --- a/src/gxvalid/gxvlcar.c +++ b/src/gxvalid/gxvlcar.c @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT lcar table validation (body). */ /* */ -/* Copyright 2004, 2005 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmod.c b/src/gxvalid/gxvmod.c index 19865c0..17a02e7 100644 --- a/src/gxvalid/gxvmod.c +++ b/src/gxvalid/gxvmod.c @@ -4,7 +4,7 @@ /* */ /* FreeType's TrueTypeGX/AAT validation module implementation (body). */ /* */ -/* Copyright 2004-2006, 2013 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmod.h b/src/gxvalid/gxvmod.h index 6f303a1..1ff2cfc 100644 --- a/src/gxvalid/gxvmod.h +++ b/src/gxvalid/gxvmod.h @@ -5,7 +5,7 @@ /* FreeType's TrueTypeGX/AAT validation module implementation */ /* (specification). */ /* */ -/* Copyright 2004, 2005 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmort.c b/src/gxvalid/gxvmort.c index 52bfade..042d0d1 100644 --- a/src/gxvalid/gxvmort.c +++ b/src/gxvalid/gxvmort.c @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT mort table validation (body). */ /* */ -/* Copyright 2005, 2013 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmort.h b/src/gxvalid/gxvmort.h index 9bc4a13..c95391b 100644 --- a/src/gxvalid/gxvmort.h +++ b/src/gxvalid/gxvmort.h @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT common definition for mort table (specification). */ /* */ -/* Copyright 2004, 2005 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmort0.c b/src/gxvalid/gxvmort0.c index c66655e..0cace35 100644 --- a/src/gxvalid/gxvmort0.c +++ b/src/gxvalid/gxvmort0.c @@ -5,7 +5,7 @@ /* TrueTypeGX/AAT mort table validation */ /* body for type0 (Indic Script Rearrangement) subtable. */ /* */ -/* Copyright 2005 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmort1.c b/src/gxvalid/gxvmort1.c index 902dd7a..f1012e2 100644 --- a/src/gxvalid/gxvmort1.c +++ b/src/gxvalid/gxvmort1.c @@ -5,7 +5,7 @@ /* TrueTypeGX/AAT mort table validation */ /* body for type1 (Contextual Substitution) subtable. */ /* */ -/* Copyright 2005, 2007 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmort2.c b/src/gxvalid/gxvmort2.c index 0b0d423..0775d09 100644 --- a/src/gxvalid/gxvmort2.c +++ b/src/gxvalid/gxvmort2.c @@ -5,7 +5,7 @@ /* TrueTypeGX/AAT mort table validation */ /* body for type2 (Ligature Substitution) subtable. */ /* */ -/* Copyright 2005 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmort4.c b/src/gxvalid/gxvmort4.c index 3189a63..535f377 100644 --- a/src/gxvalid/gxvmort4.c +++ b/src/gxvalid/gxvmort4.c @@ -5,7 +5,7 @@ /* TrueTypeGX/AAT mort table validation */ /* body for type4 (Non-Contextual Glyph Substitution) subtable. */ /* */ -/* Copyright 2005 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmort5.c b/src/gxvalid/gxvmort5.c index 49eb44f..fb2f915 100644 --- a/src/gxvalid/gxvmort5.c +++ b/src/gxvalid/gxvmort5.c @@ -5,7 +5,7 @@ /* TrueTypeGX/AAT mort table validation */ /* body for type5 (Contextual Glyph Insertion) subtable. */ /* */ -/* Copyright 2005 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmorx.c b/src/gxvalid/gxvmorx.c index 96dba63..4dac129 100644 --- a/src/gxvalid/gxvmorx.c +++ b/src/gxvalid/gxvmorx.c @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT morx table validation (body). */ /* */ -/* Copyright 2005, 2008, 2013 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmorx.h b/src/gxvalid/gxvmorx.h index be3334e..60efdfd 100644 --- a/src/gxvalid/gxvmorx.h +++ b/src/gxvalid/gxvmorx.h @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT common definition for morx table (specification). */ /* */ -/* Copyright 2005 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmorx0.c b/src/gxvalid/gxvmorx0.c index c42e732..e340baa 100644 --- a/src/gxvalid/gxvmorx0.c +++ b/src/gxvalid/gxvmorx0.c @@ -5,7 +5,7 @@ /* TrueTypeGX/AAT morx table validation */ /* body for type0 (Indic Script Rearrangement) subtable. */ /* */ -/* Copyright 2005 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmorx1.c b/src/gxvalid/gxvmorx1.c index 039f500..6f4e67f 100644 --- a/src/gxvalid/gxvmorx1.c +++ b/src/gxvalid/gxvmorx1.c @@ -5,7 +5,7 @@ /* TrueTypeGX/AAT morx table validation */ /* body for type1 (Contextual Substitution) subtable. */ /* */ -/* Copyright 2005, 2007 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmorx2.c b/src/gxvalid/gxvmorx2.c index 94e2767..bc5fef8 100644 --- a/src/gxvalid/gxvmorx2.c +++ b/src/gxvalid/gxvmorx2.c @@ -5,7 +5,7 @@ /* TrueTypeGX/AAT morx table validation */ /* body for type2 (Ligature Substitution) subtable. */ /* */ -/* Copyright 2005, 2013 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmorx4.c b/src/gxvalid/gxvmorx4.c index f6de8b4..c42677d 100644 --- a/src/gxvalid/gxvmorx4.c +++ b/src/gxvalid/gxvmorx4.c @@ -5,7 +5,7 @@ /* TrueTypeGX/AAT morx table validation */ /* body for "morx" type4 (Non-Contextual Glyph Substitution) subtable. */ /* */ -/* Copyright 2005 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvmorx5.c b/src/gxvalid/gxvmorx5.c index 88ca59f..7ac872f 100644 --- a/src/gxvalid/gxvmorx5.c +++ b/src/gxvalid/gxvmorx5.c @@ -5,7 +5,7 @@ /* TrueTypeGX/AAT morx table validation */ /* body for type5 (Contextual Glyph Insertion) subtable. */ /* */ -/* Copyright 2005, 2007 by */ +/* Copyright 2005-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvopbd.c b/src/gxvalid/gxvopbd.c index 34c48f4..98ddd13 100644 --- a/src/gxvalid/gxvopbd.c +++ b/src/gxvalid/gxvopbd.c @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT opbd table validation (body). */ /* */ -/* Copyright 2004, 2005 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvprop.c b/src/gxvalid/gxvprop.c index 0bb7ace..7f39309 100644 --- a/src/gxvalid/gxvprop.c +++ b/src/gxvalid/gxvprop.c @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT prop table validation (body). */ /* */ -/* Copyright 2004, 2005 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/gxvtrak.c b/src/gxvalid/gxvtrak.c index 2c8e1e1..a8074a2 100644 --- a/src/gxvalid/gxvtrak.c +++ b/src/gxvalid/gxvtrak.c @@ -4,7 +4,7 @@ /* */ /* TrueTypeGX/AAT trak table validation (body). */ /* */ -/* Copyright 2004, 2005 by */ +/* Copyright 2004-2015 by */ /* suzuki toshiya, Masatake YAMATO, Red Hat K.K., */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ diff --git a/src/gxvalid/module.mk b/src/gxvalid/module.mk index 0d6b5d9..1d76494 100644 --- a/src/gxvalid/module.mk +++ b/src/gxvalid/module.mk @@ -2,7 +2,7 @@ # FreeType 2 gxvalid module definition # -# Copyright 2004, 2005, 2006 by +# Copyright 2004-2015 by # suzuki toshiya, Masatake YAMATO, Red Hat K.K., # David Turner, Robert Wilhelm, and Werner Lemberg. # diff --git a/src/gxvalid/rules.mk b/src/gxvalid/rules.mk index 7d487b5..44a2d43 100644 --- a/src/gxvalid/rules.mk +++ b/src/gxvalid/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 2004, 2005 by +# Copyright 2004-2015 by # suzuki toshiya, Masatake YAMATO, Red Hat K.K., # David Turner, Robert Wilhelm, and Werner Lemberg. # diff --git a/src/gzip/Jamfile b/src/gzip/Jamfile index a7aafa0..0944a5f 100644 --- a/src/gzip/Jamfile +++ b/src/gzip/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/gzip Jamfile # -# Copyright 2001 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/gzip/ftgzip.c b/src/gzip/ftgzip.c index 2d4200d..74144d2 100644 --- a/src/gzip/ftgzip.c +++ b/src/gzip/ftgzip.c @@ -8,7 +8,7 @@ /* parse compressed PCF fonts, as found with many X11 server */ /* distributions. */ /* */ -/* Copyright 2002-2006, 2009-2014 by */ +/* Copyright 2002-2015 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/gzip/rules.mk b/src/gzip/rules.mk index 23222a1..a8f74ec 100644 --- a/src/gzip/rules.mk +++ b/src/gzip/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 2002, 2003, 2013 by +# Copyright 2002-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/lzw/Jamfile b/src/lzw/Jamfile index 6f1f516..91effe2 100644 --- a/src/lzw/Jamfile +++ b/src/lzw/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/lzw Jamfile # -# Copyright 2004, 2006 by +# Copyright 2004-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/lzw/ftlzw.c b/src/lzw/ftlzw.c index e1b3564..50fc44f 100644 --- a/src/lzw/ftlzw.c +++ b/src/lzw/ftlzw.c @@ -8,7 +8,7 @@ /* be used to parse compressed PCF fonts, as found with many X11 server */ /* distributions. */ /* */ -/* Copyright 2004-2006, 2009, 2010, 2012-2014 by */ +/* Copyright 2004-2015 by */ /* Albert Chin-A-Young. */ /* */ /* Based on code in src/gzip/ftgzip.c, Copyright 2004 by */ diff --git a/src/lzw/ftzopen.c b/src/lzw/ftzopen.c index c020eeb..29b3c86 100644 --- a/src/lzw/ftzopen.c +++ b/src/lzw/ftzopen.c @@ -8,7 +8,7 @@ /* be used to parse compressed PCF fonts, as found with many X11 server */ /* distributions. */ /* */ -/* Copyright 2005-2007, 2009, 2011 by */ +/* Copyright 2005-2015 by */ /* David Turner. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/lzw/ftzopen.h b/src/lzw/ftzopen.h index e9cc792..ae60fbe 100644 --- a/src/lzw/ftzopen.h +++ b/src/lzw/ftzopen.h @@ -8,7 +8,7 @@ /* be used to parse compressed PCF fonts, as found with many X11 server */ /* distributions. */ /* */ -/* Copyright 2005, 2006, 2007, 2008 by */ +/* Copyright 2005-2015 by */ /* David Turner. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/lzw/rules.mk b/src/lzw/rules.mk index 4362939..c98c0fd 100644 --- a/src/lzw/rules.mk +++ b/src/lzw/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 2004, 2005, 2006 by +# Copyright 2004-2015 by # Albert Chin-A-Young. # # Based on src/lzw/rules.mk, Copyright 2002 by diff --git a/src/otvalid/Jamfile b/src/otvalid/Jamfile index b457143..dbc2395 100644 --- a/src/otvalid/Jamfile +++ b/src/otvalid/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/otvalid Jamfile # -# Copyright 2004 by +# Copyright 2004-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/otvalid/module.mk b/src/otvalid/module.mk index 9cadde5..3d8c0d9 100644 --- a/src/otvalid/module.mk +++ b/src/otvalid/module.mk @@ -3,7 +3,7 @@ # -# Copyright 2004, 2006 by +# Copyright 2004-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/otvalid/otvalid.c b/src/otvalid/otvalid.c index d5c2b75..ca597d7 100644 --- a/src/otvalid/otvalid.c +++ b/src/otvalid/otvalid.c @@ -4,7 +4,7 @@ /* */ /* FreeType validator for OpenType tables (body only). */ /* */ -/* Copyright 2004, 2007 by */ +/* Copyright 2004-2015 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/otvalid/otvalid.h b/src/otvalid/otvalid.h index eb99b9c..3475deb 100644 --- a/src/otvalid/otvalid.h +++ b/src/otvalid/otvalid.h @@ -4,7 +4,7 @@ /* */ /* OpenType table validation (specification only). */ /* */ -/* Copyright 2004, 2008 by */ +/* Copyright 2004-2015 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/otvalid/otvbase.c b/src/otvalid/otvbase.c index 4f9d2fa..24038c6 100644 --- a/src/otvalid/otvbase.c +++ b/src/otvalid/otvbase.c @@ -4,7 +4,7 @@ /* */ /* OpenType BASE table validation (body). */ /* */ -/* Copyright 2004, 2007 by */ +/* Copyright 2004-2015 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/otvalid/otvcommn.c b/src/otvalid/otvcommn.c index 3c3de63..bf51460 100644 --- a/src/otvalid/otvcommn.c +++ b/src/otvalid/otvcommn.c @@ -4,7 +4,7 @@ /* */ /* OpenType common tables validation (body). */ /* */ -/* Copyright 2004, 2005, 2006, 2007 by */ +/* Copyright 2004-2015 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/otvalid/otvcommn.h b/src/otvalid/otvcommn.h index 5c93ba7..3aebf02 100644 --- a/src/otvalid/otvcommn.h +++ b/src/otvalid/otvcommn.h @@ -4,7 +4,7 @@ /* */ /* OpenType common tables validation (specification). */ /* */ -/* Copyright 2004, 2005, 2007, 2009, 2014 by */ +/* Copyright 2004-2015 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/otvalid/otverror.h b/src/otvalid/otverror.h index b6f00c9..214795e 100644 --- a/src/otvalid/otverror.h +++ b/src/otvalid/otverror.h @@ -4,7 +4,7 @@ /* */ /* OpenType validation module error codes (specification only). */ /* */ -/* Copyright 2004, 2005, 2012, 2013 by */ +/* Copyright 2004-2015 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/otvalid/otvgdef.c b/src/otvalid/otvgdef.c index e60ef36..8936ba8 100644 --- a/src/otvalid/otvgdef.c +++ b/src/otvalid/otvgdef.c @@ -4,7 +4,7 @@ /* */ /* OpenType GDEF table validation (body). */ /* */ -/* Copyright 2004, 2005, 2007 by */ +/* Copyright 2004-2015 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/otvalid/otvgpos.c b/src/otvalid/otvgpos.c index 1a9dbaa..6c09b93 100644 --- a/src/otvalid/otvgpos.c +++ b/src/otvalid/otvgpos.c @@ -4,7 +4,7 @@ /* */ /* OpenType GPOS table validation (body). */ /* */ -/* Copyright 2002, 2004, 2005, 2006, 2007, 2008 by */ +/* Copyright 2002-2015 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/otvalid/otvgpos.h b/src/otvalid/otvgpos.h index 14ca408..a792bd9 100644 --- a/src/otvalid/otvgpos.h +++ b/src/otvalid/otvgpos.h @@ -4,7 +4,7 @@ /* */ /* OpenType GPOS table validator (specification). */ /* */ -/* Copyright 2004 by */ +/* Copyright 2004-2015 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/otvalid/otvgsub.c b/src/otvalid/otvgsub.c index 024b8ca..7049022 100644 --- a/src/otvalid/otvgsub.c +++ b/src/otvalid/otvgsub.c @@ -4,7 +4,7 @@ /* */ /* OpenType GSUB table validation (body). */ /* */ -/* Copyright 2004, 2005, 2007 by */ +/* Copyright 2004-2015 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/otvalid/otvjstf.c b/src/otvalid/otvjstf.c index f273be8..fe68a60 100644 --- a/src/otvalid/otvjstf.c +++ b/src/otvalid/otvjstf.c @@ -4,7 +4,7 @@ /* */ /* OpenType JSTF table validation (body). */ /* */ -/* Copyright 2004, 2007 by */ +/* Copyright 2004-2015 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/otvalid/otvmath.c b/src/otvalid/otvmath.c index d1791f8..b0d4fc0 100644 --- a/src/otvalid/otvmath.c +++ b/src/otvalid/otvmath.c @@ -4,7 +4,7 @@ /* */ /* OpenType MATH table validation (body). */ /* */ -/* Copyright 2007, 2008 by */ +/* Copyright 2007-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* Written by George Williams. */ diff --git a/src/otvalid/otvmod.c b/src/otvalid/otvmod.c index 37c6e86..92f8513 100644 --- a/src/otvalid/otvmod.c +++ b/src/otvalid/otvmod.c @@ -4,7 +4,7 @@ /* */ /* FreeType's OpenType validation module implementation (body). */ /* */ -/* Copyright 2004-2008, 2013 by */ +/* Copyright 2004-2015 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/otvalid/otvmod.h b/src/otvalid/otvmod.h index f7e1550..c3a0234 100644 --- a/src/otvalid/otvmod.h +++ b/src/otvalid/otvmod.h @@ -5,7 +5,7 @@ /* FreeType's OpenType validation module implementation */ /* (specification). */ /* */ -/* Copyright 2004 by */ +/* Copyright 2004-2015 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/otvalid/rules.mk b/src/otvalid/rules.mk index 7454335..56d749c 100644 --- a/src/otvalid/rules.mk +++ b/src/otvalid/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 2004, 2007 by +# Copyright 2004-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/pcf/Jamfile b/src/pcf/Jamfile index 752fcac..8cd90e4 100644 --- a/src/pcf/Jamfile +++ b/src/pcf/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/pcf Jamfile # -# Copyright 2001, 2003 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/pfr/Jamfile b/src/pfr/Jamfile index 9e2f2b8..2064bcd 100644 --- a/src/pfr/Jamfile +++ b/src/pfr/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/pfr Jamfile # -# Copyright 2002 by +# Copyright 2002-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/pfr/module.mk b/src/pfr/module.mk index 8d1d28a..3f5a47e 100644 --- a/src/pfr/module.mk +++ b/src/pfr/module.mk @@ -3,7 +3,7 @@ # -# Copyright 2002, 2006 by +# Copyright 2002-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/pfr/pfr.c b/src/pfr/pfr.c index eb2c4ed..96e6730 100644 --- a/src/pfr/pfr.c +++ b/src/pfr/pfr.c @@ -4,7 +4,7 @@ /* */ /* FreeType PFR driver component. */ /* */ -/* Copyright 2002 by */ +/* Copyright 2002-2015 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/pfr/pfrcmap.c b/src/pfr/pfrcmap.c index 90ba010..88ff55a 100644 --- a/src/pfr/pfrcmap.c +++ b/src/pfr/pfrcmap.c @@ -4,7 +4,7 @@ /* */ /* FreeType PFR cmap handling (body). */ /* */ -/* Copyright 2002, 2007, 2009, 2013 by */ +/* Copyright 2002-2015 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/pfr/pfrcmap.h b/src/pfr/pfrcmap.h index a626953..87e1e5b 100644 --- a/src/pfr/pfrcmap.h +++ b/src/pfr/pfrcmap.h @@ -4,7 +4,7 @@ /* */ /* FreeType PFR cmap handling (specification). */ /* */ -/* Copyright 2002 by */ +/* Copyright 2002-2015 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/pfr/pfrdrivr.c b/src/pfr/pfrdrivr.c index db66281..9d344d1 100644 --- a/src/pfr/pfrdrivr.c +++ b/src/pfr/pfrdrivr.c @@ -4,7 +4,7 @@ /* */ /* FreeType PFR driver interface (body). */ /* */ -/* Copyright 2002-2004, 2006, 2008, 2010, 2011, 2013, 2014 by */ +/* Copyright 2002-2015 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/pfr/pfrdrivr.h b/src/pfr/pfrdrivr.h index 75f86c5..b5be470 100644 --- a/src/pfr/pfrdrivr.h +++ b/src/pfr/pfrdrivr.h @@ -4,7 +4,7 @@ /* */ /* High-level Type PFR driver interface (specification). */ /* */ -/* Copyright 2002 by */ +/* Copyright 2002-2015 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/pfr/pfrerror.h b/src/pfr/pfrerror.h index 94dc8c5..978e7b2 100644 --- a/src/pfr/pfrerror.h +++ b/src/pfr/pfrerror.h @@ -4,7 +4,7 @@ /* */ /* PFR error codes (specification only). */ /* */ -/* Copyright 2002, 2012 by */ +/* Copyright 2002-2015 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/pfr/pfrgload.c b/src/pfr/pfrgload.c index 2ce0937..1d27437 100644 --- a/src/pfr/pfrgload.c +++ b/src/pfr/pfrgload.c @@ -4,7 +4,7 @@ /* */ /* FreeType PFR glyph loader (body). */ /* */ -/* Copyright 2002, 2003, 2005, 2007, 2010, 2013 by */ +/* Copyright 2002-2015 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/pfr/pfrgload.h b/src/pfr/pfrgload.h index 7cc7a87..c7c8da1 100644 --- a/src/pfr/pfrgload.h +++ b/src/pfr/pfrgload.h @@ -4,7 +4,7 @@ /* */ /* FreeType PFR glyph loader (specification). */ /* */ -/* Copyright 2002 by */ +/* Copyright 2002-2015 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/pfr/pfrload.c b/src/pfr/pfrload.c index f68d016..9831662 100644 --- a/src/pfr/pfrload.c +++ b/src/pfr/pfrload.c @@ -4,7 +4,7 @@ /* */ /* FreeType PFR loader (body). */ /* */ -/* Copyright 2002-2005, 2007, 2009, 2010, 2013, 2014 by */ +/* Copyright 2002-2015 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/pfr/pfrload.h b/src/pfr/pfrload.h index ed01071..c5b8d66 100644 --- a/src/pfr/pfrload.h +++ b/src/pfr/pfrload.h @@ -4,7 +4,7 @@ /* */ /* FreeType PFR loader (specification). */ /* */ -/* Copyright 2002 by */ +/* Copyright 2002-2015 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/pfr/pfrobjs.c b/src/pfr/pfrobjs.c index 0c89242..1c8683e 100644 --- a/src/pfr/pfrobjs.c +++ b/src/pfr/pfrobjs.c @@ -4,7 +4,7 @@ /* */ /* FreeType PFR object methods (body). */ /* */ -/* Copyright 2002-2008, 2010-2011, 2013, 2014 by */ +/* Copyright 2002-2015 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/pfr/pfrobjs.h b/src/pfr/pfrobjs.h index f6aa8b4..e990b45 100644 --- a/src/pfr/pfrobjs.h +++ b/src/pfr/pfrobjs.h @@ -4,7 +4,7 @@ /* */ /* FreeType PFR object methods (specification). */ /* */ -/* Copyright 2002, 2003, 2004 by */ +/* Copyright 2002-2015 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/pfr/pfrsbit.c b/src/pfr/pfrsbit.c index 979bf78..280cf2a 100644 --- a/src/pfr/pfrsbit.c +++ b/src/pfr/pfrsbit.c @@ -4,7 +4,7 @@ /* */ /* FreeType PFR bitmap loader (body). */ /* */ -/* Copyright 2002, 2003, 2006, 2009, 2010, 2013 by */ +/* Copyright 2002-2015 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/pfr/pfrsbit.h b/src/pfr/pfrsbit.h index 015e9e6..0db2cd5 100644 --- a/src/pfr/pfrsbit.h +++ b/src/pfr/pfrsbit.h @@ -4,7 +4,7 @@ /* */ /* FreeType PFR bitmap loader (specification). */ /* */ -/* Copyright 2002 by */ +/* Copyright 2002-2015 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/pfr/pfrtypes.h b/src/pfr/pfrtypes.h index 9183108..9af906e 100644 --- a/src/pfr/pfrtypes.h +++ b/src/pfr/pfrtypes.h @@ -4,7 +4,7 @@ /* */ /* FreeType PFR data structures (specification only). */ /* */ -/* Copyright 2002, 2003, 2005, 2007 by */ +/* Copyright 2002-2015 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/pfr/rules.mk b/src/pfr/rules.mk index 01f44f1..e665460 100644 --- a/src/pfr/rules.mk +++ b/src/pfr/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 2002, 2003 by +# Copyright 2002-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/psaux/Jamfile b/src/psaux/Jamfile index faeded9..d7c2e6c 100644 --- a/src/psaux/Jamfile +++ b/src/psaux/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/psaux Jamfile # -# Copyright 2001, 2002 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/psaux/afmparse.c b/src/psaux/afmparse.c index 6a40e11..c9bcfcf 100644 --- a/src/psaux/afmparse.c +++ b/src/psaux/afmparse.c @@ -4,7 +4,7 @@ /* */ /* AFM parser (body). */ /* */ -/* Copyright 2006-2010, 2012, 2013 by */ +/* Copyright 2006-2015 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/psaux/afmparse.h b/src/psaux/afmparse.h index 35d9604..155eb40 100644 --- a/src/psaux/afmparse.h +++ b/src/psaux/afmparse.h @@ -4,7 +4,7 @@ /* */ /* AFM parser (specification). */ /* */ -/* Copyright 2006 by */ +/* Copyright 2006-2015 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/psaux/module.mk b/src/psaux/module.mk index 42bf6f5..1d90e14 100644 --- a/src/psaux/module.mk +++ b/src/psaux/module.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/psaux/psaux.c b/src/psaux/psaux.c index a4b9c5c..7f1d9aa 100644 --- a/src/psaux/psaux.c +++ b/src/psaux/psaux.c @@ -4,7 +4,7 @@ /* */ /* FreeType auxiliary PostScript driver component (body only). */ /* */ -/* Copyright 1996-2001, 2002, 2006 by */ +/* Copyright 1996-2015 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/psaux/psauxerr.h b/src/psaux/psauxerr.h index d52375f..97712f0 100644 --- a/src/psaux/psauxerr.h +++ b/src/psaux/psauxerr.h @@ -4,7 +4,7 @@ /* */ /* PS auxiliary module error codes (specification only). */ /* */ -/* Copyright 2001, 2012 by */ +/* Copyright 2001-2015 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/psaux/psauxmod.c b/src/psaux/psauxmod.c index 4b1249d..06fcab0 100644 --- a/src/psaux/psauxmod.c +++ b/src/psaux/psauxmod.c @@ -4,7 +4,7 @@ /* */ /* FreeType auxiliary PostScript module implementation (body). */ /* */ -/* Copyright 2000-2001, 2002, 2003, 2006 by */ +/* Copyright 2000-2015 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/psaux/psauxmod.h b/src/psaux/psauxmod.h index 1217236..ae6a8f9 100644 --- a/src/psaux/psauxmod.h +++ b/src/psaux/psauxmod.h @@ -4,7 +4,7 @@ /* */ /* FreeType auxiliary PostScript module implementation (specification). */ /* */ -/* Copyright 2000-2001 by */ +/* Copyright 2000-2015 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/psaux/psconv.c b/src/psaux/psconv.c index 22e8cf2..ca3eec4 100644 --- a/src/psaux/psconv.c +++ b/src/psaux/psconv.c @@ -4,7 +4,7 @@ /* */ /* Some convenience conversions (body). */ /* */ -/* Copyright 2006, 2008, 2009, 2012-2013 by */ +/* Copyright 2006-2015 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/psaux/psconv.h b/src/psaux/psconv.h index d91c762..10f1ff7 100644 --- a/src/psaux/psconv.h +++ b/src/psaux/psconv.h @@ -4,7 +4,7 @@ /* */ /* Some convenience conversions (specification). */ /* */ -/* Copyright 2006, 2012 by */ +/* Copyright 2006-2015 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/psaux/psobjs.c b/src/psaux/psobjs.c index 7ec3b4c..1c3ff72 100644 --- a/src/psaux/psobjs.c +++ b/src/psaux/psobjs.c @@ -4,7 +4,7 @@ /* */ /* Auxiliary functions for PostScript fonts (body). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 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/psaux/psobjs.h b/src/psaux/psobjs.h index e380c60..aa2d739 100644 --- a/src/psaux/psobjs.h +++ b/src/psaux/psobjs.h @@ -4,7 +4,7 @@ /* */ /* Auxiliary functions for PostScript fonts (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2003 by */ +/* Copyright 1996-2015 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/psaux/rules.mk b/src/psaux/rules.mk index 788d813..0d2118c 100644 --- a/src/psaux/rules.mk +++ b/src/psaux/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2002, 2003, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/psaux/t1cmap.c b/src/psaux/t1cmap.c index fb1353a..f9b5ea2 100644 --- a/src/psaux/t1cmap.c +++ b/src/psaux/t1cmap.c @@ -4,7 +4,7 @@ /* */ /* Type 1 character map support (body). */ /* */ -/* Copyright 2002, 2003, 2006, 2007, 2012 by */ +/* Copyright 2002-2015 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/psaux/t1cmap.h b/src/psaux/t1cmap.h index 7ae65d2..b8ba06c 100644 --- a/src/psaux/t1cmap.h +++ b/src/psaux/t1cmap.h @@ -4,7 +4,7 @@ /* */ /* Type 1 character map support (specification). */ /* */ -/* Copyright 2002, 2003, 2006 by */ +/* Copyright 2002-2015 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/psaux/t1decode.c b/src/psaux/t1decode.c index d67a05e..a8274f1 100644 --- a/src/psaux/t1decode.c +++ b/src/psaux/t1decode.c @@ -4,7 +4,7 @@ /* */ /* PostScript Type 1 decoding routines (body). */ /* */ -/* Copyright 2000-2014 by */ +/* Copyright 2000-2015 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/psaux/t1decode.h b/src/psaux/t1decode.h index 00728db..e83078f 100644 --- a/src/psaux/t1decode.h +++ b/src/psaux/t1decode.h @@ -4,7 +4,7 @@ /* */ /* PostScript Type 1 decoding routines (specification). */ /* */ -/* Copyright 2000-2001, 2002, 2003 by */ +/* Copyright 2000-2015 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/pshinter/Jamfile b/src/pshinter/Jamfile index 779f1b0..e763c47 100644 --- a/src/pshinter/Jamfile +++ b/src/pshinter/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/pshinter Jamfile # -# Copyright 2001, 2003 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/pshinter/module.mk b/src/pshinter/module.mk index ed24eb7..1fd8e55 100644 --- a/src/pshinter/module.mk +++ b/src/pshinter/module.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2001, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/pshinter/pshalgo.c b/src/pshinter/pshalgo.c index 644c76d..e62b9e9 100644 --- a/src/pshinter/pshalgo.c +++ b/src/pshinter/pshalgo.c @@ -4,7 +4,7 @@ /* */ /* PostScript hinting algorithm (body). */ /* */ -/* Copyright 2001-2010, 2012-2014 by */ +/* Copyright 2001-2015 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/pshinter/pshalgo.h b/src/pshinter/pshalgo.h index c70f31e..3751aca 100644 --- a/src/pshinter/pshalgo.h +++ b/src/pshinter/pshalgo.h @@ -4,7 +4,7 @@ /* */ /* PostScript hinting algorithm (specification). */ /* */ -/* Copyright 2001-2003, 2008, 2013 by */ +/* Copyright 2001-2015 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/pshinter/pshglob.c b/src/pshinter/pshglob.c index 1bcc481..652e091 100644 --- a/src/pshinter/pshglob.c +++ b/src/pshinter/pshglob.c @@ -5,7 +5,7 @@ /* PostScript hinter global hinting management (body). */ /* Inspired by the new auto-hinter module. */ /* */ -/* Copyright 2001-2004, 2006, 2010, 2012-2014 by */ +/* Copyright 2001-2015 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/pshinter/pshglob.h b/src/pshinter/pshglob.h index 94d972a..c376df7 100644 --- a/src/pshinter/pshglob.h +++ b/src/pshinter/pshglob.h @@ -4,7 +4,7 @@ /* */ /* PostScript hinter global hinting management. */ /* */ -/* Copyright 2001, 2002, 2003, 2014 by */ +/* Copyright 2001-2015 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/pshinter/pshinter.c b/src/pshinter/pshinter.c index b35a2a9..9e65fe2 100644 --- a/src/pshinter/pshinter.c +++ b/src/pshinter/pshinter.c @@ -4,7 +4,7 @@ /* */ /* FreeType PostScript Hinting module */ /* */ -/* Copyright 2001, 2003 by */ +/* Copyright 2001-2015 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/pshinter/pshmod.c b/src/pshinter/pshmod.c index cdeaca1..961b468 100644 --- a/src/pshinter/pshmod.c +++ b/src/pshinter/pshmod.c @@ -4,7 +4,7 @@ /* */ /* FreeType PostScript hinter module implementation (body). */ /* */ -/* Copyright 2001, 2002, 2007, 2009, 2012 by */ +/* Copyright 2001-2015 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/pshinter/pshmod.h b/src/pshinter/pshmod.h index 0ae7e96..a58d856 100644 --- a/src/pshinter/pshmod.h +++ b/src/pshinter/pshmod.h @@ -4,7 +4,7 @@ /* */ /* PostScript hinter module interface (specification). */ /* */ -/* Copyright 2001 by */ +/* Copyright 2001-2015 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/pshinter/pshnterr.h b/src/pshinter/pshnterr.h index 7cc180f..ce790a8 100644 --- a/src/pshinter/pshnterr.h +++ b/src/pshinter/pshnterr.h @@ -4,7 +4,7 @@ /* */ /* PS Hinter error codes (specification only). */ /* */ -/* Copyright 2003, 2012 by */ +/* Copyright 2003-2015 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/pshinter/pshpic.c b/src/pshinter/pshpic.c index 568f4ac..afd8fb9 100644 --- a/src/pshinter/pshpic.c +++ b/src/pshinter/pshpic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for pshinter module. */ /* */ -/* Copyright 2009, 2010, 2012, 2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/pshinter/pshpic.h b/src/pshinter/pshpic.h index b46f853..62de457 100644 --- a/src/pshinter/pshpic.h +++ b/src/pshinter/pshpic.h @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for pshinter module. */ /* */ -/* Copyright 2009, 2012, 2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/pshinter/pshrec.c b/src/pshinter/pshrec.c index 73a18ff..51f2361 100644 --- a/src/pshinter/pshrec.c +++ b/src/pshinter/pshrec.c @@ -4,7 +4,7 @@ /* */ /* FreeType PostScript hints recorder (body). */ /* */ -/* Copyright 2001-2004, 2007, 2009, 2013, 2014 by */ +/* Copyright 2001-2015 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/pshinter/pshrec.h b/src/pshinter/pshrec.h index a88fe6e..9106bc8 100644 --- a/src/pshinter/pshrec.h +++ b/src/pshinter/pshrec.h @@ -4,7 +4,7 @@ /* */ /* Postscript (Type1/Type2) hints recorder (specification). */ /* */ -/* Copyright 2001, 2002, 2003, 2006, 2008, 2014 by */ +/* Copyright 2001-2015 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/pshinter/rules.mk b/src/pshinter/rules.mk index afc4a40..7838e67 100644 --- a/src/pshinter/rules.mk +++ b/src/pshinter/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 2001, 2003, 2011 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/psnames/Jamfile b/src/psnames/Jamfile index 06c0dda..b9fe235 100644 --- a/src/psnames/Jamfile +++ b/src/psnames/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/psnames Jamfile # -# Copyright 2001 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/psnames/module.mk b/src/psnames/module.mk index a6e9082..3708f60 100644 --- a/src/psnames/module.mk +++ b/src/psnames/module.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/psnames/psmodule.c b/src/psnames/psmodule.c index 42c9aff..448be1e 100644 --- a/src/psnames/psmodule.c +++ b/src/psnames/psmodule.c @@ -4,7 +4,7 @@ /* */ /* PSNames module implementation (body). */ /* */ -/* Copyright 1996-2003, 2005-2008, 2012-2014 by */ +/* Copyright 1996-2015 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/psnames/psmodule.h b/src/psnames/psmodule.h index 28fa148..f85f322 100644 --- a/src/psnames/psmodule.h +++ b/src/psnames/psmodule.h @@ -4,7 +4,7 @@ /* */ /* High-level PSNames module interface (specification). */ /* */ -/* Copyright 1996-2001 by */ +/* Copyright 1996-2015 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/psnames/psnamerr.h b/src/psnames/psnamerr.h index acda7f9..09cc247 100644 --- a/src/psnames/psnamerr.h +++ b/src/psnames/psnamerr.h @@ -4,7 +4,7 @@ /* */ /* PS names module error codes (specification only). */ /* */ -/* Copyright 2001, 2012 by */ +/* Copyright 2001-2015 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/psnames/psnames.c b/src/psnames/psnames.c index 1ede225..a438596 100644 --- a/src/psnames/psnames.c +++ b/src/psnames/psnames.c @@ -4,7 +4,7 @@ /* */ /* FreeType PSNames module component (body only). */ /* */ -/* Copyright 1996-2001 by */ +/* Copyright 1996-2015 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/psnames/pspic.c b/src/psnames/pspic.c index 3820f65..1394f97 100644 --- a/src/psnames/pspic.c +++ b/src/psnames/pspic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for psnames module. */ /* */ -/* Copyright 2009, 2010, 2012, 2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/psnames/pspic.h b/src/psnames/pspic.h index 6ff002c..88ccda3 100644 --- a/src/psnames/pspic.h +++ b/src/psnames/pspic.h @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for psnames module. */ /* */ -/* Copyright 2009, 2012 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/psnames/pstables.h b/src/psnames/pstables.h index 0a6637f..3f31c31 100644 --- a/src/psnames/pstables.h +++ b/src/psnames/pstables.h @@ -4,7 +4,7 @@ /* */ /* PostScript glyph names. */ /* */ -/* Copyright 2005, 2008, 2011 by */ +/* Copyright 2005-2015 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/psnames/rules.mk b/src/psnames/rules.mk index 278f659..3c77486 100644 --- a/src/psnames/rules.mk +++ b/src/psnames/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2001, 2003, 2011, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/raster/Jamfile b/src/raster/Jamfile index 4f60e87..f03ed32 100644 --- a/src/raster/Jamfile +++ b/src/raster/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/raster Jamfile # -# Copyright 2001 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/raster/ftmisc.h b/src/raster/ftmisc.h index 703155a..19be4ca 100644 --- a/src/raster/ftmisc.h +++ b/src/raster/ftmisc.h @@ -5,7 +5,7 @@ /* Miscellaneous macros for stand-alone rasterizer (specification */ /* only). */ /* */ -/* Copyright 2005, 2009, 2010 by */ +/* Copyright 2005-2015 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/raster/ftraster.c b/src/raster/ftraster.c index 2b182f7..65ba454 100644 --- a/src/raster/ftraster.c +++ b/src/raster/ftraster.c @@ -4,7 +4,7 @@ /* */ /* The FreeType glyph rasterizer (body). */ /* */ -/* Copyright 1996-2003, 2005, 2007-2014 by */ +/* Copyright 1996-2015 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/raster/ftraster.h b/src/raster/ftraster.h index 80fe46d..a270d48 100644 --- a/src/raster/ftraster.h +++ b/src/raster/ftraster.h @@ -4,7 +4,7 @@ /* */ /* The FreeType glyph rasterizer (specification). */ /* */ -/* Copyright 1996-2001 by */ +/* Copyright 1996-2015 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/raster/ftrend1.c b/src/raster/ftrend1.c index 8a468a8..437996b 100644 --- a/src/raster/ftrend1.c +++ b/src/raster/ftrend1.c @@ -4,7 +4,7 @@ /* */ /* The FreeType glyph rasterizer interface (body). */ /* */ -/* Copyright 1996-2003, 2005, 2006, 2011, 2013 by */ +/* Copyright 1996-2015 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/raster/ftrend1.h b/src/raster/ftrend1.h index 4cf1286..c367260 100644 --- a/src/raster/ftrend1.h +++ b/src/raster/ftrend1.h @@ -4,7 +4,7 @@ /* */ /* The FreeType glyph rasterizer interface (specification). */ /* */ -/* Copyright 1996-2001 by */ +/* Copyright 1996-2015 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/raster/module.mk b/src/raster/module.mk index cbff5df..75ea107 100644 --- a/src/raster/module.mk +++ b/src/raster/module.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/raster/raster.c b/src/raster/raster.c index 1202a11..21bb16d 100644 --- a/src/raster/raster.c +++ b/src/raster/raster.c @@ -4,7 +4,7 @@ /* */ /* FreeType monochrome rasterer module component (body only). */ /* */ -/* Copyright 1996-2001 by */ +/* Copyright 1996-2015 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/raster/rasterrs.h b/src/raster/rasterrs.h index ab85c00..e7f00bc 100644 --- a/src/raster/rasterrs.h +++ b/src/raster/rasterrs.h @@ -4,7 +4,7 @@ /* */ /* monochrome renderer error codes (specification only). */ /* */ -/* Copyright 2001, 2012 by */ +/* Copyright 2001-2015 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/raster/rastpic.c b/src/raster/rastpic.c index 5e9f7cc..fe58c99 100644 --- a/src/raster/rastpic.c +++ b/src/raster/rastpic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for raster module. */ /* */ -/* Copyright 2009, 2010, 2012, 2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/raster/rastpic.h b/src/raster/rastpic.h index e0ddba6..a875884 100644 --- a/src/raster/rastpic.h +++ b/src/raster/rastpic.h @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for raster module. */ /* */ -/* Copyright 2009 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/raster/rules.mk b/src/raster/rules.mk index 6683ed7..c214b35 100644 --- a/src/raster/rules.mk +++ b/src/raster/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2001, 2003, 2008, 2009, 2011 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/sfnt/Jamfile b/src/sfnt/Jamfile index cb20b1b..73c6e15 100644 --- a/src/sfnt/Jamfile +++ b/src/sfnt/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/sfnt Jamfile # -# Copyright 2001, 2002, 2004, 2005 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/sfnt/module.mk b/src/sfnt/module.mk index 95fd6a3..535fe22 100644 --- a/src/sfnt/module.mk +++ b/src/sfnt/module.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/sfnt/pngshim.c b/src/sfnt/pngshim.c index fb7ce99..473d396 100644 --- a/src/sfnt/pngshim.c +++ b/src/sfnt/pngshim.c @@ -4,7 +4,7 @@ /* */ /* PNG Bitmap glyph support. */ /* */ -/* Copyright 2013, 2014 by */ +/* Copyright 2013-2015 by */ /* Google, Inc. */ /* Written by Stuart Gill and Behdad Esfahbod. */ /* */ diff --git a/src/sfnt/pngshim.h b/src/sfnt/pngshim.h index 0b8cff7..4cc5c2b 100644 --- a/src/sfnt/pngshim.h +++ b/src/sfnt/pngshim.h @@ -4,7 +4,7 @@ /* */ /* PNG Bitmap glyph support. */ /* */ -/* Copyright 2013 by */ +/* Copyright 2013-2015 by */ /* Google, Inc. */ /* Written by Stuart Gill and Behdad Esfahbod. */ /* */ diff --git a/src/sfnt/rules.mk b/src/sfnt/rules.mk index b6e5aa0..3cc76b3 100644 --- a/src/sfnt/rules.mk +++ b/src/sfnt/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2002-2007, 2009, 2011, 2013 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/sfnt/sfdriver.c b/src/sfnt/sfdriver.c index badb159..14d8c23 100644 --- a/src/sfnt/sfdriver.c +++ b/src/sfnt/sfdriver.c @@ -4,7 +4,7 @@ /* */ /* High-level SFNT driver interface (body). */ /* */ -/* Copyright 1996-2007, 2009-2014 by */ +/* Copyright 1996-2015 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/sfnt/sfdriver.h b/src/sfnt/sfdriver.h index 5de25d5..944119c 100644 --- a/src/sfnt/sfdriver.h +++ b/src/sfnt/sfdriver.h @@ -4,7 +4,7 @@ /* */ /* High-level SFNT driver interface (specification). */ /* */ -/* Copyright 1996-2001 by */ +/* Copyright 1996-2015 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/sfnt/sferrors.h b/src/sfnt/sferrors.h index e981e1d..e3bef3f 100644 --- a/src/sfnt/sferrors.h +++ b/src/sfnt/sferrors.h @@ -4,7 +4,7 @@ /* */ /* SFNT error codes (specification only). */ /* */ -/* Copyright 2001, 2004, 2012, 2013 by */ +/* Copyright 2001-2015 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/sfnt/sfnt.c b/src/sfnt/sfnt.c index d62ed4e..0b8b5f4 100644 --- a/src/sfnt/sfnt.c +++ b/src/sfnt/sfnt.c @@ -4,7 +4,7 @@ /* */ /* Single object library component. */ /* */ -/* Copyright 1996-2006, 2013 by */ +/* Copyright 1996-2015 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/sfnt/sfntpic.c b/src/sfnt/sfntpic.c index b3fb24b..2aaf4bc 100644 --- a/src/sfnt/sfntpic.c +++ b/src/sfnt/sfntpic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for sfnt module. */ /* */ -/* Copyright 2009, 2010, 2012, 2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/sfnt/sfntpic.h b/src/sfnt/sfntpic.h index b09a914..563d634 100644 --- a/src/sfnt/sfntpic.h +++ b/src/sfnt/sfntpic.h @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for sfnt module. */ /* */ -/* Copyright 2009, 2012 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c index 70b988d..d0fc5b8 100644 --- a/src/sfnt/sfobjs.c +++ b/src/sfnt/sfobjs.c @@ -4,7 +4,7 @@ /* */ /* SFNT object management (base). */ /* */ -/* Copyright 1996-2008, 2010-2014 by */ +/* Copyright 1996-2015 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/sfnt/sfobjs.h b/src/sfnt/sfobjs.h index 6241c93..77c7d92 100644 --- a/src/sfnt/sfobjs.h +++ b/src/sfnt/sfobjs.h @@ -4,7 +4,7 @@ /* */ /* SFNT object management (specification). */ /* */ -/* Copyright 1996-2001, 2002 by */ +/* Copyright 1996-2015 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/sfnt/ttbdf.c b/src/sfnt/ttbdf.c index 9401dae..098b781 100644 --- a/src/sfnt/ttbdf.c +++ b/src/sfnt/ttbdf.c @@ -4,7 +4,7 @@ /* */ /* TrueType and OpenType embedded BDF properties (body). */ /* */ -/* Copyright 2005, 2006, 2010, 2013 by */ +/* Copyright 2005-2015 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/sfnt/ttbdf.h b/src/sfnt/ttbdf.h index 48a10d6..fe4ba48 100644 --- a/src/sfnt/ttbdf.h +++ b/src/sfnt/ttbdf.h @@ -4,7 +4,7 @@ /* */ /* TrueType and OpenType embedded BDF properties (specification). */ /* */ -/* Copyright 2005 by */ +/* Copyright 2005-2015 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/sfnt/ttcmap.c b/src/sfnt/ttcmap.c index f54de70..cb062b7 100644 --- a/src/sfnt/ttcmap.c +++ b/src/sfnt/ttcmap.c @@ -4,7 +4,7 @@ /* */ /* TrueType character mapping table (cmap) support (body). */ /* */ -/* Copyright 2002-2010, 2012-2014 by */ +/* Copyright 2002-2015 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/sfnt/ttcmap.h b/src/sfnt/ttcmap.h index 0fde167..b7ea8ee 100644 --- a/src/sfnt/ttcmap.h +++ b/src/sfnt/ttcmap.h @@ -4,7 +4,7 @@ /* */ /* TrueType character mapping table (cmap) support (specification). */ /* */ -/* Copyright 2002-2005, 2009, 2012 by */ +/* Copyright 2002-2015 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/sfnt/ttcmapc.h b/src/sfnt/ttcmapc.h index 2ea2043..4a48940 100644 --- a/src/sfnt/ttcmapc.h +++ b/src/sfnt/ttcmapc.h @@ -4,7 +4,7 @@ /* */ /* TT CMAP classes definitions (specification only). */ /* */ -/* Copyright 2009 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/sfnt/ttkern.c b/src/sfnt/ttkern.c index 455e7b5..6c4f2cb 100644 --- a/src/sfnt/ttkern.c +++ b/src/sfnt/ttkern.c @@ -5,7 +5,7 @@ /* Load the basic TrueType kerning table. This doesn't handle */ /* kerning data within the GPOS table at the moment. */ /* */ -/* Copyright 1996-2007, 2009, 2010, 2013 by */ +/* Copyright 1996-2015 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/sfnt/ttkern.h b/src/sfnt/ttkern.h index df1da9b..89cb24f 100644 --- a/src/sfnt/ttkern.h +++ b/src/sfnt/ttkern.h @@ -5,7 +5,7 @@ /* Load the basic TrueType kerning table. This doesn't handle */ /* kerning data within the GPOS table at the moment. */ /* */ -/* Copyright 1996-2001, 2002, 2005, 2007 by */ +/* Copyright 1996-2015 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/sfnt/ttload.c b/src/sfnt/ttload.c index 8338150..8606e85 100644 --- a/src/sfnt/ttload.c +++ b/src/sfnt/ttload.c @@ -5,7 +5,7 @@ /* Load the basic TrueType tables, i.e., tables that can be either in */ /* TTF or OTF fonts (body). */ /* */ -/* Copyright 1996-2010, 2012-2014 by */ +/* Copyright 1996-2015 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/sfnt/ttload.h b/src/sfnt/ttload.h index 49a1aee..a6d91c5 100644 --- a/src/sfnt/ttload.h +++ b/src/sfnt/ttload.h @@ -5,7 +5,7 @@ /* Load the basic TrueType tables, i.e., tables that can be either in */ /* TTF or OTF fonts (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2005, 2006 by */ +/* Copyright 1996-2015 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/sfnt/ttmtx.c b/src/sfnt/ttmtx.c index bb31957..58309aa 100644 --- a/src/sfnt/ttmtx.c +++ b/src/sfnt/ttmtx.c @@ -4,7 +4,7 @@ /* */ /* Load the metrics tables common to TTF and OTF fonts (body). */ /* */ -/* Copyright 2006-2009, 2011-2014 by */ +/* Copyright 2006-2015 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/sfnt/ttmtx.h b/src/sfnt/ttmtx.h index fb04039..096ee06 100644 --- a/src/sfnt/ttmtx.h +++ b/src/sfnt/ttmtx.h @@ -4,7 +4,7 @@ /* */ /* Load the metrics tables common to TTF and OTF fonts (specification). */ /* */ -/* Copyright 2006, 2014 by */ +/* Copyright 2006-2015 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/sfnt/ttpost.c b/src/sfnt/ttpost.c index 99d8005..b9fafe4 100644 --- a/src/sfnt/ttpost.c +++ b/src/sfnt/ttpost.c @@ -5,7 +5,7 @@ /* Postcript name table processing for TrueType and OpenType fonts */ /* (body). */ /* */ -/* Copyright 1996-2003, 2006-2010, 2013, 2014 by */ +/* Copyright 1996-2015 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/sfnt/ttpost.h b/src/sfnt/ttpost.h index 6f06d75..e3eca02 100644 --- a/src/sfnt/ttpost.h +++ b/src/sfnt/ttpost.h @@ -5,7 +5,7 @@ /* Postcript name table processing for TrueType and OpenType fonts */ /* (specification). */ /* */ -/* Copyright 1996-2001, 2002 by */ +/* Copyright 1996-2015 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/sfnt/ttsbit.c b/src/sfnt/ttsbit.c index c2db96c..53b0b13 100644 --- a/src/sfnt/ttsbit.c +++ b/src/sfnt/ttsbit.c @@ -4,7 +4,7 @@ /* */ /* TrueType and OpenType embedded bitmap support (body). */ /* */ -/* Copyright 2005-2009, 2013, 2014 by */ +/* Copyright 2005-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* Copyright 2013 by Google, Inc. */ diff --git a/src/sfnt/ttsbit.h b/src/sfnt/ttsbit.h index 695d0d8..d4e13ae 100644 --- a/src/sfnt/ttsbit.h +++ b/src/sfnt/ttsbit.h @@ -4,7 +4,7 @@ /* */ /* TrueType and OpenType embedded bitmap support (specification). */ /* */ -/* Copyright 1996-2008, 2013 by */ +/* Copyright 1996-2015 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/smooth/Jamfile b/src/smooth/Jamfile index a8496aa..73b29d6 100644 --- a/src/smooth/Jamfile +++ b/src/smooth/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/smooth Jamfile # -# Copyright 2001 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c index 4240b01..1347141 100644 --- a/src/smooth/ftgrays.c +++ b/src/smooth/ftgrays.c @@ -4,7 +4,7 @@ /* */ /* A new `perfect' anti-aliasing renderer (body). */ /* */ -/* Copyright 2000-2003, 2005-2014 by */ +/* Copyright 2000-2015 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/smooth/ftgrays.h b/src/smooth/ftgrays.h index f20f55f..1b57603 100644 --- a/src/smooth/ftgrays.h +++ b/src/smooth/ftgrays.h @@ -4,7 +4,7 @@ /* */ /* FreeType smooth renderer declaration */ /* */ -/* Copyright 1996-2001 by */ +/* Copyright 1996-2015 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/smooth/ftsmerrs.h b/src/smooth/ftsmerrs.h index 413d2f1..cc38aa1 100644 --- a/src/smooth/ftsmerrs.h +++ b/src/smooth/ftsmerrs.h @@ -4,7 +4,7 @@ /* */ /* smooth renderer error codes (specification only). */ /* */ -/* Copyright 2001, 2012 by */ +/* Copyright 2001-2015 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/smooth/ftsmooth.c b/src/smooth/ftsmooth.c index 4e2dee5..4430cc1 100644 --- a/src/smooth/ftsmooth.c +++ b/src/smooth/ftsmooth.c @@ -4,7 +4,7 @@ /* */ /* Anti-aliasing renderer interface (body). */ /* */ -/* Copyright 2000-2006, 2009-2013 by */ +/* Copyright 2000-2015 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/smooth/ftsmooth.h b/src/smooth/ftsmooth.h index 3708790..765018c 100644 --- a/src/smooth/ftsmooth.h +++ b/src/smooth/ftsmooth.h @@ -4,7 +4,7 @@ /* */ /* Anti-aliasing renderer interface (specification). */ /* */ -/* Copyright 1996-2001 by */ +/* Copyright 1996-2015 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/smooth/ftspic.c b/src/smooth/ftspic.c index 67a2b83..8e6ed57 100644 --- a/src/smooth/ftspic.c +++ b/src/smooth/ftspic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for smooth module. */ /* */ -/* Copyright 2009, 2010, 2012, 2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/smooth/ftspic.h b/src/smooth/ftspic.h index 334b51c..99b9f0e 100644 --- a/src/smooth/ftspic.h +++ b/src/smooth/ftspic.h @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for smooth module. */ /* */ -/* Copyright 2009 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/smooth/module.mk b/src/smooth/module.mk index 47f6c04..740936f 100644 --- a/src/smooth/module.mk +++ b/src/smooth/module.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/smooth/rules.mk b/src/smooth/rules.mk index c8ac81c..f00ebd5 100644 --- a/src/smooth/rules.mk +++ b/src/smooth/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2001, 2003, 2011 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/smooth/smooth.c b/src/smooth/smooth.c index a8ac51f..4ca4344 100644 --- a/src/smooth/smooth.c +++ b/src/smooth/smooth.c @@ -4,7 +4,7 @@ /* */ /* FreeType anti-aliasing rasterer module component (body only). */ /* */ -/* Copyright 1996-2001 by */ +/* Copyright 1996-2015 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/tools/afblue.pl b/src/tools/afblue.pl index 60fe696..56b6452 100644 --- a/src/tools/afblue.pl +++ b/src/tools/afblue.pl @@ -5,7 +5,7 @@ # # Process a blue zone character data file. # -# Copyright 2013, 2014 by +# Copyright 2013-2015 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/tools/docmaker/content.py b/src/tools/docmaker/content.py index adea6f1..6887f0b 100644 --- a/src/tools/docmaker/content.py +++ b/src/tools/docmaker/content.py @@ -3,7 +3,7 @@ # # Parse comment blocks to build content blocks (library file). # -# Copyright 2002, 2004, 2006-2009, 2012-2014 by +# Copyright 2002-2015 by # David Turner. # # This file is part of the FreeType project, and may only be used, diff --git a/src/tools/docmaker/docmaker.py b/src/tools/docmaker/docmaker.py index 4fb1abf..de82d93 100644 --- a/src/tools/docmaker/docmaker.py +++ b/src/tools/docmaker/docmaker.py @@ -4,7 +4,7 @@ # # Convert source code markup to HTML documentation. # -# Copyright 2002, 2004, 2008, 2013, 2014 by +# Copyright 2002-2015 by # David Turner. # # This file is part of the FreeType project, and may only be used, diff --git a/src/tools/docmaker/formatter.py b/src/tools/docmaker/formatter.py index 7152c01..f0a8808 100644 --- a/src/tools/docmaker/formatter.py +++ b/src/tools/docmaker/formatter.py @@ -3,7 +3,7 @@ # # Convert parsed content blocks to a structured document (library file). # -# Copyright 2002, 2004, 2007, 2008, 2014 by +# Copyright 2002-2015 by # David Turner. # # This file is part of the FreeType project, and may only be used, diff --git a/src/tools/docmaker/sources.py b/src/tools/docmaker/sources.py index 61ecc22..0cf21ce 100644 --- a/src/tools/docmaker/sources.py +++ b/src/tools/docmaker/sources.py @@ -3,7 +3,7 @@ # # Convert source code comments to multi-line blocks (library file). # -# Copyright 2002-2004, 2006-2009, 2012-2014 by +# Copyright 2002-2015 by # David Turner. # # This file is part of the FreeType project, and may only be used, diff --git a/src/tools/docmaker/tohtml.py b/src/tools/docmaker/tohtml.py index 05fc08a..bc6bcf0 100644 --- a/src/tools/docmaker/tohtml.py +++ b/src/tools/docmaker/tohtml.py @@ -3,7 +3,7 @@ # # A sub-class container of the `Formatter' class to produce HTML. # -# Copyright 2002, 2003, 2005-2008, 2013, 2014 by +# Copyright 2002-2015 by # David Turner. # # This file is part of the FreeType project, and may only be used, diff --git a/src/tools/docmaker/utils.py b/src/tools/docmaker/utils.py index b35823a..52af17a 100644 --- a/src/tools/docmaker/utils.py +++ b/src/tools/docmaker/utils.py @@ -3,7 +3,7 @@ # # Auxiliary functions for the `docmaker' tool (library file). # -# Copyright 2002, 2004, 2007, 2008, 2014 by +# Copyright 2002-2015 by # David Turner. # # This file is part of the FreeType project, and may only be used, diff --git a/src/tools/glnames.py b/src/tools/glnames.py index 8810bf5..bca7fb1 100644 --- a/src/tools/glnames.py +++ b/src/tools/glnames.py @@ -6,7 +6,7 @@ # -# Copyright 1996-2000, 2003, 2005, 2007, 2008, 2011 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/truetype/Jamfile b/src/truetype/Jamfile index a8cccfe..55a60af 100644 --- a/src/truetype/Jamfile +++ b/src/truetype/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/truetype Jamfile # -# Copyright 2001, 2004 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/truetype/module.mk b/src/truetype/module.mk index baee81a..c6dc6fa 100644 --- a/src/truetype/module.mk +++ b/src/truetype/module.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/truetype/rules.mk b/src/truetype/rules.mk index e39235b..1db16ba 100644 --- a/src/truetype/rules.mk +++ b/src/truetype/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2001, 2003-2004, 2011-2012 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/truetype/truetype.c b/src/truetype/truetype.c index 576912b..f929437 100644 --- a/src/truetype/truetype.c +++ b/src/truetype/truetype.c @@ -4,7 +4,7 @@ /* */ /* FreeType TrueType driver component (body only). */ /* */ -/* Copyright 1996-2001, 2004, 2006, 2012 by */ +/* Copyright 1996-2015 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/truetype/ttdriver.c b/src/truetype/ttdriver.c index ecf4cdc..a151637 100644 --- a/src/truetype/ttdriver.c +++ b/src/truetype/ttdriver.c @@ -4,7 +4,7 @@ /* */ /* TrueType font driver implementation (body). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 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/truetype/ttdriver.h b/src/truetype/ttdriver.h index aae00f2..6cacd60 100644 --- a/src/truetype/ttdriver.h +++ b/src/truetype/ttdriver.h @@ -4,7 +4,7 @@ /* */ /* High-level TrueType driver interface (specification). */ /* */ -/* Copyright 1996-2001, 2002 by */ +/* Copyright 1996-2015 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/truetype/tterrors.h b/src/truetype/tterrors.h index 78d138f..ba32cf7 100644 --- a/src/truetype/tterrors.h +++ b/src/truetype/tterrors.h @@ -4,7 +4,7 @@ /* */ /* TrueType error codes (specification only). */ /* */ -/* Copyright 2001, 2012 by */ +/* Copyright 2001-2015 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/truetype/ttgload.c b/src/truetype/ttgload.c index 537e979..9431a51 100644 --- a/src/truetype/ttgload.c +++ b/src/truetype/ttgload.c @@ -4,7 +4,7 @@ /* */ /* TrueType Glyph Loader (body). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 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/truetype/ttgload.h b/src/truetype/ttgload.h index 3f1699e..8e3255e 100644 --- a/src/truetype/ttgload.h +++ b/src/truetype/ttgload.h @@ -4,7 +4,7 @@ /* */ /* TrueType Glyph Loader (specification). */ /* */ -/* Copyright 1996-2006, 2008, 2011 by */ +/* Copyright 1996-2015 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/truetype/ttgxvar.c b/src/truetype/ttgxvar.c index 1b35539..9168019 100644 --- a/src/truetype/ttgxvar.c +++ b/src/truetype/ttgxvar.c @@ -4,7 +4,7 @@ /* */ /* TrueType GX Font Variation loader */ /* */ -/* Copyright 2004-2014 by */ +/* Copyright 2004-2015 by */ /* David Turner, Robert Wilhelm, Werner Lemberg, and George Williams. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/truetype/ttgxvar.h b/src/truetype/ttgxvar.h index 82dfc44..9b69f7b 100644 --- a/src/truetype/ttgxvar.h +++ b/src/truetype/ttgxvar.h @@ -4,7 +4,7 @@ /* */ /* TrueType GX Font Variation loader (specification) */ /* */ -/* Copyright 2004 by */ +/* Copyright 2004-2015 by */ /* David Turner, Robert Wilhelm, Werner Lemberg and George Williams. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index 8ac2974..3709b8c 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -4,7 +4,7 @@ /* */ /* TrueType bytecode interpreter (body). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 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/truetype/ttinterp.h b/src/truetype/ttinterp.h index 8f213be..832e4f6 100644 --- a/src/truetype/ttinterp.h +++ b/src/truetype/ttinterp.h @@ -4,7 +4,7 @@ /* */ /* TrueType bytecode interpreter (specification). */ /* */ -/* Copyright 1996-2007, 2010, 2012-2014 by */ +/* Copyright 1996-2015 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/truetype/ttobjs.c b/src/truetype/ttobjs.c index 82d95e1..9e10e16 100644 --- a/src/truetype/ttobjs.c +++ b/src/truetype/ttobjs.c @@ -4,7 +4,7 @@ /* */ /* Objects manager (body). */ /* */ -/* Copyright 1996-2013 by */ +/* Copyright 1996-2015 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/truetype/ttobjs.h b/src/truetype/ttobjs.h index 782255c..769cf7c 100644 --- a/src/truetype/ttobjs.h +++ b/src/truetype/ttobjs.h @@ -4,7 +4,7 @@ /* */ /* Objects manager (specification). */ /* */ -/* Copyright 1996-2009, 2011-2014 by */ +/* Copyright 1996-2015 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/truetype/ttpic.c b/src/truetype/ttpic.c index edefae7..242a6b7 100644 --- a/src/truetype/ttpic.c +++ b/src/truetype/ttpic.c @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for truetype module. */ /* */ -/* Copyright 2009, 2010, 2012, 2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/truetype/ttpic.h b/src/truetype/ttpic.h index cfb4ee6..48ba4aa 100644 --- a/src/truetype/ttpic.h +++ b/src/truetype/ttpic.h @@ -4,7 +4,7 @@ /* */ /* The FreeType position independent code services for truetype module. */ /* */ -/* Copyright 2009, 2012, 2013 by */ +/* Copyright 2009-2015 by */ /* Oran Agra and Mickey Gabel. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/truetype/ttpload.c b/src/truetype/ttpload.c index 9991925..caf6cf1 100644 --- a/src/truetype/ttpload.c +++ b/src/truetype/ttpload.c @@ -4,7 +4,7 @@ /* */ /* TrueType-specific tables loader (body). */ /* */ -/* Copyright 1996-2002, 2004-2013 by */ +/* Copyright 1996-2015 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/truetype/ttpload.h b/src/truetype/ttpload.h index f61ac07..bc92369 100644 --- a/src/truetype/ttpload.h +++ b/src/truetype/ttpload.h @@ -4,7 +4,7 @@ /* */ /* TrueType-specific tables loader (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2005, 2006 by */ +/* Copyright 1996-2015 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/truetype/ttsubpix.c b/src/truetype/ttsubpix.c index ca60451..a1d79e8 100644 --- a/src/truetype/ttsubpix.c +++ b/src/truetype/ttsubpix.c @@ -4,7 +4,7 @@ /* */ /* TrueType Subpixel Hinting. */ /* */ -/* Copyright 2010-2013 by */ +/* Copyright 2010-2015 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/truetype/ttsubpix.h b/src/truetype/ttsubpix.h index 8a54fc7..7bffd11 100644 --- a/src/truetype/ttsubpix.h +++ b/src/truetype/ttsubpix.h @@ -4,7 +4,7 @@ /* */ /* TrueType Subpixel Hinting. */ /* */ -/* Copyright 2010-2013 by */ +/* Copyright 2010-2015 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/type1/Jamfile b/src/type1/Jamfile index 8e366ba..5d7b62c 100644 --- a/src/type1/Jamfile +++ b/src/type1/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/type1 Jamfile # -# Copyright 2001 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/type1/module.mk b/src/type1/module.mk index ade0210..feb3459 100644 --- a/src/type1/module.mk +++ b/src/type1/module.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/type1/rules.mk b/src/type1/rules.mk index 160946a..fbd0543 100644 --- a/src/type1/rules.mk +++ b/src/type1/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2001, 2003 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/type1/t1afm.c b/src/type1/t1afm.c index de9c199..35f67e8 100644 --- a/src/type1/t1afm.c +++ b/src/type1/t1afm.c @@ -4,7 +4,7 @@ /* */ /* AFM support for Type 1 fonts (body). */ /* */ -/* Copyright 1996-2011, 2013 by */ +/* Copyright 1996-2015 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/type1/t1afm.h b/src/type1/t1afm.h index 8eb1764..0f42f3e 100644 --- a/src/type1/t1afm.h +++ b/src/type1/t1afm.h @@ -4,7 +4,7 @@ /* */ /* AFM support for Type 1 fonts (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2006 by */ +/* Copyright 1996-2015 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/type1/t1driver.c b/src/type1/t1driver.c index 2602bdb..4524ab2 100644 --- a/src/type1/t1driver.c +++ b/src/type1/t1driver.c @@ -4,7 +4,7 @@ /* */ /* Type 1 driver interface (body). */ /* */ -/* Copyright 1996-2004, 2006, 2007, 2009, 2011, 2013, 2014 by */ +/* Copyright 1996-2015 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/type1/t1driver.h b/src/type1/t1driver.h index 639cd4a..34bcf81 100644 --- a/src/type1/t1driver.h +++ b/src/type1/t1driver.h @@ -4,7 +4,7 @@ /* */ /* High-level Type 1 driver interface (specification). */ /* */ -/* Copyright 1996-2001, 2002 by */ +/* Copyright 1996-2015 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/type1/t1errors.h b/src/type1/t1errors.h index 8740530..fc7a9bd 100644 --- a/src/type1/t1errors.h +++ b/src/type1/t1errors.h @@ -4,7 +4,7 @@ /* */ /* Type 1 error codes (specification only). */ /* */ -/* Copyright 2001, 2012 by */ +/* Copyright 2001-2015 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/type1/t1gload.c b/src/type1/t1gload.c index af102fd..546f3e1 100644 --- a/src/type1/t1gload.c +++ b/src/type1/t1gload.c @@ -4,7 +4,7 @@ /* */ /* Type 1 Glyph Loader (body). */ /* */ -/* Copyright 1996-2006, 2008-2010, 2013, 2014 by */ +/* Copyright 1996-2015 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/type1/t1gload.h b/src/type1/t1gload.h index 0bdea3a..05f60d5 100644 --- a/src/type1/t1gload.h +++ b/src/type1/t1gload.h @@ -4,7 +4,7 @@ /* */ /* Type 1 Glyph Loader (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2008, 2011 by */ +/* Copyright 1996-2015 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/type1/t1load.c b/src/type1/t1load.c index 22b3f6b..b3721d4 100644 --- a/src/type1/t1load.c +++ b/src/type1/t1load.c @@ -4,7 +4,7 @@ /* */ /* Type 1 font loader (body). */ /* */ -/* Copyright 1996-2014 by */ +/* Copyright 1996-2015 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/type1/t1load.h b/src/type1/t1load.h index 546fc33..de422e7 100644 --- a/src/type1/t1load.h +++ b/src/type1/t1load.h @@ -4,7 +4,7 @@ /* */ /* Type 1 font loader (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2004, 2006, 2007 by */ +/* Copyright 1996-2015 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/type1/t1objs.c b/src/type1/t1objs.c index e11770f..74fb4fa 100644 --- a/src/type1/t1objs.c +++ b/src/type1/t1objs.c @@ -4,7 +4,7 @@ /* */ /* Type 1 objects manager (body). */ /* */ -/* Copyright 1996-2009, 2011, 2013 by */ +/* Copyright 1996-2015 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/type1/t1objs.h b/src/type1/t1objs.h index 54ccbb9..6b4f3cb 100644 --- a/src/type1/t1objs.h +++ b/src/type1/t1objs.h @@ -4,7 +4,7 @@ /* */ /* Type 1 objects manager (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2006, 2011 by */ +/* Copyright 1996-2015 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/type1/t1parse.c b/src/type1/t1parse.c index ccf9f4c..40ffd07 100644 --- a/src/type1/t1parse.c +++ b/src/type1/t1parse.c @@ -4,7 +4,7 @@ /* */ /* Type 1 parser (body). */ /* */ -/* Copyright 1996-2005, 2008, 2009, 2012-2014 by */ +/* Copyright 1996-2015 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/type1/t1parse.h b/src/type1/t1parse.h index fb1c8a8..ef8eef0 100644 --- a/src/type1/t1parse.h +++ b/src/type1/t1parse.h @@ -4,7 +4,7 @@ /* */ /* Type 1 parser (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2008 by */ +/* Copyright 1996-2015 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/type1/t1tokens.h b/src/type1/t1tokens.h index e37276b..3992652 100644 --- a/src/type1/t1tokens.h +++ b/src/type1/t1tokens.h @@ -4,7 +4,7 @@ /* */ /* Type 1 tokenizer (specification). */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2006, 2008, 2009 by */ +/* Copyright 1996-2015 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/type1/type1.c b/src/type1/type1.c index ccc12be..4c70ea7 100644 --- a/src/type1/type1.c +++ b/src/type1/type1.c @@ -4,7 +4,7 @@ /* */ /* FreeType Type 1 driver component (body only). */ /* */ -/* Copyright 1996-2001 by */ +/* Copyright 1996-2015 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/type42/Jamfile b/src/type42/Jamfile index 00371d5..e0db3cc 100644 --- a/src/type42/Jamfile +++ b/src/type42/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/type42 Jamfile # -# Copyright 2002 by +# Copyright 2002-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/type42/module.mk b/src/type42/module.mk index b3f10a8..af7e651 100644 --- a/src/type42/module.mk +++ b/src/type42/module.mk @@ -3,7 +3,7 @@ # -# Copyright 2002, 2006 by +# Copyright 2002-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/type42/rules.mk b/src/type42/rules.mk index 34a31e8..4a8efca 100644 --- a/src/type42/rules.mk +++ b/src/type42/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 2002, 2003, 2008 by +# Copyright 2002-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/type42/t42drivr.c b/src/type42/t42drivr.c index 3ad1bde..768d7f3 100644 --- a/src/type42/t42drivr.c +++ b/src/type42/t42drivr.c @@ -4,7 +4,7 @@ /* */ /* High-level Type 42 driver interface (body). */ /* */ -/* Copyright 2002-2004, 2006, 2007, 2009, 2011, 2013 by */ +/* Copyright 2002-2015 by */ /* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/type42/t42drivr.h b/src/type42/t42drivr.h index 78ae2ab..b4d1753 100644 --- a/src/type42/t42drivr.h +++ b/src/type42/t42drivr.h @@ -4,7 +4,7 @@ /* */ /* High-level Type 42 driver interface (specification). */ /* */ -/* Copyright 2002 by */ +/* Copyright 2002-2015 by */ /* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/type42/t42error.h b/src/type42/t42error.h index 217ae8b..cddaf9e 100644 --- a/src/type42/t42error.h +++ b/src/type42/t42error.h @@ -4,7 +4,7 @@ /* */ /* Type 42 error codes (specification only). */ /* */ -/* Copyright 2002, 2003, 2012 by */ +/* Copyright 2002-2015 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/type42/t42objs.c b/src/type42/t42objs.c index e86ca78..d0a05d6 100644 --- a/src/type42/t42objs.c +++ b/src/type42/t42objs.c @@ -4,7 +4,7 @@ /* */ /* Type 42 objects manager (body). */ /* */ -/* Copyright 2002-2009, 2011, 2013 by */ +/* Copyright 2002-2015 by */ /* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/type42/t42objs.h b/src/type42/t42objs.h index 4c31ee8..3722c67 100644 --- a/src/type42/t42objs.h +++ b/src/type42/t42objs.h @@ -4,7 +4,7 @@ /* */ /* Type 42 objects manager (specification). */ /* */ -/* Copyright 2002, 2003, 2006, 2007, 2011 by */ +/* Copyright 2002-2015 by */ /* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/type42/t42parse.c b/src/type42/t42parse.c index 5070853..7d9ccb6 100644 --- a/src/type42/t42parse.c +++ b/src/type42/t42parse.c @@ -4,7 +4,7 @@ /* */ /* Type 42 font parser (body). */ /* */ -/* Copyright 2002-2014 by */ +/* Copyright 2002-2015 by */ /* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/type42/t42parse.h b/src/type42/t42parse.h index fa10edd..2fd6414 100644 --- a/src/type42/t42parse.h +++ b/src/type42/t42parse.h @@ -4,7 +4,7 @@ /* */ /* Type 42 font parser (specification). */ /* */ -/* Copyright 2002, 2003 by */ +/* Copyright 2002-2015 by */ /* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/type42/t42types.h b/src/type42/t42types.h index 7c3b758..c829224 100644 --- a/src/type42/t42types.h +++ b/src/type42/t42types.h @@ -4,7 +4,7 @@ /* */ /* Type 42 font data types (specification only). */ /* */ -/* Copyright 2002, 2003, 2006, 2008 by */ +/* Copyright 2002-2015 by */ /* Roberto Alameda. */ /* */ /* This file is part of the FreeType project, and may only be used, */ diff --git a/src/type42/type42.c b/src/type42/type42.c index d13df56..3332b7b 100644 --- a/src/type42/type42.c +++ b/src/type42/type42.c @@ -4,7 +4,7 @@ /* */ /* FreeType Type 42 driver component. */ /* */ -/* Copyright 2002 by */ +/* Copyright 2002-2015 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/winfonts/Jamfile b/src/winfonts/Jamfile index 71cf567..86ee668 100644 --- a/src/winfonts/Jamfile +++ b/src/winfonts/Jamfile @@ -1,6 +1,6 @@ # FreeType 2 src/winfonts Jamfile # -# Copyright 2001 by +# Copyright 2001-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/winfonts/fnterrs.h b/src/winfonts/fnterrs.h index 463ba77..0bf4d09 100644 --- a/src/winfonts/fnterrs.h +++ b/src/winfonts/fnterrs.h @@ -4,7 +4,7 @@ /* */ /* Win FNT/FON error codes (specification only). */ /* */ -/* Copyright 2001, 2012 by */ +/* Copyright 2001-2015 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/winfonts/module.mk b/src/winfonts/module.mk index b44d7f0..8ba6d75 100644 --- a/src/winfonts/module.mk +++ b/src/winfonts/module.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2006 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/winfonts/rules.mk b/src/winfonts/rules.mk index 1a78171..4535f54 100644 --- a/src/winfonts/rules.mk +++ b/src/winfonts/rules.mk @@ -3,7 +3,7 @@ # -# Copyright 1996-2000, 2001, 2003 by +# Copyright 1996-2015 by # David Turner, Robert Wilhelm, and Werner Lemberg. # # This file is part of the FreeType project, and may only be used, modified, diff --git a/src/winfonts/winfnt.c b/src/winfonts/winfnt.c index 4705c53..c71b853 100644 --- a/src/winfonts/winfnt.c +++ b/src/winfonts/winfnt.c @@ -4,7 +4,7 @@ /* */ /* FreeType font driver for Windows FNT/FON files */ /* */ -/* Copyright 1996-2004, 2006-2014 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* Copyright 2003 Huw D M Davies for Codeweavers */ /* Copyright 2007 Dmitry Timoshkov for Codeweavers */ diff --git a/src/winfonts/winfnt.h b/src/winfonts/winfnt.h index b7a8073..a39d26f 100644 --- a/src/winfonts/winfnt.h +++ b/src/winfonts/winfnt.h @@ -4,7 +4,7 @@ /* */ /* FreeType font driver for Windows FNT/FON files */ /* */ -/* Copyright 1996-2001, 2002, 2003, 2004, 2007 by */ +/* Copyright 1996-2015 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* Copyright 2007 Dmitry Timoshkov for Codeweavers */ /* */ diff --git a/vms_make.com b/vms_make.com index 8d8fdf7..5b7da39 100644 --- a/vms_make.com +++ b/vms_make.com @@ -1,6 +1,6 @@ $! make Freetype2 under OpenVMS $! -$! Copyright 2003, 2004, 2006, 2007, 2013 by +$! Copyright 2003-2015 by $! David Turner, Robert Wilhelm, and Werner Lemberg. $! $! This file is part of the FreeType project, and may only be used, modified, -- 2.2.2 From 942aa5fff46abad9216d2943f1ffaf9e83e32c29 Mon Sep 17 00:00:00 2001 From: Chris Liddell Date: Sun, 18 Jan 2015 07:29:48 +0100 Subject: [PATCH] [raster] Fix Savannah bug #44022. Add fallback for glyphs with degenerate bounding boxes. If a glyph has only one very narrow feature, the bbox can end up with either the width or height of the bbox being 0, in which case no raster memory is allocated and no attempt is made to render the glyph. This is less than ideal when the drop-out compensation in the rendering code would actually result in the glyph being rendered. This problem can be observed with the `I' glyph (gid 47) in the Autodesk RomanS TrueType font. * src/raster/ftrend1.c (ft_raster1_render): Add a fallback if either dimension is zero to explicitly round up/down (instead of simply round). --- ChangeLog | 20 ++++++++++++++++++++ src/raster/ftrend1.c | 32 ++++++++++++++++++++++++++------ 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index 84eee06..268e4b5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2015-01-18 Chris Liddell + + [raster] Fix Savannah bug #44022. + + Add fallback for glyphs with degenerate bounding boxes. + + If a glyph has only one very narrow feature, the bbox can end up + with either the width or height of the bbox being 0, in which case + no raster memory is allocated and no attempt is made to render the + glyph. This is less than ideal when the drop-out compensation in + the rendering code would actually result in the glyph being + rendered. + + This problem can be observed with the `I' glyph (gid 47) in the + Autodesk RomanS TrueType font. + + * src/raster/ftrend1.c (ft_raster1_render): Add a fallback if either + dimension is zero to explicitly round up/down (instead of simply + round). + 2015-01-17 Werner Lemberg Add some tools to handle yearly copyright notice updates. diff --git a/src/raster/ftrend1.c b/src/raster/ftrend1.c index 437996b..dc03b34 100644 --- a/src/raster/ftrend1.c +++ b/src/raster/ftrend1.c @@ -104,7 +104,7 @@ { FT_Error error; FT_Outline* outline; - FT_BBox cbox; + FT_BBox cbox, cbox0; FT_UInt width, height, pitch; FT_Bitmap* bitmap; FT_Memory memory; @@ -133,14 +133,14 @@ FT_Outline_Translate( outline, origin->x, origin->y ); /* compute the control box, and grid fit it */ - FT_Outline_Get_CBox( outline, &cbox ); + FT_Outline_Get_CBox( outline, &cbox0 ); /* undocumented but confirmed: bbox values get rounded */ #if 1 - cbox.xMin = FT_PIX_ROUND( cbox.xMin ); - cbox.yMin = FT_PIX_ROUND( cbox.yMin ); - cbox.xMax = FT_PIX_ROUND( cbox.xMax ); - cbox.yMax = FT_PIX_ROUND( cbox.yMax ); + cbox.xMin = FT_PIX_ROUND( cbox0.xMin ); + cbox.yMin = FT_PIX_ROUND( cbox0.yMin ); + cbox.xMax = FT_PIX_ROUND( cbox0.xMax ); + cbox.yMax = FT_PIX_ROUND( cbox0.yMax ); #else cbox.xMin = FT_PIX_FLOOR( cbox.xMin ); cbox.yMin = FT_PIX_FLOOR( cbox.yMin ); @@ -148,8 +148,28 @@ cbox.yMax = FT_PIX_CEIL( cbox.yMax ); #endif + /* If either `width' or `height' round to 0, try */ + /* explicitly rounding up/down. In the case of */ + /* glyphs containing only one very narrow feature, */ + /* this gives the drop-out compensation in the scan */ + /* conversion code a chance to do its stuff. */ width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 ); + if ( width == 0 ) + { + cbox.xMin = FT_PIX_FLOOR( cbox0.xMin ); + cbox.xMax = FT_PIX_CEIL( cbox0.xMax ); + + width = (FT_UInt)( ( cbox.xMax - cbox.xMin ) >> 6 ); + } + height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 ); + if ( height == 0 ) + { + cbox.yMin = FT_PIX_FLOOR( cbox0.yMin ); + cbox.yMax = FT_PIX_CEIL( cbox0.yMax ); + + height = (FT_UInt)( ( cbox.yMax - cbox.yMin ) >> 6 ); + } if ( width > FT_USHORT_MAX || height > FT_USHORT_MAX ) { -- 2.2.2 From 79a5ac603a29ba316d4d5d824a014589eb8879e4 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sun, 18 Jan 2015 07:30:04 +0100 Subject: [PATCH] * src/base/ftobjs.c (FT_New_Library): Fix compiler warning. --- ChangeLog | 4 ++++ src/base/ftobjs.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 268e4b5..334a439 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-01-18 Werner Lemberg + + * src/base/ftobjs.c (FT_New_Library): Fix compiler warning. + 2015-01-18 Chris Liddell [raster] Fix Savannah bug #44022. diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index e7e0c4f..8e14243 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -4661,8 +4661,8 @@ return FT_Err_Ok; - Fail: #ifdef FT_CONFIG_OPTION_PIC + Fail: ft_pic_container_destroy( library ); #endif FT_FREE( library ); -- 2.2.2 From 1a42f3253d73b7a738335cca2c359d14b80a245f Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Thu, 22 Jan 2015 07:56:24 +0100 Subject: [PATCH] Clarify meaning of FT_ENCODING_MS_SYMBOL. --- include/freetype.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/include/freetype.h b/include/freetype.h index 15455c6..9f2c453 100644 --- a/include/freetype.h +++ b/include/freetype.h @@ -642,9 +642,12 @@ FT_BEGIN_HEADER /* */ /* FT_ENCODING_MS_SYMBOL :: */ /* Corresponds to the Microsoft Symbol encoding, used to encode */ - /* mathematical symbols in the 32..255 character code range. For */ - /* more information, see */ - /* `http://www.kostis.net/charsets/symbol.htm'. */ + /* mathematical symbols and wingdings. For more information, see */ + /* `http://www.kostis.net/charsets/symbol.htm' and */ + /* `http://www.kostis.net/charsets/wingding.htm'. */ + /* */ + /* This encoding uses character codes from the PUA (Private Unicode */ + /* Area) in the range U+F020-U+F0FF. */ /* */ /* FT_ENCODING_SJIS :: */ /* Corresponds to Japanese SJIS encoding. More info at */ -- 2.2.2 From 0bd564a94d5109397e578a0d62e8ca48b346e05f Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Thu, 22 Jan 2015 08:26:48 +0100 Subject: [PATCH] Add another link to cmap information. --- include/freetype.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/freetype.h b/include/freetype.h index 9f2c453..7c46a77 100644 --- a/include/freetype.h +++ b/include/freetype.h @@ -643,7 +643,8 @@ FT_BEGIN_HEADER /* FT_ENCODING_MS_SYMBOL :: */ /* Corresponds to the Microsoft Symbol encoding, used to encode */ /* mathematical symbols and wingdings. For more information, see */ - /* `http://www.kostis.net/charsets/symbol.htm' and */ + /* `http://www.microsoft.com/typography/otspec/recom.htm', */ + /* `http://www.kostis.net/charsets/symbol.htm', and */ /* `http://www.kostis.net/charsets/wingding.htm'. */ /* */ /* This encoding uses character codes from the PUA (Private Unicode */ -- 2.2.2 From 264b5e46c0d166c11360eb6c29edf2c178bb87c7 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 23 Jan 2015 21:23:55 +0100 Subject: [PATCH] [raster] Handle `FT_RASTER_FLAG_AA' correctly. This fixes a breakage caused by the commit `[raster] Remove 5-level gray AA mode from monochrome rasterizer.'. Problem reported by Markus Trippelsdorf and octoploid . * src/raster/ftraster.c (ft_black_render): Handle `FT_RASTER_FLAG_AA'. * src/raster/ftrend1.c (ft_raster1_render): Remove gray AA mode remnants. --- ChangeLog | 16 ++++++++++++++++ src/raster/ftraster.c | 3 +++ src/raster/ftrend1.c | 18 ++---------------- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 334a439..be6cc7a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2015-01-23 Behdad Esfahbod + + [raster] Handle `FT_RASTER_FLAG_AA' correctly. + + This fixes a breakage caused by the commit `[raster] Remove + 5-level gray AA mode from monochrome rasterizer.'. + + Problem reported by Markus Trippelsdorf and + octoploid . + + * src/raster/ftraster.c (ft_black_render): Handle + `FT_RASTER_FLAG_AA'. + + * src/raster/ftrend1.c (ft_raster1_render): Remove gray AA mode + remnants. + 2015-01-18 Werner Lemberg * src/base/ftobjs.c (FT_New_Library): Fix compiler warning. diff --git a/src/raster/ftraster.c b/src/raster/ftraster.c index 65ba454..fd0481b 100644 --- a/src/raster/ftraster.c +++ b/src/raster/ftraster.c @@ -3108,6 +3108,9 @@ if ( params->flags & FT_RASTER_FLAG_DIRECT ) return FT_THROW( Unsupported ); + if ( params->flags & FT_RASTER_FLAG_AA ) + return FT_THROW( Unsupported ); + if ( !target_map ) return FT_THROW( Invalid ); diff --git a/src/raster/ftrend1.c b/src/raster/ftrend1.c index dc03b34..718d632 100644 --- a/src/raster/ftrend1.c +++ b/src/raster/ftrend1.c @@ -187,19 +187,8 @@ slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP; } - /* allocate new one, depends on pixel format */ - if ( !( mode & FT_RENDER_MODE_MONO ) ) - { - /* we pad to 32 bits, only for backwards compatibility with FT 1.x */ - pitch = FT_PAD_CEIL( width, 4 ); - bitmap->pixel_mode = FT_PIXEL_MODE_GRAY; - bitmap->num_grays = 256; - } - else - { - pitch = ( ( width + 15 ) >> 4 ) << 1; - bitmap->pixel_mode = FT_PIXEL_MODE_MONO; - } + pitch = ( ( width + 15 ) >> 4 ) << 1; + bitmap->pixel_mode = FT_PIXEL_MODE_MONO; bitmap->width = width; bitmap->rows = height; @@ -218,9 +207,6 @@ params.source = outline; params.flags = 0; - if ( bitmap->pixel_mode == FT_PIXEL_MODE_GRAY ) - params.flags |= FT_RASTER_FLAG_AA; - /* render outline into the bitmap */ error = render->raster_render( render->raster, ¶ms ); -- 2.2.2 From d2c531ede8340dd52b09afcbc8706d1ce1ddb2bd Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Fri, 23 Jan 2015 22:37:42 +0100 Subject: [PATCH] Minor. --- ChangeLog | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index be6cc7a..8229981 100644 --- a/ChangeLog +++ b/ChangeLog @@ -5,8 +5,7 @@ This fixes a breakage caused by the commit `[raster] Remove 5-level gray AA mode from monochrome rasterizer.'. - Problem reported by Markus Trippelsdorf and - octoploid . + Problem reported by Markus Trippelsdorf . * src/raster/ftraster.c (ft_black_render): Handle `FT_RASTER_FLAG_AA'. -- 2.2.2