1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
//===----------------------------------------------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2024 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
//
//===----------------------------------------------------------------------===//
import Foundation
package typealias UTF8Byte = UInt8
package extension UTF8Byte {
init(_ character: Character) throws {
self = try character.utf8.only.unwrap(orThrow: "More than one byte: \(character)")
}
}
package func UTF8ByteValue(_ character: Character) -> UTF8Byte? {
character.utf8.only
}
package extension UTF8Byte {
static let uppercaseAZ: ClosedRange<UInt8> = (65...90)
static let lowercaseAZ: ClosedRange<UInt8> = (97...122)
static let cSpace: Self = 32 // ' '
static let cPlus: Self = 43 // '+'
static let cMinus: Self = 45 // '-'
static let cColon: Self = 58 // ':'
static let cPeriod: Self = 46 // '.'
static let cLeftParentheses: Self = 40 // '('
static let cRightParentheses: Self = 41 // ')'
static let cUnderscore: Self = 95 // '_'
var isLowercase: Bool {
return Self.lowercaseAZ.contains(self)
}
var isUppercase: Bool {
return Self.uppercaseAZ.contains(self)
}
var lowercasedUTF8Byte: UInt8 {
return isUppercase ? (self - Self.uppercaseAZ.lowerBound) + Self.lowercaseAZ.lowerBound : self
}
var uppercasedUTF8Byte: UInt8 {
return isLowercase ? (self - Self.lowercaseAZ.lowerBound) + Self.uppercaseAZ.lowerBound : self
}
var isDelimiter: Bool {
return (self == .cSpace)
|| (self == .cPlus)
|| (self == .cMinus)
|| (self == .cColon)
|| (self == .cPeriod)
|| (self == .cUnderscore)
|| (self == .cLeftParentheses)
|| (self == .cRightParentheses)
}
}
|