ReactOS  0.4.15-dev-2534-geba00d1
bdf.h File Reference
#include <ft2build.h>
Include dependency graph for bdf.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  bdf_options_t_
 
struct  bdf_property_t_
 
struct  bdf_bbx_t_
 
struct  bdf_glyph_t_
 
struct  bdf_glyphlist_t_
 
struct  bdf_font_t_
 

Macros

#define _bdf_glyph_modified(map, e)   ( (map)[(e) >> 5] & ( 1UL << ( (e) & 31 ) ) )
 
#define _bdf_set_glyph_modified(map, e)   ( (map)[(e) >> 5] |= ( 1UL << ( (e) & 31 ) ) )
 
#define _bdf_clear_glyph_modified(map, e)   ( (map)[(e) >> 5] &= ~( 1UL << ( (e) & 31 ) ) )
 
#define BDF_CORRECT_METRICS   0x01 /* Correct invalid metrics when loading. */
 
#define BDF_KEEP_COMMENTS   0x02 /* Preserve the font comments. */
 
#define BDF_KEEP_UNENCODED   0x04 /* Keep the unencoded glyphs. */
 
#define BDF_PROPORTIONAL   0x08 /* Font has proportional spacing. */
 
#define BDF_MONOWIDTH   0x10 /* Font has mono width. */
 
#define BDF_CHARCELL   0x20 /* Font has charcell spacing. */
 
#define BDF_ALL_SPACING
 
#define BDF_DEFAULT_LOAD_OPTIONS
 
#define BDF_ATOM   1
 
#define BDF_INTEGER   2
 
#define BDF_CARDINAL   3
 
#define BDF_MISSING_START   -1
 
#define BDF_MISSING_FONTNAME   -2
 
#define BDF_MISSING_SIZE   -3
 
#define BDF_MISSING_CHARS   -4
 
#define BDF_MISSING_STARTCHAR   -5
 
#define BDF_MISSING_ENCODING   -6
 
#define BDF_MISSING_BBX   -7
 
#define BDF_OUT_OF_MEMORY   -20
 
#define BDF_INVALID_LINE   -100
 

Typedefs

typedef struct bdf_options_t_ bdf_options_t
 
typedef int(* bdf_options_callback_t) (bdf_options_t *opts, char **params, unsigned long nparams, void *client_data)
 
typedef struct bdf_property_t_ bdf_property_t
 
typedef struct bdf_bbx_t_ bdf_bbx_t
 
typedef struct bdf_glyph_t_ bdf_glyph_t
 
typedef struct bdf_glyphlist_t_ bdf_glyphlist_t
 
typedef struct bdf_font_t_ bdf_font_t
 

Functions

 bdf_load_font (FT_Stream stream, FT_Memory memory, bdf_options_t *opts, bdf_font_t **font)
 
 bdf_free_font (bdf_font_t *font)
 
 bdf_get_property (char *name, bdf_font_t *font)
 
 bdf_get_font_property (bdf_font_t *font, const char *name)
 

Macro Definition Documentation

◆ _bdf_clear_glyph_modified

#define _bdf_clear_glyph_modified (   map,
  e 
)    ( (map)[(e) >> 5] &= ~( 1UL << ( (e) & 31 ) ) )

Definition at line 48 of file bdf.h.

◆ _bdf_glyph_modified

#define _bdf_glyph_modified (   map,
  e 
)    ( (map)[(e) >> 5] & ( 1UL << ( (e) & 31 ) ) )

Definition at line 44 of file bdf.h.

◆ _bdf_set_glyph_modified

#define _bdf_set_glyph_modified (   map,
  e 
)    ( (map)[(e) >> 5] |= ( 1UL << ( (e) & 31 ) ) )

Definition at line 46 of file bdf.h.

◆ BDF_ALL_SPACING

#define BDF_ALL_SPACING
Value:
BDF_MONOWIDTH | \
BDF_CHARCELL )
#define BDF_PROPORTIONAL
Definition: bdf.h:64

Definition at line 68 of file bdf.h.

◆ BDF_ATOM

#define BDF_ATOM   1

