singletons

合成除外表 (Unicode)

[1] 合成除外表 (Composition Exclusion Table) は、 正準分解可能な文字のうち、合成 (初等合成) が行われないものの表です。 NFCNFKC分解の後に初等合成を行いますが、ここで合成結果として採用しない文字の表がこの合成除外表です。

仕様書

分類

[6] 合成除外表に含まれる文字は4種類に分類されます。

用字系固有の合成除外文字

[7] 用字系固有 (script-specific) に分類される文字は、 正準分解できるものの、通常はその用字系の利用時に合成形は使わないものです。 >>5

[8] 例: U+0958 DEVANAGARI LETTER QA () >>5

合成版の後に追加された合成除外文字

[9] 合成版後 (post composition version) に分類される文字は、 合成版であるところの Unicode 3.0 よりも後に追加された正準分解できる文字です。 >>5

[10] 例: U+2ADC FORKING () >>5

一人っ子合成除外文字

[11] 一人っ子 (シングルトン) (singleton) に分類される文字は、 文字1つだけへの正準分解を持つ文字です。 >>5

[12] 例: U+2126 OHM SIGN () >>5

[2] 一人っ子 (singleton) というのはちょっとわかりにくいのですが、 UAX #15 には次のような例が挙げられています。

  1. U+212B (ANGSTROM SIGN) の正準分解は <U+0041, U+00C5> (<LATIN CAPITAL LETTER A, COMBINING RING ABOVE>) である。
  2. U+00C5 (LATIN CAPITAL LETTER A WITH RING ABOVE) の正準分解<U+0041, U+00C5> である。
  3. つまり、 U+212BU+00C5 になってしまう (一人っ子分解)。
[16] 要は重複符号化の下らない後始末です。

非開始子分解の合成除外文字

[13] 非開始子分解 (non-starter decompositions) に分類される文字は、 正準分解で複数の文字に展開されるものであって、その文字自体が開始子で無いか、 または正準分解した最初の文字開始子で無いものです。 >>5

[14] 例: U+0344 COMBINING GREEK DIALYTIKA TONOS ( ̈́) >>5

安定性

[17] 新たに正準分解が追加される場合、その分解結果の文字のうち一つでもそれ以前の版の Unicode に含まれていたなら、合成除外表に追加しなければなりません。 >>5

[19] これは強い正規化安定性の要求よりも少し強い要件に見えますね。

[18] >>17 に該当しない場合は、合成除外表に入れても入れなくても構いません。 どちらにするかは、合成形を普通に使うかどうかによって決めます。 >>5

[23] 既存の文字合成除外表への追加や削除は、 NFCNFKC の結果が変わってしまうことになるので、 正規化形の安定性の原則から認められません。

訂正 #2

[24] Unicode 3.0.0 と Unicode 3.0.1 では U+FB1D HEBREW LETTER YOD WITH HIRIQ が本来合成除外表に入れられるべきところ、誤って入っていなかったとして、 訂正 (Corrigendum) #2 で修正されています。 Unicode 3.1.0 以降では合成除外表に含まれています。 >>25>>3

[26] このため、この修正の前後では NFCNFKC の結果が変化することがあります。

[27] 非互換変更はしないつもりだけど使用頻度は高くないし云々などという恥ずかしい言い訳 >>25>>3 をまたしておりますぞ。懲りない連中ですこと。

[29] 非互換変更はもうしない >>3 と書いているにも関わらず、訂正 #3 以降が続くわけですがwwwww

一覧

[21] 合成除外表>>20 で配布されています。ただし >>11>>13 は他の特性から計算できるということで、 コメント化されています。 >>5

[22] すべての一覧は、 UCD特性 Full_Composition_Exclusion として含まれています。 >>5, >>30

[31] 狭義の合成除外表に含まれる文字の一覧は、 >>33 にあります。 すべての含まれる文字の一覧は、 >>32 にあります。

歴史

訂正 #2

[28] Unicode 3.0 と Unicode 3.1 の間の訂正 #2 で1文字非互換に追加されました (>>24)。

関連

[4] 正準XML などいくつかの正規化に関する規定を含んだ仕様が >>24訂正票を参照しています。

メモ

[15] これらを除外しておかないと、 NFCNFKC の結果が一意に定まらないことになってしまいます。