* 仕様書

[REFS[
- [142] [CITE[The Unicode Standard, Version 13.0 - ch02.pdf]], [TIME[2020-03-09T17:53:32.000Z]], [TIME[2020-12-06T08:54:12.180Z]] 
<https://www.unicode.org/versions/latest/ch02.pdf#G1708>
- [1] 
[CITE[The Unicode Standard, Version 13.0 - ch03.pdf]], [TIME[2020-03-09T17:53:34.000Z]], [TIME[2020-12-06T03:41:31.993Z]] <https://www.unicode.org/versions/latest/ch03.pdf#G52443
-- [115] [CSECTION[Application of Combining Marks]]
<https://www.unicode.org/versions/latest/ch03.pdf#G50030>
]REFS]

* 書記素基底


[3] [[特性][特性 (UCD)]]
[DFN[[CODE[Grapheme_Base]]]]
の[[文字]]には、
[[基底文字]]が含まれますが、 
[CODE[U+FF9E]], [CODE[U+FF9F]]
は含まれません。
ほとんどの 
[[spacing mark]]
が含まれます。
[SRC[>>1 D58]]

[2] 
[DFN[[RUBYB[書記素基底][grapheme base]]]]は、
[[特性][特性 (UCD)]]
[CODE[Grapheme_Base]]
の[[文字]]か、
[[標準韓音節ブロック]]です。
[SRC[>>1 D58]]

[4] 
[[書記素基底]]は[[拡張済基底]]と似ていますが、多少の出入りがあります。

[REFS[
- [9] [CODE[Grapheme_Base]] の一覧:
<https://chars.suikawiki.org/set/%24unicode%3AGrapheme_Base>
- [11] 
[[基底文字]]と
[CODE[Grapheme_Base]]
の比較
<https://chars.suikawiki.org/set/compare?expr1=%24unicode%3Abase-character&expr2=%24unicode%3AGrapheme_Base>
]REFS]

* 書記素拡張子

[5] 
[DFN[[RUBYB[書記素拡張子][grapheme extender]]]]は、
[[特性][特性 (UCD)]]
[DFN[[CODE[Grapheme_Extend]]]]
の[[文字]]です。
すべての 
[[nonspacing mark]]、
[CODE(charname)@en[ZWJ]],
[CODE(charname)@en[ZWNJ]],
[CODE[U+FF9E]],
[CODE[U+FF9F]],
一部の [[spacing mark]]
が含まれます。
[SRC[>>1 D59]]

[6] 
[CODE(charname)@en[ZWJ]],
[CODE(charname)@en[ZWNJ]]
は、
前後が他の[[書記素拡張子]]の列のとき、
それを分断しないように[[書記素拡張子]]に含まれています。
[SRC[>>1 D59]]

[7] 
[[書記素基底]]と[[書記素拡張子]]は、[[互いに素]]です。
[SRC[>>1 D59]]

[8] 
[CODE[Grapheme_Extend]]
は
[CODE[Grapheme_Cluster_Break]] = [CODE[Extend]]
から導出されたものですが、完全には一致しません。
[SRC[>>1 D59]]

[REFS[
- [10] [CODE[Graphme_Extend]] の一覧
<https://chars.suikawiki.org/set/%24unicode%3AGrapheme_Extend>
- [12] [[spacing mark]]
が
[CODE[Grapheme_Base]]
と
[CODE[Grapheme_Extend]]
のどちらに属するか見る
<https://chars.suikawiki.org/set/compare?expr=$unicode:spacing-mark&expr=$unicode:Grapheme_Base%20-%20$unicode:base-character&expr=$unicode:Grapheme_Extend%20-%20$unicode:nonspacing-mark>
]REFS]

* 書記素クラスター

