明示値

Unicode用字系特性値

[2] Unicode 用字系特性値 (Script Property Value) は、Unicode における用字系を表す識別子です。

仕様書

[11] ArabicNyiakeng_Puachue_Hmong のような値が各用字系に割り当てられています。 Unicode に新規用字系が追加されるたびに値も割当られます >>14

[13] 別名として4文字の短縮形等も付与されています。 特性 (UCD)

[15] 具体的な用字系を表す値は明示 (explicit) と呼ばれます。 >>14

[16] 特別な意味を表す暗示 (implicit) が3つあります (Inherited, Common, Unknown)。 >>14

[58] Unicode符号点ScriptScript_Extensions がどのような基準で決められるかは、 Script (UCD) 参照。

[36] 点字は他の用字系と同じレベルの用字系とは言えないものではありますが、 1つの用字系 (明示値) として扱われています。 >>14

[59] 用字系として区別するかどうかの基準は、 Unicode文字として区別するかどうかによります。

[60] ラテン文字ドイツ文字は区別されていません。

[61] 簡体字日本の新字体とその他の漢字は区別されていません。

[62] 文字改革正書法改革などは細かく区別されていません。

Inherited

[17] Inherited は、 複数の用字系で使われる文字で、 前の基底文字用字系継承 (inherit) するものです。 >>14

[18] 例えば nonspacing combining mark, enclosing combining mark, ZWNJ, ZWJ が該当します。 >>14

[35] それらのすべてが Inherited と決められているわけではないようです。 Script (UCD)

[38] 「複数」は n = 1 のこともあるようです。

[21] 用字系符号では Qaai, Zinh に相当します。

Common

[19] Common はその他 (Inherited 以外) の複数の用字系で用いられる文字です。 >>14

[22] 用字系符号では Zyyy に相当します。

[24] Unicode では句読点等の記号の多くが特定の用字系に属さないで共用とされていて、 ScriptCommon になっています。

[39] 「複数」は n = 1 のこともあるようです。

[25] Unicode では用字系はフラットで排他的なので、 1つの用字系に確定できないものは複数に属すると判定されているようです。 Script (UCD) 例えば「ー」 (長音記号) は平仮名でも片仮名でもあって、 どちらかだけに属させることができないので、 Common となっています。

[40] 丸付き文字なども Common になっていることがあります。 Script (UCD)

Unknown

[20] Unknown未割当符号点, 私用符号点, 非文字符号点, サロゲート符号点です。 >>14

[27] 書誌用字系を記述するとき、 用字系を判定できないことを表すために使えます。 >>26

[23] 用字系符号では Zzzz に相当します。

文脈

[9] UCDScriptScript_Extensions の値で使われます。

[12] UCD の special tag <script> で使われます。

[6] XFormsinputmode 属性の値の一部として用いられています。ただし inputmode 属性ではいくつか追加の値が用意されています。 用字系字句

処理

[41] Unicode ではすべての符号点Script で1つ、 Script_Extensions で1つ以上用字系が割り当てられており、 UCD で提供されています。 UAX #24 ではその処理方法は特に規定がありませんが、 文字列に対する各種処理で活用することが想定されています。

[42] 文字用字系を使った処理

暗示値の解決

[43] 暗示値用字系の情報が無いに等しいので、 処理によっては類推した明示値に置き換えることになります。

[44] 符号点には ScriptScript_Extensions があります。 ScriptCommonInherited でも、 Script_Extensions明示値になっていることがあります。

[45] また、 Script明示値であっても、 Script_Extensions には他の複数の値が設定されていることがあります。

[46] Inherited は前の文字の用字系を引き継ぐとされています。 UAX #24 では具体的な解決手順は決められていませんが、 前の暗示値がある文字まで戻ってそれを使うことになります。

[47] 例えば濁点Inherited なので、 前に平仮名があれば平仮名片仮名があれば片仮名になります。

[54] 文字列中の用字系境界決定時には基底文字combining mark (Mc, Mn, Me) の間で分離されるべきではありません。 つまり combining mark は、その Script の値が何であれ、基底文字と同じ値に解決されるべきということになります。 >>48

[56] 実装は結合文字列拡張書記素クラスターにおいて、 Inherited でも Common でもない最初の文字Script (なければ Common) をすべての文字に適用するべきです。 >>48

[55] spacing combining mark は普通は1つの用字系でしか使われないのでその Script を持っています >>48。 ということは普通の使われ方をしていれば基底文字と同じになるはずですが、 そうでないときは基底文字と違う Script のことも出てきます。 nonspacing mark は普通は ScriptInherit になっていますが、特定の用字系でしか使われないものなど例外もあります >>48
[57] InheritedCommon だけ示されていますが、 この場合は Unknown も同じに扱ってしまってよさそうです。

[49] 連なりの境界を探すにあたって Common 等を解決する必要が生じることがあります。 >>48

[51] 最も単純な発見的方法は、 前の文字用字系に依るというものです。 この方法は実際わりとうまくいきます。 が、いつでもうまくいくとは限りません。 >>48

[50] 例えば 「... gamma (γ) is ...」 では前の括弧がラテン文字扱いに、 後の括弧がギリシャ文字扱いになってしまいます。 >>48

[52] 普通は組になった句読点 (括弧引用符の類) はその周りに属するとみなし、 周りの文字列の用字系と同じになるべきです。 できれば開き側と閉じ側の句読点は同じ用字系になるべきです。 >>48

[53] ところがその句読点の使い方は文字列だけから決められるとも限らないのが難しいところです。 >>48

[63] なお Unicode正規表現\p にはこのような処理の規定はありません。 ということは \p の評価では前後の符号点が参照されることはなく、 個々の符号点UCD で持つ特性値によって (それが CommonInherited であろうとも) 一致するかが決定されます。

関連

[3] ISO 15924 も同様な用字系符号を定義しています。ただし UnicodeISO 15924 では用字系の粒度が異なっているため、必ずしも一対一対応していません。

[5] ISO 15924 の登録簿 (>>4) には、両者の対応関係も記載されています。

[29] Unicode は、対応関係にある ISO 15924 符号を出来るだけ別名に設定している >>28 と説明しています。

[31] ISO 15924私用に当たる Q から始まる符号の一部を Unicode 側の値でも使っています。 将来変更の際も後方互換性のため別名として残すとされています。 >>28

[32] 実際に Inherited の旧別名 Qaai は、 新たな別名 Zinh が追加されましたが、そのまま残されています。 >>28 他に Qaac の例があります。 現在定義されているのはその2例だけです。

[30] なお ISO 15924RAUnicode Consortium が受託しており、 ISO 15924 の符号の登録と Unicode の値の追加は協調して行われているようです。

[33] 従って今後 Q から始まる符号を使う必要も生じないのかもしれませんが。
[34] なお Q から始まると私用とするのは ISO 15924 の仕様です。 Unicode用字系特性値には私用の規定はありません。

[37] 文字の名前の先頭には用字系が付されていることが多いです。 文字の名前用字系の長い名前は対応関係が保たれる形で決められています。 >>11

[8] 用字系の名前はブロック名と似ていることが多いですが、両者は異なります。 文字が割り当てられているブロック用字系の関係も絶対的なものではありません。

[10] 他の符号体系は用字系を参照。

メモ