21#include FT_CONFIG_CONFIG_H
33#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
48#define FT_COMPONENT ttgload
55#define ON_CURVE_POINT 0x01
56#define X_SHORT_VECTOR 0x02
57#define Y_SHORT_VECTOR 0x04
58#define REPEAT_FLAG 0x08
59#define X_POSITIVE 0x10
61#define Y_POSITIVE 0x20
63#define OVERLAP_SIMPLE 0x40
70#define ARGS_ARE_WORDS 0x0001
71#define ARGS_ARE_XY_VALUES 0x0002
72#define ROUND_XY_TO_GRID 0x0004
73#define WE_HAVE_A_SCALE 0x0008
75#define MORE_COMPONENTS 0x0020
76#define WE_HAVE_AN_XY_SCALE 0x0040
77#define WE_HAVE_A_2X2 0x0080
78#define WE_HAVE_INSTR 0x0100
79#define USE_MY_METRICS 0x0200
80#define OVERLAP_COMPOUND 0x0400
81#define SCALED_COMPONENT_OFFSET 0x0800
82#define UNSCALED_COMPONENT_OFFSET 0x1000
85#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
86#define IS_DEFAULT_INSTANCE( _face ) \
87 ( !( FT_IS_NAMED_INSTANCE( _face ) || \
88 FT_IS_VARIATION( _face ) ) )
90#define IS_DEFAULT_INSTANCE( _face ) 1
106 FT_TRACE5((
" advance width (font units): %d\n", *aw ));
107 FT_TRACE5((
" left side bearing (font units): %d\n", *lsb ));
123 if (
face->vertical_info )
126 else if (
face->os2.version != 0xFFFFU )
130 face->os2.sTypoDescender );
137 face->horizontal.Descender );
140#ifdef FT_DEBUG_LEVEL_TRACE
141 if ( !
face->vertical_info )
142 FT_TRACE5((
" [vertical metrics missing, computing values]\n" ));
145 FT_TRACE5((
" advance height (font units): %d\n", *ah ));
146 FT_TRACE5((
" top side bearing (font units): %d\n", *tsb ));
155#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
162 FT_Short left_bearing = 0, top_bearing = 0;
163 FT_UShort advance_width = 0, advance_height = 0;
182 loader->
advance = advance_width;
186#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
190 loader->
exec->sph_tweak_flags = 0;
196 sph_set_tweaks( loader, glyph_index );
203 loader->
linear = advance_width;
210#ifdef FT_CONFIG_OPTION_INCREMENTAL
213 tt_get_metrics_incr_overrides(
TT_Loader loader,
218 FT_Short left_bearing = 0, top_bearing = 0;
219 FT_UShort advance_width = 0, advance_height = 0;
224 if (
face->root.internal->incremental_interface &&
225 face->root.internal->incremental_interface->funcs->get_glyph_metrics )
236 error =
face->root.internal->incremental_interface->funcs->get_glyph_metrics(
237 face->root.internal->incremental_interface->object,
238 glyph_index,
FALSE, &incr_metrics );
252 error =
face->root.internal->incremental_interface->funcs->get_glyph_metrics(
253 face->root.internal->incremental_interface->object,
254 glyph_index,
TRUE, &incr_metrics );
264 loader->
advance = advance_width;
271 loader->
linear = advance_width;
306 loader->cursor =
stream->cursor;
307 loader->limit =
stream->limit;
340 FT_TRACE5((
" # of contours: %d\n", loader->n_contours ));
341 FT_TRACE5((
" xMin: %4ld xMax: %4ld\n", loader->bbox.xMin,
342 loader->bbox.xMax ));
343 FT_TRACE5((
" yMin: %4ld yMax: %4ld\n", loader->bbox.yMin,
344 loader->bbox.yMax ));
367 FT_Short *cont, *cont_limit, prev_cont;
378 cont_limit = cont + n_contours;
381 if ( n_contours >= 0xFFF ||
p + ( n_contours + 1 ) * 2 >
limit )
382 goto Invalid_Outline;
386 if ( n_contours > 0 )
390 goto Invalid_Outline;
392 for ( cont++; cont < cont_limit; cont++ )
395 if ( cont[0] <= prev_cont )
398 goto Invalid_Outline;
404 if ( n_contours > 0 )
406 n_points = cont[-1] + 1;
408 goto Invalid_Outline;
411 FT_TRACE5((
" # of points: %d\n", n_points ));
419 load->glyph->control_len = 0;
423 goto Invalid_Outline;
427 FT_TRACE5((
" Instructions size: %u\n", n_ins ));
429#ifdef TT_USE_BYTECODE_INTERPRETER
437 if ( (
limit -
p ) < n_ins )
439 FT_TRACE1((
"TT_Load_Simple_Glyph: instruction count mismatch\n" ));
447 tmp =
load->exec->glyphSize;
451 (
void*)&
load->exec->glyphIns,
458 load->glyph->control_len = n_ins;
459 load->glyph->control_data =
load->exec->glyphIns;
473 flag_limit =
flag + n_points;
477 while (
flag < flag_limit )
480 goto Invalid_Outline;
486 goto Invalid_Outline;
490 goto Invalid_Outline;
504 vec_limit =
vec + n_points;
509 goto Invalid_Outline;
520 goto Invalid_Outline;
529 goto Invalid_Outline;
541 vec_limit =
vec + n_points;
554 goto Invalid_Outline;
563 goto Invalid_Outline;
596 FT_Long num_glyphs = loader->face->root.num_glyphs;
616 goto Invalid_Composite;
620 subglyph->
arg1 = subglyph->
arg2 = 0;
627 if ( subglyph->
index >= num_glyphs )
628 goto Invalid_Composite;
642 goto Invalid_Composite;
706 num_subglyphs > 1 ?
"s" :
"" ));
708#ifdef FT_DEBUG_LEVEL_TRACE
715 for (
i = 0;
i < num_subglyphs;
i++ )
717 if ( num_subglyphs > 1 )
727 FT_TRACE7((
" matching points: base=%d, component=%d\n",
751#ifdef TT_USE_BYTECODE_INTERPRETER
797 zone->n_contours =
load->outline.n_contours -
799 zone->org =
load->extra_points + start_point;
800 zone->cur =
load->outline.points + start_point;
801 zone->orus =
load->extra_points2 + start_point;
821#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
822 defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
829#ifdef TT_USE_BYTECODE_INTERPRETER
836#ifdef TT_USE_BYTECODE_INTERPRETER
872#ifdef TT_USE_BYTECODE_INTERPRETER
893 current_outline.
tags[0] |=
899#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
904 loader->
exec->backward_compatibility ) )
911#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
915#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
918 if ( loader->
exec->sph_tweak_flags & SPH_TWEAK_DEEMBOLDEN )
921 else if ( loader->
exec->sph_tweak_flags & SPH_TWEAK_EMBOLDEN )
948#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
965 outline->tags[n_points + 1] = 0;
966 outline->tags[n_points + 2] = 0;
967 outline->tags[n_points + 3] = 0;
971#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
979 error = TT_Vary_Apply_Glyph_Deltas( loader->
face,
992 unrounded[n_points - 4].
x ) / 64;
995 unrounded[n_points - 2].
x ) / 64;
1012#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
1019 FT_UInt x_scale_factor = 1000;
1031#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
1037 x_scale_factor = sph_test_tweak_x_scaling(
face,
1044 x_scale_factor != 1000 )
1047 (
FT_Long)x_scale_factor, 1000 );
1052 if ( x_scale_factor != 1000 && ppem > 11 )
1054#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1063 1000 - x_scale_factor ),
1065#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1067 outline->points = orig_points;
1090#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1113#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1130#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1156#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1189 (
short)num_base_points;
1214 l += num_base_points;
1215 if (
k >= num_base_points ||
1217 return FT_THROW( Invalid_Composite );
1238#ifdef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
1259 int m =
a >
b ?
a :
b;
1260 int n =
c >
d ?
c :
d;
1263 if (
a - b <= 33 && a - b >= -33 )
1265 if (
c - d <= 33 && c - d >= -33 )
1372#ifdef TT_USE_BYTECODE_INTERPRETER
1386 FT_TRACE5((
" Instructions size = %d\n", n_ins ));
1390 if ( n_ins > max_ins )
1396 FT_TRACE1((
"TT_Process_Composite_Glyph:"
1397 " too many instructions (%d) for glyph with length %d\n",
1413 else if ( n_ins == 0 )
1426 start_point, start_contour );
1530#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
1535#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
1538 subpixel_hinting = loader->
exec ? loader->
exec->subpixel_hinting
1544#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
1547 subpixel_hinting = loader->
exec ? loader->
exec->subpixel_hinting_lean
1549 grayscale = loader->
exec ? loader->
exec->grayscale_cleartype
1554 use_aw_2 =
FT_BOOL( subpixel_hinting && grayscale );
1561 loader->
pp3.
x = use_aw_2 ? loader->
advance / 2 : 0;
1563 loader->
pp4.
x = use_aw_2 ? loader->
advance / 2 : 0;
1614#ifdef FT_CONFIG_OPTION_INCREMENTAL
1617 FT_Bool glyph_data_loaded = 0;
1621#ifdef FT_DEBUG_LEVEL_TRACE
1622 if ( recurse_count )
1623 FT_TRACE5((
" nesting level: %d\n", recurse_count ));
1627 if ( recurse_count >
face->max_profile.maxComponentDepth )
1629 FT_TRACE1((
"load_truetype_glyph: maxComponentDepth set to %d\n",
1631 face->max_profile.maxComponentDepth = (
FT_UShort)recurse_count;
1634#ifndef FT_CONFIG_OPTION_INCREMENTAL
1636 if ( glyph_index >= (
FT_UInt)
face->root.num_glyphs )
1660#ifdef FT_CONFIG_OPTION_INCREMENTAL
1665 if (
face->root.internal->incremental_interface )
1667 error =
face->root.internal->incremental_interface->funcs->get_glyph_data(
1668 face->root.internal->incremental_interface->object,
1669 glyph_index, &glyph_data );
1673 glyph_data_loaded = 1;
1682 loader->
stream = &inc_stream;
1693#ifdef FT_CONFIG_OPTION_INCREMENTAL
1695 if ( !
face->glyf_offset &&
1696 !
face->root.internal->incremental_interface )
1698 if ( !
face->glyf_offset )
1701 FT_TRACE2((
"no `glyf' table but non-zero `loca' entry\n" ));
1706 error =
face->access_glyph_frame( loader, glyph_index,
1713 error =
face->read_glyph_header( loader );
1715 face->forget_glyph_frame( loader );
1746#ifdef FT_CONFIG_OPTION_INCREMENTAL
1747 tt_get_metrics_incr_overrides( loader, glyph_index );
1750#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1758 char tags[4] = { 1, 1, 1, 1 };
1759 short contours[4] = { 0, 1, 2, 3 };
1763 FT_Vector unrounded[4] = { {0, 0}, {0, 0}, {0, 0}, {0, 0} };
1783 error = TT_Vary_Apply_Glyph_Deltas( loader->
face,
1805 unrounded[0].
x ) / 64;
1808 unrounded[2].
x ) / 64;
1835#ifdef FT_CONFIG_OPTION_INCREMENTAL
1836 tt_get_metrics_incr_overrides( loader, glyph_index );
1845 error =
face->access_glyph_frame( loader, glyph_index,
1857 error =
face->read_simple_glyph( loader );
1862 face->forget_glyph_frame( loader );
1900 for ( node2 =
node; node2; node2 = node2->
next )
1908 " infinite recursion detected\n" ));
1928 error =
face->read_composite_glyph( loader );
1936 face->forget_glyph_frame( loader );
1939#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
1950 short* contours =
NULL;
1973 for (
i = 0;
i <
limit;
i++, subglyph++ )
2023 for (
i = 0;
i <
limit;
i++, subglyph++ )
2047 unrounded[
outline.n_points - 4].
x ) / 64;
2051 unrounded[
outline.n_points - 2].
x ) / 64;
2085 loader->
glyph->
format = FT_GLYPH_FORMAT_COMPOSITE;
2098 FT_UInt num_points = start_point;
2109 for (
n = 0;
n < num_subglyphs;
n++ )
2123 pp[0] = loader->
pp1;
2124 pp[1] = loader->
pp2;
2125 pp[2] = loader->
pp3;
2126 pp[3] = loader->
pp4;
2128 linear_hadvance = loader->
linear;
2129 linear_vadvance = loader->
vadvance;
2146 loader->
pp1 = pp[0];
2147 loader->
pp2 = pp[1];
2148 loader->
pp3 = pp[2];
2149 loader->
pp4 = pp[3];
2151 loader->
linear = linear_hadvance;
2152 loader->
vadvance = linear_vadvance;
2157 if ( num_points == num_base_points )
2176 loader->
stream = old_stream;
2186 num_points > start_point )
2209 face->forget_glyph_frame( loader );
2211#ifdef FT_CONFIG_OPTION_INCREMENTAL
2213 if ( glyph_data_loaded )
2214 face->root.internal->incremental_interface->funcs->free_glyph_data(
2215 face->root.internal->incremental_interface->object,
2229#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
2230 defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
2244 if ( glyph->
format != FT_GLYPH_FORMAT_COMPOSITE )
2264 ( loader->
exec && loader->
exec->backward_compatibility ) ) &&
2266 !
face->postscript.isFixedPitch &&
2274 size->metrics->x_ppem,
2277#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
2288 ( ( ignore_x_mode && loader->
exec->compatible_widths ) ||
2290 SPH_OPTION_BITMAP_WIDTHS ) )
2291 glyph->
metrics.horiAdvance = *widthp * 64;
2299 glyph->
metrics.horiAdvance = *widthp * 64;
2316 if (
face->vertical_info &&
2317 face->vertical.number_Of_VMetrics > 0 )
2322 if ( loader->
pp3.
y <= loader->
pp4.
y )
2345 if (
face->os2.version != 0xFFFFU )
2347 face->os2.sTypoDescender );
2350 face->horizontal.Descender );
2355#ifdef FT_CONFIG_OPTION_INCREMENTAL
2362 incr =
face->root.internal->incremental_interface;
2401 glyph->
metrics.horiAdvance / 2 );
2410#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
2416 FT_Int32 load_flags )
2452 glyph->
format = FT_GLYPH_FORMAT_BITMAP;
2476 FT_Int32 load_flags,
2482#ifdef TT_USE_BYTECODE_INTERPRETER
2485#if defined TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY || \
2486 defined TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
2497#ifdef TT_USE_BYTECODE_INTERPRETER
2500 if (
IS_HINTED( load_flags ) && !glyf_table_only )
2504#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
2505 FT_Bool subpixel_hinting_lean;
2509#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
2515 FT_Bool symmetrical_smoothing;
2526 if (
size->bytecode_ready < 0 ||
size->cvt_ready < 0 )
2532 else if (
size->bytecode_ready )
2533 return size->bytecode_ready;
2534 else if (
size->cvt_ready )
2535 return size->cvt_ready;
2538 exec =
size->context;
2540 return FT_THROW( Could_Not_Find_Context );
2542#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
2545 subpixel_hinting_lean =
2548 grayscale_cleartype =
2549 FT_BOOL( subpixel_hinting_lean &&
2554 exec->vertical_lcd_lean =
2555 FT_BOOL( subpixel_hinting_lean &&
2561 subpixel_hinting_lean =
FALSE;
2562 grayscale_cleartype =
FALSE;
2563 exec->vertical_lcd_lean =
FALSE;
2567#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
2573 SPH_OPTION_SET_SUBPIXEL );
2575 if ( subpixel_hinting )
2577 else if ( SPH_OPTION_SET_GRAYSCALE )
2580 subpixel_hinting =
FALSE;
2586 subpixel_hinting =
FALSE;
2588 exec->ignore_x_mode = subpixel_hinting || grayscale;
2589 exec->rasterizer_version = SPH_OPTION_SET_RASTERIZER_VERSION;
2590 if ( exec->sph_tweak_flags & SPH_TWEAK_RASTERIZER_35 )
2594 exec->compatible_widths = SPH_OPTION_SET_COMPATIBLE_WIDTHS;
2595 exec->symmetrical_smoothing =
TRUE;
2597 exec->vertical_lcd =
FALSE;
2598 exec->subpixel_positioned =
TRUE;
2599 exec->gray_cleartype =
FALSE;
2601 exec->compatible_widths =
2603 TT_LOAD_COMPATIBLE_WIDTHS );
2604 exec->symmetrical_smoothing =
2606 TT_LOAD_SYMMETRICAL_SMOOTHING );
2610 exec->vertical_lcd =
2612 TT_LOAD_VERTICAL_LCD );
2613 exec->subpixel_positioned =
2615 TT_LOAD_SUBPIXEL_POSITIONED );
2616 exec->gray_cleartype =
2618 TT_LOAD_GRAY_CLEARTYPE );
2626#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
2628 grayscale =
FT_BOOL( !subpixel_hinting_lean &&
2640#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
2646 if ( subpixel_hinting != exec->subpixel_hinting )
2648 FT_TRACE4((
"tt_loader_init: subpixel hinting change,"
2649 " re-executing `prep' table\n" ));
2651 exec->subpixel_hinting = subpixel_hinting;
2659 FT_TRACE4((
"tt_loader_init: grayscale hinting change,"
2660 " re-executing `prep' table\n" ));
2672#ifdef TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
2677 if ( subpixel_hinting_lean != exec->subpixel_hinting_lean )
2679 FT_TRACE4((
"tt_loader_init: subpixel hinting change,"
2680 " re-executing `prep' table\n" ));
2682 exec->subpixel_hinting_lean = subpixel_hinting_lean;
2688 if ( grayscale_cleartype != exec->grayscale_cleartype )
2690 FT_TRACE4((
"tt_loader_init: grayscale subpixel hinting change,"
2691 " re-executing `prep' table\n" ));
2693 exec->grayscale_cleartype = grayscale_cleartype;
2703 FT_TRACE4((
"tt_loader_init: grayscale hinting change,"
2704 " re-executing `prep' table\n" ));
2726#ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
2731 exec->ignore_x_mode = 0;
2735 loader->
exec = exec;
2742 if ( !glyf_table_only )
2810 FT_Int32 load_flags )
2816 FT_TRACE1((
"TT_Load_Glyph: glyph index %d\n", glyph_index ));
2818#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
2821 if (
size->strike_index != 0xFFFFFFFFUL &&
2829 error = load_sbit_image(
size, glyph, glyph_index, load_flags );
2850 if ( !
face->horz_metrics_size )
2862 glyph->outline.n_points = 0;
2863 glyph->outline.n_contours = 0;
2865 glyph->metrics.width = 0;
2866 glyph->metrics.height = 0;
2868 glyph->metrics.horiBearingX =
FT_MulFix( left_bearing, x_scale );
2869 glyph->metrics.horiBearingY = 0;
2870 glyph->metrics.horiAdvance =
FT_MulFix( advance_width, x_scale );
2872 glyph->metrics.vertBearingX = 0;
2873 glyph->metrics.vertBearingY =
FT_MulFix( top_bearing, y_scale );
2874 glyph->metrics.vertAdvance =
FT_MulFix( advance_height, y_scale );
2876 glyph->format = FT_GLYPH_FORMAT_BITMAP;
2879 glyph->bitmap_left = 0;
2880 glyph->bitmap_top = 0;
2899 glyph->linearHoriAdvance = loader.
linear;
2900 glyph->linearVertAdvance = loader.
vadvance;
2904 if ( !glyph->metrics.horiAdvance && glyph->linearHoriAdvance )
2905 glyph->metrics.horiAdvance =
FT_MulFix( glyph->linearHoriAdvance,
2907 if ( !glyph->metrics.vertAdvance && glyph->linearVertAdvance )
2908 glyph->metrics.vertAdvance =
FT_MulFix( glyph->linearVertAdvance,
2935 glyph->format = FT_GLYPH_FORMAT_OUTLINE;
2936 glyph->num_subglyphs = 0;
2937 glyph->outline.flags = 0;
2943 if ( glyph->format == FT_GLYPH_FORMAT_COMPOSITE )
2951 glyph->outline.
flags &= ~FT_OUTLINE_SINGLE_PASS;
2961#ifdef TT_USE_BYTECODE_INTERPRETER
3003 size->metrics->y_ppem < 24 )
3006 FT_TRACE1((
" subglyphs = %u, contours = %hd, points = %hd,"
3007 " flags = 0x%.3x\n",
3009 glyph->outline.n_contours,
3010 glyph->outline.n_points,
3011 glyph->outline.flags ));
3016#ifdef FT_DEBUG_LEVEL_TRACE
3018 FT_TRACE1((
" failed (error code 0x%x)\n",
_STLP_MOVE_TO_STD_NAMESPACE void _STLP_CALL advance(_InputIterator &__i, _Distance __n)
#define FT_CALLBACK_DEF(x)
#define FT_UINT_TO_POINTER(x)
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
#define FT_LOAD_VERTICAL_LAYOUT
#define FT_LOAD_TARGET_LCD_V
#define FT_LOAD_TARGET_MODE(x)
#define FT_LOAD_SBITS_ONLY
#define FT_LOAD_NO_BITMAP
#define FT_LOAD_NO_RECURSE
#define FT_LOAD_NO_HINTING
FT_DivFix(FT_Long a, FT_Long b)
#define FT_IS_SCALABLE(face)
struct FT_GlyphSlotRec_ * FT_GlyphSlot
#define FT_IS_VARIATION(face)
#define FT_LOAD_COMPUTE_METRICS
#define FT_IS_NAMED_INSTANCE(face)
#define FT_LOAD_TARGET_LCD
#define FT_IS_TRICKY(face)
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
FT_MulFix(FT_Long a, FT_Long b)
FT_Hypot(FT_Fixed x, FT_Fixed y)
#define FT_ASSERT(condition)
#define FT_TRACE5(varformat)
#define FT_TRACE7(varformat)
#define FT_TRACE2(varformat)
#define FT_TRACE1(varformat)
#define FT_TRACE4(varformat)
#define TT_INTERPRETER_VERSION_38
#define TT_INTERPRETER_VERSION_40
#define TT_INTERPRETER_VERSION_35
FT_GlyphLoader_Add(FT_GlyphLoader loader)
FT_GlyphLoader_Rewind(FT_GlyphLoader loader)
#define FT_GLYPHLOADER_CHECK_POINTS(_loader, _points, _contours)
FT_GlyphLoader_CheckSubGlyphs(FT_GlyphLoader loader, FT_UInt n_subs)
#define FT_CURVE_TAG_TOUCH_BOTH
#define FT_OUTLINE_SMART_DROPOUTS
#define FT_CURVE_TAG_HAS_SCANMODE
#define FT_OUTLINE_IGNORE_DROPOUTS
#define FT_OUTLINE_INCLUDE_STUBS
#define FT_OUTLINE_OVERLAP
#define FT_OUTLINE_HIGH_PRECISION
FT_BEGIN_HEADER typedef signed long FT_Pos
FT_List_Finalize(FT_List list, FT_List_Destructor destroy, FT_Memory memory, void *user)
FT_BEGIN_HEADER FT_List_Find(FT_List list, void *data)
FT_List_Add(FT_List list, FT_ListNode node)
#define FT_NEW_ARRAY(ptr, count)
#define FT_SET_ERROR(expression)
#define FT_ARRAY_COPY(dest, source, count)
#define FT_MEM_COPY(dest, source, count)
#define FT_FACE_DRIVER(x)
#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
#define TT_USE_BYTECODE_INTERPRETER
FT_Outline_EmboldenXY(FT_Outline *outline, FT_Pos xstrength, FT_Pos ystrength)
FT_Outline_Translate(const FT_Outline *outline, FT_Pos xOffset, FT_Pos yOffset)
FT_Outline_Transform(const FT_Outline *outline, const FT_Matrix *matrix)
FT_Outline_Get_CBox(const FT_Outline *outline, FT_BBox *acbox)
#define FT_FRAME_ENTER(size)
#define FT_READ_USHORT(var)
#define FT_STREAM_SEEK(position)
#define FT_NEXT_USHORT(buffer)
#define FT_NEXT_CHAR(buffer)
#define FT_STREAM_READ(buffer, count)
FT_Stream_OpenMemory(FT_Stream stream, const FT_Byte *base, FT_ULong size)
#define FT_NEXT_SHORT(buffer)
#define FT_NEXT_BYTE(buffer)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
FT_BEGIN_HEADER typedef unsigned char FT_Bool
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLint GLint GLint GLint GLint GLint y
GLint GLint GLsizei GLsizei height
GLdouble GLdouble GLdouble GLdouble top
GLenum GLuint GLint GLenum face
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
GLsizei const GLfloat * points
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 flag
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 * u
struct task_struct * current
static char memory[1024 *256]
struct @1789::@1790 driver
SFNT_Interface * SFNT_Service
FT_Slot_Internal internal
FT_Fixed linearHoriAdvance
FT_Fixed linearVertAdvance
FT_Incremental_GetGlyphMetricsFunc get_glyph_metrics
const FT_Incremental_FuncsRec * funcs
TT_Load_SBit_Image_Func load_sbit_image
TT_MaxProfile max_profile
FT_UShort maxSizeOfInstructions
FT_Size_Metrics * metrics
static FT_Error TT_Process_Composite_Glyph(TT_Loader loader, FT_UInt start_point, FT_UInt start_contour)
TT_Access_Glyph_Frame(TT_Loader loader, FT_UInt glyph_index, FT_ULong offset, FT_UInt byte_count)
static void tt_loader_done(TT_Loader loader)
TT_Load_Glyph(TT_Size size, TT_GlyphSlot glyph, FT_UInt glyph_index, FT_Int32 load_flags)
static void tt_prepare_zone(TT_GlyphZone zone, FT_GlyphLoad load, FT_UInt start_point, FT_UInt start_contour)
static FT_Error load_truetype_glyph(TT_Loader loader, FT_UInt glyph_index, FT_UInt recurse_count, FT_Bool header_only)
static FT_Error tt_get_metrics(TT_Loader loader, FT_UInt glyph_index)
TT_Load_Simple_Glyph(TT_Loader load)
TT_Init_Glyph_Loading(TT_Face face)
static void tt_loader_set_pp(TT_Loader loader)
#define IS_DEFAULT_INSTANCE(_face)
static FT_Error TT_Process_Simple_Glyph(TT_Loader loader)
TT_Load_Glyph_Header(TT_Loader loader)
static FT_Error tt_loader_init(TT_Loader loader, TT_Size size, TT_GlyphSlot glyph, FT_Int32 load_flags, FT_Bool glyf_table_only)
#define UNSCALED_COMPONENT_OFFSET
static FT_Error TT_Process_Composite_Component(TT_Loader loader, FT_SubGlyph subglyph, FT_UInt start_point, FT_UInt num_base_points)
static FT_ListNode ft_list_get_node_at(FT_List list, FT_UInt idx)
TT_Get_HMetrics(TT_Face face, FT_UInt idx, FT_Short *lsb, FT_UShort *aw)
#define ARGS_ARE_XY_VALUES
static FT_Error compute_glyph_metrics(TT_Loader loader, FT_UInt glyph_index)
#define WE_HAVE_AN_XY_SCALE
TT_Forget_Glyph_Frame(TT_Loader loader)
TT_Get_VMetrics(TT_Face face, FT_UInt idx, FT_Pos yMax, FT_Short *tsb, FT_UShort *ah)
static FT_Error TT_Hint_Glyph(TT_Loader loader, FT_Bool is_composite)
#define SCALED_COMPONENT_OFFSET
TT_Load_Composite_Glyph(TT_Loader loader)
const TT_GraphicsState tt_default_graphics_state
typedefFT_BEGIN_HEADER struct TT_DriverRec_ * TT_Driver
tt_face_get_device_metrics(TT_Face face, FT_UInt ppem, FT_UInt gindex)
tt_face_get_location(TT_Face face, FT_UInt gindex, FT_UInt *asize)
#define TT_FACE_FLAG_VAR_HADVANCE
struct TT_FaceRec_ * TT_Face
#define TT_FACE_FLAG_VAR_VADVANCE
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList