Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions stdlib/public/StringProcessing/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,7 @@ set(swift_string_processing_link_libraries
swift_RegexParser)

file(GLOB_RECURSE _STRING_PROCESSING_SOURCES
"${EXPERIMENTAL_STRING_PROCESSING_SOURCE_DIR}/Sources/_StringProcessing/*.swift"
"${EXPERIMENTAL_STRING_PROCESSING_SOURCE_DIR}/Sources/_CUnicode/*.h"
"${EXPERIMENTAL_STRING_PROCESSING_SOURCE_DIR}/Sources/_CUnicode/*.c")
"${EXPERIMENTAL_STRING_PROCESSING_SOURCE_DIR}/Sources/_StringProcessing/*.swift")
set(STRING_PROCESSING_SOURCES)
foreach(source ${_STRING_PROCESSING_SOURCES})
file(TO_CMAKE_PATH "${source}" source)
Expand Down
9 changes: 8 additions & 1 deletion stdlib/public/SwiftShims/UnicodeData.h
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ __swift_uint32_t _swift_stdlib_getComposition(__swift_uint32_t x,
// Grapheme Breaking
//===----------------------------------------------------------------------===//


SWIFT_RUNTIME_STDLIB_INTERNAL
__swift_uint8_t _swift_stdlib_getGraphemeBreakProperty(__swift_uint32_t scalar);

Expand Down Expand Up @@ -101,6 +100,14 @@ __swift_uint16_t _swift_stdlib_getAge(__swift_uint32_t scalar);
SWIFT_RUNTIME_STDLIB_INTERNAL
__swift_uint8_t _swift_stdlib_getGeneralCategory(__swift_uint32_t scalar);

SWIFT_RUNTIME_STDLIB_INTERNAL
__swift_uint8_t _swift_stdlib_getScript(__swift_uint32_t scalar);

SWIFT_RUNTIME_STDLIB_INTERNAL
const __swift_uint8_t *_swift_stdlib_getScriptExtensions(
__swift_uint32_t scalar,
__swift_uint8_t *count);

#ifdef __cplusplus
} // extern "C"
#endif
Expand Down
42 changes: 42 additions & 0 deletions stdlib/public/core/UnicodeSPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
//
//===----------------------------------------------------------------------===//

import SwiftShims

//===----------------------------------------------------------------------===//
// Unicode.NFD
//===----------------------------------------------------------------------===//
Expand Down Expand Up @@ -123,3 +125,43 @@ extension Substring {
Unicode._NFC(base: unicodeScalars)
}
}

//===----------------------------------------------------------------------===//
// Unicode.Script
//===----------------------------------------------------------------------===//

extension Unicode.Scalar.Properties {
@_spi(_Unicode)
@available(SwiftStdlib 5.7, *)
public var script: UInt8 {
let rawValue = _swift_stdlib_getScript(_scalar.value)

_internalInvariant(rawValue != .max, "Unknown script rawValue")

return rawValue
}

@_spi(_Unicode)
@available(SwiftStdlib 5.7, *)
public var scriptExtensions: [UInt8] {
var count: UInt8 = 0
let pointer = _swift_stdlib_getScriptExtensions(_scalar.value, &count)

guard let pointer = pointer else {
return [script]
}

var result: [UInt8] = []
result.reserveCapacity(Int(count))

for i in 0 ..< count {
let script = pointer[Int(i)]

_internalInvariant(script != .max, "Unknown script rawValue")

result.append(script)
}

return result
}
}
Loading