Common Lisp the Language, 2nd Edition
Every character has three attributes: code, bits, and font. The code attribute is intended to distinguish among the printed glyphs and formatting functions for characters. The bits attribute allows extra flags to be associated with a character. The font attribute permits a specification of the style of the glyphs (such as italics).
The treatment of character attributes in Common Lisp has not been entirely successful. The font attribute has not been widely used, for two reasons. First, a single integer, limited in most implementations to 255 at most, is not an adequate, convenient, or portable representation for a font. Second, in many applications where font information matters it is more convenient or more efficient to represent font information as shift codes that apply to many characters, rather than attaching font information separately to each character.
As for the bits attribute, it was intended to support character input from extended keyboards having extra ``shift'' keys. This, in turn, was imagined to support the programming of a portable EMACS-like editor in Common Lisp. (The EMACS command set is most convenient when the keyboard has separate ``control'' and ``meta'' keys.) The bits attribute has been used in the implementation of such editors and other interactive interfaces. However, software that relies crucially on these extended characters will not be portable to Common Lisp implementations that do not support them.
X3J13 voted in March 1989 (CHARACTER-PROPOSAL) and in June 1989 (MORE-CHARACTER-PROPOSAL) to revise considerably the treatment of characters in the language. The bits and font attributes are eliminated; instead a character may have implementation-defined attributes. The treatment of such attributes by existing character-handling functions is carefully constrained by certain rules.
Implementations are free to
continue to support bits and font attributes, but they are
formally regarded as implementation-defined attributes.
The rules are generally consistent with the previous
treatment of the bits and font attributes.
My guess is that
the font attribute as currently defined will wither away,
but the bits attribute as defined by the first edition will
continue to be supported as a de facto standard extension,
because it fills a useful small purpose.
The value of char-code-limit is a non-negative integer that is the upper exclusive bound on values produced by the function char-code, which returns the code component of a given character; that is, the values returned by char-code are non-negative and strictly less than the value of char-code-limit.
Common Lisp does not at present explicitly guarantee that all integers between zero and the value of char-code-limit are valid character codes, and so it is wise in any case for the programmer to assume that the space of assigned character codes may be sparse.
The value of char-font-limit is a non-negative integer that is the upper exclusive bound on values produced by the function char-font, which returns the font component of a given character; that is, the values returned by char-font are non-negative and strictly less than the value of char-font-limit.
X3J13 voted in March 1989 (CHARACTER-PROPOSAL) to eliminate char-font-limit.
Experience has shown that numeric codes are not an especially
convenient, let alone portable, representation for font information.
A system based on typeface names, type styles, and point sizes would be much better.
(Macintosh software developers made the same discovery and have recently
converted to a new font identification scheme.)
The value of char-bits-limit is a non-negative integer that is the upper exclusive bound on values produced by the function char-bits, which returns the bits component of a given character; that is, the values returned by char-bits are non-negative and strictly less than the value of char-bits-limit. Note that the value of char-bits-limit will be a power of 2.
X3J13 voted in March 1989 (CHARACTER-PROPOSAL) to eliminate char-bits-limit.