[16] SGML 文書で使う文字集合は、 マーク文字と最小データ文字さえ表現できれば、 どんな文字集合でも使えます。 (参考3 7.1 参照。)
[17] 区切子機能をすべて最小データ文字から選んだとすると、 素の SGML では76文字、 Web SGML では 84文字が最小の文字集合となります。
[2] 仕様書: JIS X 4151‐1992 12.1 文書文字集合
SGML の引数の書式と ABNF を合体させたような擬似マーク宣言断片で構文を表すと:
-- 文書文字集合 (172) --
CHARSET
1*( -- 文字集合記述 (173) --
BASESET "Public Identifier"
DESCSET
1*( -- 文字記述 (176)--
先頭文字番号 文字個数 (
基本文字集合番号
/ 最小表記
/ UNUSED
)
-- SGML 側の -- -- 文字集合側 --
-- 文字番号 -- -- の文字番号 --
)
)[3] 公開識別子は、 基本文字集合を人間が識別するためのものだそうです。 (12.1.1.1) 規格名、 ISO-IR 登録番号、 標号などの想定読者が理解できるだろうものを識別子に入れることになっています。
[31]
公式公開識別子を使う時は、公開文種別は
CHARSET とします。 (JIS 12.1.1.1)
UNUSED が指定してある場合は、
その文字は意味を持ちません。文字集合区分は、
文字集合のすべての文字番号を、重複なく記述していなければなりません。
(JIS 12.1.1)[29]
意味を持たない文字は、
非SGML文字として、文字種別
NONSGML に加えられます。
(ってことは、基本文字集合の「意味を持たない文字」
を処理系は知っていないといけないってことです。
それじゃあ「意味を持たない」とはどういう意味か、その定義はないみたいですが、 UNUSED から類推すれば、文字が割り当てられていない符号位置のことを言うのでしょう。)
なお、重要文字でない回避文字も非 SGML 文字になります。
BASESET "ISO 646-1983//CHARSET
International Reference Version
(IRV)//ESC 2/5 4/0"
DESCSET 0 128 0[14] 文句の付け所がないくらい単純。
[15] ESC 2/5 4/0 は任意の
128文字の集合を意味します。
(公開文指示シーケンス参照。)
ESC 2/8 4/0 でないのは、基本集合が単なる
ISO-IR 002 の94文字の図形文字集合ではなく、旧 IRV の
128文字の符号化文字集合全体を意味するためだと思われます。
[7] JIS X 4151‐1992 表8 の例 :
CHARSET -- 8ビット文書文字集合 --
-- 最初の128文字は、構文参照文字集合と同じである。 --
BASESET "ISO 646-1983//CHARSET
International Reference Version
(IRV)//ESC 2/5 4/0"
DESCSET 0 9 UNUSED
9 2 9
11 2 UNUSED
13 1 13
14 18 UNUSED
32 95 32
127 1 UNUSED
BASESET "ISO Registration Number 109//CHARSET
ECMA-94 Right Part of Latin Alphabet
Nr.3//ESC 2/9 4/3"
DESCSET 128 32 UNUSED
160 5 32
165 1 "SGML User's Group logo"
166 88 38 -- NONSGML に対する5個の
unused を含む --
254 1 127 -- 127 の未使用位置に動かす --
255 1 UNUSED -- 255 は、回避文字とする --[5] IRV:1983 は、
| 上\下 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | C0 | |||||||||||||||
| 1 | C0 | |||||||||||||||
| 2 | SP | ! | " | # | Cur | % | & | ' | ( | ) | * | + | , | - | . | / |
| 3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
| 4 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
| 5 | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
| 6 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
| 7 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | DEL |
ISO-IR109 (指示は ESC 2/13 4/3 が正しい。) は、
| 上\下 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | ** | |||||||||||||||
| 1 | ** | |||||||||||||||
| 2 | NBSP | LL | DC | £ | Cur | ** | LL | § | ¨ | I | LL | LL | LL | SHY | ** | LL |
| 3 | ° | ll | ^2 | ^3 | ´ | μ | ll | ・ | , | i | ll | ll | ll | 1/2 | ** | ll |
| 4 | A` | A' | A^ | * | A" | LL | LL | LL | LL | LL | LL | LL | LL | LL | LL | LL |
| 5 | ** | N" | O` | O' | O^ | LL | LL | LL | LL | × | LL | LL | LL | LL | LL | LL |
| 6 | a` | a' | a^ | ** | a" | ll | ll | ll | ll | ll | ll | ll | ll | ll | ll | ll |
| 7 | ** | n" | o` | o' | o^ | ll | ll | ll | ll | ÷ | ll | ll | ll | ll | ll | 上点 |
[28] それが、この文書文字集合では、
| 上\下 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | × | [09] | [0A] | × | [0D] | × | ||||||||||
| 1 | × | |||||||||||||||
| 2 | [20] | |||||||||||||||
| 3 | ||||||||||||||||
| 4 | ||||||||||||||||
| 5 | ||||||||||||||||
| 6 | ||||||||||||||||
| 7 | [7E] | × | ||||||||||||||
| 8 | × | |||||||||||||||
| 9 | × | |||||||||||||||
| 10 | {20} | {24} | ☆ | {26} | {2D} | <2E> | {2F} | |||||||||
| 11 | {30} | {3D} | <3E> | {3F} | ||||||||||||
| 12 | {40} | {41} | {42} | <43> | {44} | |||||||||||
| 13 | <51> | {52} | ||||||||||||||
| 14 | {60} | {61} | {62} | <63> | {64} | |||||||||||
| 15 | <70> | {71} | {7F} | × | ||||||||||||
[8] 注釈に5個の unused を含むとあるけど実際には6個含んでいるし、127 の未使用位置に動かす
という注釈の意図も不明。
もしかして規格の著者は今の IR 109 とは違う表を見ていたんだろうか?
昔の情報が少ない状態なら、なんかの間違いが起こり得なくもない。
IR 109 の指示シーケンスも間違ってるし。
[9] 文字番号の代わりの引数表記、おいおい、 複数文字でもいいのかいと突っ込みたくなりますが、 確かに駄目とはかかれてません。。。そんな。。。
"A" とあったら LATIN CAPITAL LETTER A です、という意味なのかと思ってたけど
(規格本文はそうとしか読めないよ)、
こっちの使い方が正しいんでしょうかね?
よくわかんない。。。
[10] JIS の表9にある例です。 なお、 「EUC 型」という見出しにしましたが、 7ビット部が新 IRV でないので EUC ではありません。
CHARSET -- 8ビット文書文字集合 --
-- 最初の128文字は、構文参照文字集合と同じである。 --
BASESET "ISO 646-1983//CHARSET
International Reference Version
(IRV)//ESC 2/5 4/0"
DESCSET 0 9 UNUSED
9 2 9
11 2 UNUSED
13 1 13
14 18 UNUSED
32 95 32
127 1 UNUSED
BASESET "ISO Registration Number 87//CHARSET
JIS X 0208//ESC 2/6 4/0 ESC 2/4 2/9 4/2"
-- JIS X 0208 の文字を G1 集合に指示し、
列 10‐15 に呼び出す。 --
DESCSET 128 41249 UNUSED
41377 94 8481 -- 2121 --
41471 162 UNUSED
41633 14 8737 -- 2221 --
41647 11 UNUSED
(略)
62625 6 29371 -- 7421 --
62631 2905 UNUSED[12] ISO/IEC2022 的に文字でない範囲や
JISX0208‐1990 で文字が割り当てられていない範囲を
UNUSED にするために涙ぐましい努力がなされています。。。
実際には、文字が割り当てられていない位置は実装が知っていれば SGML 宣言に明示する必要はないと思うので、 大雑把にどばっと割り当てておいても間違いではないのではないでしょうか。 もちろん、明示しておいた方が親切ですし、具体的な文字集合についての知識がない処理系でも正しい扱いが期待できるから良いのですが。。。
[18] 注釈には JIS X 0208 を右に呼び出すみたいなことが書かれていますが、 呼び出しのシーケンスはどこにも載ってません。。。 指示しかできません。
BASESET "ISO 646-1983//CHARSET
International Reference Version
(IRV)//ESC 2/5 4/0"
DESCSET 0 14 0
14 1 "LS0 in ISO 2022"
15 1 "LS1 in ISO 2022"
16 112 16
128 14 UNUSED
142 1 "SS2 in ISO 2022"
143 1 "SS3 in ISO 2022"
144 112 UNUSED[20] 投げやりな定義ですね。。。
SS2・SS3 のために CR
を使ってるけど、 GR
は未使用なので適当なものを指示・呼び出しして使えないじゃないですか。
もっとも、そもそも文字集合の指定なのに符号拡張が混じって、
つじつまが合わなくなる
(例えば 0x30 が
DIGIT ZERO に対応するという記述の意味がない)
のに MSOCHAR とか MSICHAR
とかわけのわからんものを導入して誤魔化そうとしているのがいけないんです。
本来 SGML 処理系を通す前にシステム文字集合にでも統一しておくとか、 あるいは符号拡張を考慮した文字集合記述ができるかじゃないといけないのに、 何も考えてないからこんなことになる。
[21] よく見ると多符号具象構文では1バイトの呼び出しは使えるけど、 指示や2バイト以上使う呼び出しは使えないじゃん。。。 (たまたまうまく使える場合を除いて。)
[22] >>20-21 それをどう誤魔化すかの解説が参考6 3.1 というわけだ。 だけどこんなことやってる人ほんとにいるんかな? ISO/IEC 2022 も一応考えました。というポーズにしかみえない。
[27] SGMLにおける文字コードも参照。
[23] Web SGML 附属書 L で XML 用の文書文字集合宣言例として出ているもの :
BASESET
"ISO Registration Number 176//CHARSET
ISO/IEC 10646-1:1993 UCS-4 with implementation
level 3//ESC 2/5 2/15 4/6"
DESCSET
0 9 UNUSED
9 2 9
11 2 UNUSED
13 1 13
14 18 UNUSED
32 95 32
127 1 UNUSED
128 32 UNUSED
160 55136 160
55296 2048 UNUSED -- surrogates --
57344 8190 57344
65534 2 UNUSED -- FFFE and FFFF --
65536 1048576 65536同じく、構文参照文字集合として使われているもの :
BASESET "ISO Registration Number 176//CHARSET
ISO/IEC 10646-1:1993 UCS-4 with implementation
level 3//ESC 2/5 2/15 4/6"
DESCSET
0 1114112 0[24] どうも、文書文字集合の範囲が XML 1.0
仕様書 (Char 参照。)
とは食い違っている気がしますが・・・気にしないことにしましょう。