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 trace_ttobjs
49#ifdef TT_USE_BYTECODE_INTERPRETER
83 zone->max_points =
zone->n_points = 0;
84 zone->max_contours =
zone->n_contours = 0;
129 tt_glyphzone_done(
zone );
133 zone->max_points = maxPoints;
134 zone->max_contours = maxContours;
149#define TRICK_NAMES_MAX_CHARACTERS 19
150#define TRICK_NAMES_COUNT 23
185 "Ming(for ISO10646)",
243 if (
face->dir_tables[
i].CheckSum )
244 return face->dir_tables[
i].CheckSum;
247 if ( !
face->goto_table )
251 face->dir_tables[
i].Tag,
257 face->dir_tables[
i].Length );
272#define TRICK_SFNT_IDS_PER_FACE 3
273#define TRICK_SFNT_IDS_NUM_FACES 26
278#define TRICK_SFNT_ID_cvt 0
279#define TRICK_SFNT_ID_fpgm 1
280#define TRICK_SFNT_ID_prep 2
283 { 0x05BCF058UL, 0x000002E4UL },
284 { 0x28233BF1UL, 0x000087C4UL },
285 { 0xA344A1EAUL, 0x000001E1UL }
288 { 0x05BCF058UL, 0x000002E4UL },
289 { 0x28233BF1UL, 0x000087C4UL },
290 { 0xA344A1EBUL, 0x000001E1UL }
293 { 0x12C3EBB2UL, 0x00000350UL },
294 { 0xB680EE64UL, 0x000087A7UL },
295 { 0xCE939563UL, 0x00000758UL }
298 { 0x11E5EAD4UL, 0x00000350UL },
299 { 0xCE5956E9UL, 0x0000BC85UL },
300 { 0x8272F416UL, 0x00000045UL }
303 { 0x1262EB4EUL, 0x00000350UL },
304 { 0xE86A5D64UL, 0x00007940UL },
305 { 0x7850F729UL, 0x000005FFUL }
308 { 0x122DEB0AUL, 0x00000350UL },
309 { 0x3D16328AUL, 0x0000859BUL },
310 { 0xA93FC33BUL, 0x000002CBUL }
313 { 0x125FEB26UL, 0x00000350UL },
314 { 0xA5ACC982UL, 0x00007EE1UL },
315 { 0x90999196UL, 0x0000041FUL }
318 { 0x11E5EAD4UL, 0x00000350UL },
319 { 0x5A30CA3BUL, 0x00009063UL },
320 { 0x13A42602UL, 0x0000007EUL }
323 { 0x11E5EAD4UL, 0x00000350UL },
324 { 0xA6E78C01UL, 0x00008998UL },
325 { 0x13A42602UL, 0x0000007EUL }
328 { 0x07DCF546UL, 0x00000308UL },
329 { 0x40FE7C90UL, 0x00008E2AUL },
330 { 0x608174B5UL, 0x0000007AUL }
333 { 0xEB891238UL, 0x00000308UL },
334 { 0xD2E4DCD4UL, 0x0000676FUL },
335 { 0x8EA5F293UL, 0x000003B8UL }
338 { 0xFFFBFFFCUL, 0x00000008UL },
339 { 0x9C9E48B8UL, 0x0000BEA2UL },
340 { 0x70020112UL, 0x00000008UL }
343 { 0xFFFBFFFCUL, 0x00000008UL },
344 { 0x0A5A0483UL, 0x00017C39UL },
345 { 0x70020112UL, 0x00000008UL }
348 { 0x00000000UL, 0x00000000UL },
349 { 0x40C92555UL, 0x000000E5UL },
350 { 0xA39B58E3UL, 0x0000117CUL }
353 { 0x00000000UL, 0x00000000UL },
354 { 0x33C41652UL, 0x000000E5UL },
355 { 0x26D6C52AUL, 0x00000F6AUL }
358 { 0x00000000UL, 0x00000000UL },
359 { 0x6DB1651DUL, 0x0000019DUL },
360 { 0x6C6E4B03UL, 0x00002492UL }
363 { 0x00000000UL, 0x00000000UL },
364 { 0x40C92555UL, 0x000000E5UL },
365 { 0xDE51FAD0UL, 0x0000117CUL }
368 { 0x00000000UL, 0x00000000UL },
369 { 0x85E47664UL, 0x000000E5UL },
370 { 0xA6C62831UL, 0x00001CAAUL }
373 { 0x00000000UL, 0x00000000UL },
374 { 0x2D891CFDUL, 0x0000019DUL },
375 { 0xA0604633UL, 0x00001DE8UL }
378 { 0x00000000UL, 0x00000000UL },
379 { 0x40AA774CUL, 0x000001CBUL },
380 { 0x9B5CAA96UL, 0x00001F9AUL }
383 { 0x00000000UL, 0x00000000UL },
384 { 0x0D3DE9CBUL, 0x00000141UL },
385 { 0xD4127766UL, 0x00002280UL }
388 { 0x00000000UL, 0x00000000UL },
389 { 0x4A692698UL, 0x000001F0UL },
390 { 0x340D4346UL, 0x00001FCAUL }
393 { 0x00000000UL, 0x00000000UL },
394 { 0xCD34C604UL, 0x00000166UL },
395 { 0x6CF31046UL, 0x000022B0UL }
398 { 0x00000000UL, 0x00000000UL },
399 { 0x5DA75315UL, 0x0000019DUL },
400 { 0x40745A5FUL, 0x000022E0UL }
403 { 0x00000000UL, 0x00000000UL },
404 { 0xF055FC48UL, 0x000001C2UL },
405 { 0x3900DED3UL, 0x00001E18UL }
408 { 0x00170003UL, 0x00000060UL },
409 { 0xDBB4306EUL, 0x000058AAUL },
410 { 0xD643482AUL, 0x00000035UL }
416 FT_Bool has_cvt, has_fpgm, has_prep;
427 for (
i = 0;
i <
face->num_tables;
i++ )
431 switch(
face->dir_tables[
i].Tag )
459 num_matched_ids[
j]++;
469 num_matched_ids[
j]++;
471 num_matched_ids[
j]++;
473 num_matched_ids[
j]++;
489 if (
face->family_name &&
516 for(
i = 0;
i <
face->num_locations;
i++ )
531 if ( glyph_index == 0 )
592 library = ttface->driver->root.library;
597 FT_ERROR((
"tt_face_init: cannot access `sfnt' module\n" ));
619 if (
face->format_tag != 0x00010000L &&
620 face->format_tag != 0x00020000L &&
629#ifdef TT_USE_BYTECODE_INTERPRETER
634 if ( face_index < 0 )
651#ifdef FT_CONFIG_OPTION_INCREMENTAL
652 if ( !ttface->internal->incremental_interface )
679#ifdef FT_CONFIG_OPTION_INCREMENTAL
680 if ( !ttface->internal->incremental_interface )
683 if ( ttface->num_fixed_sizes &&
684 face->glyph_locations &&
688 " Only the `.notdef' glyph has an outline.\n"
690 " Resetting scalable flag to FALSE.\n" ));
692 ttface->face_flags &= ~FT_FACE_FLAG_SCALABLE;
697#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
706 error = TT_Set_Named_Instance(
face, instance_index );
710 tt_apply_mvar(
face );
756 if (
face->extra.finalizer )
757 face->extra.finalizer(
face->extra.data );
774 face->font_program_size = 0;
775 face->cvt_program_size = 0;
777#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
778 tt_done_blend(
face );
790#ifdef TT_USE_BYTECODE_INTERPRETER
817 exec =
size->context;
830 exec->instruction_trap =
FALSE;
831 exec->F_dot_P = 0x4000L;
845 tt_metrics->
ppem = 0;
846 tt_metrics->
scale = 0;
847 tt_metrics->
ratio = 0x10000L;
851 TT_Set_CodeRange( exec,
860 if (
face->font_program_size > 0 )
864 FT_TRACE4((
"Executing `fpgm' table.\n" ));
866#ifdef FT_DEBUG_LEVEL_TRACE
868 FT_TRACE4((
" interpretation failed with error code 0x%x\n",
878 TT_Save_Context( exec,
size );
909 exec =
size->context;
918 exec->instruction_trap =
FALSE;
922 TT_Set_CodeRange( exec,
929 if (
face->cvt_program_size > 0 )
933 FT_TRACE4((
"Executing `prep' table.\n" ));
935#ifdef FT_DEBUG_LEVEL_TRACE
937 FT_TRACE4((
" interpretation failed with error code 0x%x\n",
949 exec->GS.dualVector.x = 0x4000;
950 exec->GS.dualVector.y = 0;
951 exec->GS.projVector.x = 0x4000;
952 exec->GS.projVector.y = 0x0;
953 exec->GS.freeVector.x = 0x4000;
954 exec->GS.freeVector.y = 0x0;
969 TT_Save_Context( exec,
size );
976 tt_size_done_bytecode(
FT_Size ftsize )
984 TT_Done_Context(
size->context );
993 size->storage_size = 0;
996 tt_glyphzone_done( &
size->twilight );
1001 size->num_function_defs = 0;
1002 size->max_function_defs = 0;
1003 size->num_instruction_defs = 0;
1004 size->max_instruction_defs = 0;
1009 size->bytecode_ready = -1;
1010 size->cvt_ready = -1;
1017 tt_size_init_bytecode(
FT_Size ftsize,
1035 if (
size->context )
1036 TT_Done_Context(
size->context );
1037 tt_glyphzone_done( &
size->twilight );
1039 size->bytecode_ready = -1;
1040 size->cvt_ready = -1;
1044 size->max_function_defs = maxp->maxFunctionDefs;
1045 size->max_instruction_defs = maxp->maxInstructionDefs;
1047 size->num_function_defs = 0;
1048 size->num_instruction_defs = 0;
1054 size->storage_size = maxp->maxStorage;
1079 n_twilight = maxp->maxTwilightPoints;
1088 size->twilight.n_points = n_twilight;
1099 if ( !
face->interpreter )
1116 tt_size_done_bytecode( ftsize );
1129 if (
size->bytecode_ready < 0 )
1138 if (
size->cvt_ready < 0 )
1152 size->twilight.org[
i].x = 0;
1153 size->twilight.org[
i].y = 0;
1154 size->twilight.cur[
i].x = 0;
1155 size->twilight.cur[
i].y = 0;
1160 size->storage[
i] = 0;
1197#ifdef TT_USE_BYTECODE_INTERPRETER
1198 size->bytecode_ready = -1;
1199 size->cvt_ready = -1;
1203 size->strike_index = 0xFFFFFFFFUL;
1226#ifdef TT_USE_BYTECODE_INTERPRETER
1227 tt_size_done_bytecode( ttsize );
1266 size_metrics = &
size->hinted_metrics;
1269 *size_metrics =
size->root.metrics;
1271 if ( size_metrics->
x_ppem < 1 || size_metrics->
y_ppem < 1 )
1278 if (
face->header.Flags & 8 )
1301 if (
face->header.Flags & 8 )
1306 face->root.units_per_EM );
1308 face->root.units_per_EM );
1320 size->ttmetrics.x_ratio = 0x10000L;
1330 size->ttmetrics.y_ratio = 0x10000L;
1333 size->metrics = size_metrics;
1335#ifdef TT_USE_BYTECODE_INTERPRETER
1336 size->cvt_ready = -1;
1361#ifdef TT_USE_BYTECODE_INTERPRETER
1366#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
1369#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_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)
FT_Get_Module_Interface(FT_Library library, const char *mod_name)
#define FT_DEBUG_HOOK_TRUETYPE
#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 @1682::@1683 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)