FONT(6) FONT(6)
NAME
font, subfont - external format for character fonts and
subfonts
DESCRIPTION
Fonts are constructed as a list defining a range of Unicode
characters and a subfont containing the character images for
that range. Subfonts are not directly accessible from
Limbo.
External fonts are described by a plain text file that can
be read using Font.open; Font.build reads the same format
from a string rather than a file. (see draw-font(2)).
The format is a header followed by any number of subfont
range specifications. The header contains two numbers: the
height and the ascent, both in pixels. The height is the
inter-line spacing and the ascent is the distance from the
top of the line to the baseline. These numbers should be
chosen to display consistently all the subfonts of the font.
A subfont range specification contains two or three numbers
and a file name. The numbers are the inclusive range of
characters covered by the subfont, with an optional starting
position within the subfont, and the file name names an
external file holding the subfont data. The minimum number
of a covered range is mapped to the specified starting posi-
tion (default zero) of the corresponding subfont. If the
subfont file name does not begin with a slash, it is taken
relative to the directory containing the font file. Each
field must be followed by some white space. Each numeric
field may be C-format decimal, octal, or hexadecimal.
External subfonts are represented in a more rigid format: an
image containing character images, followed by a subfont
header, followed by character information. The image has
the format for external image files described in image(6).
The subfont header has 3 decimal strings: n, height, and
ascent. Each number is right-justified and blank padded in
11 characters, followed by a blank. The character info con-
sists of n+1 6-byte entries, each giving values called x (2
bytes, low order byte first), top, bottom, left, and width
for the successive characters from left to right (in
increasing Unicode order) in the subfont. The rectangle
holding the character is (x, top, xn, bottom), where xn is
the x field of the next character. When the character is to
be drawn in an image at point p, the rectangle is placed at
(p.x+left , p.y) and the next character to be drawn is
placed at (p.x+width , p.y) The x field of the last entry is
used to calculate the image width of the previous character;
the other fields in the last entry are irrelevant.
Page 1 Plan 9 (printed 10/27/25)
FONT(6) FONT(6)
Note that the convention of using the character with value
zero (NUL) to represent characters of zero width (see the
description of Image.text in draw-image(2)) means that fonts
should have, as their zeroth character, one with non-zero
width.
FILES
/fonts/* font directories
SEE ALSO
draw-intro(2), draw-font(2), draw(3)
Page 2 Plan 9 (printed 10/27/25)