Skip to content

Commit 908a892

Browse files
committed
NSString: implement NSString.StringTransform
Foundation provides a string enumeration as `StringTransform` which affords the developer to access the ICU string transformations. Add this missing enumeration.
1 parent 59340e1 commit 908a892

File tree

1 file changed

+58
-2
lines changed

1 file changed

+58
-2
lines changed

Foundation/NSString.swift

+58-2
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,62 @@ extension NSString {
109109
}
110110
}
111111

112+
extension NSString {
113+
public struct StringTransform: Equatable, Hashable, RawRepresentable {
114+
typealias RawType = String
115+
116+
public let rawValue: String
117+
118+
public var hashValue: Int {
119+
return self.rawValue.hashValue
120+
}
121+
122+
public static func ==(_ lhs: StringTransform, _ rhs: StringTransform) -> Bool {
123+
return lhs.rawValue == rhs.rawValue
124+
}
125+
126+
public init(_ rawValue: String) {
127+
self.rawValue = rawValue
128+
}
129+
130+
public init(rawValue: String) {
131+
self.rawValue = rawValue
132+
}
133+
}
134+
}
135+
136+
// Transliteration
137+
extension NSString.StringTransform {
138+
public static let toLatin: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformToLatin! as! String)
139+
public static let latinToArabic: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformLatinArabic! as! String)
140+
public static let latinToCyrillic: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformLatinCyrillic! as! String)
141+
public static let latinToGreen: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformLatinGreek! as! String)
142+
public static let latinToHangul: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformLatinHangul! as! String)
143+
public static let latinToHebrew: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformLatinHebrew! as! String)
144+
public static let latinToHiragana: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformLatinHiragana! as! String)
145+
public static let latinToKatakana: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformLatinKatakana! as! String)
146+
public static let latinToThai: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformLatinThai! as! String)
147+
public static let hiraganaToKatakana: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformHiraganaKatakana! as! String)
148+
public static let mandarinToLatin: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformMandarinLatin! as! String)
149+
}
150+
151+
// Diacritic and Combining Mark Removal
152+
extension NSString.StringTransform {
153+
public static let stripDiacritics: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformStripDiacritics! as! String)
154+
public static let stripCombiningMarks: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformStripCombiningMarks! as! String)
155+
}
156+
157+
// Halfwidth and Fullwidth Form Conversion
158+
extension NSString.StringTransform {
159+
public static let fullwidthToHalfwidth: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformFullwidthHalfwidth! as! String)
160+
}
161+
162+
// Character Representation
163+
extension NSString.StringTransform {
164+
public static let toUnicodeName: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformToUnicodeName! as! String)
165+
public static let toXMLHex: NSString.StringTransform = NSString.StringTransform(rawValue: kCFStringTransformToXMLHex! as! String)
166+
}
167+
112168
internal func _createRegexForPattern(_ pattern: String, _ options: NSRegularExpression.Options) -> NSRegularExpression? {
113169
struct local {
114170
static let __NSRegularExpressionCache: NSCache<NSString, NSRegularExpression> = {
@@ -1113,10 +1169,10 @@ extension NSString {
11131169
return str._swiftObject
11141170
}
11151171

1116-
open func applyingTransform(_ transform: String, reverse: Bool) -> String? {
1172+
open func applyingTransform(_ transform: StringTransform, reverse: Bool) -> String? {
11171173
let string = CFStringCreateMutable(kCFAllocatorSystemDefault, 0)!
11181174
CFStringReplaceAll(string, _cfObject)
1119-
if (CFStringTransform(string, nil, transform._cfObject, reverse)) {
1175+
if (CFStringTransform(string, nil, transform.rawValue._cfObject, reverse)) {
11201176
return string._swiftObject
11211177
} else {
11221178
return nil

0 commit comments

Comments
 (0)