[README.fonts]

Fonts need to suit the needs of X11, QT and konsole.


* the font has to be fixed width.

  This requierement originate both from X11 and
  the way QT and konsole uses it together with
  the very idea of what a terminal emulation is
  about.

  Basically, a terminal emulation is to display
  a character cell oriented screen, meaning that
  all characters in the same column line up
  properly under each other.

  Though one could make this with a variable
  width font (which are preferably used in text
  processing) the outcome would look very poor,
  since the glyphs would have to be placed into
  a cell fitting the widest character in the
  font, which is typically more than two times
  wider than the narrowest glyph. Imagine a text
  with  l  o  t  s     o  f     s  p  a  c  e  s
  inserted between each character to get the idea.

  Further, doing this with a variable width font
  means to do some operations that slow down the
  whole display refreshing dramatically. X11/QT
  performs very poor when one draws characters
  individually while additionally clearing
  background regions instead of drawing a complete
  string (as konsole does). If one draws a string
  with a variable width font, it is of course 
  typeset by X11 variable width, not longer
  conforming to the character cell model of a
  terminal emulation.

  So from both perspectives, variable width fonts
  are unsuited for terminal emulation purposes.


* the font has to contain some graphical characters

  Many full screen applications make use of these
  characters to draw boxes, scroll bars and likely
  pseudo graphical entities.

  Using fonts without this capabilities means to
  break the visual apearence of these products.

  As a minimum the following glyphs have to be
  included within a font to become usable:

  - 0x0b U+2518 : BOX DRAWINGS LIGHT UP AND LEFT
  - 0x0c U+2510 : BOX DRAWINGS LIGHT DOWN AND LEFT
  - 0x0d U+250c : BOX DRAWINGS LIGHT DOWN AND RIGHT
  - 0x0e U+2514 : BOX DRAWINGS LIGHT UP AND RIGHT
  - 0x0f U+253c : BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
  - 0x12 U+2500 : BOX DRAWINGS LIGHT HORIZONTAL (scan line 5)
  - 0x15 U+251c : BOX DRAWINGS LIGHT VERTICAL AND RIGHT
  - 0x16 U+2524 : BOX DRAWINGS LIGHT VERTICAL AND LEFT
  - 0x17 U+2534 : BOX DRAWINGS LIGHT UP AND HORIZONTAL
  - 0x18 U+252c : BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
  - 0x19 U+2502 : BOX DRAWINGS LIGHT VERTICAL

  - 0x01 U+25c6 : BLACK DIAMOND
  - 0x02 U+2592 : MEDIUM SHADE
  - 0x1F U+00b7 : MIDDLE DOT

  The following graphical glyphs are defined in
  VT100 fonts, too, but are not used in any program
  i know about. Codes for them have been assigned
  in the private unicode page. See the linux kernel
  documentation file [unicode.txt] about this assignment.

  - 0x10 U+f800 : DEC VT GRAPHICS HORIZONTAL LINE SCAN 1
  - 0x11 U+f801 : DEC VT GRAPHICS HORIZONTAL LINE SCAN 3
  - 0x13 U+f803 : DEC VT GRAPHICS HORIZONTAL LINE SCAN 7
  - 0x14 U+f804 : DEC VT GRAPHICS HORIZONTAL LINE SCAN 9

  Also, the VT100 knows about the following glyphs,
  though omitting them is unlikely to break anything.

  - 0x07 U+00b0 : DEGREE SIGN
  - 0x08 U+00b1 : PLUS-MINUS SIGN
  - 0x1a U+2264 : LESS THAN OR EQUAL TO
  - 0x1b U+2265 : GREATER THAN OR EQUAL TO
  - 0x1c U+03c0 : GREEK SMALL LETTER PI
  - 0x1d U+2260 : NOT EQUAL TO
  - 0x1e U+00a3 : POUND SIGN

  Additionally, digraphs are provided for some
  of the control characters by VT100, too.

  - 0x03 U+2409 : DIGRAPH HT
  - 0x04 U+240c : DIGRAPH FF
  - 0x05 U+240d : DIGRAPH CR
  - 0x06 U+240a : DIGRAPH LF
  - 0x09 U+240d : DIGRAPH NL
  - 0x0a U+240b : DIGRAPH VT

  The mapping of non-iso10646 fonts is extended by konsole
  with the regular xterm fixed font placement of these
  glyphs to 0x00-0x1f.


* Iso10646 fonts needs to have a fall back character
  to be properly assigned.

  Use the "DEFAULT_CHAR" property with bdf fonts
  to do so. Other font representations provide
  likely means. The unicode assignment is U+fffd.

  If such a character isn't defined, X11 might
  choose to void the character completely, causing
  inconsistent appearence when refreshing the screen.

  One may choose the space glyph to hide the flaw
  or a box like one to exhibit it.
