[2]
Unicode の UCD の特性 Script
,
Script_Extensions
は、
文字 (Unicode符号点)
の用字系を表すものです。
Script
特性[3]
Script
(別名: sc
)
はカタログ型の特性です >>7。
特性値はUnicode用字系特性値です。
[26]
Script
は符号点の用字系を1つ指定するものです。
[9] UCD の Scripts.txt
>>10
に記述されています。 >>7
UCD の一般的なファイル形式を採用しています。
明示されていないときの既定値は Unknown
です >>37。
Script_Extensions
特性[25]
Script_Extensions
(別名: scx
)
は、
Unicode用字系特性値の集合を値とする特性です >>23。
[27]
Script_Extensions
は符号点の用字系を1つ以上指定するものです。
Script
は1つの用字系しか記述できないため、
複数の用字系で使われるものは
Common
や Inherited
とされるか、
取捨選択されています。
Script_Extensions
では複数を記述できます。
[28]
Script_Extensions
は次の要件を満たします。 >>23
Script
が明示値なら、
scx集合はその値を含みます。[30]
符号点の Script
が Unknown
なら、
scx集合は { Unknown
} です。
>>23
[33]
符号点の Script
が Inherited
や Common
のときは、
2通りがあります。
scx集合も { Inherited
} や { Common
} となることと、
明示値 (具体的な用字系) が1つ以上含まれた集合となることがあります。
[35]
符号点の Script
が明示値なら、 scx集合にその値が含まれます。
加えてその他の明示値が含まれることもあります。
[42] UCD の ScriptExtensions.txt
>>41
に記述されています。 >>37
UCD の一般的なファイル形式を採用しています。
値はscx集合に含まれる値を空白区切りで並べたものとなっています
>>37。
明示されていないときの既定値は Script
の値です >>37。
[12]
Script
特性値は次のような基準で決められています。
>>11
Mn
や Me
などは、
Inherited
とします。Common
とします。Unknown
とします。[22]
丸付き文字や組み文字などは、
大部分が Common
ですが、
一部が片仮名やハングルになっているなど、
扱いが一貫していません。
>>7
Common
なのに
「㋐」や「㌀」が Katakana
です >>7
が、合理的理由があるようには思えません。
Script
の値は固定ではなく変えることができる (>>21)
と説明されているにも関わらず、
今更変えるのも実装上如何なものか >>7
と放置されているようです。
(今現在雑な値が設定されている (ということは有効に活用されているとは思えない)
ものを変えることにどんな不利益があるのか謎ですが...)[36]
Script_Extensions
特性値は次のような基準で決められています。
>>23
Script
が Inherited
か Common
で、
およそどの用字系でも使われ得るものなら、
{ Inherited
} か { Common
}
です。Script
の値 } です。[5]
数式中の記号等、
各文字の一般的な用法から転じて特殊に使われるものは、
文字の
Script
や
Script_Extensions
の決定で考慮しないとされています。
>>4, >>23
[6] そのため用字系に基づく処理では、用途によっては、 文字から決まる値と違う処理が必要になることがあります。 >>4
[19]
Script
や
Script_Extensions
の値は変更されることがあります。 >>11, >>23
[20] 未割当符号点に新しい文字が追加されると、適切な用字系に設定されます。
[21] 既存の符号点でも文字の用法の情報が集まり、他の用字系で使われるとわかれば、 適宜変更されます。 >>11, >>23
[45]
Unicode正規表現の \p
では、
Script
や Script_Extensions
も使うことができます。
[46]
Script
や Script_Extensions
は、特例で簡略的な構文が使えることがあります。
[47]
Unicode 側の説明によると、
Script
よりも Script_Extensions
を使ったほうが、
Common
や
Inherited
が適切な用字系になっていて便利で、
例えば「ー」 (長音記号) で違いが生じます。
>>43, >>44
[48]
Perl も Script_Extensions
が Script
の改良版なのだから、
新しいコードは Script_Extensions
を使うのが良かろうとしています。
>>79
[49]
そしてあろうことか、 Perl 5.26 から、それまでの Script
にかえて Script_Extensions
が省略構文
[50]
これは非互換変更で、旧来 \p{Hiragana}
は
\p{sc=Hiragana}
の意味だったところ、
現行版では
\p{scx=Hiragana}
の意味に強制的に置き換わってしまっています。
[51]
確かに \p{sc=Katakana}
だと「ー」 (長音記号)
が一致しないという不都合があるので、その点だけ見れば
\p{scx=Katakana}
は改善にみえます。
が、違いはそれだけではありません。
[52] 例えば、文字列
アー﹅イ〓〃〝ウ「・」、エ【。】オ
は、
正規表現 /^\p{scx=Katakana}+$/
に一致します。これは直感からかけ離れた結果ではないでしょうか?
どうやら、
日本語文中に登場しそうな句読点や記号のうち、
欧米であまり使わなそうなものは、
ことごとく Script_Extensions
で平仮名や片仮名扱いになっているようです。
[53]
Script_Extensions
だけではなく実は
Script
も若干怪しいところがあります。
Script
Katakana
には、
「㌀」や「㋐」
のようなものも含まれています。
「㌀」は微妙ですが、
「㋐」は片仮名として文中で使われることはまずなく、
箇条書きなどの記号に分類するのが適当ではないでしょうか。
[54]
つまり、
「読み仮名入力欄がすべて平仮名で書かれているか確認する」
「文中からカタカナ語を抜き出す」
のような用途には
Script
も
Script_Extensions
も使いにくそうです。
[55]
そのような典型的な用途に使えないとすると、
Script
や
Script_Extensions
はどんなときに使えばいいのでしょうかね?
[57] Perlで\p{Hiragana}とかが記号にマッチする問題 - Qiita, https://qiita.com/takeda25/items/9e2a267978d43233bcb5
Common
など特別な値もあります。