[13] 
[DFN[[RUBYB[書記素クラスター][grapheme cluster]]]]は、
[[UAX #29]]
[[書記素クラスター境界]]間の[[テキスト]]です。
[SRC[>>1 D60]]

[14] 
[[UAX #29]]
は[[拡張済書記素クラスター]]と[[遺物書記素クラスター]]を定義している上に、
[[tailor]]
可能と定めています。
[SRC[>>1 D60]]

[19] 
[DFN[[RUBYB[拡張済書記素クラスター][extended grapheme cluster]]]]は、
[[UAX #29]]
[[拡張済書記素クラスター境界]]の間の[[テキスト]]です。
[SRC[>>1 D61]]



[15] 
[[書記素クラスター]]は[[テキスト]]の水平に segment 化可能な単位です。
いくつかの[[書記素基底]]と、
それに適用されるいくつかの
[[nonspacing mark]]
を合わせたものです。
[SRC[>>1 D60]]

[16] [[結合文字列]]と[[書記素クラスター]]は似ていますが、
同じではありません。
[[結合文字列]]は主に[[正規化]]、
[[比較][文字列の比較]]、
[[検索]]のような処理に関係してきます。
[[書記素クラスター]]は主に
[[text rendering]]
や[[カーソル]]配置、
[[テキストの選択]]のような処理に関係してきます。
[[比較][文字列の比較]]や[[検索]]に関係することもあります。
[SRC[>>1 D60]]


[18] 
多くの処理においては、
[[書記素クラスター]]は、
[[書記素基底]]と同じ[[特性][特性 (UCD)]]の1つの[[文字]]のような挙動を示します。
[SRC[>>1 D60]]

-*-*-

[20] 
[DFN[[RUBYB[関連付けられた書記素基底][associated grapheme base]]]]は、
[[nonspacing mark]]
が属する[[書記素クラスター]]中の[[書記素基底]]です。
[SRC[>>115 D61b]]

[22] 
[[nonspacing mark]]
は、
[[関連付けられた書記素基底]]に[DFN[[RUBYB[適用する][apply]]]]といいます
([DFN[[RUBYB[図形的適用][graphical application]]]])。
[SRC[>>115 D61b]]

;;
[21] [[関連付けられた基底文字]]とそれへの[[適用][関連付けられた基底文字]]と似た意味ですが、少しずつ定義が違います。


[23] 
[CODE[Vertical_Orientation]]
は[[書記素クラスター]]の最初の[[文字]]によって定義されます。
[SEE[ [CODE[Vertical_Orientation]] ]]

-*-*-


[24] 
[[書記素クラスター]]は、
大まかに言って一般の[[利用者]]が
「[RUBYB[[[文字]]][character]]」
と認識するものを表しています。
[[Unicode]]
は[[結合文字]]その他の仕組みを導入し
「文字」
より細かな単位を[[文字][Unicode文字]]と呼んでしまっているため、
齟齬が生じています。

[27] 
[CITE[[[CSS Writing Modes]]]]
の一部の[[規定]]では、
[RUBYB[[[文字]]][character]]とは[[書記素クラスター]]を意味すると定義して使っています。
いちいち[[書記素クラスター]]と書いて使うのが厳密なのでしょうが、
煩雑で読みにくくイメージしがたい文章になってしまいます。

[25] 
[CITE[The Unicode Standard]]
は、
[[スロバキア語]] [CODE[ch]]、
「k[SUP[w]]」のような[[修飾子]]付きのもの、
[[合字]]その他のような一般の
「文字」
の単位が必ずしも一定しない事例があることから、
[[言語]]や、
[[照合]]、[[一致]]など[[応用]]にも依存して
「文字」
の決め方は変える必要があるとしています。
[SRC[>>142]]

[26] 
[[書記素クラスター]]は、一般の
「文字」
に近いものを[[言語]]に依存しない形で定義したものです。
これを基礎に、[[言語]]や用途によって必要なら
[[tailor]]
して使うことが期待されています。
[SRC[>>142]]


* 応用

[17] 
[[UTR #50]]
や
[CITE[[[CSS Writing Modes]]]]
は[[書記素クラスター]]を使って[[書字方向]]の処理を定めています。

[30] 
[[Unicode用字系特性値]]

* フォント

[28] [CODE[GSUB]], [CODE[cmap]]

[29] [[Uniscribe]] は[[クラスター]]という単位を持っています。
[[書記素クラスター]]に近いものに見えますが、同じかどうかは不明です。
[SEE[ [[連なり]], [[shaping engine]]]]


* 関連

[SEE[ [[組合せて使う文字]] ]]


* メモ