Files
swift-mirror/stdlib/private/StdlibUnicodeUnittest/GraphemeBreaking.swift
2022-02-15 17:16:36 -08:00

71 lines
1.8 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2022 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
// Normalization tests are currently only avaible on Darwin, awaiting a sensible
// file API...
#if _runtime(_ObjC)
import Foundation
func parseGraphemeBreakTests(
_ data: String,
into result: inout [(String, Int)]
) {
for line in data.split(separator: "\n") {
// Only look at actual tests
guard line.hasPrefix("÷") else {
continue
}
let info = line.split(separator: "#")
let components = info[0].split(separator: " ")
var string = ""
var count = 0
for i in components.indices {
guard i != 0 else {
continue
}
let scalar: Unicode.Scalar
// If we're an odd index, this is a scalar.
if i & 0x1 == 1 {
scalar = Unicode.Scalar(UInt32(components[i], radix: 16)!)!
string.unicodeScalars.append(scalar)
} else {
// Otherwise, it is a grapheme breaking operator.
// If this is a break, record the +1 count. Otherwise it is × which is
// not a break.
if components[i] == "÷" {
count += 1
}
}
}
result.append((string, count))
}
}
public let graphemeBreakTests: [(String, Int)] = {
var result: [(String, Int)] = []
let testFile = readInputFile("GraphemeBreakTest.txt")
parseGraphemeBreakTests(testFile, into: &result)
return result
}()
#endif