FONT(7)                                                   FONT(7)

     NAME
          font, subfont - external format for fonts and subfonts

     SYNOPSIS
          #include <draw.h>

     DESCRIPTION
          Fonts and subfonts are described in cachechars(3).

          External bitmap fonts are described by a plain text file
          that can be read using openfont. The format of the file is a
          header followed by any number of subfont range specifica-
          tions.  The header contains two numbers: the height and the
          ascent, both in pixels.  The height is the inter-line spac-
          ing and the ascent is the distance from the top of the line
          to the baseline.  These numbers are chosen to display con-
          sistently 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 readsubfont (see 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.

          External subfonts are represented in a more rigid format
          that can be read and written using readsubfont and
          writesubfont (see subfont(3)). The format for subfont files
          is: an image containing character glyphs, followed by a sub-
          font header, followed by character information.  The image
          has the format for external image files described in
          image(7). 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 consists of n+1 6-byte entries, each giving
          the Fontchar x (2 bytes, low order byte first), top, bottom,
          left, and width.  The x field of the last Fontchar is used
          to calculate the image width of the previous character; the
          other fields in the last Fontchar are irrelevant.

          Note that the convention of using the character with value
          zero (NUL) to represent characters of zero width (see
          draw(3)) means that fonts should have, as their zeroth char-
          acter, one with non-zero width.

        Font Names

     Page 1                       Plan 9             (printed 3/28/24)

     FONT(7)                                                   FONT(7)

          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:

               /lib/font/bit/name/range.size.font

          where size is approximately the height in pixels of the
          lower case letters (without ascenders or descenders).  Range
          gives some indication of which characters will be available:
          for example ascii, latin1, euro, or unicode.  Euro includes
          most European languages, punctuation marks, the Interna-
          tional Phonetic Alphabet, etc., but no Oriental languages.
          Unicode includes every character for which appropriate-sized
          images exist on the system.

          In Plan 9 from User Space, the font files are rooted in
          $PLAN9/font instead of /lib/font/bit, but to keep old refer-
          ences working, paths beginning with /lib/font/bit are inter-
          preted as references to the actual font directory.

          Fonts need not be stored on disk in the Plan 9 format.  If
          the font name has the form /mnt/font/name/size/font, fontsrv
          is invoked to synthesize a bitmap font from the operating
          system's installed vector fonts.  The command fontsrv -p .
          lists the available fonts.  See fontsrv(4) for more.

          If the font name has the form scale*fontname, where scale is
          a small decimal integer, the fontname is loaded and then
          scaled by pixel repetition.

          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 fontsrv(4) are
          automatically doubled in size by varying the effective 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.

          For more control over the fonts used on low- and high-
          density displays, if the font name has the form
          lowfont,highfont, lowfont is used on low-density displays
          and highfont on high-density displays.  In effect, the
          behavior described above is that the font name

               /lib/font/bit/lucsans/euro.8.font

          really means

               /lib/font/bit/lucsans/euro.8.font,2*/lib/font/bit/lucsans/euro.8.font

     Page 2                       Plan 9             (printed 3/28/24)

     FONT(7)                                                   FONT(7)

          and similarly

               /mnt/font/LucidaGrande/15a/font

          really means

               /mnt/font/LucidaGrande/15a/font,/mnt/font/LucidaGrande/30a/font

          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:

               /lib/font/bit/lucsans/euro.8.font,/mnt/font/LucidaGrande/30a/font

     FILES
          /usr/local/plan9/font/*  font directories

     SEE ALSO
          graphics(3), draw(3), cachechars(3), subfont(3)

     Page 3                       Plan 9             (printed 3/28/24)