Common Lisp the Language, 2nd Edition

Next: Character Conversions Up: Characters Previous: Predicates on Characters

# 13.3. Character Construction and Selection

These functions may be used to extract attributes of a character and to construct new characters.

[Function]
`char-code char`

The argument char must be a character object. `char-code` returns the code attribute of the character object; this will be a non-negative integer less than the (normal) value of the variable `char-code-limit`.

This is usually what you need in order to treat a character as an index into a vector. The length of the vector should then be equal to `char-code-limit`. Be careful how you initialize this vector; remember that you cannot necessarily expect all non-negative integers less than `char-code-limit` to be valid character codes.

[Function]
`char-bits char`

The argument char must be a character object. `char-bits` returns the bits attribute of the character object; this will be a non-negative integer less than the (normal) value of the variable `char-bits-limit`.

X3J13 voted in March 1989 (CHARACTER-PROPOSAL) to eliminate `char-bits`.

[Function]
`char-font char`

The argument char must be a character object. `char-font` returns the font attribute of the character object; this will be a non-negative integer less than the (normal) value of the variable `char-font-limit`.

X3J13 voted in March 1989 (CHARACTER-PROPOSAL) to eliminate `char-font`.

The references to the ``normal'' values of the ``variables'' `char-code-limit`, `char-bits-limit`, and `char-font-limit` in the descriptions of `char-code`, `char-bits`, and `char-font` were an oversight on my part. Early in the design of Common Lisp they were indeed variables, but they are at present defined to be constants, and their values therefore are always normal and should not change. But this point is now moot.

[Function]
`code-char code &optional (bits 0) (font 0)`

All three arguments must be non-negative integers. If it is possible in the implementation to construct a character object whose code attribute is code, whose bits attribute is bits, and whose font attribute is font, then such an object is returned; otherwise `nil` is returned.

For any integers c, b, and f, if `(code-char c b f)` is not `nil` then

    (char-code (code-char c b f)) => c
    (char-bits (code-char c b f)) => b
    (char-font (code-char c b f)) => f

If the font and bits attributes of a character object `c` are zero, then it is the case that

    (char= (code-char (char-code c)) c)

is true.

X3J13 voted in March 1989 (CHARACTER-PROPOSAL) to eliminate the bits and font arguments from the specification of `code-char`.

[Function]
`make-char char &optional (bits 0) (font 0)`

The argument char must be a character, and bits and font must be non-negative integers. If it is possible in the implementation to construct a character object whose code attribute is the same as the code attribute of char, whose bits attribute is bits, and whose font attribute is font, then such an object is returned; otherwise `nil` is returned.

If bits and font are zero, then `make-char` cannot fail. This implies that for every character object one can ``turn off'' its bits and font attributes.

X3J13 voted in March 1989 (CHARACTER-PROPOSAL) to eliminate `make-char`.

Next: Character Conversions Up: Characters Previous: Predicates on Characters