github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/unicode/letter.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // unicodeパッケージは、Unicodeコードポイントのいくつかのプロパティをテストするためのデータと関数を提供します。 6 package unicode 7 8 const ( 9 MaxRune = '\U0010FFFF' 10 ReplacementChar = '\uFFFD' 11 MaxASCII = '\u007F' 12 MaxLatin1 = '\u00FF' 13 ) 14 15 // RangeTableは、セット内のUnicodeコードポイントを範囲ごとにリストアップして定義します。 16 // 範囲は2つのスライスにリストされます。16ビット範囲のスライスと32ビット範囲のスライスです。 17 // 2つのスライスはソートされた順序で且つ重複しないようにする必要があります。 18 // また、R32には値が0x10000(1<<16)以上のもののみ含まれるべきです。 19 type RangeTable struct { 20 R16 []Range16 21 R32 []Range32 22 LatinOffset int 23 } 24 25 // Range16は16ビットのUnicodeコードポイントの範囲を表します。範囲はLoからHiまでの値を含み、指定されたストライドを持ちます。 26 type Range16 struct { 27 Lo uint16 28 Hi uint16 29 Stride uint16 30 } 31 32 // Range32はUnicodeコードポイントの範囲を表し、16ビットに収まらない値が1つ以上含まれる場合に使用されます。この範囲はLoからHiまでの間(Hiも含む)で、指定されたストライドを持ちます。LoとHiは常に1<<16以上である必要があります。 33 type Range32 struct { 34 Lo uint32 35 Hi uint32 36 Stride uint32 37 } 38 39 // CaseRangeは、単純な(1つのコードポイントから別のコードポイントへの)大文字小文字変換のためのUnicodeコードポイントの範囲を表します。 40 // 範囲は、LoからHiまでの範囲で、固定のストライド1で実行されます。デルタは、その文字の異なるケースに到達するためにコードポイントに追加する数値です。デルタは負数になることもあります。ゼロの場合、対応するケースに文字があることを意味します。特別な場合として、交互に対応する大文字と小文字のペアのシーケンスを表すものがあります。これは、固定デルタの 41 // 42 // {UpperLower、UpperLower、UpperLower} 43 // 44 // と表示されます。 45 // 46 // 定数UpperLowerには、通常ありえないデルタ値があります。 47 type CaseRange struct { 48 Lo uint32 49 Hi uint32 50 Delta d 51 } 52 53 // SpecialCaseはトルコ語などの言語固有の大文字小文字マッピングを表します。 54 // SpecialCaseのメソッドは、標準のマッピングをカスタマイズするために(オーバーライドすることによって)使用されます。 55 type SpecialCase []CaseRange 56 57 // CaseMapping 内の CaseRanges のデルタ配列への索引。 58 const ( 59 UpperCase = iota 60 LowerCase 61 TitleCase 62 MaxCase 63 ) 64 65 // [CaseRange] のDeltaフィールドがUpperLowerである場合、 66 // これはCaseRangeが(例えば) [Upper] [Lower] [Upper] [Lower] の形式のシーケンスを表していることを意味します。 67 const ( 68 UpperLower = MaxRune + 1 69 ) 70 71 // 指定された範囲テーブル内にルーンが含まれているかどうかを報告します。 72 func Is(rangeTab *RangeTable, r rune) bool 73 74 // IsUpperはルーンが大文字のアルファベットかどうかを報告します。 75 func IsUpper(r rune) bool 76 77 // IsLowerは、ルーンが小文字の文字かどうかを報告します。 78 func IsLower(r rune) bool 79 80 // IsTitleは、与えられたルーンがタイトルケースの文字であるかどうかを報告します。 81 func IsTitle(r rune) bool 82 83 // Toは、指定されたケース([UpperCase]、[LowerCase]、または[TitleCase])にルーンをマッピングします。 84 func To(_case int, r rune) rune 85 86 // ToUpperはルーンを大文字にマッピングします。 87 func ToUpper(r rune) rune 88 89 // ToLowerはルーン文字を小文字にマッピングします。 90 func ToLower(r rune) rune 91 92 // ToTitleはルーンをタイトルケースにマッピングします。 93 func ToTitle(r rune) rune 94 95 // ToUpperはルーンを大文字にマッピングしますが、特別なマッピングに優先します。 96 func (special SpecialCase) ToUpper(r rune) rune 97 98 // ToTitleはルーンをタイトルケースにマッピングし、特別なマッピングを優先します。 99 func (special SpecialCase) ToTitle(r rune) rune 100 101 // ToLowerはルーンを小文字にマッピングしますが、特別なマッピングに優先します。 102 func (special SpecialCase) ToLower(r rune) rune 103 104 // SimpleFoldは、Unicodeが定義するシンプルな大文字小文字変換に基づいて、Unicodeコードポイントに相当するコードポイントを反復します。rune自体を含むruneに相当するコードポイントの中で、SimpleFoldは、存在する場合はrよりも大きい最小のruneを返し、存在しない場合は0以上の最小のruneを返します。rが有効なUnicodeコードポイントでない場合、SimpleFold(r)はrを返します。 105 // 例えば: 106 // 107 // SimpleFold('A') = 'a' 108 // SimpleFold('a') = 'A' 109 // 110 // SimpleFold('K') = 'k' 111 // SimpleFold('k') = '\u212A' (ケルビン記号、K) 112 // SimpleFold('\u212A') = 'K' 113 // 114 // SimpleFold('1') = '1' 115 // 116 // SimpleFold(-2) = -2 117 func SimpleFold(r rune) rune