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 3/29/24)

     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 3/29/24)