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 { 0x05BCF058
UL, 0x000002E4
UL },
284 { 0x28233BF1
UL, 0x000087C4
UL },
285 { 0xA344A1EA
UL, 0x000001E1
UL }
288 { 0x05BCF058
UL, 0x000002E4
UL },
289 { 0x28233BF1
UL, 0x000087C4
UL },
290 { 0xA344A1EB
UL, 0x000001E1
UL }
293 { 0x12C3EBB2
UL, 0x00000350
UL },
294 { 0xB680EE64
UL, 0x000087A7
UL },
295 { 0xCE939563
UL, 0x00000758
UL }
298 { 0x11E5EAD4
UL, 0x00000350
UL },
299 { 0xCE5956E9
UL, 0x0000BC85
UL },
300 { 0x8272F416
UL, 0x00000045
UL }
303 { 0x1262EB4E
UL, 0x00000350
UL },
304 { 0xE86A5D64
UL, 0x00007940
UL },
305 { 0x7850F729
UL, 0x000005FF
UL }
308 { 0x122DEB0A
UL, 0x00000350
UL },
309 { 0x3D16328A
UL, 0x0000859B
UL },
310 { 0xA93FC33B
UL, 0x000002CB
UL }
313 { 0x125FEB26
UL, 0x00000350
UL },
314 { 0xA5ACC982
UL, 0x00007EE1
UL },
315 { 0x90999196
UL, 0x0000041F
UL }
318 { 0x11E5EAD4
UL, 0x00000350
UL },
319 { 0x5A30CA3B
UL, 0x00009063
UL },
320 { 0x13A42602
UL, 0x0000007E
UL }
323 { 0x11E5EAD4
UL, 0x00000350
UL },
324 { 0xA6E78C01
UL, 0x00008998
UL },
325 { 0x13A42602
UL, 0x0000007E
UL }
328 { 0x07DCF546
UL, 0x00000308
UL },
329 { 0x40FE7C90
UL, 0x00008E2A
UL },
330 { 0x608174B5
UL, 0x0000007A
UL }
333 { 0xEB891238
UL, 0x00000308
UL },
334 { 0xD2E4DCD4
UL, 0x0000676F
UL },
335 { 0x8EA5F293
UL, 0x000003B8
UL }
338 { 0xFFFBFFFC
UL, 0x00000008
UL },
339 { 0x9C9E48B8
UL, 0x0000BEA2
UL },
340 { 0x70020112
UL, 0x00000008
UL }
343 { 0xFFFBFFFC
UL, 0x00000008
UL },
344 { 0x0A5A0483
UL, 0x00017C39
UL },
345 { 0x70020112
UL, 0x00000008
UL }
348 { 0x00000000
UL, 0x00000000
UL },
349 { 0x40C92555
UL, 0x000000E5
UL },
350 { 0xA39B58E3
UL, 0x0000117C
UL }
353 { 0x00000000
UL, 0x00000000
UL },
354 { 0x33C41652
UL, 0x000000E5
UL },
355 { 0x26D6C52A
UL, 0x00000F6A
UL }
358 { 0x00000000
UL, 0x00000000
UL },
359 { 0x6DB1651D
UL, 0x0000019D
UL },
360 { 0x6C6E4B03
UL, 0x00002492
UL }
363 { 0x00000000
UL, 0x00000000
UL },
364 { 0x40C92555
UL, 0x000000E5
UL },
365 { 0xDE51FAD0
UL, 0x0000117C
UL }
368 { 0x00000000
UL, 0x00000000
UL },
369 { 0x85E47664
UL, 0x000000E5
UL },
370 { 0xA6C62831
UL, 0x00001CAA
UL }
373 { 0x00000000
UL, 0x00000000
UL },
374 { 0x2D891CFD
UL, 0x0000019D
UL },
375 { 0xA0604633
UL, 0x00001DE8
UL }
378 { 0x00000000
UL, 0x00000000
UL },
379 { 0x40AA774C
UL, 0x000001CB
UL },
380 { 0x9B5CAA96
UL, 0x00001F9A
UL }
383 { 0x00000000
UL, 0x00000000
UL },
384 { 0x0D3DE9CB
UL, 0x00000141
UL },
385 { 0xD4127766
UL, 0x00002280
UL }
388 { 0x00000000
UL, 0x00000000
UL },
389 { 0x4A692698
UL, 0x000001F0
UL },
390 { 0x340D4346
UL, 0x00001FCA
UL }
393 { 0x00000000
UL, 0x00000000
UL },
394 { 0xCD34C604
UL, 0x00000166
UL },
395 { 0x6CF31046
UL, 0x000022B0
UL }
398 { 0x00000000
UL, 0x00000000
UL },
399 { 0x5DA75315
UL, 0x0000019D
UL },
400 { 0x40745A5F
UL, 0x000022E0
UL }
403 { 0x00000000
UL, 0x00000000
UL },
404 { 0xF055FC48
UL, 0x000001C2
UL },
405 { 0x3900DED3
UL, 0x00001E18
UL }
408 { 0x00170003
UL, 0x00000060
UL },
409 { 0xDBB4306E
UL, 0x000058AA
UL },
410 { 0xD643482A
UL, 0x00000035
UL }
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" ));
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 = 0x4000
L;
845 tt_metrics->
ppem = 0;
846 tt_metrics->
scale = 0;
847 tt_metrics->
ratio = 0x10000
L;
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 = 0xFFFFFFFF
UL;
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 = 0x10000
L;
1330 size->ttmetrics.y_ratio = 0x10000
L;
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 struct TT_SizeRec_ * TT_Size
const TT_GraphicsState tt_default_graphics_state
static FT_ULong tt_get_sfnt_checksum(TT_Face face, FT_UShort i)
#define TRICK_SFNT_IDS_NUM_FACES
FT_DebugHook_Func debug_hooks[4]
#define TRICK_SFNT_ID_cvt
FT_DivFix(FT_Long a, FT_Long b)
TT_Done_Face_Func done_face
SFNT_Interface * SFNT_Service
_In_ ULONG _In_ ULONG _In_ ULONG Length
static FT_Bool tt_check_single_notdef(FT_Face ttface)
tt_size_done(FT_Size ttsize)
GLuint GLuint GLsizei count
#define FT_FACE_FLAG_SCALABLE
tt_face_load_loca(TT_Face face, FT_Stream stream)
tt_slot_init(FT_GlyphSlot slot)
TT_Init_Glyph_Loading(TT_Face face)
FT_F26Dot6 compensations[4]
#define TT_INTERPRETER_VERSION_38
tt_size_init(FT_Size ttsize)
typedefFT_BEGIN_HEADER struct TT_DriverRec_ * TT_Driver
static char memory[1024 *256]
TT_New_Context(TT_Driver driver)
FT_BEGIN_HEADER typedef unsigned char FT_Bool
GLenum GLuint GLenum GLsizei const GLchar * buf
tt_face_load_cvt(TT_Face face, FT_Stream stream)
FT_GlyphLoader_CreateExtra(FT_GlyphLoader loader)
TT_Init_Face_Func init_face
tt_face_init(FT_Stream stream, FT_Face ttface, FT_Int face_index, FT_Int num_params, FT_Parameter *params)
#define FT_DEBUG_HOOK_TRUETYPE
tt_face_free_hdmx(TT_Face face)
#define FT_ERROR(varformat)
GLenum const GLfloat * params
#define TT_INTERPRETER_VERSION_35
#define FT_TRACE4(varformat)
GLenum GLuint GLenum GLsizei length
struct @1627::@1628 driver
tt_face_load_hdmx(TT_Face face, FT_Stream stream)
struct TT_FaceRec_ * TT_Face
static FT_UInt32 tt_synth_sfnt_checksum(FT_Stream stream, FT_ULong length)
static FT_Bool tt_check_trickyness_sfnt_ids(TT_Face face)
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
tt_driver_done(FT_Module ttdriver)
FT_Error(* TT_Interpreter)(void *exec_context)
#define FT_TRACE2(varformat)
#define TRICK_SFNT_IDS_PER_FACE
struct tt_sfnt_id_rec_ tt_sfnt_id_rec
UCHAR CheckSum(LPSTR p, ULONG Len)
#define TRICK_NAMES_COUNT
static FT_Bool tt_check_trickyness(FT_Face face)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
tt_face_done(FT_Face ttface)
#define FT_FACE_FLAG_HINTER
static cab_ULONG checksum(const cab_UBYTE *data, cab_UWORD bytes, cab_ULONG csum)
#define FT_NEW_ARRAY(ptr, count)
#define FT_STREAM_SEEK(position)
FT_MulFix(FT_Long a, FT_Long b)
#define FT_FRAME_RELEASE(bytes)
TT_Load_Face_Func load_face
#define FT_HAS_MULTIPLE_MASTERS(face)
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
static FT_Bool tt_check_trickyness_family(FT_String *name)
tt_face_load_prep(TT_Face face, FT_Stream stream)
tt_driver_init(FT_Module ttdriver)
#define FT_TRACE5(varformat)
#define FT_FACE_FLAG_TRICKY
#define TT_INTERPRETER_VERSION_40
tt_size_reset(TT_Size size, FT_Bool only_height)
#define FT_FRAME_ENTER(size)
FT_Get_Module_Interface(FT_Library library, const char *mod_name)
tt_face_load_fpgm(TT_Face face, FT_Stream stream)
#define TRICK_NAMES_MAX_CHARACTERS
#define TRICK_SFNT_ID_prep
#define FT_MEM_SET(dest, byte, count)
#define FT_IS_SCALABLE(face)
FT_Get_Glyph_Name(FT_Face face, FT_UInt glyph_index, FT_Pointer buffer, FT_UInt buffer_max)
GLenum GLuint GLint GLenum face
tt_face_get_location(TT_Face face, FT_UInt gindex, FT_UInt *asize)
tt_face_done_loca(TT_Face face)
#define TRICK_SFNT_ID_fpgm
TT_RunIns(TT_ExecContext exec)