| .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) |