[:alpha:] を一般カテゴリで表現したい
本記事は Unicode 15.0 に準拠しています。
Unicode 下において、[:alnum:] に含まれるアルファベットは [a-zA-Z0-9] ではなく、そのほか多くの言語の文字が含まれていることはあまりにも有名である (?)。
本記事では、想像しているよりも多くの文字が含まれている [:alpha:] ないし [:alnum:]、[:word:] を一般カテゴリ (General Category) とその他の文字コードとして明らかにしたい。
本記事では、仕様として定義されいていることを示しますが、どうしてそのように定義されたかは明らかにできていません。
[:alnum:] や [:word:] は [:alpha:] を内包しているため、まずは [:alpha:] を考える。
■ [:alpha:] の一般カテゴリ化
[:alpha:] は派生プロパティ (Derived Property) の Alphabetic に割り当てられている。このプロパティの構成要素は次のようになっている。
- 派生プロパティ
UppercaseLowercase
- 一般カテゴリ
- Other_Alphabetic
また、ここに含まれる派生プロパティの Uppercase や Lowercase も一般カテゴリと Other_Uppercase / Other_Lowercase で構成される。そこで、Alphabetic に関して一般カテゴリで表現すると、次のようなリストで表すことが出来る。
- 一般カテゴリ
- Other_Alphabetic(Other_Uppercase や Other_Lowercase はここに内包されている)
次の節で Other_Alphabetic に含まれる文字について詳細に示していく。
ちなみに、Other_Uppercase には So や Nl からそれぞれの一部、Other_Lowercase には So、Nl、Lo、Lm、Mn からそれぞれの一部が含まれている。ここでの Nl は一部の ROMAN NUMERAL のみが対象となっている。
もしも、[:alpha:] について具体的な文字を知りたい場合には、以下を参照すると良い。137,760 のコードポイントを確認することが出来る。
■ Other_Alphabetic
Other_Alphabetic には次の 3 つの一般カテゴリにおける一部の文字が含まれている。(UnicodeSet Comparison によって比較カウント)
-
Mc(Spacing Mark): 423 (/443) 文字 -
Mn(Nonspacing Mark): 867 (/1839) 文字 -
So(Other Symbol): 130 (/6431) 文字
Mc と Mn は結合文字であり、ダイアクリティカルマーク等が含まれている。そのため、ラテン文字系では重要になる。(なぜすべての Mc と Mn を含んでいないのかは不明)
ここに含まれている So には次の 5 つの文字種がある。
-
SQUARED LATIN CAPITAL LETTER A-Z ⧉ (e.g.
🄰) -
NEGATIVE SQUARED LATIN CAPITAL LETTER A-Z ⧉ (e.g.
🅰) -
CIRCLED LATIN SMALL LETTER A-Z⧉ (e.g.
ⓐ) -
CIRCLED LATIN CAPITAL LETTER A-Z⧉ (e.g.
Ⓐ) -
NEGATIVE CIRCLED LATIN CAPITAL LETTER A-Z ⧉ (e.g.
🅐)
四角や円で囲まれる文字は ㊙ などラテン文字以外にもさまざまな文字がある。(例:日本語における円の囲み文字)これらは Alphabetic に含まれていない。ラテン文字だけが優遇されている理由は分からなかった。
また、以下のような丸括弧で囲まれたラテン文字も Alphabetic に含まれていない。ラテン文字の中でも差別化があるようだ。
■ [:alpha:] を含むプロパティ
[:alpha:] に影響を受けるようなプロパティは以下の 2 つがある。これらについても一般カテゴリで表現することを考えてみたい。
[:alnum:][:word:]
▽ [:alnum:]
[:alnum:] は [:alpha:] と [:digit:] で構成されており、[:digit:] は Nd に一致している。したがって、[:alnum:] を一般カテゴリで表現すると以下のようになる。
- 一般カテゴリ
- Other_Alphabetic
[:alnum:] に数多くの言語のアルファベットが含まれている他に、Letter Number も含まれている。
▽ [:word:]
[:word:] は次のように構成されている。
[:alpha:][:digit:]- 一般カテゴリ
Mark-
Pc(Connector Punctuation)
- Join_Control
これらを一般カテゴリで表現すると次のようになる。
- 一般カテゴリ
-
SQUARED LATIN CAPITAL LETTER A-Z ⧉ (e.g.
🄰) -
NEGATIVE SQUARED LATIN CAPITAL LETTER A-Z ⧉ (e.g.
🅰) -
CIRCLED LATIN SMALL LETTER A-Z ⧉ (e.g.
ⓐ) -
CIRCLED LATIN CAPITAL LETTER A-Z ⧉ (e.g.
Ⓐ) -
NEGATIVE CIRCLED LATIN CAPITAL LETTER A-Z ⧉ (e.g.
🅐) -
U+200C: ZERO WIDTH NON-JOINER -
U+200D: ZERO WIDTH JOINER
[:alpha:] に含まれていた一部の Mc と Mn は Mark として明示的にすべて含まれているため、Other_Alphabetic は 260 種の So のみとなっている。また、Join_Control ⧉ はリストの最下に示した 2 つの文字である。
参考
UTS (Unicode Technical Standard) で定義されている。
-
# Annex C: Compatibility Properties - UTS #18: Unicode Regular Expressions
(Version: 23, Date: 2022-02-08) -
DerivedCoreProperties.txt
DerivedCoreProperties-15.0.0.txt Date: 2022-08-05, 22:17:05 GMT
DerivedCoreProperties.txt の一般カテゴリには L& があるが、これは Lu (Uppercase Letter)、Ll (Lowercase Letter)、Lt (Titlecase Letter) のいずれかを指している。
# 4.2.4 Comments - UAX #44: Unicode Character Database
- The symbol
"L&"indicates characters of General_CategoryLu,Ll, orLt(uppercase, lowercase, or titlecase letter). For example:0386 ; Greek # L& GREEK CAPITAL LETTER ALPHA WITH TONOSL&as used in these comments is an alias for the derived LC value (cased letter) for the General_Category property, as documented in PropertyValueAliases.txt.
余談
Other_Alphabetic にある一部の Other Symbol の文字がどうして [:alpha:] に含まれているのか不思議だった。歴史的な経緯があるのかもしれないが、これを突き止めるには至らなかった。知っている人がいれば教えてほしい。