[2] [DFN[Unicode [RUBYB[用字系特性値]@en[Script Property Value]]]]は、[[Unicode]] における[[用字系]]を表す[[識別子]]です。

* 仕様書

[REFS[
- [1] [CITE@en-us[UAX #24: Unicode Script Property]] ([TIME[2013-09-27 22:15:13 +09:00]] 版) <http://www.unicode.org/reports/tr24/#Values>
- [26] [CITE@en-us[UAX #24: Unicode Script Property]], [TIME[2022-08-25T17:19:20.000Z]], [TIME[2022-11-12T09:03:25.601Z]] <https://www.unicode.org/reports/tr24/#Classification_by_Script>
- [14] [CITE@en-us[UAX #24: Unicode Script Property]], [TIME[2022-08-25T17:19:20.000Z]], [TIME[2022-11-12T08:44:05.701Z]] <https://www.unicode.org/reports/tr24/#Script>
-- [28] 
[CITE@en-us[UAX #24: Unicode Script Property]], [TIME[2022-08-25T17:19:20.000Z]], [TIME[2022-11-12T09:13:04.920Z]] <https://www.unicode.org/reports/tr24/#Relation_To_ISO15924>
-
[48] 
[CITE@en-us[UAX #24: Unicode Script Property]], [TIME[2022-08-25T17:19:20.000Z]], [TIME[2022-11-12T14:20:08.401Z]] <https://www.unicode.org/reports/tr24/#Implementation>


]REFS]

* 値

[11] 
[CODE[Arabic]] 
や
[CODE[Nyiakeng_Puachue_Hmong]]
のような値が各[[用字系]]に割り当てられています。
[[Unicode]]
に新規[[用字系]]が追加されるたびに値も割当られます
[SRC[>>14]]。

[13] 
[[別名]]として4文字の短縮形等も付与されています。
[SEE[ [[特性 (UCD)]] ]]

[15] 
具体的な[[用字系]]を表す値は[DFN[[RUBYB[明示][explicit]]値]]と呼ばれます。
[SRC[>>14]]

[16] 
特別な意味を表す[DFN[[RUBYB[暗示][implicit]]値]]が3つあります ([CODE[Inherited]],
[CODE[Common]],
[CODE[Unknown]])。
[SRC[>>14]]

[58] 
[[Unicode符号点]]の [CODE[Script][Script (UCD)]] や 
[CODE[Script_Extensions]]
がどのような基準で決められるかは、
[[Script (UCD)]]
参照。


[36] 
[[点字]]は他の[[用字系]]と同じレベルの[[用字系]]とは言えないものではありますが、
1つの[[用字系]] ([[明示値]]) として扱われています。
[SRC[>>14]]

[59] 
[[用字系]]として区別するかどうかの基準は、
[[Unicode]] が[[文字]]として区別するかどうかによります。

[EG[
[60] [[ラテン文字]]と[[ドイツ文字]]は区別されていません。
]EG]

[EG[
[61] [[簡体字]]と[[日本の新字体]]とその他の[[漢字]]は区別されていません。
]EG]

[EG[
[62] [[文字改革]]、[[正書法]]改革などは細かく区別されていません。
]EG]

** [CODE[Inherited]]

[17] 
[DFN[[CODE[Inherited]]]]
は、
複数の[[用字系]]で使われる[[文字]]で、
前の[[基底文字]]の[[用字系]]を[RUBYB[継承][inherit]]するものです。
[SRC[>>14]]

[18] 
例えば
[[nonspacing combining mark]],
[[enclosing combining mark]],
[CODE(charname)@en[ZWNJ]],
[CODE(charname)@en[ZWJ]]
が該当します。
[SRC[>>14]]

;; [35] それらのすべてが [CODE[Inherited]] と決められているわけではないようです。
[SEE[ [[Script (UCD)]] ]]

[38] 「複数」は [VAR[n]] = 1 のこともあるようです。

[21] 
[[用字系符号]]では
[CODE[Qaai]],
[CODE[Zinh]]
に相当します。

** [CODE[Common]]

[19] 
[DFN[[CODE[Common]]]]
はその他 ([CODE[Inherited]] 以外) の複数の[[用字系]]で用いられる[[文字]]です。
[SRC[>>14]]

[22] 
[[用字系符号]]では [CODE[Zyyy]] に相当します。

[24] 
[[Unicode]] では[[句読点]]等の[[記号]]の多くが特定の[[用字系]]に属さないで共用とされていて、
[CODE[Script]] が [CODE[Common]] になっています。

[39] 「複数」は [VAR[n]] = 1 のこともあるようです。

[25] 
[[Unicode]] では[[用字系]]はフラットで排他的なので、
1つの[[用字系]]に確定できないものは複数に属すると判定されているようです。
[SEE[ [[Script (UCD)]] ]]
例えば「ー」 ([[長音記号]]) は[[平仮名]]でも[[片仮名]]でもあって、
どちらかだけに属させることができないので、
[CODE[Common]]
となっています。

[40] 
[[丸付き文字]]なども [CODE[Common]] になっていることがあります。
[SEE[ [[Script (UCD)]] ]]

** [CODE[Unknown]]

[20] 
[DFN[[CODE[Unknown]]]]
は[[未割当符号点]],
[[私用符号点]],
[[非文字符号点]],
[[サロゲート符号点]]です。
[SRC[>>14]]

[27] 
[[書誌]]に[[用字系]]を記述するとき、
[[用字系]]を判定できないことを表すために使えます。
[SRC[>>26]]

[23] 
[[用字系符号]]では [CODE[Zzzz]] に相当します。


* 文脈

[9] 
[[UCD]]
の
[CODE[Script][Script (UCD)]]
や
[CODE[Script_Extensions]]
の値で使われます。

[12] 
[[UCD]] の special tag [CODE[<script>]] で使われます。

[6] [[XForms]] の [CODE(XMLa)@en[[[inputmode]]]] [[属性]]の値の一部として用いられています。ただし
[CODE(XMLa)@en[[[inputmode]]]] [[属性]]ではいくつか追加の値が用意されています。
[SEE[ [[用字系字句]] ]]

[REFS[
- [7] [CITE@EN[XForms 1.1]] ([TIME[2010-08-12 22:45:33 +09:00]] 版) <http://www.w3.org/TR/xforms/#mode-scripts>
]REFS]

* 処理

[41] 
[[Unicode]] ではすべての[[符号点]]に [CODE[Script]] で1つ、
[CODE[Script_Extensions]] で1つ[[以上]]の[[用字系]]が割り当てられており、
[[UCD]] で提供されています。
[[UAX #24]] ではその処理方法は特に規定がありませんが、
[[文字列]]に対する各種処理で活用することが想定されています。

[FIG(short list)[ [42] [[文字]]の[[用字系]]を使った処理
- [[パターンマッチ]]
-- [CODE[\p]]
- [[連なり]]の検出
-- [[OpenType]] [[フォント]]利用のための [[shaping]] で
- [[spoofing]] 防止処置
- [[文字のレンダリング]]の方法決定

]FIG]

** 暗示値の解決

[43] 
[[暗示値]]は[[用字系]]の情報が無いに等しいので、
処理によっては類推した[[明示値]]に置き換えることになります。

[44] 
[[符号点]]には [CODE[Script][Script (UCD)]] と [CODE[Script_Extensions]]
があります。
[CODE[Script][Script (UCD)]] が [CODE[Common]] や [CODE[Inherited]] でも、
[CODE[Script_Extensions]] は[[明示値]]になっていることがあります。

;; [45] また、 [CODE[Script][Script (UCD)]] が[[明示値]]であっても、
[CODE[Script_Extensions]] には他の複数の値が設定されていることがあります。

[46] 
[CODE[Inherited]] は前の文字の[[用字系]]を引き継ぐとされています。
[[UAX #24]] では具体的な解決手順は決められていませんが、
前の[[暗示値]]がある[[文字]]まで戻ってそれを使うことになります。

[EG[
[47] 例えば[[濁点]]は [CODE[Inherited]] なので、
前に[[平仮名]]があれば[[平仮名]]、
[[片仮名]]があれば[[片仮名]]になります。
]EG]

[54] 
[[文字列]]中の[[用字系]]の[[境界]]決定時には[[基底文字]]と 
[[combining mark]] ([CODE[Mc]], [CODE[Mn]], [CODE[Me]])
の間で分離されるべきではありません。
つまり [[combining mark]] は、その [CODE[Script][Script (UCD)]]
の値が何であれ、[[基底文字]]と同じ値に解決されるべきということになります。
[SRC[>>48]]

[56] 
実装は[[結合文字列]]や[[拡張書記素クラスター]]において、
[CODE[Inherited]] でも [CODE[Common]] でも''ない''最初の[[文字]]の 
[CODE[Script][Script (UCD)]] 
(なければ [CODE[Common]])
をすべての[[文字]]に適用するべきです。
[SRC[>>48]]

;;
[55] 
[[spacing combining mark]] は普通は1つの[[用字系]]でしか使われないのでその
[CODE[Script]] を持っています [SRC[>>48]]。
ということは普通の使われ方をしていれば[[基底文字]]と同じになるはずですが、
そうでないときは[[基底文字]]と違う [CODE[Script]] のことも出てきます。
[[nonspacing mark]] は普通は [CODE[Script]] が [CODE[Inherit]]
になっていますが、特定の[[用字系]]でしか使われないものなど例外もあります [SRC[>>48]]。

;; [57] 
[CODE[Inherited]] や [CODE[Common]] だけ示されていますが、
この場合は [CODE[Unknown]] も同じに扱ってしまってよさそうです。


-*-*-

[49] 
[[連なり]]の境界を探すにあたって [CODE[Common]] 等を解決する必要が生じることがあります。
[SRC[>>48]]

[51] 
最も単純な[[発見的方法]]は、
前の[[文字]]の[[用字系]]に依るというものです。
この方法は実際わりとうまくいきます。
が、いつでもうまくいくとは限りません。
[SRC[>>48]]

[EG[
[50] 
例えば
「... gamma (γ) is ...」
では前の括弧が[[ラテン文字]]扱いに、
後の括弧が[[ギリシャ文字]]扱いになってしまいます。
[SRC[>>48]]
]EG]

[52] 
普通は組になった[[句読点]] ([[括弧]]や[[引用符]]の類) はその周りに属するとみなし、
周りの文字列の[[用字系]]と同じになるべきです。
できれば開き側と閉じ側の[[句読点]]は同じ[[用字系]]になるべきです。
[SRC[>>48]]

;; [53] ところがその[[句読点]]の使い方は[[文字列]]だけから決められるとも限らないのが難しいところです。
[SRC[>>48]]

-*-*-

[63] 
なお [[Unicode正規表現]]の [CODE[\p]] にはこのような処理の規定はありません。
ということは [CODE[\p]] の評価では前後の[[符号点]]が参照されることはなく、
個々の[[符号点]]が [[UCD]] で持つ[[特性値]]によって
[WEAK[(それが [CODE[Common]] や [CODE[Inherited]] であろうとも)]]
[[一致]]するかが決定されます。

* 関連

[3] [[ISO 15924]] も同様な[[用字系符号]]を定義しています。ただし [[Unicode]] と [[ISO 15924]]
では[[用字系]]の粒度が異なっているため、必ずしも一対一対応していません。

[5] [[ISO 15924]] の登録簿 (>>4) には、両者の対応関係も記載されています。

[29] 
[[Unicode]] は、対応関係にある [[ISO 15924]] 符号を出来るだけ別名に設定している
[SRC[>>28]] と説明しています。

[31] 
[[ISO 15924]] 
で[[私用]]に当たる [CODE[Q]] から始まる[[符号]]の一部を
[[Unicode]]
側の値でも使っています。
将来変更の際も[[後方互換性]]のため[[別名]]として残すとされています。
[SRC[>>28]]

[32] 
実際に [CODE[Inherited]] の旧[[別名]] [CODE[Qaai]] は、
新たな[[別名]] [CODE[Zinh]] が追加されましたが、そのまま残されています。
[SRC[>>28]]
他に [CODE[Qaac]] の例があります。
現在定義されているのはその2例だけです。


[30] 
なお
[[ISO 15924]] の [[RA]] は [[Unicode Consortium]] が受託しており、
[[ISO 15924]] の符号の登録と [[Unicode]] の値の追加は協調して行われているようです。

;; [33] 従って今後 [CODE[Q]] から始まる符号を使う必要も生じないのかもしれませんが。

;; [34] なお [CODE[Q]] から始まると[[私用]]とするのは
[[ISO 15924]]
の仕様です。
[[Unicode用字系特性値]]には[[私用]]の規定はありません。


[REFS[
- [4] [CITE@en-gb[[[ISO 15924]] - Code Lists]] ([TIME[2012-08-31 00:42:44 +09:00]] 版) <http://www.unicode.org/iso15924/codelists.html>
]REFS]


-*-*-

[37] 
[[文字の名前]]の先頭には[[用字系]]が付されていることが多いです。
[[文字の名前]]と[[用字系]]の長い名前は対応関係が保たれる形で決められています。
[SRC[>>11]]


[8] [[用字系]]の名前は[[ブロック名]]と似ていることが多いですが、両者は異なります。
[[文字]]が割り当てられている[[ブロック]]と[[用字系]]の関係も絶対的なものではありません。




[10] 
他の符号体系は[[用字系]]を参照。


* メモ