Skip to content

Commit ef2c999

Browse files
authored
Merge pull request #42227 from Azoy/add-script-data
[stdlib] Add Unicode script data to scalar properties
2 parents d958f3c + 1a3f791 commit ef2c999

File tree

4 files changed

+468
-1
lines changed

4 files changed

+468
-1
lines changed

stdlib/public/SwiftShims/UnicodeData.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ __swift_uint32_t _swift_stdlib_getComposition(__swift_uint32_t x,
5858
// Grapheme Breaking
5959
//===----------------------------------------------------------------------===//
6060

61-
6261
SWIFT_RUNTIME_STDLIB_INTERNAL
6362
__swift_uint8_t _swift_stdlib_getGraphemeBreakProperty(__swift_uint32_t scalar);
6463

@@ -101,6 +100,14 @@ __swift_uint16_t _swift_stdlib_getAge(__swift_uint32_t scalar);
101100
SWIFT_RUNTIME_STDLIB_INTERNAL
102101
__swift_uint8_t _swift_stdlib_getGeneralCategory(__swift_uint32_t scalar);
103102

103+
SWIFT_RUNTIME_STDLIB_INTERNAL
104+
__swift_uint8_t _swift_stdlib_getScript(__swift_uint32_t scalar);
105+
106+
SWIFT_RUNTIME_STDLIB_INTERNAL
107+
const __swift_uint8_t *_swift_stdlib_getScriptExtensions(
108+
__swift_uint32_t scalar,
109+
__swift_uint8_t *count);
110+
104111
#ifdef __cplusplus
105112
} // extern "C"
106113
#endif

stdlib/public/core/UnicodeSPI.swift

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13+
import SwiftShims
14+
1315
//===----------------------------------------------------------------------===//
1416
// Unicode.NFD
1517
//===----------------------------------------------------------------------===//
@@ -123,3 +125,43 @@ extension Substring {
123125
Unicode._NFC(base: unicodeScalars)
124126
}
125127
}
128+
129+
//===----------------------------------------------------------------------===//
130+
// Unicode.Script
131+
//===----------------------------------------------------------------------===//
132+
133+
extension Unicode.Scalar.Properties {
134+
@_spi(_Unicode)
135+
@available(SwiftStdlib 5.7, *)
136+
public var _script: UInt8 {
137+
let rawValue = _swift_stdlib_getScript(_scalar.value)
138+
139+
_internalInvariant(rawValue != .max, "Unknown script rawValue")
140+
141+
return rawValue
142+
}
143+
144+
@_spi(_Unicode)
145+
@available(SwiftStdlib 5.7, *)
146+
public var _scriptExtensions: [UInt8] {
147+
var count: UInt8 = 0
148+
let pointer = _swift_stdlib_getScriptExtensions(_scalar.value, &count)
149+
150+
guard let pointer = pointer else {
151+
return [_script]
152+
}
153+
154+
var result: [UInt8] = []
155+
result.reserveCapacity(Int(count))
156+
157+
for i in 0 ..< count {
158+
let rawValue = pointer[Int(i)]
159+
160+
_internalInvariant(rawValue != .max, "Unknown script rawValue")
161+
162+
result.append(rawValue)
163+
}
164+
165+
return result
166+
}
167+
}

0 commit comments

Comments
 (0)