Various small fixes for bootstrap.
[cslatevm.git] / src / i18n / properties.slate
blobfefb8dff69f2d0c2c42ad6266d0a8218bd2180ad
2 "This file contains routines for handling unicode chacter data.  The
3 routines for building the data tables can be found at
4 unicodeTable.slate"
6 Unicode define: #Trie &parents: {ArrayBacked}.
8 Unicode Trie printName := 'Unicode Trie'.
10 c@(Unicode Trie traits) new
11 [c copy `>> [contents := c contents newSize: 8704. ]].
13 c@(Unicode Trie traits) at: n
15   c contents at: n
18 c@(Unicode Trie traits) at: n put: a
20   c contents at: n put: a
23 c@(Unicode Trie traits) atCode: n
25   (c contents at: (n bitShift: -7)) at: (n bitAnd: 127)
28 c@(Unicode Trie traits) atCode: n put: i
30   (c contents at: (n bitShift: -7)) at: (n bitAnd: 127) put: i
33 c@(UnicodeCharacter traits) ensureExistence
35  (CharacterData Unicode PropertyTable atCode: c code) 
36      ifNil: [error: 'There\'s no character with code point ' ; c code printString].
37  True
40 c@(UnicodeCharacter traits) exists
42  (CharacterData Unicode PropertyTable atCode: c code) 
43      ifNil: [^ False].
44  True
47 c@(UnicodeCharacter traits) generalCategory
49  c exists ifTrue:
50    [(CharacterData Unicode PropertyTable atCode: c code) GeneralCategory]
53 c@(UnicodeCharacter traits) combiningClass
55  c exists ifTrue:
56    [(CharacterData Unicode PropertyTable atCode: c code) CanonicalCombiningClass]
59 c@(UnicodeCharacter traits) bidiClass
61  c exists ifTrue:
62    [(CharacterData Unicode PropertyTable atCode: c code) BidiClass]
65 c@(UnicodeCharacter traits) bidiMirrored
67   c exists ifTrue:
68     [(CharacterData Unicode PropertyTable atCode: c code) BidiMirrored]
71 c@(UnicodeCharacter traits) decompositionType
73   c exists ifTrue:
74     [(CharacterData Unicode PropertyTable atCode: c code) DecompositionType]
77 "Tests for different character properties. For more properties or more
78 narrowly defined properties, check generalCategory, and see
79 unicodeTable.slate for possible values."
81 "Missing:
82 isCJK isTerminalPunctuation
83 isNonCharacter"
85 c@(UnicodeCharacter traits) isNonCharacter
86 "FIXME: This isn't correct. This is here because UTF import/export use
87 it."
89   False
92 c@(UnicodeCharacter traits) isLetter
93 "FIXME: add also test for Other_Alphabetic"
94 [#{#LowercaseLetter. #UppercaseLetter. #TitlecaseLetter. #ModifierLetter. #NumberLetter.
95    #OtherLetter} includes: c generalCategory
98 c@(UnicodeCharacter traits) isLowercase
99 "FIXME: add also test for Other_Lowercase"
100 [c generalCategory = #LowercaseLetter].
102 c@(UnicodeCharacter traits) isUppercase
103 "FIXME: add also test for Other_Uppercase"
104 [c generalCategory = #UppercaseLetter].
106 c@(UnicodeCharacter traits) isTitlecase
107 [c generalCategory = #TitlecaseLetter].
109 c@(UnicodeCharacter traits) isPrintable
110 [(#{#Control. #Surrogate. #Format. #Private} includes: c generalCategory) not].
112 c@(UnicodeCharacter traits) isDigit
113 [c generalCategory = #DecimalDigit].
115 c@(UnicodeCharacter traits) isNumber
116 [#{#DecimalDigit. #NumberOther} includes: c generalCategory].
118 c@(UnicodeCharacter traits) isNumeric
119 [#{#DecimalDigit. #NumberLetter. #NumberOther} includes: c generalCategory].
121 c@(UnicodeCharacter traits) isInitialQuote
122 [c generalCategory = #InitialQuote].
124 c@(UnicodeCharacter traits) isFinalQuote
125 [c generalCategory = #FinalQuote].
127 c@(UnicodeCharacter traits) isOpeningPunctuation
128 [c generalCategory = #OpenPunctuation].
130 c@(UnicodeCharacter traits) isClosingPunctuation
131 [c generalCategory = #ClosePunctuation].
133 c@(UnicodeCharacter traits) isPunctuation
134 [#{#ConnectorPunctuation. #DashPunctuation. #OpenPunctuation. #ClosePunctuation.
135    #InitialQuote. #FinalQuote. #OtherPunctuation} includes: c generalCategory].
137 c@(UnicodeCharacter traits) isSeparator
138 [#{#Space. #LineSeparator. #ParagraphSeparator} includes: c generalCategory].
140 c@(UnicodeCharacter traits) isPrivate
141 [c generalCategory = #Private].
143 c@(UnicodeCharacter traits) toDecimalDigit
145   c exists ifTrue:
146     [(CharacterData Unicode PropertyTable atCode: c code) DecimalDigitValue]
149 c@(UnicodeCharacter traits) toDigit
151   c exists ifTrue:
152     [(CharacterData Unicode PropertyTable atCode: c code) DigitValue]
155 c@(UnicodeCharacter traits) toNumber
157   c exists ifTrue:
158     [(CharacterData Unicode PropertyTable atCode: c code) NumericValue]
161 c@(UnicodeCharacter traits) decompose
163  c exists ifTrue:
164    [(CharacterData Unicode PropertyTable atCode: c code) DecompositionMapping
165       ifNotNilDo: [| :mapping | mapping collect:
166         [| :each | each as: UnicodeCharacter]]]
169 c1@(Integer traits) composeWith: c2
171   ((CharacterData Unicode PropertyTable atCode: c1) Compositions
172      ifNotNilDo: [| :comp | comp at: c2 ifAbsent: [Nil]])
173     ifNotNilDo: [| :result | result as: UnicodeCharacter]
176 "Case conversions always return strings, because some characters have
177 multiple-character upper/lower/titlecase mappings. Only simple case
178 mappings have been implemented though, so in practice there's
179 currently only one-character mappings."
181 c@(UnicodeCharacter traits) toUppercase
183   c exists ifTrue:
184     [((CharacterData Unicode PropertyTable atCode: c code) SimpleUppercaseMapping
185       as: UnicodeCharacter) as: UnicodeString]
188 c@(UnicodeCharacter traits) toLowercase
190   c exists ifTrue:
191     [((CharacterData Unicode PropertyTable atCode: c code) SimpleLowercaseMapping
192       as: UnicodeCharacter) as: UnicodeString]
195 c@(UnicodeCharacter traits) toTitlecase
197   c exists ifTrue:
198     [((CharacterData Unicode PropertyTable atCode: c code) SimpleTitlecaseMapping
199       as: UnicodeCharacter) as: UnicodeString]