[1] [DFN[case folding]] は、主に[[文字列]]の[[比較]]を目的として、[[大文字]]と[[小文字]]の違いを正規化する操作です。 * 仕様書 [REFS[ - [4] - [8] [CITE@en-us[UAX #44: Unicode Character Database]] ([TIME[2013-09-27 22:15:15 +09:00]] 版) ]REFS] * 既定 case 変換、既定 Case Folding、既定無 Case 一致 [12] [DFN[[RUBYB[既定 case 変換]@en[default case conversion]]]]は次の3つの演算 [SRC[>>4]] です。 - [13] [DFN[[CODE[[[toUppercase([VAR[X]])]]]]]]: 各[[文字]]に対して [CODE[[[Uppercase_Mapping([VAR[C]])]]]] - [14] [DFN[[CODE[[[toLowercase([VAR[X]])]]]]]]: 各[[文字]]に対して [CODE[[[Lowercase_Mapping([VAR[C]])]]]] - [15] [DFN[[CODE[[[toTitlecase([VAR[X]])]]]]]]: -= [[UAX #29]] により[[語境界]]を探し、 -= [[語]]の最初の [[cased文字]]について [CODE@en[[[Titlecase_Mapping([VAR[C]])]]]] を適用し -= [[語]]中のそれ以後の各[[文字]]に対して [CODE[[[Lowercase_Mapping([VAR[C]])]]]] を適用する - [16] これらは完全 case 変換 (>>9) に加えて、文脈依存の写像 (>>10) も適用する [2] [DFN[[RUBYB[既定 Case Folding]@en[Default Case Folding]]]]は [DFN[[CODE[toCasefold([VAR[X]])]]]] と表記され、各[[文字]]に対して [CODE[Case_Folding([VAR[X]])]] を適用することをいいます [SRC[>>4]]。 ;; [19] これらは[[文字列]]に対する演算です。 [20] 既定 case 変換には文脈依存の写像の適用も含まれていますが、既定 Case Folding には含まれていません。 という点で既定 Case Folding の方が単純な演算です。 [CODE@en[[[toCasefold([VAR[X]])]]]] は[[小文字]]へと変換しますが、 [CODE@en[[[toLowercase([VAR[X]])]]]] と同じではありません。 [21] 入力が[[正規化形]]だとしても、既定 Case Folding の結果が[[正規化形]]とは限りません [SRC[>>4]]。 [22] [DFN[[RUBYB[既定無 Case 一致]@en[Default Caseless Matching]]]]は、2つの[[文字列]]の[[比較]]演算で、 両者に [CODE[[[toCsaefold([VAR[X]])]]]] を適用した結果が等しいことをいいます [SRC[>>4]]。 ;; [17] ここでいう「既定」とは、[[言語]]などによる[[仕立て]]の無い状態であることを指すようです。 * 完全 case 写像、完全 case folding [9] [DFN[[RUBYB[完全 case 写像]@en[full case mapping]]]]、[DFN[[RUBYB[完全 case folding]@en[full case folding]]]] は [[SpecialCasing.txt]] と [[UnicodeData.txt]] に含まれるデータから決まる[[写像]]で、次のように表記されます [SRC[>>4]]。 - [DFN[[CODE@en[Lowercase_Mapping([VAR[C]])]]]] - [DFN[[CODE@en[Titlecase_Mapping([VAR[C]])]]]] - [DFN[[CODE@en[Uppercase_Mapping([VAR[C]])]]]] - [DFN[[CODE@en[Case_Folding([VAR[C]])]]]] ;; [18] これらは[[文字]]に対する演算です。 [5] [CODE[Case_Folding([VAR[C]])]] は [[CaseFolding.txt]] にも含まれていて、状態欄の値が「[[C]]」 か「[[F]]」のもの (それ以外は無変換) です。 [REFS[ - [6] ]REFS] ;; [11] ここでいう「完全」とは、文脈依存 (>>10) のものに対して文脈なく常に成立する変換関係のことを指しているようです。 * 文脈依存の case 変換 [10] [[文字]]だけではなくその文脈によって決まる大文字と小文字の関係として、次のものが定義されています [SRC[>>4]]。 [FIG[ - [CODE[[[Final_Sigma]]]] - [CODE[[[After_Soft_Dotted]]]] - [CODE[[[More_Above]]]] - [CODE[[[Before_Dot]]]] - [CODE[[[After_I]]]] ]FIG] * [CODE@en[SpecialCasing]] [REFS[ - [7] ]REFS]