Index: third_party/freetype/src/truetype/ttobjs.c |
diff --git a/third_party/freetype/src/truetype/ttobjs.c b/third_party/freetype/src/truetype/ttobjs.c |
index a73529d8487ef3423b226e5fbde38484910192ee..6060d6f5d1e49f97ed2e256220257119c2e0611d 100644 |
--- a/third_party/freetype/src/truetype/ttobjs.c |
+++ b/third_party/freetype/src/truetype/ttobjs.c |
@@ -4,7 +4,7 @@ |
/* */ |
/* Objects manager (body). */ |
/* */ |
-/* Copyright 1996-2013 */ |
+/* Copyright 1996-2015 by */ |
/* David Turner, Robert Wilhelm, and Werner Lemberg. */ |
/* */ |
/* This file is part of the FreeType project, and may only be used, */ |
@@ -191,7 +191,7 @@ |
{ |
FT_Error error; |
FT_UInt32 checksum = 0; |
- int i; |
+ FT_UInt i; |
if ( FT_FRAME_ENTER( length ) ) |
@@ -200,8 +200,8 @@ |
for ( ; length > 3; length -= 4 ) |
checksum += (FT_UInt32)FT_GET_ULONG(); |
- for ( i = 3; length > 0; length --, i-- ) |
- checksum += (FT_UInt32)( FT_GET_BYTE() << ( i * 8 ) ); |
+ for ( i = 3; length > 0; length--, i-- ) |
+ checksum += (FT_UInt32)FT_GET_BYTE() << ( i * 8 ); |
FT_FRAME_EXIT(); |
@@ -256,89 +256,89 @@ |
#define TRICK_SFNT_ID_prep 2 |
{ /* MingLiU 1995 */ |
- { 0x05bcf058, 0x000002e4 }, /* cvt */ |
- { 0x28233bf1, 0x000087c4 }, /* fpgm */ |
- { 0xa344a1ea, 0x000001e1 } /* prep */ |
+ { 0x05BCF058UL, 0x000002E4UL }, /* cvt */ |
+ { 0x28233BF1UL, 0x000087C4UL }, /* fpgm */ |
+ { 0xA344A1EAUL, 0x000001E1UL } /* prep */ |
}, |
{ /* MingLiU 1996- */ |
- { 0x05bcf058, 0x000002e4 }, /* cvt */ |
- { 0x28233bf1, 0x000087c4 }, /* fpgm */ |
- { 0xa344a1eb, 0x000001e1 } /* prep */ |
+ { 0x05BCF058UL, 0x000002E4UL }, /* cvt */ |
+ { 0x28233BF1UL, 0x000087C4UL }, /* fpgm */ |
+ { 0xA344A1EBUL, 0x000001E1UL } /* prep */ |
}, |
{ /* DFKaiShu */ |
- { 0x11e5ead4, 0x00000350 }, /* cvt */ |
- { 0x5a30ca3b, 0x00009063 }, /* fpgm */ |
- { 0x13a42602, 0x0000007e } /* prep */ |
+ { 0x11E5EAD4UL, 0x00000350UL }, /* cvt */ |
+ { 0x5A30CA3BUL, 0x00009063UL }, /* fpgm */ |
+ { 0x13A42602UL, 0x0000007EUL } /* prep */ |
}, |
{ /* HuaTianKaiTi */ |
- { 0xfffbfffc, 0x00000008 }, /* cvt */ |
- { 0x9c9e48b8, 0x0000bea2 }, /* fpgm */ |
- { 0x70020112, 0x00000008 } /* prep */ |
+ { 0xFFFBFFFCUL, 0x00000008UL }, /* cvt */ |
+ { 0x9C9E48B8UL, 0x0000BEA2UL }, /* fpgm */ |
+ { 0x70020112UL, 0x00000008UL } /* prep */ |
}, |
{ /* HuaTianSongTi */ |
- { 0xfffbfffc, 0x00000008 }, /* cvt */ |
- { 0x0a5a0483, 0x00017c39 }, /* fpgm */ |
- { 0x70020112, 0x00000008 } /* prep */ |
+ { 0xFFFBFFFCUL, 0x00000008UL }, /* cvt */ |
+ { 0x0A5A0483UL, 0x00017C39UL }, /* fpgm */ |
+ { 0x70020112UL, 0x00000008UL } /* prep */ |
}, |
{ /* NEC fadpop7.ttf */ |
- { 0x00000000, 0x00000000 }, /* cvt */ |
- { 0x40c92555, 0x000000e5 }, /* fpgm */ |
- { 0xa39b58e3, 0x0000117c } /* prep */ |
+ { 0x00000000UL, 0x00000000UL }, /* cvt */ |
+ { 0x40C92555UL, 0x000000E5UL }, /* fpgm */ |
+ { 0xA39B58E3UL, 0x0000117CUL } /* prep */ |
}, |
{ /* NEC fadrei5.ttf */ |
- { 0x00000000, 0x00000000 }, /* cvt */ |
- { 0x33c41652, 0x000000e5 }, /* fpgm */ |
- { 0x26d6c52a, 0x00000f6a } /* prep */ |
+ { 0x00000000UL, 0x00000000UL }, /* cvt */ |
+ { 0x33C41652UL, 0x000000E5UL }, /* fpgm */ |
+ { 0x26D6C52AUL, 0x00000F6AUL } /* prep */ |
}, |
{ /* NEC fangot7.ttf */ |
- { 0x00000000, 0x00000000 }, /* cvt */ |
- { 0x6db1651d, 0x0000019d }, /* fpgm */ |
- { 0x6c6e4b03, 0x00002492 } /* prep */ |
+ { 0x00000000UL, 0x00000000UL }, /* cvt */ |
+ { 0x6DB1651DUL, 0x0000019DUL }, /* fpgm */ |
+ { 0x6C6E4B03UL, 0x00002492UL } /* prep */ |
}, |
{ /* NEC fangyo5.ttf */ |
- { 0x00000000, 0x00000000 }, /* cvt */ |
- { 0x40c92555, 0x000000e5 }, /* fpgm */ |
- { 0xde51fad0, 0x0000117c } /* prep */ |
+ { 0x00000000UL, 0x00000000UL }, /* cvt */ |
+ { 0x40C92555UL, 0x000000E5UL }, /* fpgm */ |
+ { 0xDE51FAD0UL, 0x0000117CUL } /* prep */ |
}, |
{ /* NEC fankyo5.ttf */ |
- { 0x00000000, 0x00000000 }, /* cvt */ |
- { 0x85e47664, 0x000000e5 }, /* fpgm */ |
- { 0xa6c62831, 0x00001caa } /* prep */ |
+ { 0x00000000UL, 0x00000000UL }, /* cvt */ |
+ { 0x85E47664UL, 0x000000E5UL }, /* fpgm */ |
+ { 0xA6C62831UL, 0x00001CAAUL } /* prep */ |
}, |
{ /* NEC fanrgo5.ttf */ |
- { 0x00000000, 0x00000000 }, /* cvt */ |
- { 0x2d891cfd, 0x0000019d }, /* fpgm */ |
- { 0xa0604633, 0x00001de8 } /* prep */ |
+ { 0x00000000UL, 0x00000000UL }, /* cvt */ |
+ { 0x2D891CFDUL, 0x0000019DUL }, /* fpgm */ |
+ { 0xA0604633UL, 0x00001DE8UL } /* prep */ |
}, |
{ /* NEC fangot5.ttc */ |
- { 0x00000000, 0x00000000 }, /* cvt */ |
- { 0x40aa774c, 0x000001cb }, /* fpgm */ |
- { 0x9b5caa96, 0x00001f9a } /* prep */ |
+ { 0x00000000UL, 0x00000000UL }, /* cvt */ |
+ { 0x40AA774CUL, 0x000001CBUL }, /* fpgm */ |
+ { 0x9B5CAA96UL, 0x00001F9AUL } /* prep */ |
}, |
{ /* NEC fanmin3.ttc */ |
- { 0x00000000, 0x00000000 }, /* cvt */ |
- { 0x0d3de9cb, 0x00000141 }, /* fpgm */ |
- { 0xd4127766, 0x00002280 } /* prep */ |
+ { 0x00000000UL, 0x00000000UL }, /* cvt */ |
+ { 0x0D3DE9CBUL, 0x00000141UL }, /* fpgm */ |
+ { 0xD4127766UL, 0x00002280UL } /* prep */ |
}, |
{ /* NEC FA-Gothic, 1996 */ |
- { 0x00000000, 0x00000000 }, /* cvt */ |
- { 0x4a692698, 0x000001f0 }, /* fpgm */ |
- { 0x340d4346, 0x00001fca } /* prep */ |
+ { 0x00000000UL, 0x00000000UL }, /* cvt */ |
+ { 0x4A692698UL, 0x000001F0UL }, /* fpgm */ |
+ { 0x340D4346UL, 0x00001FCAUL } /* prep */ |
}, |
{ /* NEC FA-Minchou, 1996 */ |
- { 0x00000000, 0x00000000 }, /* cvt */ |
- { 0xcd34c604, 0x00000166 }, /* fpgm */ |
- { 0x6cf31046, 0x000022b0 } /* prep */ |
+ { 0x00000000UL, 0x00000000UL }, /* cvt */ |
+ { 0xCD34C604UL, 0x00000166UL }, /* fpgm */ |
+ { 0x6CF31046UL, 0x000022B0UL } /* prep */ |
}, |
{ /* NEC FA-RoundGothicB, 1996 */ |
- { 0x00000000, 0x00000000 }, /* cvt */ |
- { 0x5da75315, 0x0000019d }, /* fpgm */ |
- { 0x40745a5f, 0x000022e0 } /* prep */ |
+ { 0x00000000UL, 0x00000000UL }, /* cvt */ |
+ { 0x5DA75315UL, 0x0000019DUL }, /* fpgm */ |
+ { 0x40745A5FUL, 0x000022E0UL } /* prep */ |
}, |
{ /* NEC FA-RoundGothicM, 1996 */ |
- { 0x00000000, 0x00000000 }, /* cvt */ |
- { 0xf055fc48, 0x000001c2 }, /* fpgm */ |
- { 0x3900ded3, 0x00001e18 } /* prep */ |
+ { 0x00000000UL, 0x00000000UL }, /* cvt */ |
+ { 0xF055FC48UL, 0x000001C2UL }, /* fpgm */ |
+ { 0x3900DED3UL, 0x00001E18UL } /* prep */ |
} |
}; |
@@ -490,7 +490,10 @@ |
/* <Input> */ |
/* stream :: The source font stream. */ |
/* */ |
- /* face_index :: The index of the font face in the resource. */ |
+ /* face_index :: The index of the TrueType font, if we are opening a */ |
+ /* collection, in bits 0-15. The numbered instance */ |
+ /* index~+~1 of a GX (sub)font, if applicable, in bits */ |
+ /* 16-30. */ |
/* */ |
/* num_params :: Number of additional generic parameters. Ignored. */ |
/* */ |
@@ -599,7 +602,7 @@ |
ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE; |
} |
-#else |
+#else /* !FT_CONFIG_OPTION_INCREMENTAL */ |
if ( !error ) |
error = tt_face_load_loca( face, stream ); |
@@ -623,10 +626,56 @@ |
ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE; |
} |
-#endif |
+#endif /* !FT_CONFIG_OPTION_INCREMENTAL */ |
+ |
+ } |
+ |
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT |
+ |
+ { |
+ FT_Int instance_index = face_index >> 16; |
+ |
+ |
+ if ( FT_HAS_MULTIPLE_MASTERS( ttface ) && |
+ instance_index > 0 ) |
+ { |
+ error = TT_Get_MM_Var( face, NULL ); |
+ if ( error ) |
+ goto Exit; |
+ if ( face->blend->mmvar->namedstyle ) |
+ { |
+ FT_Memory memory = ttface->memory; |
+ |
+ FT_Var_Named_Style* named_style; |
+ FT_String* style_name; |
+ |
+ |
+ /* in `face_index', the instance index starts with value 1 */ |
+ named_style = face->blend->mmvar->namedstyle + instance_index - 1; |
+ error = sfnt->get_name( face, |
+ (FT_UShort)named_style->strid, |
+ &style_name ); |
+ if ( error ) |
+ goto Exit; |
+ |
+ /* set style name; if already set, replace it */ |
+ if ( face->root.style_name ) |
+ FT_FREE( face->root.style_name ); |
+ face->root.style_name = style_name; |
+ |
+ /* finally, select the named instance */ |
+ error = TT_Set_Var_Design( face, |
+ face->blend->mmvar->num_axis, |
+ named_style->coords ); |
+ if ( error ) |
+ goto Exit; |
+ } |
+ } |
} |
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */ |
+ |
#if defined( TT_CONFIG_OPTION_UNPATENTED_HINTING ) && \ |
!defined( TT_CONFIG_OPTION_BYTECODE_INTERPRETER ) |
@@ -751,14 +800,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 ) |
@@ -795,7 +837,7 @@ |
TT_Set_CodeRange( exec, |
tt_coderange_font, |
face->font_program, |
- face->font_program_size ); |
+ (FT_Long)face->font_program_size ); |
/* disable CVT and glyph programs coderange */ |
TT_Clear_CodeRange( exec, tt_coderange_cvt ); |
@@ -845,14 +887,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 ) |
@@ -868,7 +903,7 @@ |
TT_Set_CodeRange( exec, |
tt_coderange_cvt, |
face->cvt_program, |
- face->cvt_program_size ); |
+ (FT_Long)face->cvt_program_size ); |
TT_Clear_CodeRange( exec, tt_coderange_glyph ); |
@@ -876,12 +911,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 +956,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 ); |
@@ -973,9 +1003,21 @@ |
TT_MaxProfile* maxp = &face->max_profile; |
+ /* clean up bytecode related data */ |
+ FT_FREE( size->function_defs ); |
+ FT_FREE( size->instruction_defs ); |
+ FT_FREE( size->cvt ); |
+ FT_FREE( size->storage ); |
+ |
+ if ( size->context ) |
+ TT_Done_Context( size->context ); |
+ tt_glyphzone_done( &size->twilight ); |
+ |
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; |
@@ -1116,6 +1158,7 @@ |
TT_Size size = (TT_Size)ttsize; |
FT_Error error = FT_Err_Ok; |
+ |
#ifdef TT_USE_BYTECODE_INTERPRETER |
size->bytecode_ready = -1; |
size->cvt_ready = -1; |
@@ -1146,8 +1189,7 @@ |
#ifdef TT_USE_BYTECODE_INTERPRETER |
- if ( size->bytecode_ready >= 0 ) |
- tt_size_done_bytecode( ttsize ); |
+ tt_size_done_bytecode( ttsize ); |
#endif |
size->ttmetrics.valid = FALSE; |
@@ -1259,10 +1301,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 +1331,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 |
- |
} |