文字の分類
目標
文字の分類について処理系で首尾一貫した方針を取る。また、0文字の名前を許すかどうかについても確認が必要である。
現状
文字の安全性の判定は character.cpp にまとめてあります。character_for_name と character_for_text だけが定義してあります。他のものは個々のプログラムで判定します。
改良
現状では UTF-8 の安全なバイトを character_for_text とみなしているそうですが、UTF-8 よりも ISO 2022 の方が本当は良いものかもしれません。
character_for_text は以下のものを許します。
- 0x09, 0x0A (ASCIIの水平タブと改行)
- 0x1B, 0x0E, 0x0F (ISO 2022のESC, SO, SIコード)
- 0x20から0x7F (ISO 2022のGL面)
- 0x80から0x9F (UTF-8の2バイト目以降の一部)
- 0xA0から0xFF (ISO 2022のGR面)
また、プリプロセッサの書式として、現状の ^[...] のほかに「改行終端テキスト」を導入します。
1. 起こしシングルクォーテーション ` で始まる。
2. 先頭から続く単語間スペースを読み飛ばす
3. 規則に違反する文字で終端し、改行(LF)までを読み飛ばす。
4. 改行(LF, 0x0A)で本当に(説明不足)終端する。
おそらく ISO 2022 がこのルールで正当に処理されます。多言語化された文字コードが ASCII の制御コードを正当に扱っていることが条件です。
ASCII の DELETE コードを可視文字に割り当ててしまっている文字コードがあるはずですが、忘れました。
なお、ISO 646 はパステルステッチにとって重要な文字、特にキャップとスクウェア・ブラケットを正当に利用できないので、サポートしないことにします。
ISO/IEC 2022
0x20から0x7FまではGL面、0xA0から0xFFまではGR面です。いずれも96文字集合を呼び出すと(DEL制御コードを含めて)すべて可視文字になります。
ESC (01/11, 0x1B), SI (00/15, 0x0F), SO (00/14, 0x0E), SS2 (08/14, 0x8E), SS3 (08/15, 0x8F) を使用します。
ISO 8859-1
0xA0から0xFFまで可視文字です。正確にはNBSP (0xA0) とSHY (0xAD) は可視文字ではありませんが、制御文字というのも違う気がします。組版処理用の符号です。
ISO-8859-1
0x80から0x9Fの制御コードを定義しています。こちらは本当の制御コードとみなしていいと思います。よく分かりません。
Windows-1252
0xA0から0xFFはISO/IEC 2022と同じ可視文字だと思います。0x80から0x9Fまでにも独自の可視文字を詰めています。ただし129, 141, 143, 144, 157 (0x81, 0x8D, 0x8F, 0x90, 0x9D) は空けてあります。
UTF-8
0x80から0x9Fまでの領域を許容することを決断せざるを得なくなりました。さらにバイトオーダーマークなるものがあり、コードは0xFE, 0xFFです。パステルステッチのソースコードは明示的にプログラムを開始しない限りコメントとみなされるので、ファイルの先頭にバイトオーダーマークがあっても読み飛ばされます。
- 最終更新:2009-09-28 14:19:00
