149 lines
5.6 KiB
Plaintext
149 lines
5.6 KiB
Plaintext
FreeType font driver for BDF fonts
|
|
|
|
Francesco Zappa Nardelli
|
|
<francesco.zappa.nardelli@ens.fr>
|
|
|
|
|
|
Introduction
|
|
************
|
|
|
|
BDF (Bitmap Distribution Format) is a bitmap font format defined by Adobe,
|
|
which is intended to be easily understood by both humans and computers.
|
|
This code implements a BDF driver for the FreeType library, following the
|
|
Adobe Specification V 2.2. The specification of the BDF font format is
|
|
available from Adobe's web site:
|
|
|
|
http://partners.adobe.com/public/developer/en/font/5005.BDF_Spec.pdf
|
|
|
|
Many good bitmap fonts in bdf format come with XFree86 (www.XFree86.org).
|
|
They do not define vertical metrics, because the X Consortium BDF
|
|
specification has removed them.
|
|
|
|
|
|
Encodings
|
|
*********
|
|
|
|
The variety of encodings that accompanies bdf fonts appears to encompass the
|
|
small set defined in freetype.h. On the other hand, two properties that
|
|
specify encoding and registry are usually defined in bdf fonts.
|
|
|
|
I decided to make these two properties directly accessible, leaving to the
|
|
client application the work of interpreting them. For instance:
|
|
|
|
|
|
#include FT_INTERNAL_BDF_TYPES_H
|
|
|
|
FT_Face face;
|
|
BDF_Public_Face bdfface;
|
|
|
|
|
|
FT_New_Face( library, ..., &face );
|
|
|
|
bdfface = (BDF_Public_Face)face;
|
|
|
|
if ( ( bdfface->charset_registry == "ISO10646" ) &&
|
|
( bdfface->charset_encoding == "1" ) )
|
|
[..]
|
|
|
|
|
|
Thus the driver always exports `ft_encoding_none' as face->charmap.encoding.
|
|
FT_Get_Char_Index's behavior is unmodified, that is, it converts the ULong
|
|
value given as argument into the corresponding glyph number.
|
|
|
|
If the two properties are not available, Adobe Standard Encoding should be
|
|
assumed.
|
|
|
|
|
|
Anti-Aliased Bitmaps
|
|
********************
|
|
|
|
The driver supports an extension to the BDF format as used in Mark Leisher's
|
|
xmbdfed bitmap font editor. Microsoft's SBIT tool expects bitmap fonts in
|
|
that format for adding anti-aliased them to TrueType fonts. It introduces a
|
|
fourth field to the `SIZE' keyword which gives the bpp value (bits per
|
|
pixel) of the glyph data in the font. Possible values are 1 (the default),
|
|
2 (four gray levels), 4 (16 gray levels), and 8 (256 gray levels). The
|
|
driver returns either a bitmap with 1 bit per pixel or a pixmap with 8bits
|
|
per pixel (using 4, 16, and 256 gray levels, respectively).
|
|
|
|
|
|
Known problems
|
|
**************
|
|
|
|
- A font is entirely loaded into memory. Obviously, this is not the Right
|
|
Thing(TM). If you have big fonts I suggest you convert them into PCF
|
|
format (using the bdftopcf utility): the PCF font drive of FreeType can
|
|
perform incremental glyph loading.
|
|
|
|
When I have some time, I will implement on-demand glyph parsing.
|
|
|
|
- Except for encodings properties, client applications have no visibility of
|
|
the PCF_Face object. This means that applications cannot directly access
|
|
font tables and must trust FreeType.
|
|
|
|
- Currently, glyph names are ignored.
|
|
|
|
I plan to give full visibility of the BDF_Face object in an upcoming
|
|
revision of the driver, thus implementing also glyph names.
|
|
|
|
- As I have never seen a BDF font that defines vertical metrics, vertical
|
|
metrics are (parsed and) discarded. If you own a BDF font that defines
|
|
vertical metrics, please let me know (I will implement them in 5-10
|
|
minutes).
|
|
|
|
|
|
License
|
|
*******
|
|
|
|
Copyright (C) 2001-2002 by Francesco Zappa Nardelli
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
a copy of this software and associated documentation files (the
|
|
"Software"), to deal in the Software without restriction, including
|
|
without limitation the rights to use, copy, modify, merge, publish,
|
|
distribute, sublicense, and/or sell copies of the Software, and to
|
|
permit persons to whom the Software is furnished to do so, subject to
|
|
the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be
|
|
included in all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
*** Portions of the driver (that is, bdflib.c and bdf.h):
|
|
|
|
Copyright 2000 Computing Research Labs, New Mexico State University
|
|
Copyright 2001-2002, 2011 Francesco Zappa Nardelli
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a
|
|
copy of this software and associated documentation files (the "Software"),
|
|
to deal in the Software without restriction, including without limitation
|
|
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
and/or sell copies of the Software, and to permit persons to whom the
|
|
Software is furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
THE COMPUTING RESEARCH LAB OR NEW MEXICO STATE UNIVERSITY BE LIABLE FOR ANY
|
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
|
|
OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
|
|
THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
|
|
Credits
|
|
*******
|
|
|
|
This driver is based on excellent Mark Leisher's bdf library. If you
|
|
find something good in this driver you should probably thank him, not
|
|
me.
|