20#include FT_INTERNAL_DEBUG_H
21#include FT_INTERNAL_STREAM_H
22#include FT_TRUETYPE_TAGS_H
23#include FT_INTERNAL_SFNT_H
31#ifdef TT_USE_BYTECODE_INTERPRETER
35#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
46#define FT_COMPONENT ttobjs
49#ifdef TT_USE_BYTECODE_INTERPRETER
84 zone->max_points =
zone->n_points = 0;
85 zone->max_contours =
zone->n_contours = 0;
134 tt_glyphzone_done(
zone );
138 zone->max_points = maxPoints;
139 zone->max_contours = maxContours;
154#define TRICK_NAMES_MAX_CHARACTERS 19
155#define TRICK_NAMES_COUNT 26
193 "Ming(for ISO10646)",
251 if (
face->dir_tables[
i].CheckSum )
252 return face->dir_tables[
i].CheckSum;
255 if ( !
face->goto_table )
259 face->dir_tables[
i].Tag,
265 face->dir_tables[
i].Length );
280#define TRICK_SFNT_IDS_PER_FACE 3
281#define TRICK_SFNT_IDS_NUM_FACES 29
286#define TRICK_SFNT_ID_cvt 0
287#define TRICK_SFNT_ID_fpgm 1
288#define TRICK_SFNT_ID_prep 2
291 { 0x05BCF058UL, 0x000002E4UL },
292 { 0x28233BF1UL, 0x000087C4UL },
293 { 0xA344A1EAUL, 0x000001E1UL }
296 { 0x05BCF058UL, 0x000002E4UL },
297 { 0x28233BF1UL, 0x000087C4UL },
298 { 0xA344A1EBUL, 0x000001E1UL }
301 { 0x12C3EBB2UL, 0x00000350UL },
302 { 0xB680EE64UL, 0x000087A7UL },
303 { 0xCE939563UL, 0x00000758UL }
306 { 0x11E5EAD4UL, 0x00000350UL },
307 { 0xCE5956E9UL, 0x0000BC85UL },
308 { 0x8272F416UL, 0x00000045UL }
311 { 0x1257EB46UL, 0x00000350UL },
312 { 0xF699D160UL, 0x0000715FUL },
313 { 0xD222F568UL, 0x000003BCUL }
316 { 0x1262EB4EUL, 0x00000350UL },
317 { 0xE86A5D64UL, 0x00007940UL },
318 { 0x7850F729UL, 0x000005FFUL }
321 { 0x122DEB0AUL, 0x00000350UL },
322 { 0x3D16328AUL, 0x0000859BUL },
323 { 0xA93FC33BUL, 0x000002CBUL }
326 { 0x125FEB26UL, 0x00000350UL },
327 { 0xA5ACC982UL, 0x00007EE1UL },
328 { 0x90999196UL, 0x0000041FUL }
331 { 0x11E5EAD4UL, 0x00000350UL },
332 { 0x5A30CA3BUL, 0x00009063UL },
333 { 0x13A42602UL, 0x0000007EUL }
336 { 0x11E5EAD4UL, 0x00000350UL },
337 { 0xA6E78C01UL, 0x00008998UL },
338 { 0x13A42602UL, 0x0000007EUL }
341 { 0x11E5EAD4UL, 0x00000360UL },
342 { 0x9DB282B2UL, 0x0000C06EUL },
343 { 0x53E6D7CAUL, 0x00000082UL }
346 { 0x1243EB18UL, 0x00000350UL },
347 { 0xBA0A8C30UL, 0x000074ADUL },
348 { 0xF3D83409UL, 0x0000037BUL }
351 { 0x07DCF546UL, 0x00000308UL },
352 { 0x40FE7C90UL, 0x00008E2AUL },
353 { 0x608174B5UL, 0x0000007AUL }
356 { 0xEB891238UL, 0x00000308UL },
357 { 0xD2E4DCD4UL, 0x0000676FUL },
358 { 0x8EA5F293UL, 0x000003B8UL }
361 { 0xFFFBFFFCUL, 0x00000008UL },
362 { 0x9C9E48B8UL, 0x0000BEA2UL },
363 { 0x70020112UL, 0x00000008UL }
366 { 0xFFFBFFFCUL, 0x00000008UL },
367 { 0x0A5A0483UL, 0x00017C39UL },
368 { 0x70020112UL, 0x00000008UL }
371 { 0x00000000UL, 0x00000000UL },
372 { 0x40C92555UL, 0x000000E5UL },
373 { 0xA39B58E3UL, 0x0000117CUL }
376 { 0x00000000UL, 0x00000000UL },
377 { 0x33C41652UL, 0x000000E5UL },
378 { 0x26D6C52AUL, 0x00000F6AUL }
381 { 0x00000000UL, 0x00000000UL },
382 { 0x6DB1651DUL, 0x0000019DUL },
383 { 0x6C6E4B03UL, 0x00002492UL }
386 { 0x00000000UL, 0x00000000UL },
387 { 0x40C92555UL, 0x000000E5UL },
388 { 0xDE51FAD0UL, 0x0000117CUL }
391 { 0x00000000UL, 0x00000000UL },
392 { 0x85E47664UL, 0x000000E5UL },
393 { 0xA6C62831UL, 0x00001CAAUL }
396 { 0x00000000UL, 0x00000000UL },
397 { 0x2D891CFDUL, 0x0000019DUL },
398 { 0xA0604633UL, 0x00001DE8UL }
401 { 0x00000000UL, 0x00000000UL },
402 { 0x40AA774CUL, 0x000001CBUL },
403 { 0x9B5CAA96UL, 0x00001F9AUL }
406 { 0x00000000UL, 0x00000000UL },
407 { 0x0D3DE9CBUL, 0x00000141UL },
408 { 0xD4127766UL, 0x00002280UL }
411 { 0x00000000UL, 0x00000000UL },
412 { 0x4A692698UL, 0x000001F0UL },
413 { 0x340D4346UL, 0x00001FCAUL }
416 { 0x00000000UL, 0x00000000UL },
417 { 0xCD34C604UL, 0x00000166UL },
418 { 0x6CF31046UL, 0x000022B0UL }
421 { 0x00000000UL, 0x00000000UL },
422 { 0x5DA75315UL, 0x0000019DUL },
423 { 0x40745A5FUL, 0x000022E0UL }
426 { 0x00000000UL, 0x00000000UL },
427 { 0xF055FC48UL, 0x000001C2UL },
428 { 0x3900DED3UL, 0x00001E18UL }
431 { 0x00170003UL, 0x00000060UL },
432 { 0xDBB4306EUL, 0x000058AAUL },
433 { 0xD643482AUL, 0x00000035UL }
439 FT_Bool has_cvt, has_fpgm, has_prep;
450 for (
i = 0;
i <
face->num_tables;
i++ )
454 switch(
face->dir_tables[
i].Tag )
482 num_matched_ids[
j]++;
492 num_matched_ids[
j]++;
494 num_matched_ids[
j]++;
496 num_matched_ids[
j]++;
512 if (
face->family_name &&
539 for(
i = 0;
i <
face->num_locations;
i++ )
554 if ( glyph_index == 0 )
620 library = ttface->driver->root.library;
625 FT_ERROR((
"tt_face_init: cannot access `sfnt' module\n" ));
647 if (
face->format_tag != 0x00010000L &&
648 face->format_tag != 0x00020000L &&
657#ifdef TT_USE_BYTECODE_INTERPRETER
662 if ( face_index < 0 )
679#ifdef FT_CONFIG_OPTION_INCREMENTAL
680 if ( !ttface->internal->incremental_interface )
707#ifdef FT_CONFIG_OPTION_INCREMENTAL
708 if ( !ttface->internal->incremental_interface )
711 if ( ttface->num_fixed_sizes &&
712 face->glyph_locations &&
716 " Only the `.notdef' glyph has an outline.\n"
718 " Resetting scalable flag to FALSE.\n" ));
720 ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
725#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
734 error = TT_Set_Named_Instance(
face, instance_index );
738 tt_apply_mvar(
face );
785 if (
face->extra.finalizer )
786 face->extra.finalizer(
face->extra.data );
803 face->font_program_size = 0;
804 face->cvt_program_size = 0;
806#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
807 tt_done_blend(
face );
819#ifdef TT_USE_BYTECODE_INTERPRETER
848 exec =
size->context;
861 exec->instruction_trap =
FALSE;
862 exec->F_dot_P = 0x4000L;
876 tt_metrics->
ppem = 0;
877 tt_metrics->
scale = 0;
878 tt_metrics->
ratio = 0x10000L;
882 TT_Set_CodeRange( exec,
891 if (
face->font_program_size > 0 )
895 FT_TRACE4((
"Executing `fpgm' table.\n" ));
897#ifdef FT_DEBUG_LEVEL_TRACE
899 FT_TRACE4((
" interpretation failed with error code 0x%x\n",
909 TT_Save_Context( exec,
size );
942 exec =
size->context;
951 exec->instruction_trap =
FALSE;
955 TT_Set_CodeRange( exec,
962 if (
face->cvt_program_size > 0 )
966 FT_TRACE4((
"Executing `prep' table.\n" ));
968#ifdef FT_DEBUG_LEVEL_TRACE
970 FT_TRACE4((
" interpretation failed with error code 0x%x\n",
982 exec->GS.dualVector.x = 0x4000;
983 exec->GS.dualVector.y = 0;
984 exec->GS.projVector.x = 0x4000;
985 exec->GS.projVector.y = 0x0;
986 exec->GS.freeVector.x = 0x4000;
987 exec->GS.freeVector.y = 0x0;
1000 size->GS = exec->GS;
1002 TT_Save_Context( exec,
size );
1009 tt_size_done_bytecode(
FT_Size ftsize )
1017 TT_Done_Context(
size->context );
1026 size->storage_size = 0;
1029 tt_glyphzone_done( &
size->twilight );
1034 size->num_function_defs = 0;
1035 size->max_function_defs = 0;
1036 size->num_instruction_defs = 0;
1037 size->max_instruction_defs = 0;
1042 size->bytecode_ready = -1;
1043 size->cvt_ready = -1;
1050 tt_size_init_bytecode(
FT_Size ftsize,
1068 if (
size->context )
1069 TT_Done_Context(
size->context );
1070 tt_glyphzone_done( &
size->twilight );
1072 size->bytecode_ready = -1;
1073 size->cvt_ready = -1;
1077 size->max_function_defs = maxp->maxFunctionDefs;
1078 size->max_instruction_defs = maxp->maxInstructionDefs;
1080 size->num_function_defs = 0;
1081 size->num_instruction_defs = 0;
1087 size->storage_size = maxp->maxStorage;
1112 n_twilight = maxp->maxTwilightPoints;
1121 size->twilight.n_points = n_twilight;
1132 if ( !
face->interpreter )
1149 tt_size_done_bytecode( ftsize );
1162 if (
size->bytecode_ready < 0 )
1171 if (
size->cvt_ready < 0 )
1180 for (
i = 0;
i <
size->cvt_size;
i++ )
1191 size->twilight.org[
i].x = 0;
1192 size->twilight.org[
i].y = 0;
1193 size->twilight.cur[
i].x = 0;
1194 size->twilight.cur[
i].y = 0;
1199 size->storage[
i] = 0;
1237#ifdef TT_USE_BYTECODE_INTERPRETER
1238 size->bytecode_ready = -1;
1239 size->cvt_ready = -1;
1243 size->strike_index = 0xFFFFFFFFUL;
1267#ifdef TT_USE_BYTECODE_INTERPRETER
1268 tt_size_done_bytecode( ttsize );
1309 size_metrics = &
size->hinted_metrics;
1312 *size_metrics =
size->root.metrics;
1314 if ( size_metrics->
x_ppem < 1 || size_metrics->
y_ppem < 1 )
1321 if (
face->header.Flags & 8 )
1344 if (
face->header.Flags & 8 )
1349 face->root.units_per_EM );
1351 face->root.units_per_EM );
1363 size->ttmetrics.x_ratio = 0x10000L;
1373 size->ttmetrics.y_ratio = 0x10000L;
1376 size->metrics = size_metrics;
1378#ifdef TT_USE_BYTECODE_INTERPRETER
1379 size->cvt_ready = -1;
1405#ifdef TT_USE_BYTECODE_INTERPRETER
1410#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
1413#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
static cab_ULONG checksum(const cab_UBYTE *data, cab_UWORD bytes, cab_ULONG csum)
#define FT_FACE_FLAG_HINTER
#define FT_HAS_MULTIPLE_MASTERS(face)
FT_DivFix(FT_Long a, FT_Long b)
#define FT_IS_SCALABLE(face)
#define FT_FACE_FLAG_TRICKY
FT_Get_Glyph_Name(FT_Face face, FT_UInt glyph_index, FT_Pointer buffer, FT_UInt buffer_max)
FT_MulFix(FT_Long a, FT_Long b)
#define FT_ERROR(varformat)
#define FT_TRACE5(varformat)
#define FT_TRACE6(varformat)
#define FT_TRACE2(varformat)
#define FT_TRACE4(varformat)
#define TT_INTERPRETER_VERSION_38
#define TT_INTERPRETER_VERSION_40
#define TT_INTERPRETER_VERSION_35
FT_GlyphLoader_CreateExtra(FT_GlyphLoader loader)
#define FT_NEW_ARRAY(ptr, count)
#define FT_MEM_SET(dest, byte, count)
#define FT_DEBUG_HOOK_TRUETYPE
FT_Get_Module_Interface(FT_Library library, const char *mod_name)
#define FT_FRAME_ENTER(size)
#define FT_FRAME_RELEASE(bytes)
#define FT_STREAM_SEEK(position)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
FT_BEGIN_HEADER typedef unsigned char FT_Bool
GLuint GLuint GLsizei count
GLenum GLuint GLint GLenum face
GLenum const GLfloat * params
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLsizei GLsizei * length
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
static char memory[1024 *256]
struct @1709::@1710 driver
_In_ ULONG _In_ ULONG _In_ ULONG Length
SFNT_Interface * SFNT_Service
FT_DebugHook_Func debug_hooks[4]
TT_Done_Face_Func done_face
TT_Init_Face_Func init_face
TT_Load_Face_Func load_face
FT_F26Dot6 compensations[4]
TT_Init_Glyph_Loading(TT_Face face)
TT_RunIns(TT_ExecContext exec)
const TT_GraphicsState tt_default_graphics_state
TT_New_Context(TT_Driver driver)
#define TRICK_SFNT_IDS_PER_FACE
tt_face_init(FT_Stream stream, FT_Face ttface, FT_Int face_index, FT_Int num_params, FT_Parameter *params)
static FT_Bool tt_check_trickyness_family(FT_String *name)
tt_size_init(FT_Size ttsize)
tt_size_done(FT_Size ttsize)
#define TRICK_SFNT_IDS_NUM_FACES
tt_slot_init(FT_GlyphSlot slot)
static FT_Bool tt_check_trickyness(FT_Face face)
tt_size_reset(TT_Size size, FT_Bool only_height)
#define TRICK_SFNT_ID_cvt
static FT_Bool tt_check_single_notdef(FT_Face ttface)
#define TRICK_NAMES_MAX_CHARACTERS
struct tt_sfnt_id_rec_ tt_sfnt_id_rec
static FT_ULong tt_get_sfnt_checksum(TT_Face face, FT_UShort i)
tt_driver_init(FT_Module ttdriver)
#define TRICK_SFNT_ID_prep
static FT_UInt32 tt_synth_sfnt_checksum(FT_Stream stream, FT_ULong length)
#define TRICK_NAMES_COUNT
#define TRICK_SFNT_ID_fpgm
tt_face_done(FT_Face ttface)
static FT_Bool tt_check_trickyness_sfnt_ids(TT_Face face)
tt_driver_done(FT_Module ttdriver)
typedefFT_BEGIN_HEADER struct TT_DriverRec_ * TT_Driver
tt_face_load_prep(TT_Face face, FT_Stream stream)
tt_face_load_cvt(TT_Face face, FT_Stream stream)
tt_face_free_hdmx(TT_Face face)
tt_face_load_fpgm(TT_Face face, FT_Stream stream)
tt_face_load_hdmx(TT_Face face, FT_Stream stream)
tt_face_done_loca(TT_Face face)
tt_face_load_loca(TT_Face face, FT_Stream stream)
tt_face_get_location(TT_Face face, FT_UInt gindex, FT_UInt *asize)
struct TT_FaceRec_ * TT_Face
struct TT_SizeRec_ * TT_Size
FT_Error(* TT_Interpreter)(void *exec_context)