## Characters

### C Reference

#### C types

C character types

##### Type names

- ecl_character
- character
- ecl_base_char
- base-char

##### Description

&ECL; defines two C types to hold its characters: ecl_base_char and ecl_character.

- When &ECL; is built without Unicode, they both coincide and typically match unsigned char, to cover the 256 codes that are needed.

- When &ECL; is built with Unicode, the two types are no longer equivalent, with ecl_character being larger.

For your code to be portable and future proof, use both types to really express what you intend to do.

#### Constructors

Creating and extracting characters from Lisp objects

##### Functions and macros

    	  cl_object ECL_CODE_CHAR
    	  ecl_character code

    	  ecl_character ECL_CHAR_CODE
    	  cl_object o

    	  cl_object ecl_char_code
    	  ecl_character code

    	  ecl_base_char ecl_base_char_code
    	  cl_object o

##### Description

These functions and macros convert back and forth from C character types to Lisp. The macros `ECL_CHAR_CODE` and `ECL_CODE_CHAR` perform this coercion without checking the arguments. The functions `ecl_char_code` and `ecl_base_char_code`, on the other hand, verify that the argument has the right type and signal an error otherwise.

#### Predicates

C predicates for Lisp characters

##### Functions and macros

    	  bool ecl_base_char_p
    	  ecl_character c

    	  bool ecl_alpha_char_p
    	  ecl_character c

    	  bool ecl_alphanumeric_p
    	  ecl_character c

    	  bool ecl_graphic_char_p
    	  ecl_character c

    	  bool ecl_digit_p
    	  ecl_character c

    	  bool ecl_standard_char_p
    	  ecl_character c

##### Description

These functions are equivalent to their Lisp equivalents but return C booleans.

#### Character case

C functions related to the character case

##### Functions and macros

    	  bool ecl_upper_case_p
    	  ecl_character c

    	  bool ecl_lower_case_p
    	  ecl_character c

    	  bool ecl_both_case_p
    	  ecl_character c

    	  ecl_character ecl_char_downcase
    	  ecl_character c

    	  ecl_character ecl_char_upcase
    	  ecl_character c

##### Description

These functions check or change the case of a character. Note that in an Unicode context, the output of these functions might not be accurate (for instance when the uppercase character has two or more codepoints).

#### ANSI Dictionary

&ANSI-C-Dict;

- Lisp symbol
- C function
- char=
- `cl_object cl_charE(cl_narg narg, ...)`
- char/=
- `cl_object cl_charNE(cl_narg narg, ...)`
- char<
- `cl_object cl_charL(cl_narg narg, ...)`
- char>
- `cl_object cl_charG(cl_narg narg, ...)`
- char<=
- `cl_object cl_charLE(cl_narg narg, ...)`
- char>=
- `cl_object cl_charGE(cl_narg narg, ...)`
- char-equal
- `cl_object cl_char_equal(cl_narg narg, ...)`
- char-not-equal
- `cl_object cl_char_not_equal(cl_narg narg, ...)`
- char-lessp
- `cl_object cl_char_lessp(cl_narg narg, ...)`
- char-greaterp
- `cl_object cl_char_greaterp(cl_narg narg, ...)`
- char-not-greaterp
- `cl_object cl_char_not_greaterp(cl_narg narg, ...)`
- char-not-lessp
- `cl_object cl_char_not_lessp(cl_narg narg, ...)`
- character
- `cl_object cl_character(cl_object char_designator)`
- characterp
- `cl_object cl_characterp(cl_object object)`
- alpha-char-p
- `cl_object cl_alpha_char_p(cl_object character)`
- alphanumericp
- `cl_object cl_alphanumericp(cl_object character)`
- digit-char
- `cl_object cl_digit_char(cl_narg narg, cl_object character, ...)`
- digit-char-p
- `cl_object cl_digit_char_p(cl_narg narg, cl_object character, ...)`
- graphic-char-p
- `cl_object cl_graphic_char_p(cl_object character)`
- standard-char-p
- `cl_object cl_standard_char_p(cl_object character)`
- char_upcase
- `cl_object cl_char_upcase(cl_object character)`
- char-downcase
- `cl_object cl_char_downcase(cl_object character)`
- upper-case-p
- `cl_object cl_upper_case_p(cl_object character)`
- lower-case-p
- `cl_object cl_lower_case_p(cl_object character)`
- both-case-p
- `cl_object cl_both_case_p(cl_object character)`
- char-code
- `cl_object cl_char_code(cl_object character)`
- char-int
- `cl_object cl_char_int(cl_object character)`
- code-char
- `cl_object cl_code_char(cl_object code)`
- char-name
- `cl_object cl_char_name(cl_object character)`
- name-char
- `cl_object cl_name_char(cl_object name)`

##### Description