Definition at line 103 of file bdf.h.

◆ BDF_CARDINAL

#define BDF_CARDINAL   3

Definition at line 105 of file bdf.h.

◆ BDF_CHARCELL

#define BDF_CHARCELL   0x20 /* Font has charcell spacing. */

Definition at line 66 of file bdf.h.

◆ BDF_CORRECT_METRICS

#define BDF_CORRECT_METRICS   0x01 /* Correct invalid metrics when loading. */

Definition at line 61 of file bdf.h.

◆ BDF_DEFAULT_LOAD_OPTIONS

#define BDF_DEFAULT_LOAD_OPTIONS
Value:
BDF_KEEP_COMMENTS | \
BDF_KEEP_UNENCODED | \
BDF_PROPORTIONAL )
#define BDF_CORRECT_METRICS
Definition: bdf.h:61

Definition at line 72 of file bdf.h.

◆ BDF_INTEGER

#define BDF_INTEGER   2

Definition at line 104 of file bdf.h.

◆ BDF_INVALID_LINE

#define BDF_INVALID_LINE   -100

Definition at line 247 of file bdf.h.

◆ BDF_KEEP_COMMENTS

#define BDF_KEEP_COMMENTS   0x02 /* Preserve the font comments. */

Definition at line 62 of file bdf.h.

◆ BDF_KEEP_UNENCODED

#define BDF_KEEP_UNENCODED   0x04 /* Keep the unencoded glyphs. */

Definition at line 63 of file bdf.h.

◆ BDF_MISSING_BBX

#define BDF_MISSING_BBX   -7

Definition at line 243 of file bdf.h.

◆ BDF_MISSING_CHARS

#define BDF_MISSING_CHARS   -4

Definition at line 240 of file bdf.h.

◆ BDF_MISSING_ENCODING

#define BDF_MISSING_ENCODING   -6

Definition at line 242 of file bdf.h.

◆ BDF_MISSING_FONTNAME

#define BDF_MISSING_FONTNAME   -2

Definition at line 238 of file bdf.h.

◆ BDF_MISSING_SIZE

#define BDF_MISSING_SIZE   -3

Definition at line 239 of file bdf.h.

◆ BDF_MISSING_START

#define BDF_MISSING_START   -1

Definition at line 237 of file bdf.h.

◆ BDF_MISSING_STARTCHAR

#define BDF_MISSING_STARTCHAR   -5

Definition at line 241 of file bdf.h.

◆ BDF_MONOWIDTH

#define BDF_MONOWIDTH   0x10 /* Font has mono width. */

Definition at line 65 of file bdf.h.

◆ BDF_OUT_OF_MEMORY

#define BDF_OUT_OF_MEMORY   -20

Definition at line 245 of file bdf.h.

◆ BDF_PROPORTIONAL

#define BDF_PROPORTIONAL   0x08 /* Font has proportional spacing. */

Definition at line 64 of file bdf.h.

Typedef Documentation

◆ bdf_bbx_t

◆ bdf_font_t

◆ bdf_glyph_t

◆ bdf_glyphlist_t

◆ bdf_options_callback_t

typedef int(* bdf_options_callback_t) (bdf_options_t *opts, char **params, unsigned long nparams, void *client_data)

Definition at line 90 of file bdf.h.

◆ bdf_options_t

◆ bdf_property_t

Function Documentation

◆ bdf_free_font()

bdf_free_font ( bdf_font_t font)

Definition at line 2366 of file bdflib.c.

