27#ifdef FT_OPTION_AUTOFIT2
35#ifdef AF_CONFIG_OPTION_USE_WARPER
47#define FT_COMPONENT trace_aflatin2
89 metrics->root.style_class->standard_char );
90 if ( glyph_index == 0 )
94 if (
error ||
face->glyph->outline.n_points <= 0 )
120 error = af_latin2_hints_compute_segments(
hints,
125 af_latin2_hints_link_segments(
hints,
131 for ( ; seg <
limit; seg++ )
146 axis->
widths[num_widths++].org = dist;
150 af_sort_widths( num_widths, axis->
widths );
177#define AF_LATIN_MAX_TEST_CHARACTERS 12
180 static const char af_latin2_blue_chars[AF_LATIN_MAX_BLUES]
181 [AF_LATIN_MAX_TEST_CHARACTERS+1] =
196 FT_Pos flats [AF_LATIN_MAX_TEST_CHARACTERS];
197 FT_Pos rounds[AF_LATIN_MAX_TEST_CHARACTERS];
212 "======================\n\n" ));
214 for ( bb = 0; bb < AF_LATIN_BLUE_MAX; bb++ )
216 const char*
p = af_latin2_blue_chars[bb];
217 const char*
limit =
p + AF_LATIN_MAX_TEST_CHARACTERS;
230 FT_Int best_point, best_y, best_first, best_last;
237 if ( glyph_index == 0 )
259 FT_Int old_best_point = best_point;
274 if ( best_point < 0 ||
points[pp].
y > best_y )
283 if ( best_point < 0 ||
points[pp].
y < best_y )
290 if ( best_point != old_best_point )
315 if ( prev < best_first )
327 }
while (
start != best_point );
332 if (
next > best_last )
342 }
while (
end != best_point );
353 rounds[num_rounds++] = best_y;
355 flats[num_flats++] = best_y;
358 if ( num_flats == 0 && num_rounds == 0 )
376 blue_shoot = &
blue->shoot.org;
380 if ( num_flats == 0 )
383 *blue_shoot = rounds[num_rounds / 2];
385 else if ( num_rounds == 0 )
388 *blue_shoot = flats[num_flats / 2];
392 *blue_ref = flats[num_flats / 2];
393 *blue_shoot = rounds[num_rounds / 2];
399 if ( *blue_shoot != *blue_ref )
402 FT_Pos shoot = *blue_shoot;
409 *blue_shoot = ( shoot +
ref ) / 2;
411 FT_TRACE5((
" [overshoot smaller than reference,"
412 " taking mean value]\n" ));
429 " overshoot = %ld\n",
430 *blue_ref, *blue_shoot ));
442 FT_Bool started = 0, same_width = 1;
448 for (
i = 0x30;
i <= 0x39;
i++ )
454 if ( glyph_index == 0 )
479 metrics->root.digits_have_same_width = same_width;
494 FT_ENCODING_APPLE_ROMAN,
495 FT_ENCODING_ADOBE_STANDARD,
496 FT_ENCODING_ADOBE_LATIN_1,
504 for ( ee = 0; latin_encodings[ee] != FT_ENCODING_NONE; ee++ )
582 ppem =
metrics->root.scaler.face->size->metrics.x_ppem;
593 fitted = ( scaled + threshold ) & ~63;
596 if ( scaled != fitted )
600 " fitted = %.2g, scaling = %.4g\n",
601 scaled / 64.0, fitted / 64.0,
602 ( fitted * 1.0 ) / scaled ));
614 metrics->root.scaler.x_delta = delta;
619 metrics->root.scaler.y_delta = delta;
650 blue->flags &= ~AF_LATIN_BLUE_ACTIVE;
654 if ( dist <= 48 && dist >= -48 )
658 delta1 =
blue->shoot.org -
blue->ref.org;
667 else if ( delta2 < 64 )
668 delta2 = 32 + ( ( ( delta2 - 32 ) + 16 ) & ~31 );
676 blue->shoot.fit =
blue->ref.fit + delta2;
678 FT_TRACE5((
">> activating blue zone %d:"
679 " ref.cur=%.2g ref.fit=%.2g"
680 " shoot.cur=%.2g shoot.fit=%.2g\n",
681 nn,
blue->ref.cur / 64.0,
blue->ref.fit / 64.0,
682 blue->shoot.cur / 64.0,
blue->shoot.fit / 64.0 ));
749 segment_dir = major_dir;
780 for ( ; contour < contour_limit; contour++ )
814 FT_Pos min_u, min_v, max_u, max_v;
821 min_u = max_u =
point->u;
822 min_v = max_v =
point->v;
830 if (
point->u < min_u )
833 if (
point->u > max_u )
837 if (
point->v < min_v )
840 if (
point->v > max_v )
852 segment->
pos = (
FT_Short)( ( min_u + max_u ) >> 1 );
866 segment->
flags &= ~AF_EDGE_ROUND;
908 for ( segment = segments; segment < segments_end; segment++ )
917 if ( first_v < last_v )
920 if (
p->v < first_v )
922 ( ( first_v -
p->v ) >> 1 ) );
927 ( (
p->v - last_v ) >> 1 ) );
932 if (
p->v > first_v )
934 ( (
p->v - first_v ) >> 1 ) );
939 ( ( last_v -
p->v ) >> 1 ) );
944#ifdef AF_SORT_SEGMENTS
953 for ( ii = 0; ii <
count; ii++ )
955 if ( segments[ii].
dir > 0 )
957 for ( jj = ii + 1; jj <
count; jj++ )
959 if ( segments[jj].
dir < 0 )
965 segments[ii] = segments[jj];
976 axis->mid_segments = ii;
992#ifdef AF_SORT_SEGMENTS
993 AF_Segment segment_mid = segments + axis->mid_segments;
995 FT_Pos len_threshold, len_score;
1000 if ( len_threshold == 0 )
1005#ifdef AF_SORT_SEGMENTS
1006 for ( seg1 = segments; seg1 < segment_mid; seg1++ )
1011 for ( seg2 = segment_mid; seg2 < segment_limit; seg2++ )
1014 for ( seg1 = segments; seg1 < segment_limit; seg1++ )
1019 for ( seg2 = segments; seg2 < segment_limit; seg2++ )
1020 if ( seg1->
dir + seg2->
dir == 0 && seg2->
pos > seg1->
pos )
1025 FT_Pos dist = pos2 - pos1;
1037 if ( min < seg2->min_coord )
1044 if (
len >= len_threshold )
1046 score = dist + len_score /
len;
1047 if ( score < seg1->score )
1049 seg1->
score = score;
1053 if ( score < seg2->score )
1055 seg2->
score = score;
1067 for ( seg1 = segments; seg1 < segment_limit; seg1++ )
1073 if ( seg2->
link != seg1 )
1098 FT_Pos edge_distance_threshold;
1099 FT_Pos segment_length_threshold;
1127 segment_length_threshold = 0;
1147 if ( edge_distance_threshold > 64 / 4 )
1148 edge_distance_threshold = 64 / 4;
1150 edge_distance_threshold =
FT_DivFix( edge_distance_threshold,
1153 for ( seg = segments; seg < segment_limit; seg++ )
1159 if ( seg->
height < segment_length_threshold )
1177 else if ( 2*seg->
height < 3 * segment_length_threshold )
1182 for ( ee = 0; ee < axis->
num_edges; ee++ )
1192 if ( dist < edge_distance_threshold && edge->
dir == seg->
dir )
1259 for ( edge = edges; edge < edge_limit; edge++ )
1268 }
while ( seg != edge->
first );
1272 for ( edge = edges; edge < edge_limit; edge++ )
1297 if ( seg->
dir == up_dir )
1321 edge2 = edge->
serif;
1330 edge_delta = edge->
fpos - edge2->
fpos;
1331 if ( edge_delta < 0 )
1332 edge_delta = -edge_delta;
1334 seg_delta = seg->
pos - seg2->
pos;
1335 if ( seg_delta < 0 )
1336 seg_delta = -seg_delta;
1338 if ( seg_delta < edge_delta )
1346 edge->
serif = edge2;
1355 }
while ( seg != edge->
first );
1360 if ( is_round > 0 && is_round >= is_straight )
1370 else if ( ups < downs )
1373 else if ( ups == downs )
1398 error = af_latin2_hints_compute_segments(
hints, dim );
1401 af_latin2_hints_link_segments(
hints, dim );
1403 error = af_latin2_hints_compute_edges(
hints, dim );
1424 if ( best_dist0 > 64 / 2 )
1425 best_dist0 = 64 / 2;
1431 for ( ; edge < edge_limit; edge++ )
1435 FT_Pos best_dist = best_dist0;
1437 for ( bb = 0; bb < AF_LATIN_BLUE_MAX; bb++ )
1440 FT_Bool is_top_blue, is_major_dir;
1457 if ( is_top_blue ^ is_major_dir )
1475 if ( dist < best_dist )
1490 if ( is_top_blue ^ is_under_ref )
1493 dist = edge->
fpos -
blue->shoot.org;
1498 if ( dist < best_dist )
1501 best_blue = &
blue->shoot;
1520 FT_UInt32 scaler_flags, other_flags;
1543 scaler_flags =
hints->scaler_flags;
1577#ifdef AF_CONFIG_OPTION_USE_WARPER
1579 if ( !
metrics->root.globals->module->warping )
1583 hints->scaler_flags = scaler_flags;
1584 hints->other_flags = other_flags;
1602 af_latin2_snap_width(
AF_Width widths,
1607 FT_Pos best = 64 + 32 + 2;
1633 if (
width < scaled + 48 )
1638 if (
width > scaled - 48 )
1681 if ( ( stem_flags &
AF_EDGE_SERIF ) && vertical && ( dist < 3 * 64 ) )
1690 else if ( dist < 56 )
1693 if ( axis->width_count > 0 )
1699 if ( axis->width_count > 0 )
1701 delta = dist - axis->widths[0].cur;
1708 dist = axis->widths[0].cur;
1716 if ( dist < 3 * 64 )
1724 else if ( delta < 32 )
1727 else if ( delta < 54 )
1734 dist = ( dist + 32 ) & ~63;
1743 dist = af_latin2_snap_width( axis->widths, axis->width_count, dist );
1751 dist = ( dist + 16 ) & ~63;
1765 dist = ( dist + 32 ) & ~63;
1774 dist = ( dist + 64 ) >> 1;
1776 else if ( dist < 128 )
1787 dist = ( dist + 22 ) & ~63;
1788 delta = dist - org_dist;
1796 dist = ( dist + 64 ) >> 1;
1801 dist = ( dist + 32 ) & ~63;
1824 FT_Pos fitted_width = af_latin2_compute_stem_width(
hints, dim, dist,
1829 stem_edge->
pos = base_edge->
pos + fitted_width;
1831 FT_TRACE5((
"LINK: edge %d (opos=%.2f) linked to (%.2f), "
1832 "dist was %.2f, now %.2f\n",
1833 stem_edge-
hints->axis[dim].edges, stem_edge->
opos / 64.0,
1834 stem_edge->
pos / 64.0, dist / 64.0, fitted_width / 64.0 ));
1874 FT_TRACE5((
"==== hinting %s edges =====\n",
1882 for ( edge = edges; edge < edge_limit; edge++ )
1909 FT_TRACE5((
"BLUE: edge %d (opos=%.2f) snapped to (%.2f), "
1911 edge1-edges, edge1->
opos / 64.0,
blue->fit / 64.0,
1912 edge1->
pos / 64.0 ));
1919 af_latin2_align_linked_edge(
hints, dim, edge1, edge2 );
1927 anchor_drift = ( anchor->
pos - anchor->
opos );
1929 anchor_drift = ( anchor_drift +
1930 ( edge2->
pos - edge2->
opos ) ) >> 1;
1937 for ( edge = edges; edge < edge_limit; edge++ )
1958 FT_TRACE5((
"ASSERTION FAILED for edge %d\n", edge2-edges ));
1960 af_latin2_align_linked_edge(
hints, dim, edge2, edge );
1967 FT_Pos org_len, org_center, cur_len;
1971 org_len = edge2->
opos - edge->
opos;
1972 cur_len = af_latin2_compute_stem_width(
hints, dim, org_len,
1975 if ( cur_len <= 64 )
1985 org_center = edge->
opos + ( org_len >> 1 );
1989 error1 = org_center - ( cur_pos1 - u_off );
1993 error2 = org_center - ( cur_pos1 + d_off );
2002 edge->
pos = cur_pos1 - cur_len / 2;
2003 edge2->
pos = edge->
pos + cur_len;
2008 FT_TRACE5((
"ANCHOR: edge %d (opos=%.2f) and %d (opos=%.2f)"
2009 " snapped to (%.2f) (%.2f)\n",
2010 edge-edges, edge->
opos / 64.0,
2011 edge2-edges, edge2->
opos / 64.0,
2012 edge->
pos / 64.0, edge2->
pos / 64.0 ));
2017 af_latin2_align_linked_edge(
hints, dim, edge, edge2 );
2021 anchor_drift = ( ( anchor->
pos - anchor->
opos ) +
2022 ( edge2->
pos - edge2->
opos ) ) >> 1;
2024 FT_TRACE5((
"DRIFT: %.2f\n", anchor_drift/64.0 ));
2028 FT_Pos org_pos, org_len, org_center, cur_center, cur_len;
2029 FT_Pos org_left, org_right;
2032 org_pos = edge->
opos + anchor_drift;
2033 org_len = edge2->
opos - edge->
opos;
2034 org_center = org_pos + ( org_len >> 1 );
2036 cur_len = af_latin2_compute_stem_width(
hints, dim, org_len,
2040 org_left = org_pos + ( ( org_len - cur_len ) >> 1 );
2041 org_right = org_pos + ( ( org_len + cur_len ) >> 1 );
2043 FT_TRACE5((
"ALIGN: left=%.2f right=%.2f ",
2044 org_left / 64.0, org_right / 64.0 ));
2045 cur_center = org_center;
2050 edge->
pos = edge2->
pos - cur_len;
2058 FT_Pos displacements[6], scores[6],
org, fit, delta;
2075 if ( cur_len <= 96 )
2083 FT_Pos frac_left = org_left & 63;
2084 FT_Pos frac_right = org_right & 63;
2086 if ( frac_left >= 22 && frac_left <= 42 &&
2087 frac_right >= 22 && frac_right <= 42 )
2090 fit = (
org <= 32 ) ? 16 : 48;
2093 scores[
count++] = delta;
2094 FT_TRACE5((
"dispA=%.2f (%d) ", ( fit -
org ) / 64.0, delta ));
2097 fit = (
org <= 32 ) ? 16 : 48;
2100 scores[
count++] = delta;
2101 FT_TRACE5((
"dispB=%.2f (%d) ", ( fit -
org ) / 64.0, delta ));
2110 scores[
count++] = delta;
2111 FT_TRACE5((
"dispC=%.2f (%d) ", ( fit -
org ) / 64.0, delta ));
2118 scores[
count++] = delta;
2119 FT_TRACE5((
"dispD=%.2f (%d) ", ( fit -
org ) / 64.0, delta ));
2123 FT_Pos best_score = scores[0];
2124 FT_Pos best_disp = displacements[0];
2127 for ( nn = 1; nn <
count; nn++ )
2129 if ( scores[nn] < best_score )
2131 best_score = scores[nn];
2132 best_disp = displacements[nn];
2136 cur_center = org_center + best_disp;
2142 edge->
pos = cur_center - ( cur_len >> 1 );
2143 edge2->
pos = edge->
pos + cur_len;
2145 FT_TRACE5((
"STEM1: %d (opos=%.2f) to %d (opos=%.2f)"
2146 " snapped to (%.2f) and (%.2f),"
2147 " org_len=%.2f cur_len=%.2f\n",
2148 edge-edges, edge->
opos / 64.0,
2149 edge2-edges, edge2->
opos / 64.0,
2150 edge->
pos / 64.0, edge2->
pos / 64.0,
2151 org_len / 64.0, cur_len / 64.0 ));
2156 if ( edge > edges && edge->
pos < edge[-1].pos )
2158 FT_TRACE5((
"BOUND: %d (pos=%.2f) to (%.2f)\n",
2159 edge-edges, edge->
pos / 64.0, edge[-1].pos / 64.0 ));
2160 edge->
pos = edge[-1].
pos;
2182 FT_Int n_edges = edge_limit - edges;
2207 span = dist1 - dist2;
2213 delta = edge3->
pos - ( 2 * edge2->
pos - edge1->
pos );
2214 edge3->
pos -= delta;
2219 if ( n_edges == 12 )
2221 ( edges + 8 )->
pos -= delta;
2222 ( edges + 11 )->
pos -= delta;
2233 if ( has_serifs || !anchor )
2239 for ( edge = edges; edge < edge_limit; edge++ )
2256 if ( delta < 64 + 16 )
2258 af_latin2_align_serif_edge(
hints, edge->
serif, edge );
2259 FT_TRACE5((
"SERIF: edge %d (opos=%.2f) serif to %d (opos=%.2f)"
2260 " aligned to (%.2f)\n",
2261 edge-edges, edge->
opos / 64.0,
2263 edge->
pos / 64.0 ));
2267 FT_TRACE5((
"SERIF_ANCHOR: edge %d (opos=%.2f)"
2268 " snapped to (%.2f)\n",
2269 edge-edges, edge->
opos / 64.0, edge->
pos / 64.0 ));
2287 after < edge_limit && after > edge )
2292 edge->pos =
before->pos +
2296 FT_TRACE5((
"SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f)"
2297 " from %d (opos=%.2f)\n",
2298 edge-edges, edge->opos / 64.0, edge->pos / 64.0,
2303 edge->pos = anchor->
pos +
2304 ( ( edge->opos - anchor->
opos + 16 ) & ~31 );
2306 FT_TRACE5((
"SERIF_LINK2: edge %d (opos=%.2f)"
2307 " snapped to (%.2f)\n",
2308 edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
2314 if ( edge > edges && edge->pos < edge[-1].pos )
2315 edge->pos = edge[-1].pos;
2317 if ( edge + 1 < edge_limit &&
2319 edge->pos > edge[1].pos )
2320 edge->pos = edge[1].pos;
2327 af_latin2_hints_apply(
FT_UInt glyph_index,
2362#ifdef AF_CONFIG_OPTION_USE_WARPER
2373 af_glyph_hints_scale_dim(
hints, dim,
scale, delta );
2404 af_latin2_writing_system_class,
2406 AF_WRITING_SYSTEM_LATIN2,
_STLP_MOVE_TO_STD_NAMESPACE void _STLP_CALL advance(_InputIterator &__i, _Distance __n)
af_sort_pos(FT_UInt count, FT_Pos *table)
#define AF_PROP_INCREASE_X_HEIGHT_MIN
af_axis_hints_new_edge(AF_AxisHints axis, FT_Int fpos, AF_Direction dir, FT_Bool top_to_bottom_hinting, FT_Memory memory, AF_Edge *anedge)
af_glyph_hints_done(AF_GlyphHints hints)
af_glyph_hints_align_edge_points(AF_GlyphHints hints, AF_Dimension dim)
af_glyph_hints_save(AF_GlyphHints hints, FT_Outline *outline)
af_glyph_hints_rescale(AF_GlyphHints hints, AF_StyleMetrics metrics)
af_axis_hints_new_segment(AF_AxisHints axis, FT_Memory memory, AF_Segment *asegment)
af_glyph_hints_reload(AF_GlyphHints hints, FT_Outline *outline)
af_glyph_hints_align_strong_points(AF_GlyphHints hints, AF_Dimension dim)
af_glyph_hints_align_weak_points(AF_GlyphHints hints, AF_Dimension dim)
af_glyph_hints_init(AF_GlyphHints hints, FT_Memory memory)
#define AF_HINTS_DO_BLUES(h)
#define AF_HINTS_DO_WARP(h)
#define AF_HINTS_DO_HORIZONTAL(h)
FT_BEGIN_HEADER enum AF_Dimension_ AF_Dimension
enum AF_Direction_ AF_Direction
#define AF_HINTS_DO_VERTICAL(h)
#define AF_LATIN_IS_X_HEIGHT_BLUE(b)
#define AF_LATIN_IS_TOP_BLUE(b)
#define AF_LATIN_HINTS_STEM_ADJUST
#define AF_LATIN_HINTS_DO_MONO(h)
#define AF_LATIN_MAX_WIDTHS
#define AF_LATIN_HINTS_VERT_SNAP
#define AF_LATIN_HINTS_MONO
#define AF_LATIN_HINTS_DO_VERT_SNAP(h)
#define AF_LATIN_CONSTANT(metrics, c)
struct AF_LatinMetricsRec_ * AF_LatinMetrics
#define AF_LATIN_BLUE_TOP
#define AF_LATIN_HINTS_DO_HORZ_SNAP(h)
#define AF_LATIN_HINTS_DO_STEM_ADJUST(h)
#define AF_LATIN_BLUE_ACTIVE
#define AF_LATIN_BLUE_ADJUSTMENT
#define AF_LATIN_HINTS_HORZ_SNAP
#define AF_SCALER_FLAG_NO_WARPER
FT_Error(* AF_WritingSystem_InitMetricsFunc)(AF_StyleMetrics metrics, FT_Face face)
void(* AF_WritingSystem_ScaleMetricsFunc)(AF_StyleMetrics metrics, AF_Scaler scaler)
FT_BEGIN_HEADER struct AF_WidthRec_ * AF_Width
void(* AF_WritingSystem_DoneMetricsFunc)(AF_StyleMetrics metrics)
FT_Error(* AF_WritingSystem_InitHintsFunc)(AF_GlyphHints hints, AF_StyleMetrics metrics)
#define AF_DEFINE_WRITING_SYSTEM_CLASS( writing_system_class, system, m_size, m_init, m_scale, m_done, m_stdw, h_init, h_apply)
FT_Error(* AF_WritingSystem_ApplyHintsFunc)(FT_UInt glyph_index, AF_GlyphHints hints, FT_Outline *outline, AF_StyleMetrics metrics)
#define AF_SCALER_FLAG_NO_HORIZONTAL
void(* AF_WritingSystem_GetStdWidthsFunc)(AF_StyleMetrics metrics, FT_Pos *stdHW, FT_Pos *stdVW)
af_warper_compute(AF_Warper warper, AF_GlyphHints hints, AF_Dimension dim, FT_Fixed *a_scale, FT_Fixed *a_delta)
FT_Load_Glyph(FT_Face face, FT_UInt glyph_index, FT_Int32 load_flags)
#define FT_STYLE_FLAG_ITALIC
#define FT_LOAD_IGNORE_TRANSFORM
enum FT_Render_Mode_ FT_Render_Mode
#define FT_LOAD_NO_HINTING
FT_DivFix(FT_Long a, FT_Long b)
FT_Get_Char_Index(FT_Face face, FT_ULong charcode)
FT_Select_Charmap(FT_Face face, FT_Encoding encoding)
FT_Set_Charmap(FT_Face face, FT_CharMap charmap)
enum FT_Encoding_ FT_Encoding
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
FT_MulFix(FT_Long a, FT_Long b)
FT_Get_Advance(FT_Face face, FT_UInt gindex, FT_Int32 load_flags, FT_Fixed *padvance)
#define FT_ASSERT(condition)
#define FT_TRACE5(varformat)
#define FT_CURVE_TAG(flag)
FT_BEGIN_HEADER typedef signed long FT_Pos
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
FT_BEGIN_HEADER typedef unsigned char FT_Bool
GLint GLint GLint GLint GLint x
GLint GLint GLint GLint GLint GLint y
GLuint GLuint GLsizei count
GLint GLint GLsizei width
GLenum GLenum GLenum GLenum GLenum scale
GLenum GLenum GLvoid GLvoid GLvoid * span
GLenum GLuint GLint GLenum face
GLsizei GLenum const GLvoid GLuint GLsizei GLfloat * metrics
GLubyte GLubyte GLubyte GLubyte w
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 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 char memory[1024 *256]
static unsigned __int64 next
namespace GUID const ADDRINFOEXW * hints
AF_LatinBlueRec blues[AF_BLUE_STRINGSET_MAX]
AF_WidthRec widths[AF_LATIN_MAX_WIDTHS]
FT_Pos edge_distance_threshold
FT_Render_Mode render_mode
__inline int before(__u32 seq1, __u32 seq2)
__inline int after(__u32 seq1, __u32 seq2)