30#ifdef TT_USE_BYTECODE_INTERPRETER
34#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
45#define FT_COMPONENT ttobjs
48#ifdef TT_USE_BYTECODE_INTERPRETER
83 zone->max_points =
zone->n_points = 0;
84 zone->max_contours =
zone->n_contours = 0;
133 tt_glyphzone_done(
zone );
137 zone->max_points = maxPoints;
138 zone->max_contours = maxContours;
153#define TRICK_NAMES_MAX_CHARACTERS 19
154#define TRICK_NAMES_COUNT 26
192 "Ming(for ISO10646)",
250 if (
face->dir_tables[
i].CheckSum )
251 return face->dir_tables[
i].CheckSum;
254 if ( !
face->goto_table )
258 face->dir_tables[
i].Tag,
264 face->dir_tables[
i].Length );
279#define TRICK_SFNT_IDS_PER_FACE 3
280#define TRICK_SFNT_IDS_NUM_FACES 29
285#define TRICK_SFNT_ID_cvt 0
286#define TRICK_SFNT_ID_fpgm 1
287#define TRICK_SFNT_ID_prep 2
290 { 0x05BCF058UL, 0x000002E4UL },
291 { 0x28233BF1UL, 0x000087C4UL },
292 { 0xA344A1EAUL, 0x000001E1UL }
295 { 0x05BCF058UL, 0x000002E4UL },
296 { 0x28233BF1UL, 0x000087C4UL },
297 { 0xA344A1EBUL, 0x000001E1UL }
300 { 0x12C3EBB2UL, 0x00000350UL },
301 { 0xB680EE64UL, 0x000087A7UL },
302 { 0xCE939563UL, 0x00000758UL }
305 { 0x11E5EAD4UL, 0x00000350UL },
306 { 0xCE5956E9UL, 0x0000BC85UL },
307 { 0x8272F416UL, 0x00000045UL }
310 { 0x1257EB46UL, 0x00000350UL },
311 { 0xF699D160UL, 0x0000715FUL },
312 { 0xD222F568UL, 0x000003BCUL }
315 { 0x1262EB4EUL, 0x00000350UL },
316 { 0xE86A5D64UL, 0x00007940UL },
317 { 0x7850F729UL, 0x000005FFUL }
320 { 0x122DEB0AUL, 0x00000350UL },
321 { 0x3D16328AUL, 0x0000859BUL },
322 { 0xA93FC33BUL, 0x000002CBUL }
325 { 0x125FEB26UL, 0x00000350UL },
326 { 0xA5ACC982UL, 0x00007EE1UL },
327 { 0x90999196UL, 0x0000041FUL }
330 { 0x11E5EAD4UL, 0x00000350UL },
331 { 0x5A30CA3BUL, 0x00009063UL },
332 { 0x13A42602UL, 0x0000007EUL }
335 { 0x11E5EAD4UL, 0x00000350UL },
336 { 0xA6E78C01UL, 0x00008998UL },
337 { 0x13A42602UL, 0x0000007EUL }
340 { 0x11E5EAD4UL, 0x00000360UL },
341 { 0x9DB282B2UL, 0x0000C06EUL },
342 { 0x53E6D7CAUL, 0x00000082UL }
345 { 0x1243EB18UL, 0x00000350UL },
346 { 0xBA0A8C30UL, 0x000074ADUL },
347 { 0xF3D83409UL, 0x0000037BUL }
350 { 0x07DCF546UL, 0x00000308UL },
351 { 0x40FE7C90UL, 0x00008E2AUL },
352 { 0x608174B5UL, 0x0000007AUL }
355 { 0xEB891238UL, 0x00000308UL },
356 { 0xD2E4DCD4UL, 0x0000676FUL },
357 { 0x8EA5F293UL, 0x000003B8UL }
360 { 0xFFFBFFFCUL, 0x00000008UL },
361 { 0x9C9E48B8UL, 0x0000BEA2UL },
362 { 0x70020112UL, 0x00000008UL }
365 { 0xFFFBFFFCUL, 0x00000008UL },
366 { 0x0A5A0483UL, 0x00017C39UL },
367 { 0x70020112UL, 0x00000008UL }
370 { 0x00000000UL, 0x00000000UL },
371 { 0x40C92555UL, 0x000000E5UL },
372 { 0xA39B58E3UL, 0x0000117CUL }
375 { 0x00000000UL, 0x00000000UL },
376 { 0x33C41652UL, 0x000000E5UL },
377 { 0x26D6C52AUL, 0x00000F6AUL }
380 { 0x00000000UL, 0x00000000UL },
381 { 0x6DB1651DUL, 0x0000019DUL },
382 { 0x6C6E4B03UL, 0x00002492UL }
385 { 0x00000000UL, 0x00000000UL },
386 { 0x40C92555UL, 0x000000E5UL },
387 { 0xDE51FAD0UL, 0x0000117CUL }
390 { 0x00000000UL, 0x00000000UL },
391 { 0x85E47664UL, 0x000000E5UL },
392 { 0xA6C62831UL, 0x00001CAAUL }
395 { 0x00000000UL, 0x00000000UL },
396 { 0x2D891CFDUL, 0x0000019DUL },
397 { 0xA0604633UL, 0x00001DE8UL }
400 { 0x00000000UL, 0x00000000UL },
401 { 0x40AA774CUL, 0x000001CBUL },
402 { 0x9B5CAA96UL, 0x00001F9AUL }
405 { 0x00000000UL, 0x00000000UL },
406 { 0x0D3DE9CBUL, 0x00000141UL },
407 { 0xD4127766UL, 0x00002280UL }
410 { 0x00000000UL, 0x00000000UL },
411 { 0x4A692698UL, 0x000001F0UL },
412 { 0x340D4346UL, 0x00001FCAUL }
415 { 0x00000000UL, 0x00000000UL },
416 { 0xCD34C604UL, 0x00000166UL },
417 { 0x6CF31046UL, 0x000022B0UL }
420 { 0x00000000UL, 0x00000000UL },
421 { 0x5DA75315UL, 0x0000019DUL },
422 { 0x40745A5FUL, 0x000022E0UL }
425 { 0x00000000UL, 0x00000000UL },
426 { 0xF055FC48UL, 0x000001C2UL },
427 { 0x3900DED3UL, 0x00001E18UL }
430 { 0x00170003UL, 0x00000060UL },
431 { 0xDBB4306EUL, 0x000058AAUL },
432 { 0xD643482AUL, 0x00000035UL }
438 FT_Bool has_cvt, has_fpgm, has_prep;
449 for (
i = 0;
i <
face->num_tables;
i++ )
453 switch(
face->dir_tables[
i].Tag )
481 num_matched_ids[
j]++;
491 num_matched_ids[
j]++;
493 num_matched_ids[
j]++;
495 num_matched_ids[
j]++;
511 if (
face->family_name &&
538 for(
i = 0;
i <
face->num_locations;
i++ )
553 if ( glyph_index == 0 )
619 library = ttface->driver->root.library;
624 FT_ERROR((
"tt_face_init: cannot access `sfnt' module\n" ));
646 if (
face->format_tag != 0x00010000L &&
647 face->format_tag != 0x00020000L &&
656#ifdef TT_USE_BYTECODE_INTERPRETER
661 if ( face_index < 0 )
678#ifdef FT_CONFIG_OPTION_INCREMENTAL
679 if ( !ttface->internal->incremental_interface )
706#ifdef FT_CONFIG_OPTION_INCREMENTAL
707 if ( !ttface->internal->incremental_interface )
710 if ( ttface->num_fixed_sizes &&
711 face->glyph_locations &&
715 " Only the `.notdef' glyph has an outline.\n"
717 " Resetting scalable flag to FALSE.\n" ));
719 ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
724#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
733 error = TT_Set_Named_Instance(
face, instance_index );
737 tt_apply_mvar(
face );
784 if (
face->extra.finalizer )
785 face->extra.finalizer(
face->extra.data );
802 face->font_program_size = 0;
803 face->cvt_program_size = 0;
805#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
806 tt_done_blend(
face );
818#ifdef TT_USE_BYTECODE_INTERPRETER
847 exec =
size->context;
860 exec->instruction_trap =
FALSE;
861 exec->F_dot_P = 0x4000L;
875 tt_metrics->
ppem = 0;
876 tt_metrics->
scale = 0;
877 tt_metrics->
ratio = 0x10000L;
881 TT_Set_CodeRange( exec,
890 if (
face->font_program_size > 0 )
894 FT_TRACE4((
"Executing `fpgm' table.\n" ));
896#ifdef FT_DEBUG_LEVEL_TRACE
898 FT_TRACE4((
" interpretation failed with error code 0x%x\n",
908 TT_Save_Context( exec,
size );
948 for (
i = 0;
i <
size->cvt_size;
i++ )
956 exec =
size->context;
965 exec->instruction_trap =
FALSE;
969 TT_Set_CodeRange( exec,
976 if (
face->cvt_program_size > 0 )
980 FT_TRACE4((
"Executing `prep' table.\n" ));
982#ifdef FT_DEBUG_LEVEL_TRACE
984 FT_TRACE4((
" interpretation failed with error code 0x%x\n",
996 exec->GS.dualVector.x = 0x4000;
997 exec->GS.dualVector.y = 0;
998 exec->GS.projVector.x = 0x4000;
999 exec->GS.projVector.y = 0x0;
1000 exec->GS.freeVector.x = 0x4000;
1001 exec->GS.freeVector.y = 0x0;
1014 size->GS = exec->GS;
1016 TT_Save_Context( exec,
size );
1023 tt_size_done_bytecode(
FT_Size ftsize )
1031 TT_Done_Context(
size->context );
1040 size->storage_size = 0;
1043 tt_glyphzone_done( &
size->twilight );
1048 size->num_function_defs = 0;
1049 size->max_function_defs = 0;
1050 size->num_instruction_defs = 0;
1051 size->max_instruction_defs = 0;
1056 size->bytecode_ready = -1;
1057 size->cvt_ready = -1;
1064 tt_size_init_bytecode(
FT_Size ftsize,
1082 if (
size->context )
1083 TT_Done_Context(
size->context );
1084 tt_glyphzone_done( &
size->twilight );
1086 size->bytecode_ready = -1;
1087 size->cvt_ready = -1;
1091 size->max_function_defs = maxp->maxFunctionDefs;
1092 size->max_instruction_defs = maxp->maxInstructionDefs;
1094 size->num_function_defs = 0;
1095 size->num_instruction_defs = 0;
1101 size->storage_size = maxp->maxStorage;
1132 n_twilight = maxp->maxTwilightPoints;
1141 size->twilight.n_points = n_twilight;
1152 if ( !
face->interpreter )
1169 tt_size_done_bytecode( ftsize );
1182 if (
size->bytecode_ready < 0 )
1191 if (
size->cvt_ready < 0 )
1199 size->twilight.org[
i].x = 0;
1200 size->twilight.org[
i].y = 0;
1201 size->twilight.cur[
i].x = 0;
1202 size->twilight.cur[
i].y = 0;
1207 size->storage[
i] = 0;
1245#ifdef TT_USE_BYTECODE_INTERPRETER
1246 size->bytecode_ready = -1;
1247 size->cvt_ready = -1;
1251 size->strike_index = 0xFFFFFFFFUL;
1275#ifdef TT_USE_BYTECODE_INTERPRETER
1276 tt_size_done_bytecode( ttsize );
1317 size_metrics = &
size->hinted_metrics;
1320 *size_metrics =
size->root.metrics;
1322 if ( size_metrics->
x_ppem < 1 || size_metrics->
y_ppem < 1 )
1329 if (
face->header.Flags & 8 )
1352 if (
face->header.Flags & 8 )
1357 face->root.units_per_EM );
1359 face->root.units_per_EM );
1371 size->ttmetrics.x_ratio = 0x10000L;
1381 size->ttmetrics.y_ratio = 0x10000L;
1384 size->metrics = size_metrics;
1386#ifdef TT_USE_BYTECODE_INTERPRETER
1387 size->cvt_ready = -1;
1413#ifdef TT_USE_BYTECODE_INTERPRETER
1418#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
1421#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 GLenum GLenum GLenum GLenum scale
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 @1789::@1790 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)
tt_size_init(FT_Size ttsize)
tt_size_done(FT_Size ttsize)
static FT_Bool tt_check_trickyness_family(const FT_String *name)
#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)