2367  {
2368  bdf_property_t* prop;
2369  unsigned long i;
2371  FT_Memory memory;
2372 
2373 
2374  if ( font == 0 )
2375  return;
2376 
2377  memory = font->memory;
2378 
2379  FT_FREE( font->name );
2380 
2381  /* Free up the internal hash table of property names. */
2382  if ( font->internal )
2383  {
2384  ft_hash_str_free( (FT_Hash)font->internal, memory );
2385  FT_FREE( font->internal );
2386  }
2387 
2388  /* Free up the comment info. */
2389  FT_FREE( font->comments );
2390 
2391  /* Free up the properties. */
2392  for ( i = 0; i < font->props_size; i++ )
2393  {
2394  if ( font->props[i].format == BDF_ATOM )
2395  FT_FREE( font->props[i].value.atom );
2396  }
2397 
2398  FT_FREE( font->props );
2399 
2400  /* Free up the character info. */
2401  for ( i = 0, glyphs = font->glyphs;
2402  i < font->glyphs_used; i++, glyphs++ )
2403  {
2404  FT_FREE( glyphs->name );
2405  FT_FREE( glyphs->bitmap );
2406  }
2407 
2408  for ( i = 0, glyphs = font->unencoded; i < font->unencoded_used;
2409  i++, glyphs++ )
2410  {
2411  FT_FREE( glyphs->name );
2412  FT_FREE( glyphs->bitmap );
2413  }
2414 
2415  FT_FREE( font->glyphs );
2416  FT_FREE( font->unencoded );
2417 
2418  /* Free up the overflow storage if it was used. */
2419  for ( i = 0, glyphs = font->overflow.glyphs;
2420  i < font->overflow.glyphs_used; i++, glyphs++ )
2421  {
2422  FT_FREE( glyphs->name );
2423  FT_FREE( glyphs->bitmap );
2424  }
2425 
2426  FT_FREE( font->overflow.glyphs );
2427 
2428  /* bdf_cleanup */
2429  ft_hash_str_free( &(font->proptbl), memory );
2430 
2431  /* Free up the user defined properties. */
2432  for ( prop = font->user_props, i = 0;
2433  i < font->nuser_props; i++, prop++ )
2434  {
2435  FT_FREE( prop->name );
2436  if ( prop->format == BDF_ATOM )
2437  FT_FREE( prop->value.atom );
2438  }
2439 
2440  FT_FREE( font->user_props );
2441 
2442  /* FREE( font ); */ /* XXX Fixme */
2443  }
Definition: mk_font.cpp:20
void ft_hash_str_free(FT_Hash hash, FT_Memory memory)
Definition: fthash.c:212
char * name
Definition: bdf.h:112
int format
Definition: bdf.h:113
static UINT UINT LPWORD glyphs
Definition: font.c:44
static char memory[1024 *256]
Definition: process.c:116
#define BDF_ATOM
Definition: bdf.h:103
#define FT_FREE(ptr)
Definition: ftmemory.h:329
char * atom
Definition: bdf.h:117
union bdf_property_t_::@4011 value
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:66
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
Definition: glfuncs.h:248

Referenced by BDF_Face_Done(), and bdf_load_font().

◆ bdf_get_font_property()

bdf_get_font_property ( bdf_font_t font,
const char name 
)

Definition at line 2447 of file bdflib.c.

2449  {
2450  size_t* propid;
2451 
2452 
2453  if ( font == 0 || font->props_size == 0 || name == 0 || *name == 0 )
2454  return 0;
2455 
2456  propid = ft_hash_str_lookup( name, (FT_Hash)font->internal );
2457 
2458  return propid ? ( font->props + *propid ) : 0;
2459  }
Definition: mk_font.cpp:20
size_t * ft_hash_str_lookup(const char *key, FT_Hash hash)
Definition: fthash.c:314
Definition: name.c:38

Referenced by _bdf_parse_properties(), BDF_Face_Init(), bdf_get_bdf_property(), and bdf_interpret_style().

◆ bdf_get_property()

bdf_get_property ( char name,
bdf_font_t font 
)

Definition at line 884 of file bdflib.c.

886  {
887  size_t* propid;
888 
889 
890  if ( name == 0 || *name == 0 )
891  return 0;
892 
893  if ( ( propid = ft_hash_str_lookup( name, &(font->proptbl) ) ) == NULL )
894  return 0;
895 
896  if ( *propid >= _num_bdf_properties )
897  return font->user_props + ( *propid - _num_bdf_properties );
898 
899  return (bdf_property_t*)_bdf_properties + *propid;
900  }
Definition: mk_font.cpp:20
size_t * ft_hash_str_lookup(const char *key, FT_Hash hash)
Definition: fthash.c:314
static const unsigned long _num_bdf_properties
Definition: bdflib.c:168
#define NULL
Definition: types.h:112
Definition: name.c:38
static const bdf_property_t _bdf_properties[]
Definition: bdflib.c:80

