1
0
Fork 0
cl-sites/guile.html_node/Characters.html

429 lines
32 KiB
HTML
Raw Normal View History

2024-12-17 12:49:28 +01:00
<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- This manual documents Guile version 3.0.10.
Copyright (C) 1996-1997, 2000-2005, 2009-2023 Free Software Foundation,
Inc.
Copyright (C) 2021 Maxime Devos
Copyright (C) 2024 Tomas Volf
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License." -->
<title>Characters (Guile Reference Manual)</title>
<meta name="description" content="Characters (Guile Reference Manual)">
<meta name="keywords" content="Characters (Guile Reference Manual)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content=".texi2any-real">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Data-Types.html" rel="up" title="Data Types">
<link href="Character-Sets.html" rel="next" title="Character Sets">
<link href="Numbers.html" rel="prev" title="Numbers">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
div.example {margin-left: 3.2em}
span:hover a.copiable-link {visibility: visible}
strong.def-name {font-family: monospace; font-weight: bold; font-size: larger}
-->
</style>
<link rel="stylesheet" type="text/css" href="https://www.gnu.org/software/gnulib/manual.css">
</head>
<body lang="en">
<div class="subsection-level-extent" id="Characters">
<div class="nav-panel">
<p>
Next: <a href="Character-Sets.html" accesskey="n" rel="next">Character Sets</a>, Previous: <a href="Numbers.html" accesskey="p" rel="prev">Numerical data types</a>, Up: <a href="Data-Types.html" accesskey="u" rel="up">Data Types</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h4 class="subsection" id="Characters-1"><span>6.6.3 Characters<a class="copiable-link" href="#Characters-1"> &para;</a></span></h4>
<a class="index-entry-id" id="index-Characters"></a>
<p>In Scheme, there is a data type to describe a single character.
</p>
<p>Defining what exactly a character <em class="emph">is</em> can be more complicated
than it seems. Guile follows the advice of R6RS and uses The Unicode
Standard to help define what a character is. So, for Guile, a
character is anything in the Unicode Character Database.
</p>
<a class="index-entry-id" id="index-code-point"></a>
<a class="index-entry-id" id="index-Unicode-code-point"></a>
<p>The Unicode Character Database is basically a table of characters
indexed using integers called &rsquo;code points&rsquo;. Valid code points are in
the ranges 0 to <code class="code">#xD7FF</code> inclusive or <code class="code">#xE000</code> to
<code class="code">#x10FFFF</code> inclusive, which is about 1.1 million code points.
</p>
<a class="index-entry-id" id="index-designated-code-point"></a>
<a class="index-entry-id" id="index-code-point_002c-designated"></a>
<p>Any code point that has been assigned to a character or that has
otherwise been given a meaning by Unicode is called a &rsquo;designated code
point&rsquo;. Most of the designated code points, about 200,000 of them,
indicate characters, accents or other combining marks that modify
other characters, symbols, whitespace, and control characters. Some
are not characters but indicators that suggest how to format or
display neighboring characters.
</p>
<a class="index-entry-id" id="index-reserved-code-point"></a>
<a class="index-entry-id" id="index-code-point_002c-reserved"></a>
<p>If a code point is not a designated code point &ndash; if it has not been
assigned to a character by The Unicode Standard &ndash; it is a &rsquo;reserved
code point&rsquo;, meaning that they are reserved for future use. Most of
the code points, about 800,000, are &rsquo;reserved code points&rsquo;.
</p>
<p>By convention, a Unicode code point is written as
&ldquo;U+XXXX&rdquo; where &ldquo;XXXX&rdquo; is a hexadecimal number. Please note that
this convenient notation is not valid code. Guile does not interpret
&ldquo;U+XXXX&rdquo; as a character.
</p>
<p>In Scheme, a character literal is written as <code class="code">#\<var class="var">name</var></code> where
<var class="var">name</var> is the name of the character that you want. Printable
characters have their usual single character name; for example,
<code class="code">#\a</code> is a lower case <code class="code">a</code>.
</p>
<p>Some of the code points are &rsquo;combining characters&rsquo; that are not meant
to be printed by themselves but are instead meant to modify the
appearance of the previous character. For combining characters, an
alternate form of the character literal is <code class="code">#\</code> followed by
U+25CC (a small, dotted circle), followed by the combining character.
This allows the combining character to be drawn on the circle, not on
the backslash of <code class="code">#\</code>.
</p>
<p>Many of the non-printing characters, such as whitespace characters and
control characters, also have names.
</p>
<p>The most commonly used non-printing characters have long character
names, described in the table below.
</p>
<table class="multitable">
<tbody><tr><td>Character Name</td><td>Codepoint</td></tr>
<tr><td><code class="code">#\nul</code></td><td>U+0000</td></tr>
<tr><td><code class="code">#\alarm</code></td><td>U+0007</td></tr>
<tr><td><code class="code">#\backspace</code></td><td>U+0008</td></tr>
<tr><td><code class="code">#\tab</code></td><td>U+0009</td></tr>
<tr><td><code class="code">#\linefeed</code></td><td>U+000A</td></tr>
<tr><td><code class="code">#\newline</code></td><td>U+000A</td></tr>
<tr><td><code class="code">#\vtab</code></td><td>U+000B</td></tr>
<tr><td><code class="code">#\page</code></td><td>U+000C</td></tr>
<tr><td><code class="code">#\return</code></td><td>U+000D</td></tr>
<tr><td><code class="code">#\esc</code></td><td>U+001B</td></tr>
<tr><td><code class="code">#\space</code></td><td>U+0020</td></tr>
<tr><td><code class="code">#\delete</code></td><td>U+007F</td></tr>
</tbody>
</table>
<p>There are also short names for all of the &ldquo;C0 control characters&rdquo;
(those with code points below 32). The following table lists the short
name for each character.
</p>
<table class="multitable">
<tbody><tr><td width="25%">0 = <code class="code">#\nul</code></td><td width="25%">1 = <code class="code">#\soh</code></td><td width="25%">2 = <code class="code">#\stx</code></td><td width="25%">3 = <code class="code">#\etx</code></td></tr>
<tr><td width="25%">4 = <code class="code">#\eot</code></td><td width="25%">5 = <code class="code">#\enq</code></td><td width="25%">6 = <code class="code">#\ack</code></td><td width="25%">7 = <code class="code">#\bel</code></td></tr>
<tr><td width="25%">8 = <code class="code">#\bs</code></td><td width="25%">9 = <code class="code">#\ht</code></td><td width="25%">10 = <code class="code">#\lf</code></td><td width="25%">11 = <code class="code">#\vt</code></td></tr>
<tr><td width="25%">12 = <code class="code">#\ff</code></td><td width="25%">13 = <code class="code">#\cr</code></td><td width="25%">14 = <code class="code">#\so</code></td><td width="25%">15 = <code class="code">#\si</code></td></tr>
<tr><td width="25%">16 = <code class="code">#\dle</code></td><td width="25%">17 = <code class="code">#\dc1</code></td><td width="25%">18 = <code class="code">#\dc2</code></td><td width="25%">19 = <code class="code">#\dc3</code></td></tr>
<tr><td width="25%">20 = <code class="code">#\dc4</code></td><td width="25%">21 = <code class="code">#\nak</code></td><td width="25%">22 = <code class="code">#\syn</code></td><td width="25%">23 = <code class="code">#\etb</code></td></tr>
<tr><td width="25%">24 = <code class="code">#\can</code></td><td width="25%">25 = <code class="code">#\em</code></td><td width="25%">26 = <code class="code">#\sub</code></td><td width="25%">27 = <code class="code">#\esc</code></td></tr>
<tr><td width="25%">28 = <code class="code">#\fs</code></td><td width="25%">29 = <code class="code">#\gs</code></td><td width="25%">30 = <code class="code">#\rs</code></td><td width="25%">31 = <code class="code">#\us</code></td></tr>
<tr><td width="25%">32 = <code class="code">#\sp</code></td></tr>
</tbody>
</table>
<p>The short name for the &ldquo;delete&rdquo; character (code point U+007F) is
<code class="code">#\del</code>.
</p>
<p>The R7RS name for the &ldquo;escape&rdquo; character (code point U+001B) is
<code class="code">#\escape</code>.
</p>
<p>There are also a few alternative names left over for compatibility with
previous versions of Guile.
</p>
<table class="multitable">
<tbody><tr><td>Alternate</td><td>Standard</td></tr>
<tr><td><code class="code">#\nl</code></td><td><code class="code">#\newline</code></td></tr>
<tr><td><code class="code">#\np</code></td><td><code class="code">#\page</code></td></tr>
<tr><td><code class="code">#\null</code></td><td><code class="code">#\nul</code></td></tr>
</tbody>
</table>
<p>Characters may also be written using their code point values. They can
be written with as an octal number, such as <code class="code">#\10</code> for
<code class="code">#\bs</code> or <code class="code">#\177</code> for <code class="code">#\del</code>.
</p>
<p>If one prefers hex to octal, there is an additional syntax for character
escapes: <code class="code">#\xHHHH</code> &ndash; the letter &rsquo;x&rsquo; followed by a hexadecimal
number of one to eight digits.
</p>
<a class="index-entry-id" id="index-char_003f-3"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char?</strong> <var class="def-var-arguments">x</var><a class="copiable-link" href="#index-char_003f"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005fchar_005fp"><span class="category-def">C Function: </span><span><strong class="def-name">scm_char_p</strong> <var class="def-var-arguments">(x)</var><a class="copiable-link" href="#index-scm_005fchar_005fp"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if <var class="var">x</var> is a character, else <code class="code">#f</code>.
</p></dd></dl>
<p>Fundamentally, the character comparison operations below are
numeric comparisons of the character&rsquo;s code points.
</p>
<a class="index-entry-id" id="index-char_003d_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_003d_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char=?</strong> <var class="def-var-arguments">x y</var><a class="copiable-link" href="#index-char_003d_003f"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if code point of <var class="var">x</var> is equal to the code point
of <var class="var">y</var>, else <code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_003c_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_003c_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char&lt;?</strong> <var class="def-var-arguments">x y</var><a class="copiable-link" href="#index-char_003c_003f"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if the code point of <var class="var">x</var> is less than the code
point of <var class="var">y</var>, else <code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_003c_003d_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_003c_003d_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char&lt;=?</strong> <var class="def-var-arguments">x y</var><a class="copiable-link" href="#index-char_003c_003d_003f"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if the code point of <var class="var">x</var> is less than or equal
to the code point of <var class="var">y</var>, else <code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_003e_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_003e_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char&gt;?</strong> <var class="def-var-arguments">x y</var><a class="copiable-link" href="#index-char_003e_003f"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if the code point of <var class="var">x</var> is greater than the
code point of <var class="var">y</var>, else <code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_003e_003d_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_003e_003d_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char&gt;=?</strong> <var class="def-var-arguments">x y</var><a class="copiable-link" href="#index-char_003e_003d_003f"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if the code point of <var class="var">x</var> is greater than or
equal to the code point of <var class="var">y</var>, else <code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-case-folding"></a>
<p>Case-insensitive character comparisons use <em class="emph">Unicode case
folding</em>. In case folding comparisons, if a character is lowercase
and has an uppercase form that can be expressed as a single character,
it is converted to uppercase before comparison. All other characters
undergo no conversion before the comparison occurs. This includes the
German sharp S (Eszett) which is not uppercased before conversion
because its uppercase form has two characters. Unicode case folding
is language independent: it uses rules that are generally true, but,
it cannot cover all cases for all languages.
</p>
<a class="index-entry-id" id="index-char_002dci_003d_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dci_003d_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-ci=?</strong> <var class="def-var-arguments">x y</var><a class="copiable-link" href="#index-char_002dci_003d_003f"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if the case-folded code point of <var class="var">x</var> is the same
as the case-folded code point of <var class="var">y</var>, else <code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_002dci_003c_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dci_003c_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-ci&lt;?</strong> <var class="def-var-arguments">x y</var><a class="copiable-link" href="#index-char_002dci_003c_003f"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if the case-folded code point of <var class="var">x</var> is less
than the case-folded code point of <var class="var">y</var>, else <code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_002dci_003c_003d_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dci_003c_003d_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-ci&lt;=?</strong> <var class="def-var-arguments">x y</var><a class="copiable-link" href="#index-char_002dci_003c_003d_003f"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if the case-folded code point of <var class="var">x</var> is less
than or equal to the case-folded code point of <var class="var">y</var>, else
<code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_002dci_003e_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dci_003e_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-ci&gt;?</strong> <var class="def-var-arguments">x y</var><a class="copiable-link" href="#index-char_002dci_003e_003f"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if the case-folded code point of <var class="var">x</var> is greater
than the case-folded code point of <var class="var">y</var>, else <code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_002dci_003e_003d_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dci_003e_003d_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-ci&gt;=?</strong> <var class="def-var-arguments">x y</var><a class="copiable-link" href="#index-char_002dci_003e_003d_003f"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if the case-folded code point of <var class="var">x</var> is greater
than or equal to the case-folded code point of <var class="var">y</var>, else
<code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_002dalphabetic_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dalphabetic_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-alphabetic?</strong> <var class="def-var-arguments">chr</var><a class="copiable-link" href="#index-char_002dalphabetic_003f"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005fchar_005falphabetic_005fp"><span class="category-def">C Function: </span><span><strong class="def-name">scm_char_alphabetic_p</strong> <var class="def-var-arguments">(chr)</var><a class="copiable-link" href="#index-scm_005fchar_005falphabetic_005fp"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if <var class="var">chr</var> is alphabetic, else <code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_002dnumeric_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dnumeric_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-numeric?</strong> <var class="def-var-arguments">chr</var><a class="copiable-link" href="#index-char_002dnumeric_003f"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005fchar_005fnumeric_005fp"><span class="category-def">C Function: </span><span><strong class="def-name">scm_char_numeric_p</strong> <var class="def-var-arguments">(chr)</var><a class="copiable-link" href="#index-scm_005fchar_005fnumeric_005fp"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if <var class="var">chr</var> is numeric, else <code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_002dwhitespace_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dwhitespace_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-whitespace?</strong> <var class="def-var-arguments">chr</var><a class="copiable-link" href="#index-char_002dwhitespace_003f"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005fchar_005fwhitespace_005fp"><span class="category-def">C Function: </span><span><strong class="def-name">scm_char_whitespace_p</strong> <var class="def-var-arguments">(chr)</var><a class="copiable-link" href="#index-scm_005fchar_005fwhitespace_005fp"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if <var class="var">chr</var> is whitespace, else <code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_002dupper_002dcase_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dupper_002dcase_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-upper-case?</strong> <var class="def-var-arguments">chr</var><a class="copiable-link" href="#index-char_002dupper_002dcase_003f"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005fchar_005fupper_005fcase_005fp"><span class="category-def">C Function: </span><span><strong class="def-name">scm_char_upper_case_p</strong> <var class="def-var-arguments">(chr)</var><a class="copiable-link" href="#index-scm_005fchar_005fupper_005fcase_005fp"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if <var class="var">chr</var> is uppercase, else <code class="code">#f</code>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_002dlower_002dcase_003f-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dlower_002dcase_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-lower-case?</strong> <var class="def-var-arguments">chr</var><a class="copiable-link" href="#index-char_002dlower_002dcase_003f"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005fchar_005flower_005fcase_005fp"><span class="category-def">C Function: </span><span><strong class="def-name">scm_char_lower_case_p</strong> <var class="def-var-arguments">(chr)</var><a class="copiable-link" href="#index-scm_005fchar_005flower_005fcase_005fp"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if <var class="var">chr</var> is lowercase, else <code class="code">#f</code>.
</p></dd></dl>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dis_002dboth_003f"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-is-both?</strong> <var class="def-var-arguments">chr</var><a class="copiable-link" href="#index-char_002dis_002dboth_003f"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005fchar_005fis_005fboth_005fp"><span class="category-def">C Function: </span><span><strong class="def-name">scm_char_is_both_p</strong> <var class="def-var-arguments">(chr)</var><a class="copiable-link" href="#index-scm_005fchar_005fis_005fboth_005fp"> &para;</a></span></dt>
<dd><p>Return <code class="code">#t</code> if <var class="var">chr</var> is either uppercase or lowercase, else
<code class="code">#f</code>.
</p></dd></dl>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dgeneral_002dcategory"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-general-category</strong> <var class="def-var-arguments">chr</var><a class="copiable-link" href="#index-char_002dgeneral_002dcategory"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005fchar_005fgeneral_005fcategory"><span class="category-def">C Function: </span><span><strong class="def-name">scm_char_general_category</strong> <var class="def-var-arguments">(chr)</var><a class="copiable-link" href="#index-scm_005fchar_005fgeneral_005fcategory"> &para;</a></span></dt>
<dd><p>Return a symbol giving the two-letter name of the Unicode general
category assigned to <var class="var">chr</var> or <code class="code">#f</code> if no named category is
assigned. The following table provides a list of category names along
with their meanings.
</p>
<table class="multitable">
<tbody><tr><td width="10%">Lu</td><td width="40%">Uppercase letter</td><td width="10%">Pf</td><td width="40%">Final quote punctuation</td></tr>
<tr><td width="10%">Ll</td><td width="40%">Lowercase letter</td><td width="10%">Po</td><td width="40%">Other punctuation</td></tr>
<tr><td width="10%">Lt</td><td width="40%">Titlecase letter</td><td width="10%">Sm</td><td width="40%">Math symbol</td></tr>
<tr><td width="10%">Lm</td><td width="40%">Modifier letter</td><td width="10%">Sc</td><td width="40%">Currency symbol</td></tr>
<tr><td width="10%">Lo</td><td width="40%">Other letter</td><td width="10%">Sk</td><td width="40%">Modifier symbol</td></tr>
<tr><td width="10%">Mn</td><td width="40%">Non-spacing mark</td><td width="10%">So</td><td width="40%">Other symbol</td></tr>
<tr><td width="10%">Mc</td><td width="40%">Combining spacing mark</td><td width="10%">Zs</td><td width="40%">Space separator</td></tr>
<tr><td width="10%">Me</td><td width="40%">Enclosing mark</td><td width="10%">Zl</td><td width="40%">Line separator</td></tr>
<tr><td width="10%">Nd</td><td width="40%">Decimal digit number</td><td width="10%">Zp</td><td width="40%">Paragraph separator</td></tr>
<tr><td width="10%">Nl</td><td width="40%">Letter number</td><td width="10%">Cc</td><td width="40%">Control</td></tr>
<tr><td width="10%">No</td><td width="40%">Other number</td><td width="10%">Cf</td><td width="40%">Format</td></tr>
<tr><td width="10%">Pc</td><td width="40%">Connector punctuation</td><td width="10%">Cs</td><td width="40%">Surrogate</td></tr>
<tr><td width="10%">Pd</td><td width="40%">Dash punctuation</td><td width="10%">Co</td><td width="40%">Private use</td></tr>
<tr><td width="10%">Ps</td><td width="40%">Open punctuation</td><td width="10%">Cn</td><td width="40%">Unassigned</td></tr>
<tr><td width="10%">Pe</td><td width="40%">Close punctuation</td><td width="10%"></td><td width="40%"></td></tr>
<tr><td width="10%">Pi</td><td width="40%">Initial quote punctuation</td><td width="10%"></td><td width="40%"></td></tr>
</tbody>
</table>
</dd></dl>
<a class="index-entry-id" id="index-char_002d_003einteger-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002d_003einteger"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-&gt;integer</strong> <var class="def-var-arguments">chr</var><a class="copiable-link" href="#index-char_002d_003einteger"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005fchar_005fto_005finteger"><span class="category-def">C Function: </span><span><strong class="def-name">scm_char_to_integer</strong> <var class="def-var-arguments">(chr)</var><a class="copiable-link" href="#index-scm_005fchar_005fto_005finteger"> &para;</a></span></dt>
<dd><p>Return the code point of <var class="var">chr</var>.
</p></dd></dl>
<a class="index-entry-id" id="index-integer_002d_003echar-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-integer_002d_003echar"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">integer-&gt;char</strong> <var class="def-var-arguments">n</var><a class="copiable-link" href="#index-integer_002d_003echar"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005finteger_005fto_005fchar"><span class="category-def">C Function: </span><span><strong class="def-name">scm_integer_to_char</strong> <var class="def-var-arguments">(n)</var><a class="copiable-link" href="#index-scm_005finteger_005fto_005fchar"> &para;</a></span></dt>
<dd><p>Return the character that has code point <var class="var">n</var>. The integer <var class="var">n</var>
must be a valid code point. Valid code points are in the ranges 0 to
<code class="code">#xD7FF</code> inclusive or <code class="code">#xE000</code> to <code class="code">#x10FFFF</code> inclusive.
</p></dd></dl>
<a class="index-entry-id" id="index-char_002dupcase-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dupcase"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-upcase</strong> <var class="def-var-arguments">chr</var><a class="copiable-link" href="#index-char_002dupcase"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005fchar_005fupcase"><span class="category-def">C Function: </span><span><strong class="def-name">scm_char_upcase</strong> <var class="def-var-arguments">(chr)</var><a class="copiable-link" href="#index-scm_005fchar_005fupcase"> &para;</a></span></dt>
<dd><p>Return the uppercase character version of <var class="var">chr</var>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_002ddowncase-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002ddowncase"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-downcase</strong> <var class="def-var-arguments">chr</var><a class="copiable-link" href="#index-char_002ddowncase"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005fchar_005fdowncase"><span class="category-def">C Function: </span><span><strong class="def-name">scm_char_downcase</strong> <var class="def-var-arguments">(chr)</var><a class="copiable-link" href="#index-scm_005fchar_005fdowncase"> &para;</a></span></dt>
<dd><p>Return the lowercase character version of <var class="var">chr</var>.
</p></dd></dl>
<a class="index-entry-id" id="index-char_002dtitlecase-2"></a>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002dtitlecase"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-titlecase</strong> <var class="def-var-arguments">chr</var><a class="copiable-link" href="#index-char_002dtitlecase"> &para;</a></span></dt>
<dt class="deffnx def-cmd-deffn" id="index-scm_005fchar_005ftitlecase"><span class="category-def">C Function: </span><span><strong class="def-name">scm_char_titlecase</strong> <var class="def-var-arguments">(chr)</var><a class="copiable-link" href="#index-scm_005fchar_005ftitlecase"> &para;</a></span></dt>
<dd><p>Return the titlecase character version of <var class="var">chr</var> if one exists;
otherwise return the uppercase version.
</p>
<p>For most characters these will be the same, but the Unicode Standard
includes certain digraph compatibility characters, such as <code class="code">U+01F3</code>
&ldquo;dz&rdquo;, for which the uppercase and titlecase characters are different
(<code class="code">U+01F1</code> &ldquo;DZ&rdquo; and <code class="code">U+01F2</code> &ldquo;Dz&rdquo; in this case,
respectively).
</p></dd></dl>
<a class="index-entry-id" id="index-scm_005ft_005fwchar"></a>
<dl class="first-deftypefn">
<dt class="deftypefn" id="index-scm_005fc_005fupcase"><span class="category-def">C Function: </span><span><code class="def-type">scm_t_wchar</code> <strong class="def-name">scm_c_upcase</strong> <code class="def-code-arguments">(scm_t_wchar <var class="var">c</var>)</code><a class="copiable-link" href="#index-scm_005fc_005fupcase"> &para;</a></span></dt>
<dt class="deftypefnx def-cmd-deftypefn" id="index-scm_005fc_005fdowncase"><span class="category-def">C Function: </span><span><code class="def-type">scm_t_wchar</code> <strong class="def-name">scm_c_downcase</strong> <code class="def-code-arguments">(scm_t_wchar <var class="var">c</var>)</code><a class="copiable-link" href="#index-scm_005fc_005fdowncase"> &para;</a></span></dt>
<dt class="deftypefnx def-cmd-deftypefn" id="index-scm_005fc_005ftitlecase"><span class="category-def">C Function: </span><span><code class="def-type">scm_t_wchar</code> <strong class="def-name">scm_c_titlecase</strong> <code class="def-code-arguments">(scm_t_wchar <var class="var">c</var>)</code><a class="copiable-link" href="#index-scm_005fc_005ftitlecase"> &para;</a></span></dt>
<dd>
<p>These C functions take an integer representation of a Unicode
codepoint and return the codepoint corresponding to its uppercase,
lowercase, and titlecase forms respectively. The type
<code class="code">scm_t_wchar</code> is a signed, 32-bit integer.
</p></dd></dl>
<p>Characters also have &ldquo;formal names&rdquo;, which are defined by Unicode.
These names can be accessed in Guile from the <code class="code">(ice-9 unicode)</code>
module:
</p>
<div class="example">
<pre class="example-preformatted">(use-modules (ice-9 unicode))
</pre></div>
<dl class="first-deffn">
<dt class="deffn" id="index-char_002d_003eformal_002dname"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">char-&gt;formal-name</strong> <var class="def-var-arguments">chr</var><a class="copiable-link" href="#index-char_002d_003eformal_002dname"> &para;</a></span></dt>
<dd><p>Return the formal all-upper-case Unicode name of <var class="var">ch</var>,
as a string, or <code class="code">#f</code> if the character has no name.
</p></dd></dl>
<dl class="first-deffn">
<dt class="deffn" id="index-formal_002dname_002d_003echar"><span class="category-def">Scheme Procedure: </span><span><strong class="def-name">formal-name-&gt;char</strong> <var class="def-var-arguments">name</var><a class="copiable-link" href="#index-formal_002dname_002d_003echar"> &para;</a></span></dt>
<dd><p>Return the character whose formal all-upper-case Unicode name is
<var class="var">name</var>, or <code class="code">#f</code> if no such character is known.
</p></dd></dl>
</div>
<hr>
<div class="nav-panel">
<p>
Next: <a href="Character-Sets.html">Character Sets</a>, Previous: <a href="Numbers.html">Numerical data types</a>, Up: <a href="Data-Types.html">Data Types</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>