Working with Multilingual Text
******************************

Guile Character Properties
==========================

These functions give information about the nature of a given Guile character.  These are defined for any scm_mb_char_t value.

 -- Libguile Function: int scm_mb_isalnum (scm_mb_char_t C)
     Return non-zero iff C is an alphabetic or numeric character.

 -- Libguile Function: int scm_mb_is_alpha (scm_mb_char_t C)
     Return non-zero iff C is an alphabetic character.

 -- Libguile Function: int scm_mb_iscntrl (scm_mb_char_t C)
     Return non-zero iff C is a control character.

 -- Libguile Function: int scm_mb_isdigit (scm_mb_char_t C)
     Return non-zero iff C is a digit.

 -- Libguile Function: int scm_mb_isgraph (scm_mb_char_t C)
     Return non-zero iff C is a visible character.

 -- Libguile Function: int scm_mb_isupper (scm_mb_char_t C)
     Return non-zero iff C is an upper-case character.

 -- Libguile Function: int scm_mb_islower (scm_mb_char_t C)
     Return non-zero iff C is a lower-case character.

 -- Libguile Function: int scm_mb_istitle (scm_mb_char_t C)
     Return non-zero iff C is a title-case character.  See the Unicode standard for an explanation of title case.

 -- Libguile Function: int scm_mb_isprint (scm_mb_char_t C)
     Return non-zero iff C is a printable character.

 -- Libguile Function: int scm_mb_ispunct (scm_mb_char_t C)
     Return non-zero iff C is a punctuation character.

 -- Libguile Function: int scm_mb_isspace (scm_mb_char_t C)
     Return non-zero iff C is a whitespace character.

 -- Libguile Function: int scm_mb_isxdigit (scm_mb_char_t C)
     Return non-zero iff C is a hexidecimal digit.

 -- Libguile Function: int scm_mb_isdefined (scm_mb_char_t C)
     Return non-zero iff C is a valid character.

 -- Libguile Function: scm_mb_char_t scm_mb_char_toupper (scm_mb_char_t C)
 -- Libguile Function: scm_mb_char_t scm_mb_char_tolower (scm_mb_char_t C)
 -- Libguile Function: scm_mb_char_t scm_mb_char_totitle (scm_mb_char_t C)
     Convert C to upper, lower, or title case.  If C has no equivalent in the requested case, or is already in that case, return it unchanged.

 -- Libguile Function: in scm_mb_digit_value (scm_mb_char_t C)
     If C is a hexidecimal digit (according to scm_mb_isxdigit), then return its numeric value.  Otherwise return -1.

 -- Libguile Function: in scm_mb_digit_value (scm_mb_char_t C)
     If C is a digit (according to scm_mb_isdigit), then return its numeric value.  Otherwise return -1.

Multibyte Character Tables
==========================

A character table is a table mapping scm_mb_char_t values onto Guile objects.  Guile provides functions for creating character tables, setting entries, and looking up characters.  Character tables are Guile objects, so they are managed by Guile's garbage collector.

A character table can have a ``parent'' table, from which it inherits values for characters.  If a character table CHILD, with a parent table PARENT maps some character C to the value SCM_UNDEFINED, then scm_c_char_table_ref (CHILD, C) will look up C in PARENT, and return the value it finds there.

This section describes only the C API for working with character tables. For the Scheme-level API, see some other section.

 -- Libguile Function: scm_make_char_table (SCM INIT, SCM PARENT)
     Return a new character table object which maps every character to INIT.  If PARENT is a character table, then PARENT is the new table's parent.  If PARENT table is SCM_UNDEFINED, then the new table has no parent.  Otherwise, signal a type error.

      -- Libguile Function: SCM scm_c_char_table_ref (SCM TABLE, scm_mb_char_t C)
          Look up the character C in the character table TABLE, and return the value found there.  If TABLE maps C to SCM_UNDEFINED, and TABLE has a parent, then look up C in the parent.

          If TABLE is not a character table, signal an error.

      -- Libguile Function: SCM scm_c_char_table_set_x (SCM TABLE, scm_mb_char_t C, SCM VALUE)
          Set TABLE's value for the character C to VALUE. If VALUE is SCM_UNDEFINED, then TABLE's parent's value will show through for C.

          If TABLE is not a character table, signal an error.

          This function changes only TABLE itself, never TABLE's parent.

     [[this is all wrong.  what about default values?]]

Multibyte Character Categories
==============================

[[This will describe an ADT representing subsets of the Guile character set.]]

Exchanging Guile Text With the Outside World
--------------------------------------------

[[Scheme-level functions for converting between encodings]]