Referenced by _bdf_is_atom().

◆ bdf_load_font()

bdf_load_font ( FT_Stream  stream,
FT_Memory  memory,
bdf_options_t opts,
bdf_font_t **  font 
)

Definition at line 2207 of file bdflib.c.

2211  {
2212  unsigned long lineno = 0; /* make compiler happy */
2213  _bdf_parse_t *p = NULL;
2214 
2215  FT_Memory memory = extmemory; /* needed for FT_NEW */
2217 
2218 
2219  if ( FT_NEW( p ) )
2220  goto Exit;
2221 
2222  memory = NULL;
2223  p->opts = (bdf_options_t*)( ( opts != 0 ) ? opts : &_bdf_opts );
2224  p->minlb = 32767;
2225  p->size = stream->size;
2226  p->memory = extmemory; /* only during font creation */
2227 
2228  _bdf_list_init( &p->list, extmemory );
2229 
2231  (void *)p, &lineno );
2232  if ( error )
2233  goto Fail;
2234 
2235  if ( p->font != 0 )
2236  {
2237  /* If the font is not proportional, set the font's monowidth */
2238  /* field to the width of the font bounding box. */
2239 
2240  if ( p->font->spacing != BDF_PROPORTIONAL )
2241  p->font->monowidth = p->font->bbx.width;
2242 
2243  /* If the number of glyphs loaded is not that of the original count, */
2244  /* indicate the difference. */
2245  if ( p->cnt != p->font->glyphs_used + p->font->unencoded_used )
2246  {
2247  FT_TRACE2(( "bdf_load_font: " ACMSG15, p->cnt,
2248  p->font->glyphs_used + p->font->unencoded_used ));
2249  p->font->modified = 1;
2250  }
2251 
2252  /* Once the font has been loaded, adjust the overall font metrics if */
2253  /* necessary. */
2254  if ( p->opts->correct_metrics != 0 &&
2255  ( p->font->glyphs_used > 0 || p->font->unencoded_used > 0 ) )
2256  {
2257  if ( p->maxrb - p->minlb != p->font->bbx.width )
2258  {
2259  FT_TRACE2(( "bdf_load_font: " ACMSG3,
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;
2263  }
2264 
2265  if ( p->font->bbx.x_offset != p->minlb )
2266  {
2267  FT_TRACE2(( "bdf_load_font: " ACMSG4,
2268  p->font->bbx.x_offset, p->minlb ));
2269  p->font->bbx.x_offset = p->minlb;
2270  p->font->modified = 1;
2271  }
2272 
2273  if ( p->font->bbx.ascent != p->maxas )
2274  {
2275  FT_TRACE2(( "bdf_load_font: " ACMSG5,
2276  p->font->bbx.ascent, p->maxas ));
2277  p->font->bbx.ascent = p->maxas;
2278  p->font->modified = 1;
2279  }
2280 
2281  if ( p->font->bbx.descent != p->maxds )
2282  {
2283  FT_TRACE2(( "bdf_load_font: " ACMSG6,
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;
2288  }
2289 
2290  if ( p->maxas + p->maxds != p->font->bbx.height )
2291  {
2292  FT_TRACE2(( "bdf_load_font: " ACMSG7,
2293  p->font->bbx.height, p->maxas + p->maxds ));
2294  p->font->bbx.height = (unsigned short)( p->maxas + p->maxds );
2295  }
2296 
2297  if ( p->flags & BDF_SWIDTH_ADJ_ )
2298  FT_TRACE2(( "bdf_load_font: " ACMSG8 ));
2299  }
2300  }
2301 
2302  if ( p->flags & BDF_START_ )
2303  {
2304  /* The ENDFONT field was never reached or did not exist. */
2305  if ( !( p->flags & BDF_GLYPHS_ ) )
2306  {
2307  /* Error happened while parsing header. */
2308  FT_ERROR(( "bdf_load_font: " ERRMSG2, lineno ));
2309  error = FT_THROW( Corrupted_Font_Header );
2310  goto Fail;
2311  }
2312  else
2313  {
2314  /* Error happened when parsing glyphs. */
2315  FT_ERROR(( "bdf_load_font: " ERRMSG3, lineno ));
2316  error = FT_THROW( Corrupted_Font_Glyphs );
2317  goto Fail;
2318  }
2319  }
2320 
2321  if ( p->font != 0 )
2322  {
2323  /* Make sure the comments are NULL terminated if they exist. */
2324  memory = p->font->memory;
2325 
2326  if ( p->font->comments_len > 0 )
2327  {
2328  if ( FT_RENEW_ARRAY( p->font->comments,
2329  p->font->comments_len,
2330  p->font->comments_len + 1 ) )
2331  goto Fail;
2332 
2333  p->font->comments[p->font->comments_len] = 0;
2334  }
2335  }
2336  else if ( !error )
2337  error = FT_THROW( Invalid_File_Format );
2338 
2339  *font = p->font;
2340 
2341  Exit:
2342  if ( p )
2343  {
2344  _bdf_list_done( &p->list );
2345 
2346  memory = extmemory;
2347 
2348  FT_FREE( p->glyph_name );
2349  FT_FREE( p );
2350  }
2351 
2352  return error;
2353 
2354  Fail:
2355  bdf_free_font( p->font );
2356 
2357  memory = extmemory;
2358 
2359  FT_FREE( p->font );
2360 
2361  goto Exit;
2362  }
static FT_Error _bdf_readstream(FT_Stream stream, _bdf_line_func_t callback, void *client_data, unsigned long *lno)
Definition: bdflib.c:521
int FT_Error
Definition: fttypes.h:300
#define ACMSG5
Definition: bdflib.c:192
#define ACMSG7
Definition: bdflib.c:194
#define error(str)
Definition: mkdosfs.c:1605
Definition: mk_font.cpp:20
#define ACMSG3
Definition: bdflib.c:189
#define BDF_SWIDTH_ADJ_
Definition: bdflib.c:925
return FT_Err_Ok
Definition: ftbbox.c:511
int Fail
Definition: ehthrow.cxx:24
static char memory[1024 *256]
Definition: process.c:116
static const bdf_options_t _bdf_opts
Definition: bdflib.c:62
unsigned short(__cdecl typeof(TIFFCurrentDirectory))(struct tiff *)
Definition: typeof.h:94
#define FT_ERROR(varformat)
Definition: ftdebug.h:181
#define FT_THROW(e)
Definition: ftdebug.h:213
#define ACMSG4
Definition: bdflib.c:190
static void _bdf_list_done(_bdf_list_t *list)
Definition: bdflib.c:299
#define ERRMSG2
Definition: bdflib.c:208
#define FT_FREE(ptr)
Definition: ftmemory.h:329
#define BDF_START_
Definition: bdflib.c:912
static void Exit(void)
Definition: sock.c:1331
#define FT_TRACE2(varformat)
Definition: ftdebug.h:159
#define FT_RENEW_ARRAY(ptr, curcnt, newcnt)
Definition: ftmemory.h:336
unsigned int size
Definition: parse.h:27
Definition: parse.h:22
static FT_Error _bdf_parse_start(char *line, unsigned long linelen, unsigned long lineno, void *call_data, void *client_data)
Definition: bdflib.c:1898
static void _bdf_list_init(_bdf_list_t *list, FT_Memory memory)
Definition: bdflib.c:290
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:66
#define ACMSG8
Definition: bdflib.c:195
bdf_free_font(bdf_font_t *font)
Definition: bdflib.c:2366
#define BDF_PROPORTIONAL
Definition: bdf.h:64
#define BDF_GLYPHS_
Definition: bdflib.c:917
#define NULL
Definition: types.h:112
#define ERRMSG3
Definition: bdflib.c:209
#define ACMSG6
Definition: bdflib.c:193
#define FT_NEW(ptr)
Definition: ftmemory.h:331
#define ACMSG15
Definition: bdflib.c:202
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by BDF_Face_Init().