|  | .TH FONT 7 | 
|  | .SH NAME | 
|  | font, subfont \- external format for fonts and subfonts | 
|  | .SH SYNOPSIS | 
|  | .B #include <draw.h> | 
|  | .SH DESCRIPTION | 
|  | Fonts and subfonts are described in | 
|  | .IR cachechars (3). | 
|  | .PP | 
|  | External bitmap fonts are described by a plain text file that can be read using | 
|  | .IR openfont . | 
|  | The format of the file 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 are 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 suitable for | 
|  | .I readsubfont | 
|  | (see | 
|  | .IR graphics (3)). | 
|  | The minimum number of a covered range is mapped to the specified starting position | 
|  | (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. | 
|  | .PP | 
|  | External subfonts are represented in a more rigid format | 
|  | that can be read and written using | 
|  | .I readsubfont | 
|  | and | 
|  | .I writesubfont | 
|  | (see | 
|  | .IR subfont (3)). | 
|  | The format for subfont files is: an image containing character glyphs, | 
|  | followed by a subfont header, followed by character information. | 
|  | The image has the format for external image files described in | 
|  | .IR image (7). | 
|  | The subfont header has 3 | 
|  | decimal strings: | 
|  | .BR n , | 
|  | .BR height , | 
|  | and | 
|  | .BR ascent . | 
|  | Each number is right-justified and blank padded in 11 characters, followed by a blank. | 
|  | The character | 
|  | .B info | 
|  | consists of | 
|  | .BR n +1 | 
|  | 6-byte entries, each giving the | 
|  | .B Fontchar | 
|  | .B x | 
|  | (2 bytes, low order byte first), | 
|  | .BR top , | 
|  | .BR bottom , | 
|  | .BR left , | 
|  | and | 
|  | .BR width . | 
|  | The | 
|  | .B x | 
|  | field of the last | 
|  | .B Fontchar | 
|  | is used to calculate the image width | 
|  | of the previous character; the other fields in the last | 
|  | .B Fontchar | 
|  | are irrelevant. | 
|  | .PP | 
|  | Note that the convention of using the character with value zero (NUL) to represent | 
|  | characters of zero width (see | 
|  | .IR draw (3)) | 
|  | means that fonts should have, as their zeroth character, | 
|  | one with non-zero width. | 
|  | .SS "Font Names | 
|  | .PP | 
|  | Font names in Plan 9 from User Space are | 
|  | a small language describing a font. | 
|  | The most basic form is the name of an existing bitmap font file, | 
|  | following the convention: | 
|  | .IP | 
|  | .B /lib/font/bit/\fIname\fP/\fIrange\fP.\fIsize\fP.font | 
|  | .PD | 
|  | .PP | 
|  | where | 
|  | .I size | 
|  | is approximately the height in pixels of the lower case letters | 
|  | (without ascenders or descenders). | 
|  | .I Range | 
|  | gives some indication of which characters will be available: for example | 
|  | .BR ascii , | 
|  | .BR latin1 , | 
|  | .BR euro , | 
|  | or | 
|  | .BR unicode . | 
|  | .B Euro | 
|  | includes most European languages, punctuation marks, the International Phonetic | 
|  | Alphabet, etc., but no Oriental languages. | 
|  | .B Unicode | 
|  | includes every character for which appropriate-sized images exist on the system. | 
|  | .PP | 
|  | In Plan 9 from User Space, the font files are rooted in | 
|  | .B $PLAN9/font | 
|  | instead of | 
|  | .BR /lib/font/bit , | 
|  | but to keep old references working, paths beginning with | 
|  | .B /lib/font/bit | 
|  | are interpreted as references to the actual font directory. | 
|  | .PP | 
|  | Fonts need not be stored on disk in the Plan 9 format. | 
|  | If the font name has the form | 
|  | .BR /mnt/font/\fIname\fP/\fIsize\fP/font , | 
|  | .I fontsrv | 
|  | is invoked to synthesize a bitmap font from the operating system's installed vector fonts. | 
|  | The command | 
|  | .B fontsrv | 
|  | .B -p | 
|  | .B . | 
|  | lists the available fonts. | 
|  | See | 
|  | .IR fontsrv (4) | 
|  | for more. | 
|  | .PP | 
|  | If the font name has the form | 
|  | .BR \fIscale\fP*\fIfontname\fP , | 
|  | where | 
|  | .I scale | 
|  | is a small decimal integer, the | 
|  | .I fontname | 
|  | is loaded and then scaled by pixel repetition. | 
|  | .PP | 
|  | The Plan 9 bitmap fonts were designed for screens with pixel density around 100 DPI. | 
|  | When used on screens with pixel density above 200 DPI, | 
|  | the bitmap fonts are automatically pixel doubled. | 
|  | Similarly, fonts loaded from | 
|  | .IR fontsrv (4) | 
|  | are automatically doubled in size by varying the effective | 
|  | .I size | 
|  | path element. | 
|  | In both cases, the effect is that a single font name | 
|  | can be used on both low- and high-density displays (or even in a window moved between differing displays) | 
|  | while keeping roughly the same effective size. | 
|  | .PP | 
|  | For more control over the fonts used on low- and high-density displays, | 
|  | if the font name has the form | 
|  | .BR \fIlowfont\fP,\fIhighfont\fP , | 
|  | .I lowfont | 
|  | is used on low-density displays and | 
|  | .I highfont | 
|  | on high-density displays. | 
|  | In effect, the behavior described above is that the font name | 
|  | .IP | 
|  | .B /lib/font/bit/lucsans/euro.8.font | 
|  | .PD | 
|  | .PP | 
|  | really means | 
|  | .IP | 
|  | .B /lib/font/bit/lucsans/euro.8.font,2*/lib/font/bit/lucsans/euro.8.font | 
|  | .PD | 
|  | .PP | 
|  | and similarly | 
|  | .IP | 
|  | .B /mnt/font/LucidaGrande/15a/font | 
|  | .PD | 
|  | .PP | 
|  | really means | 
|  | .IP | 
|  | .B /mnt/font/LucidaGrande/15a/font,/mnt/font/LucidaGrande/30a/font | 
|  | .PD | 
|  | .PP | 
|  | Using an explicit comma-separated font pair allows finer control, such as | 
|  | using a Plan 9 bitmap font on low-density displays but switching to | 
|  | a system-installed vector font on high-density displays: | 
|  | .IP | 
|  | .B /lib/font/bit/lucsans/euro.8.font,/mnt/font/LucidaGrande/30a/font | 
|  | .PD | 
|  | .PP | 
|  | .SH FILES | 
|  | .TF \*9/font/* | 
|  | .TP | 
|  | .B \*9/font/* | 
|  | font directories | 
|  | .SH "SEE ALSO" | 
|  | .IR graphics (3), | 
|  | .IR draw (3), | 
|  | .IR cachechars (3), | 
|  | .IR subfont (3) |