37#include FT_INTERNAL_DEBUG_H
38#include FT_INTERNAL_STREAM_H
39#include FT_INTERNAL_OBJECTS_H
52#define FT_COMPONENT trace_bdflib
82 { (
char *)
"ADD_STYLE_NAME",
BDF_ATOM, 1, { 0 } },
84 { (
char *)
"AVG_CAPITAL_WIDTH",
BDF_INTEGER, 1, { 0 } },
85 { (
char *)
"AVG_LOWERCASE_WIDTH",
BDF_INTEGER, 1, { 0 } },
87 { (
char *)
"CHARSET_COLLECTIONS",
BDF_ATOM, 1, { 0 } },
88 { (
char *)
"CHARSET_ENCODING",
BDF_ATOM, 1, { 0 } },
89 { (
char *)
"CHARSET_REGISTRY",
BDF_ATOM, 1, { 0 } },
90 { (
char *)
"COMMENT",
BDF_ATOM, 1, { 0 } },
91 { (
char *)
"COPYRIGHT",
BDF_ATOM, 1, { 0 } },
94 { (
char *)
"DEVICE_FONT_NAME",
BDF_ATOM, 1, { 0 } },
96 { (
char *)
"FACE_NAME",
BDF_ATOM, 1, { 0 } },
97 { (
char *)
"FAMILY_NAME",
BDF_ATOM, 1, { 0 } },
99 { (
char *)
"FONT",
BDF_ATOM, 1, { 0 } },
100 { (
char *)
"FONTNAME_REGISTRY",
BDF_ATOM, 1, { 0 } },
103 { (
char *)
"FOUNDRY",
BDF_ATOM, 1, { 0 } },
104 { (
char *)
"FULL_NAME",
BDF_ATOM, 1, { 0 } },
109 { (
char *)
"NOTICE",
BDF_ATOM, 1, { 0 } },
114 { (
char *)
"RAW_AVERAGE_WIDTH",
BDF_INTEGER, 1, { 0 } },
115 { (
char *)
"RAW_AVG_CAPITAL_WIDTH",
BDF_INTEGER, 1, { 0 } },
116 { (
char *)
"RAW_AVG_LOWERCASE_WIDTH",
BDF_INTEGER, 1, { 0 } },
117 { (
char *)
"RAW_CAP_HEIGHT",
BDF_INTEGER, 1, { 0 } },
119 { (
char *)
"RAW_END_SPACE",
BDF_INTEGER, 1, { 0 } },
120 { (
char *)
"RAW_FIGURE_WIDTH",
BDF_INTEGER, 1, { 0 } },
121 { (
char *)
"RAW_MAX_SPACE",
BDF_INTEGER, 1, { 0 } },
122 { (
char *)
"RAW_MIN_SPACE",
BDF_INTEGER, 1, { 0 } },
123 { (
char *)
"RAW_NORM_SPACE",
BDF_INTEGER, 1, { 0 } },
124 { (
char *)
"RAW_PIXEL_SIZE",
BDF_INTEGER, 1, { 0 } },
125 { (
char *)
"RAW_POINT_SIZE",
BDF_INTEGER, 1, { 0 } },
126 { (
char *)
"RAW_PIXELSIZE",
BDF_INTEGER, 1, { 0 } },
127 { (
char *)
"RAW_POINTSIZE",
BDF_INTEGER, 1, { 0 } },
128 { (
char *)
"RAW_QUAD_WIDTH",
BDF_INTEGER, 1, { 0 } },
129 { (
char *)
"RAW_SMALL_CAP_SIZE",
BDF_INTEGER, 1, { 0 } },
130 { (
char *)
"RAW_STRIKEOUT_ASCENT",
BDF_INTEGER, 1, { 0 } },
131 { (
char *)
"RAW_STRIKEOUT_DESCENT",
BDF_INTEGER, 1, { 0 } },
132 { (
char *)
"RAW_SUBSCRIPT_SIZE",
BDF_INTEGER, 1, { 0 } },
133 { (
char *)
"RAW_SUBSCRIPT_X",
BDF_INTEGER, 1, { 0 } },
134 { (
char *)
"RAW_SUBSCRIPT_Y",
BDF_INTEGER, 1, { 0 } },
135 { (
char *)
"RAW_SUPERSCRIPT_SIZE",
BDF_INTEGER, 1, { 0 } },
136 { (
char *)
"RAW_SUPERSCRIPT_X",
BDF_INTEGER, 1, { 0 } },
137 { (
char *)
"RAW_SUPERSCRIPT_Y",
BDF_INTEGER, 1, { 0 } },
138 { (
char *)
"RAW_UNDERLINE_POSITION",
BDF_INTEGER, 1, { 0 } },
139 { (
char *)
"RAW_UNDERLINE_THICKNESS",
BDF_INTEGER, 1, { 0 } },
141 { (
char *)
"RELATIVE_SETWIDTH",
BDF_CARDINAL, 1, { 0 } },
146 { (
char *)
"SETWIDTH_NAME",
BDF_ATOM, 1, { 0 } },
147 { (
char *)
"SLANT",
BDF_ATOM, 1, { 0 } },
148 { (
char *)
"SMALL_CAP_SIZE",
BDF_INTEGER, 1, { 0 } },
149 { (
char *)
"SPACING",
BDF_ATOM, 1, { 0 } },
150 { (
char *)
"STRIKEOUT_ASCENT",
BDF_INTEGER, 1, { 0 } },
151 { (
char *)
"STRIKEOUT_DESCENT",
BDF_INTEGER, 1, { 0 } },
152 { (
char *)
"SUBSCRIPT_SIZE",
BDF_INTEGER, 1, { 0 } },
155 { (
char *)
"SUPERSCRIPT_SIZE",
BDF_INTEGER, 1, { 0 } },
156 { (
char *)
"SUPERSCRIPT_X",
BDF_INTEGER, 1, { 0 } },
157 { (
char *)
"SUPERSCRIPT_Y",
BDF_INTEGER, 1, { 0 } },
158 { (
char *)
"UNDERLINE_POSITION",
BDF_INTEGER, 1, { 0 } },
159 { (
char *)
"UNDERLINE_THICKNESS",
BDF_INTEGER, 1, { 0 } },
161 { (
char *)
"WEIGHT_NAME",
BDF_ATOM, 1, { 0 } },
163 { (
char *)
"_MULE_BASELINE_OFFSET",
BDF_INTEGER, 1, { 0 } },
164 { (
char *)
"_MULE_RELATIVE_COMPOSE",
BDF_INTEGER, 1, { 0 } },
167 static const unsigned long
176#define _bdf_strncmp( name, property, n ) \
177 ( ft_strncmp( name, property, n ) || \
178 !( name[n] == ' ' || \
185#define ACMSG1 "FONT_ASCENT property missing. " \
186 "Added `FONT_ASCENT %hd'.\n"
187#define ACMSG2 "FONT_DESCENT property missing. " \
188 "Added `FONT_DESCENT %hd'.\n"
189#define ACMSG3 "Font width != actual width. Old: %hd New: %hd.\n"
190#define ACMSG4 "Font left bearing != actual left bearing. " \
191 "Old: %hd New: %hd.\n"
192#define ACMSG5 "Font ascent != actual ascent. Old: %hd New: %hd.\n"
193#define ACMSG6 "Font descent != actual descent. Old: %hd New: %hd.\n"
194#define ACMSG7 "Font height != actual height. Old: %hd New: %hd.\n"
195#define ACMSG8 "Glyph scalable width (SWIDTH) adjustments made.\n"
196#define ACMSG9 "SWIDTH field missing at line %ld. Set automatically.\n"
197#define ACMSG10 "DWIDTH field missing at line %ld. Set to glyph width.\n"
198#define ACMSG11 "SIZE bits per pixel field adjusted to %hd.\n"
199#define ACMSG12 "Duplicate encoding %ld (%s) changed to unencoded.\n"
200#define ACMSG13 "Glyph %ld extra rows removed.\n"
201#define ACMSG14 "Glyph %ld extra columns removed.\n"
202#define ACMSG15 "Incorrect glyph count: %ld indicated but %ld found.\n"
203#define ACMSG16 "Glyph %ld missing columns padded with zero bits.\n"
204#define ACMSG17 "Adjusting number of glyphs to %ld.\n"
207#define ERRMSG1 "[line %ld] Missing `%s' line.\n"
208#define ERRMSG2 "[line %ld] Font header corrupted or missing fields.\n"
209#define ERRMSG3 "[line %ld] Font glyphs corrupted or missing fields.\n"
210#define ERRMSG4 "[line %ld] BBX too big.\n"
211#define ERRMSG5 "[line %ld] `%s' value too big.\n"
212#define ERRMSG6 "[line %ld] Input line too long.\n"
213#define ERRMSG7 "[line %ld] Font name too long.\n"
214#define ERRMSG8 "[line %ld] Invalid `%s' value.\n"
215#define ERRMSG9 "[line %ld] Invalid keyword.\n"
218#define DBGMSG1 " [%6ld] %s"
219#define DBGMSG2 " (0x%lX)\n"
233 unsigned long linelen,
234 unsigned long lineno,
283#define setsbit( m, cc ) \
284 ( m[(FT_Byte)(cc) >> 3] |= (FT_Byte)( 1 << ( (cc) & 7 ) ) )
285#define sbitset( m, cc ) \
286 ( m[(FT_Byte)(cc) >> 3] & ( 1 << ( (cc) & 7 ) ) )
314 unsigned long num_items )
322 unsigned long newsize = oldsize + ( oldsize >> 1 ) + 5;
323 unsigned long bigsize = (
unsigned long)(
FT_INT_MAX /
sizeof (
char* ) );
327 if ( oldsize == bigsize )
332 else if ( newsize < oldsize || newsize > bigsize )
353 if (
list == 0 ||
list->used == 0 ||
n == 0 )
356 if (
n >=
list->used )
362 for (
u =
n,
i = 0;
u <
list->used;
i++,
u++ )
376 unsigned long *alen )
388 for (
i =
j = 0;
i <
list->used;
i++ )
390 char* fp =
list->field[
i];
396 if (
i + 1 <
list->used )
415 unsigned long linelen )
417 unsigned long final_empty;
436 if ( linelen == 0 ||
line[0] == 0 )
442 if ( separators == 0 || *separators == 0 )
454 for ( mult = 0,
sp = separators;
sp && *
sp;
sp++ )
456 if ( *
sp ==
'+' && *(
sp + 1 ) == 0 )
463 for ( final_empty = 0,
sp = ep =
line,
end =
sp + linelen;
467 for ( ; *ep && !
sbitset( seps, *ep ); ep++ )
487 for ( ; *ep &&
sbitset( seps, *ep ); ep++ )
495 final_empty = ( ep >
sp && *ep == 0 );
527 unsigned long lineno, buf_size;
528 int refill, hold, to_skip;
597 if ( buf_size >= 65536UL )
604 new_size = buf_size * 2;
633 (
void*)&
cb, client_data );
637 (
void*)&
cb, client_data );
648 else if ( hold ==
'\r' )
664 static const unsigned char a2i[128] =
666 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
667 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
668 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
669 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
670 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00,
671 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00,
672 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
673 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
674 0x00, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
675 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
676 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
681 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03,
682 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
683 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
684 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
689 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x03,
690 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00,
691 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
692 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
703 if (
s == 0 || *
s == 0 )
709 v =
v * 10 +
a2i[(
int)*
s];
728 if (
s == 0 || *
s == 0 )
742 v =
v * 10 +
a2i[(
int)*
s];
750 return ( !neg ) ?
v : -
v;
755 static unsigned short
761 if (
s == 0 || *
s == 0 )
767 v = (
unsigned short)(
v * 10 +
a2i[(
int)*
s] );
786 if (
s == 0 || *
s == 0 )
808 return (
short)( ( !neg ) ?
v : -
v );
852 font->nuser_props + 1 ) )
855 p =
font->user_props +
font->nuser_props;
860 return FT_THROW( Invalid_Argument );
912#define BDF_START_ 0x0001U
913#define BDF_FONT_NAME_ 0x0002U
914#define BDF_SIZE_ 0x0004U
915#define BDF_FONT_BBX_ 0x0008U
916#define BDF_PROPS_ 0x0010U
917#define BDF_GLYPHS_ 0x0020U
918#define BDF_GLYPH_ 0x0040U
919#define BDF_ENCODING_ 0x0080U
920#define BDF_SWIDTH_ 0x0100U
921#define BDF_DWIDTH_ 0x0200U
922#define BDF_BBX_ 0x0400U
923#define BDF_BITMAP_ 0x0800U
925#define BDF_SWIDTH_ADJ_ 0x1000U
927#define BDF_GLYPH_BITS_ ( BDF_GLYPH_ | \
934#define BDF_GLYPH_WIDTH_CHECK_ 0x40000000UL
935#define BDF_GLYPH_HEIGHT_CHECK_ 0x80000000UL
950 font->comments_len +
len + 1 ) )
970 unsigned long lineno )
981 if (
font == 0 ||
font->name == 0 ||
font->name[0] == 0 )
1008 if (
list.used == 15 )
1010 switch (
list.field[11][0] )
1039 unsigned long linelen,
1051 while ( *ep && *ep !=
' ' && *ep !=
'\t' )
1074 ep =
line + linelen;
1080 ( *
sp ==
' ' || *
sp ==
'\t' ) )
1090 ( *( ep - 1 ) ==
' ' || *( ep - 1 ) ==
'\t' ) )
1094 if ( ep >
sp && *( ep - 1 ) ==
'"' )
1105 unsigned long lineno )
1121 fp =
font->props + *propid;
1163 if (
font->props_used ==
font->props_size )
1165 if (
font->props_size == 0 )
1174 font->props_size + 1 ) )
1178 fp =
font->props +
font->props_size;
1188 fp =
font->props +
font->props_used;
1264 0xFF, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFE
1271 unsigned long linelen,
1272 unsigned long lineno,
1279 unsigned long i, slen, nibbles;
1328 if (
p->cnt >
p->size / 20 )
1330 p->cnt =
font->glyphs_size =
p->size / 20;
1336 font->glyphs_size = 64;
1340 if (
p->cnt >= 0x110000UL )
1372 p->flags &= ~BDF_START_;
1381 p->flags &= ~BDF_GLYPH_BITS_;
1389 p->glyph_enc == -1 &&
1390 p->opts->keep_unencoded == 0 )
1454 if (
p->glyph_enc < -1 )
1458 if (
p->glyph_enc == -1 &&
p->list.used > 2 )
1461 if (
p->glyph_enc < -1 )
1468 if (
p->glyph_enc > 0 &&
1469 (
size_t)
p->glyph_enc >=
sizeof (
p->have ) /
1470 sizeof (
unsigned long ) * 32 )
1480 if (
p->glyph_enc >= 0 )
1487 p->glyph_enc,
p->glyph_name ));
1495 if (
p->glyph_enc >= 0 )
1499 if (
font->glyphs_used ==
font->glyphs_size )
1503 font->glyphs_size + 64 ) )
1506 font->glyphs_size += 64;
1509 glyph =
font->glyphs +
font->glyphs_used++;
1510 glyph->
name =
p->glyph_name;
1514 p->glyph_name =
NULL;
1520 if (
p->opts->keep_unencoded != 0 )
1523 if (
font->unencoded_used ==
font->unencoded_size )
1526 font->unencoded_size,
1527 font->unencoded_size + 4 ) )
1530 font->unencoded_size += 4;
1533 glyph =
font->unencoded +
font->unencoded_used;
1534 glyph->
name =
p->glyph_name;
1538 p->glyph_name =
NULL;
1547 p->glyph_name =
NULL;
1560 if (
p->glyph_enc == -1 )
1561 glyph =
font->unencoded + (
font->unencoded_used - 1 );
1563 glyph =
font->glyphs + (
font->glyphs_used - 1 );
1570 if (
p->row >= (
unsigned long)glyph->
bbx.
height )
1584 nibbles = glyph->
bpr << 1;
1587 for (
i = 0;
i < nibbles;
i++ )
1593 if (
i + 1 < nibbles && (
i & 1 ) )
1608 mask_index = ( glyph->
bbx.
width *
p->font->bpp ) & 7;
1613 if (
i == nibbles &&
1630 goto Missing_Encoding;
1646 goto Missing_Encoding;
1663 font->resolution_x ) );
1674 goto Missing_Encoding;
1710 if (
p->opts->correct_metrics != 0 )
1716 font->resolution_x ) );
1719 if ( sw != glyph->
swidth )
1723 if (
p->glyph_enc == -1 )
1725 font->unencoded_used - 1 );
1741 unsigned long bitmap_size;
1753 glyph->
bpr = ( glyph->
bbx.
width *
p->font->bpp + 7 ) >> 3;
1756 if ( glyph->
bpr > 0xFFFFU || bitmap_size > 0xFFFFU )
1794 unsigned long linelen,
1795 unsigned long lineno,
1824 p->font->font_ascent =
p->font->bbx.ascent;
1832 p->font->modified = 1;
1837 p->font->font_descent =
p->font->bbx.descent;
1845 p->font->modified = 1;
1848 p->flags &= ~BDF_PROPS_;
1881 name =
p->list.field[0];
1899 unsigned long linelen,
1900 unsigned long lineno,
1926 if (
p->opts->keep_comments != 0 &&
p->font != 0 )
1965 font->memory =
p->memory;
1991 p->font->spacing =
p->opts->font_spacing;
1992 p->font->default_char = -1;
2003 FT_ERROR((
"_bdf_parse_start: " ERRMSG1, lineno,
"FONTBOUNDINGBOX" ));
2013 p->cnt =
p->font->props_size =
_bdf_atoul(
p->list.field[1] );
2015 if (
p->cnt >
p->size / 4 )
2017 p->font->props_size = 0;
2019 FT_ERROR((
"_bdf_parse_glyphs: " ERRMSG5, lineno,
"STARTPROPERTIES" ));
2026 p->font->props_size = 0;
2054 p->font->bbx.x_offset =
_bdf_atos(
p->list.field[3] );
2055 p->font->bbx.y_offset =
_bdf_atos(
p->list.field[4] );
2057 p->font->bbx.ascent = (
short)(
p->font->bbx.height +
2058 p->font->bbx.y_offset );
2060 p->font->bbx.descent = (
short)( -
p->font->bbx.y_offset );
2118 p->font->resolution_x =
_bdf_atoul(
p->list.field[2] );
2119 p->font->resolution_y =
_bdf_atoul(
p->list.field[3] );
2122 if (
p->list.used == 5 )
2139 if (
p->font->bpp !=
bpp )
2159 FT_ERROR((
"_bdf_parse_start: " ERRMSG1, lineno,
"FONTBOUNDINGBOX" ));
2166 p->font->font_ascent =
p->font->bbx.ascent;
2174 p->font->font_descent =
p->font->bbx.descent;
2182 p->font->modified = 1;
2212 unsigned long lineno = 0;
2226 p->memory = extmemory;
2231 (
void *)
p, &lineno );
2241 p->font->monowidth =
p->font->bbx.width;
2245 if (
p->cnt !=
p->font->glyphs_used +
p->font->unencoded_used )
2248 p->font->glyphs_used +
p->font->unencoded_used ));
2249 p->font->modified = 1;
2254 if (
p->opts->correct_metrics != 0 &&
2255 (
p->font->glyphs_used > 0 ||
p->font->unencoded_used > 0 ) )
2257 if (
p->maxrb -
p->minlb !=
p->font->bbx.width )
2260 p->font->bbx.width,
p->maxrb -
p->minlb ));
2261 p->font->bbx.width = (
unsigned short)(
p->maxrb -
p->minlb );
2262 p->font->modified = 1;
2265 if (
p->font->bbx.x_offset !=
p->minlb )
2268 p->font->bbx.x_offset,
p->minlb ));
2269 p->font->bbx.x_offset =
p->minlb;
2270 p->font->modified = 1;
2273 if (
p->font->bbx.ascent !=
p->maxas )
2276 p->font->bbx.ascent,
p->maxas ));
2277 p->font->bbx.ascent =
p->maxas;
2278 p->font->modified = 1;
2281 if (
p->font->bbx.descent !=
p->maxds )
2284 p->font->bbx.descent,
p->maxds ));
2285 p->font->bbx.descent =
p->maxds;
2286 p->font->bbx.y_offset = (
short)( -
p->maxds );
2287 p->font->modified = 1;
2290 if (
p->maxas +
p->maxds !=
p->font->bbx.height )
2293 p->font->bbx.height,
p->maxas +
p->maxds ));
2294 p->font->bbx.height = (
unsigned short)(
p->maxas +
p->maxds );
2326 if (
p->font->comments_len > 0 )
2329 p->font->comments_len,
2330 p->font->comments_len + 1 ) )
2333 p->font->comments[
p->font->comments_len] = 0;
2382 if (
font->internal )
2392 for (
i = 0;
i <
font->props_size;
i++ )
2402 i < font->glyphs_used;
i++,
glyphs++ )
2408 for (
i = 0,
glyphs =
font->unencoded; i < font->unencoded_used;
2420 i < font->overflow.glyphs_used;
i++,
glyphs++ )
2432 for ( prop =
font->user_props,
i = 0;
2433 i < font->nuser_props;
i++, prop++ )
2458 return propid ? (
font->props + *propid ) : 0;
static unsigned char bytes[4]
#define _bdf_glyph_modified(map, e)
#define _bdf_set_glyph_modified(map, e)
static FT_Error _bdf_set_default_spacing(bdf_font_t *font, bdf_options_t *opts, unsigned long lineno)
static void _bdf_list_init(_bdf_list_t *list, FT_Memory memory)
bdf_get_property(char *name, bdf_font_t *font)
static const bdf_options_t _bdf_opts
struct _bdf_parse_t_ _bdf_parse_t
static FT_Error _bdf_parse_glyphs(char *line, unsigned long linelen, unsigned long lineno, void *call_data, void *client_data)
static const unsigned char a2i[128]
static int _bdf_is_atom(char *line, unsigned long linelen, char **name, char **value, bdf_font_t *font)
static FT_Error _bdf_parse_properties(char *line, unsigned long linelen, unsigned long lineno, void *call_data, void *client_data)
static FT_Error _bdf_list_split(_bdf_list_t *list, char *separators, char *line, unsigned long linelen)
static const bdf_property_t _bdf_properties[]
static const unsigned char ddigits[32]
static const unsigned char nibble_mask[8]
static short _bdf_atos(char *s)
#define _bdf_strncmp(name, property, n)
static const unsigned long _num_bdf_properties
FT_Error(* _bdf_line_func_t)(char *line, unsigned long linelen, unsigned long lineno, void *call_data, void *client_data)
static FT_Error bdf_create_property(char *name, int format, bdf_font_t *font)
bdf_get_font_property(bdf_font_t *font, const char *name)
static FT_Error _bdf_add_property(bdf_font_t *font, char *name, char *value, unsigned long lineno)
#define BDF_GLYPH_HEIGHT_CHECK_
static char * _bdf_list_join(_bdf_list_t *list, int c, unsigned long *alen)
struct _bdf_list_t_ _bdf_list_t
static void _bdf_list_shift(_bdf_list_t *list, unsigned long n)
bdf_load_font(FT_Stream stream, FT_Memory extmemory, bdf_options_t *opts, bdf_font_t **font)
static const unsigned char hdigits[32]
static unsigned long _bdf_atoul(char *s)
static unsigned short _bdf_atous(char *s)
#define BDF_GLYPH_WIDTH_CHECK_
static FT_Error _bdf_add_comment(bdf_font_t *font, char *comment, unsigned long len)
static long _bdf_atol(char *s)
static const char empty[1]
static int by_encoding(const void *a, const void *b)
static FT_Error _bdf_list_ensure(_bdf_list_t *list, unsigned long num_items)
static FT_Error _bdf_readstream(FT_Stream stream, _bdf_line_func_t callback, void *client_data, unsigned long *lno)
static FT_Error _bdf_parse_start(char *line, unsigned long linelen, unsigned long lineno, void *call_data, void *client_data)
static void _bdf_list_done(_bdf_list_t *list)
bdf_free_font(bdf_font_t *font)
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
__kernel_ptrdiff_t ptrdiff_t
FT_MulDiv(FT_Long a, FT_Long b, FT_Long c)
#define FT_ERROR(varformat)
#define FT_TRACE2(varformat)
#define FT_TRACE4(varformat)
void ft_hash_str_free(FT_Hash hash, FT_Memory memory)
size_t * ft_hash_str_lookup(const char *key, FT_Hash hash)
FT_Error ft_hash_str_init(FT_Hash hash, FT_Memory memory)
FT_Error ft_hash_str_insert(const char *key, size_t data, FT_Hash hash, FT_Memory memory)
#define FT_NEW_ARRAY(ptr, count)
#define FT_STRDUP(dst, str)
#define FT_ALLOC(ptr, size)
#define FT_RENEW_ARRAY(ptr, curcnt, newcnt)
#define FT_MEM_COPY(dest, source, count)
#define FT_MEM_ZERO(dest, count)
#define FT_MEM_MOVE(dest, source, count)
FT_Stream_TryRead(FT_Stream stream, FT_Byte *buffer, FT_ULong count)
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
GLboolean GLboolean GLboolean b
GLenum GLuint GLenum GLsizei const GLchar * buf
GLboolean GLboolean GLboolean GLboolean a
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
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
#define comment(fmt, arg1)
static IPrintDialogCallback callback
static UINT UINT LPWORD glyphs
static HMODULE MODULEINFO DWORD cb
static char memory[1024 *256]
static unsigned __int64 next
unsigned long have[34816]
union bdf_property_t_::@4231 value
ActualNumberDriverObjects * sizeof(PDRIVER_OBJECT)) PDRIVER_OBJECT *DriverObjectList