#\charname
[R7RS+] リテラルの文字オブジェクトを表現します。
リーダーは#\
に出会うと、まず次の文字を読み込みます。それが文字
()[]{}" \|;#
のいずれかならば、その文字自身となります。
そうでなければ、単語を構成しない文字に出会うまで文字が続けて読み込まれます。
もし一文字しか読まれなければ、その文字自身となります。そうでなければ
その単語が文字の名前として解釈されます。
それが有効な文字の名前でなければエラーとなります。
以下の文字の名前が認識されます。これらの文字の名前は大文字小文字を区別しません。
space
スペース (ASCII #x20)
newline, nl, lf
改行文字 (ASCII #x0a)
return, cr
復帰文字 (ASCII #x0d)
tab, ht
水平タブ (ASCII #x09)
page
フォームフィード、改ページ (ASCII #x0c)
alarm
ベル (ASCII #x07)
backspace
バックスペース (ASCII #x08)
escape, esc
エスケープ (ASCII #x1b)
delete, del
デリート (ASCII #x7f)
null
NUL文字 (ASCII #x00)
xN
N が16進表記の整数であるとき、Unicodeコードポイントが整数N であるような文字。これはR7RSの字句構文です。(下の互換性に関する注も見てください。)
uN
Nが4桁または8桁の16進数整数であるとき、UCSコードNであるような文字。
これはGaucheの古い構文です。新規のコードでは\xN
を使ってください。
(下の互換性に関する注も見てください。)
#\newline ⇒ #\newline ; 改行文字 #\x0a ⇒ #\newline ; 改行文字 #\x41 ⇒ #\A ; ASCII文字 ’A’ #\x3042 ⇒ #\あ ; 平仮名「あ」 #\x2a6b2 ⇒ ; JISX0213 2-94-86
互換性に関する注: 0.9.4まで、Gaucheは\xNN
構文を、
Unicodeコードポイントでなく内部文字エンコーディングで文字を表記するのに
使っていました。Gaucheの内部エンコーディングをutf-8
もしくは
none
でコンパイルされている場合は両者に違いはありません
(none
の場合、U+00ffまでの文字しか扱うことができませんが、
扱える範囲内ではUnicodeと一致します)。
内部エンコーディングがeuc-jp
かsjis
の場合、
\xNN
で記されたASCIIの範囲外の文字の解釈は、
0.9.3.3およびそれ以前のGaucheとは異なることになります。
リーダのモードをlegacy
にセットすれば(リーダー字句モード参照)、
#\xNN
は以前と同じ解釈となり、互換性は保たれます
(ただし、R7RSとは非互換になります)。
あるいは#\uNNNN
表記や文字そのものを表記することで、
以前のGaucheでも新しいGaucheでも動作するようにできます。
[R7RS base]
objが文字なら#t
を、そうでなければ#f
を返します。
[R7RS base] 文字を比較します。比較は内部の文字エンコーディングで行われます。
[R7RS char]
文字を、大文字小文字を区別せずに比較します。
比較はそれぞれの文字のfoldcaseの内部文字エンコーディングに基づいて行われます。
foldcaseについては下のchar-foldcase
を参照してください。
R7RSではこれらの手続きは(scheme char)
ライブラリにあります。
[R7RS char]
文字charがそれぞれアルファベット
(Unicode文字カテゴリ Lu
、Ll
、Lt
、
Lm
、Lo
、Nl
)、
数字 (Unicode文字カテゴリ Nd
)、
空白文字 (Unicode文字カテゴリ Zs
、Zp
、Zl
)、
大文字 (Unicode文字カテゴリ Lu
)、
小文字 (Unicode文字カテゴリ Ll
)の時に真の値を返します。
R7RSではこれらの手続きは(scheme char)
ライブラリにあります。
[R6RS] 文字charのUnicode general categoryを表す、以下のシンボルのいずれかを返します。
Cc | Other, Control |
Cf | Other, Format |
Cn | Other, Not Assigned |
Co | Other, Private Use |
Cs | Other, Surrogate |
Ll | Letter, Lowercase |
Lm | Letter, Modifier |
Lo | Letter, Other |
Lt | Letter, Titlecase |
Lu | Letter, Uppercase |
Mc | Mark, Spacing Combining |
Me | Mark, Enclosing |
Mn | Mark, Nonspacing |
Nd | Number, Decimal Digit |
Nl | Number, Letter |
No | Number, Other |
Pc | Punctuation, Connector |
Pd | Punctuation, Dash |
Pe | Punctuation, Close |
Pf | Punctuation, Final quote |
Pi | Punctuation, Initial quote |
Po | Punctuation, Other |
Ps | Punctuation, Open |
Sc | Symbol, Currency |
Sk | Symbol, Modifier |
Sm | Symbol, Math |
So | Symbol, Other |
Zl | Separator, Line |
Zp | Separator, Paragraph |
Zs | Separator, Space |
Gaucheがeuc-jpかshift_jisエンコーディングでコンパイルされている場合、 Unicodeに対応するものがない文字がいくつかあります (各文字は、Unicode一文字+Unicode結合文字で表現できます)。 これらの文字については、以下のとおり暫定的にカテゴリを割り当てています。 将来のUnicodeにこれらの文字が取り込まれた場合は、Unicodeで決められる カテゴリに変更されるでしょう。
SJIS | EUC | Cat | Unicode |
82F5 | A4F7 | Lo | U+304B U+309A (Semi-voiced Hiragana KA) |
82F6 | A4F8 | Lo | U+304D U+309A (Semi-voiced Hiragana KI) |
82F7 | A4F9 | Lo | U+304F U+309A (Semi-voiced Hiragana KU) |
82F8 | A4FA | Lo | U+3051 U+309A (Semi-voiced Hiragana KE) |
82F9 | A4FB | Lo | U+3053 U+309A (Semi-voiced Hiragana KO) |
8397 | A5F7 | Lo | U+30AB U+309A (Semi-voiced Katakana KA) |
8398 | A5F8 | Lo | U+30AD U+309A (Semi-voiced Katakana KI) |
8399 | A5F9 | Lo | U+30AF U+309A (Semi-voiced Katakana KU) |
839A | A5FA | Lo | U+30B1 U+309A (Semi-voiced Katakana KE) |
839B | A5FB | Lo | U+30B3 U+309A (Semi-voiced Katakana KO) |
839C | A5FC | Lo | U+30BB U+309A (Semi-voiced Katakana SE) |
839D | A5FD | Lo | U+30C4 U+309A (Semi-voiced Katakana TSU) |
839E | A5FE | Lo | U+30C8 U+309A (Semi-voiced Katakana TO) |
83F6 | A6F8 | Lo | U+31F7 U+309A (Semi-voiced small Katakana FU) |
8663 | ABC4 | Ll | U+00E6 U+0300 (Accented latin small ae) |
8667 | ABC8 | Ll | U+0254 U+0300 (Accented latin small open o) |
8668 | ABC9 | Ll | U+0254 U+0301 (Accented latin small open o) |
8669 | ABCA | Ll | U+028C U+0300 (Accented latin small turned v) |
866A | ABCB | Ll | U+028C U+0301 (Accented latin small turned v) |
866B | ABCC | Ll | U+0259 U+0300 (Accented latin small schwa) |
866C | ABCD | Ll | U+0259 U+0301 (Accented latin small schwa) |
866D | ABCE | Ll | U+025A U+0300 (Accented latin small schwa w/hook) |
866E | ABCF | Ll | U+025A U+0301 (Accented latin small schwa w/hook) |
8685 | ABE5 | Sk | U+02E9 U+02E5 |
8686 | ABE6 | Sk | U+02E5 U+02E9 |
[R7RS base]
char->integer
は文字charの内部エンコーディングに対応する
整数値を返します。integer->char
は数値nと内部エンコーディングが
同じ文字を返します。有効な文字charに対して以下の式は常に真となります。
(eq? char (integer->char (char->integer char)))
註: R7RSでは、これらの手続きはUnicodeコードポイントを扱うとされています。
Gaucheの内部エンコーディングがutf-8
かnone
であればそれに
合致します (none
の場合はU+00ffまでの文字がサポートされます)。
内部エンコーディングがeuc-jp
かsjis
の場合は、
Unicodeコードポイントと文字の変換には下のchar->ucs
/ucs->char
を
使ってください。
対応する内部エンコーディングを持つ文字が無い数値をinteger->char
に渡した
場合の結果は不定です。
それぞれ、文字charをUCSコードポイントを表す整数へ変換し、 またUCSコードポイントを表す整数nを文字へと変換する手続きです。
Gaucheの内部文字エンコーディングがUTF-8でコンパイルされている場合は、
これらの手続きはそれぞれchar->integer
およびinteger->char
と等価です。
Gaucheの内部文字エンコーディングがUTF-8でない場合、
これらの手続きはgauche.charconv
モジュールを使って
内部文字コードとUCSとの変換を行います (文字コード変換参照)。
charが対応するUCSコードを持っていない場合、char->ucs
は#f
を
返します。UCSコードn
に対応する文字が内部エンコーディングで定義されていない
場合、変換ルーチンが代替文字を提供していればそれを、そうでなければ#f
が返されます。
[R7RS char] charの大文字、小文字、titlecase、foldcaseを それぞれ返します。
変換は原則としてUnicodeで定義された文字対文字のマッピングに従います。 Unicodeに従って変換する先の文字が内部エンコーディングでサポートされていない 場合は、変換は行いません。内部エンコーディングが’none’の場合は、 文字をLatin-1 (ISO-8859-1) であるとみなします。Latin-1の small y with diaresis (U+00ff) をupcaseすると、 内部エンコーディングがutf-8の場合はcapital y with diaeresis (U+0178)にマップされますが、 内部エンコーディングがnoneであれば元の文字がそのまま返されます。
R7RSはchar-titlecase
を定義していません。それ以外の3つの手続きは
(scheme char)
ライブラリにあります。R6RSは全ての手続きを提供しています。
文字対文字のマッピングでは、一文字が複数文字に展開されるようなケースマッピングは
扱いません。有名な例はeszett (latin small letter sharp S, U+00df)で、
文字列のコンテキストでは二つの大文字のSへとマップされますが、
char-upcase #\ß
は単に #\ß を返します。
完全なマッピングが必要なら、gauche.unicode
モジュールの
string-upcase
等が利用できます
(フルセットの大文字小文字変換参照)。
文字charが radix進数の数字を構成するのに有効な文字であれば、
対応する整数が、そうでなければ#f
が返されます。
(digit->integer #\4) ⇒ 4 (digit->integer #\e 16) ⇒ 14 (digit->integer #\9 8) ⇒ #f
省略可能引数extended-range?に真の値が与えられると、
この手続きはASCIIの数字だけでなく、Nd
カテゴリに属する
すべての文字、例えば
FULLWIDTH DIGIT ZEROからNINE (U+ff10 - U+ff19) も認識します。
R7RSにはdigit-value
という手続きが定義されていて、それは
(digit->integer char 10 #t)
と等価です。
Common Lispには同様の手続きがdigit-char-p
というやや曖昧な名で定義されています。
digit->integer
の逆です。整数integerを radix進数 ひと桁で
表現するのに使われる文字を返します。integerがひと桁で表現できない数値の場合は
#f
が返されます。
(integer->digit 13 16) ⇒ #\d (integer->digit 10) ⇒ #f
省略可能引数basechar1はゼロに相当する文字を指定します。
デフォルトは#\0
です。ここに、例えばU+0660 (ARABIC-INDIC DIGIT ZERO)
を与えれば、整数をアラビア・インド数字に変換できます。
もうひとつの省略可能引数basechar2は、10を越える整数に使う文字の起点を
指定します。デフォルトは#\a
です。ここに#\A
を渡せば、
16進数表記で小文字のかわりに大文字を使うようになります。
Common Lispのdigit-char
に当たります。
コンパイル時に選択された内部文字エンコーディングを表すシンボルを返します。 返される値は以下のいずれかです。
euc-jp
EUC-JP
utf-8
UTF-8
sjis
Shift JIS
none
マルチバイトキャラクタをサポートしない(8ビット固定長文字)。
コンパイル時に内部エンコーディングによってコードを切り替えたい場合は、
機能識別子gauche.ces.*
が使えます。
プラットフォーム依存の機能を見てください。
ネイティブなマルチバイトエンコーディングスキームでサポートされている 文字エンコーディングスキームの名前を表す文字列のリストを返します。