:mod:`curses.ascii` --- Utilities for ASCII characters
======================================================

.. module:: curses.ascii
   :synopsis: Constants and set-membership functions for ASCII characters.
.. moduleauthor:: Eric S. Raymond <esr@thyrsus.com>
.. sectionauthor:: Eric S. Raymond <esr@thyrsus.com>


The :mod:`curses.ascii` module supplies name constants for ASCII characters and
functions to test membership in various ASCII character classes.  The constants
supplied are names for control characters as follows:

+--------------+----------------------------------------------+
| Name         | Meaning                                      |
+==============+==============================================+
| :const:`NUL` |                                              |
+--------------+----------------------------------------------+
| :const:`SOH` | Start of heading, console interrupt          |
+--------------+----------------------------------------------+
| :const:`STX` | Start of text                                |
+--------------+----------------------------------------------+
| :const:`ETX` | End of text                                  |
+--------------+----------------------------------------------+
| :const:`EOT` | End of transmission                          |
+--------------+----------------------------------------------+
| :const:`ENQ` | Enquiry, goes with :const:`ACK` flow control |
+--------------+----------------------------------------------+
| :const:`ACK` | Acknowledgement                              |
+--------------+----------------------------------------------+
| :const:`BEL` | Bell                                         |
+--------------+----------------------------------------------+
| :const:`BS`  | Backspace                                    |
+--------------+----------------------------------------------+
| :const:`TAB` | Tab                                          |
+--------------+----------------------------------------------+
| :const:`HT`  | Alias for :const:`TAB`: "Horizontal tab"     |
+--------------+----------------------------------------------+
| :const:`LF`  | Line feed                                    |
+--------------+----------------------------------------------+
| :const:`NL`  | Alias for :const:`LF`: "New line"            |
+--------------+----------------------------------------------+
| :const:`VT`  | Vertical tab                                 |
+--------------+----------------------------------------------+
| :const:`FF`  | Form feed                                    |
+--------------+----------------------------------------------+
| :const:`CR`  | Carriage return                              |
+--------------+----------------------------------------------+
| :const:`SO`  | Shift-out, begin alternate character set     |
+--------------+----------------------------------------------+
| :const:`SI`  | Shift-in, resume default character set       |
+--------------+----------------------------------------------+
| :const:`DLE` | Data-link escape                             |
+--------------+----------------------------------------------+
| :const:`DC1` | XON, for flow control                        |
+--------------+----------------------------------------------+
| :const:`DC2` | Device control 2, block-mode flow control    |
+--------------+----------------------------------------------+
| :const:`DC3` | XOFF, for flow control                       |
+--------------+----------------------------------------------+
| :const:`DC4` | Device control 4                             |
+--------------+----------------------------------------------+
| :const:`NAK` | Negative acknowledgement                     |
+--------------+----------------------------------------------+
| :const:`SYN` | Synchronous idle                             |
+--------------+----------------------------------------------+
| :const:`ETB` | End transmission block                       |
+--------------+----------------------------------------------+
| :const:`CAN` | Cancel                                       |
+--------------+----------------------------------------------+
| :const:`EM`  | End of medium                                |
+--------------+----------------------------------------------+
| :const:`SUB` | Substitute                                   |
+--------------+----------------------------------------------+
| :const:`ESC` | Escape                                       |
+--------------+----------------------------------------------+
| :const:`FS`  | File separator                               |
+--------------+----------------------------------------------+
| :const:`GS`  | Group separator                              |
+--------------+----------------------------------------------+
| :const:`RS`  | Record separator, block-mode terminator      |
+--------------+----------------------------------------------+
| :const:`US`  | Unit separator                               |
+--------------+----------------------------------------------+
| :const:`SP`  | Space                                        |
+--------------+----------------------------------------------+
| :const:`DEL` | Delete                                       |
+--------------+----------------------------------------------+

Note that many of these have little practical significance in modern usage.  The
mnemonics derive from teleprinter conventions that predate digital computers.

The module supplies the following functions, patterned on those in the standard
C library:


.. function:: isalnum(c)

   Checks for an ASCII alphanumeric character; it is equivalent to ``isalpha(c) or
   isdigit(c)``.


.. function:: isalpha(c)

   Checks for an ASCII alphabetic character; it is equivalent to ``isupper(c) or
   islower(c)``.


.. function:: isascii(c)

   Checks for a character value that fits in the 7-bit ASCII set.


.. function:: isblank(c)

   Checks for an ASCII whitespace character.


.. function:: iscntrl(c)

   Checks for an ASCII control character (in the range 0x00 to 0x1f).


.. function:: isdigit(c)

   Checks for an ASCII decimal digit, ``'0'`` through ``'9'``.  This is equivalent
   to ``c in string.digits``.


.. function:: isgraph(c)

   Checks for ASCII any printable character except space.


.. function:: islower(c)

   Checks for an ASCII lower-case character.


.. function:: isprint(c)

   Checks for any ASCII printable character including space.


.. function:: ispunct(c)

   Checks for any printable ASCII character which is not a space or an alphanumeric
   character.


.. function:: isspace(c)

   Checks for ASCII white-space characters; space, line feed, carriage return, form
   feed, horizontal tab, vertical tab.


.. function:: isupper(c)

   Checks for an ASCII uppercase letter.


.. function:: isxdigit(c)

   Checks for an ASCII hexadecimal digit.  This is equivalent to ``c in
   string.hexdigits``.


.. function:: isctrl(c)

   Checks for an ASCII control character (ordinal values 0 to 31).


.. function:: ismeta(c)

   Checks for a non-ASCII character (ordinal values 0x80 and above).

These functions accept either integers or strings; when the argument is a
string, it is first converted using the built-in function :func:`ord`.

Note that all these functions check ordinal bit values derived from the  first
character of the string you pass in; they do not actually know anything about
the host machine's character encoding.  For functions  that know about the
character encoding (and handle internationalization properly) see the
:mod:`string` module.

The following two functions take either a single-character string or integer
byte value; they return a value of the same type.


.. function:: ascii(c)

   Return the ASCII value corresponding to the low 7 bits of *c*.


.. function:: ctrl(c)

   Return the control character corresponding to the given character (the character
   bit value is bitwise-anded with 0x1f).


.. function:: alt(c)

   Return the 8-bit character corresponding to the given ASCII character (the
   character bit value is bitwise-ored with 0x80).

The following function takes either a single-character string or integer value;
it returns a string.


.. function:: unctrl(c)

   Return a string representation of the ASCII character *c*.  If *c* is printable,
   this string is the character itself.  If the character is a control character
   (0x00-0x1f) the string consists of a caret (``'^'``) followed by the
   corresponding uppercase letter. If the character is an ASCII delete (0x7f) the
   string is ``'^?'``.  If the character has its meta bit (0x80) set, the meta bit
   is stripped, the preceding rules applied, and ``'!'`` prepended to the result.


.. data:: controlnames

   A 33-element string array that contains the ASCII mnemonics for the thirty-two
   ASCII control characters from 0 (NUL) to 0x1f (US), in order, plus the mnemonic
   ``SP`` for the space character.

