blob: 70f74a6f2ea4ea58ae343402831ae2bbd78eb579 [file] [log] [blame]
extension String {
public struct Encoding : RawRepresentable {
public var rawValue: UInt
public init(rawValue: UInt) { self.rawValue = rawValue }
public static let ascii = Encoding(rawValue: 1)
public static let nextstep = Encoding(rawValue: 2)
public static let japaneseEUC = Encoding(rawValue: 3)
public static let utf8 = Encoding(rawValue: 4)
public static let isoLatin1 = Encoding(rawValue: 5)
public static let symbol = Encoding(rawValue: 6)
public static let nonLossyASCII = Encoding(rawValue: 7)
public static let shiftJIS = Encoding(rawValue: 8)
public static let isoLatin2 = Encoding(rawValue: 9)
public static let unicode = Encoding(rawValue: 10)
public static let windowsCP1251 = Encoding(rawValue: 11)
public static let windowsCP1252 = Encoding(rawValue: 12)
public static let windowsCP1253 = Encoding(rawValue: 13)
public static let windowsCP1254 = Encoding(rawValue: 14)
public static let windowsCP1250 = Encoding(rawValue: 15)
public static let iso2022JP = Encoding(rawValue: 21)
public static let macOSRoman = Encoding(rawValue: 30)
public static let utf16 = Encoding.unicode
public static let utf16BigEndian = Encoding(rawValue: 0x90000100)
public static let utf16LittleEndian = Encoding(rawValue: 0x94000100)
public static let utf32 = Encoding(rawValue: 0x8c000100)
public static let utf32BigEndian = Encoding(rawValue: 0x98000100)
public static let utf32LittleEndian = Encoding(rawValue: 0x9c000100)
// Map selected IANA character set names to encodings, see
// https://www.iana.org/assignments/character-sets/character-sets.xhtml
internal init?(charSet: String) {
let encoding: Encoding?
switch charSet.lowercased() {
case "us-ascii": encoding = .ascii
case "utf-8": encoding = .utf8
case "utf-16": encoding = .utf16
case "utf-16be": encoding = .utf16BigEndian
case "utf-16le": encoding = .utf16LittleEndian
case "utf-32": encoding = .utf32
case "utf-32be": encoding = .utf32BigEndian
case "utf-32le": encoding = .utf32LittleEndian
case "iso-8859-1": encoding = .isoLatin1
case "iso-8859-2": encoding = .isoLatin2
case "iso-2022-jp": encoding = .iso2022JP
case "windows-1250": encoding = .windowsCP1250
case "windows-1251": encoding = .windowsCP1251
case "windows-1252": encoding = .windowsCP1252
case "windows-1253": encoding = .windowsCP1253
case "windows-1254": encoding = .windowsCP1254
case "shift_jis": encoding = .shiftJIS
case "euc-jp": encoding = .japaneseEUC
case "macintosh": encoding = .macOSRoman
default: encoding = nil
}
guard let value = encoding?.rawValue else {
return nil
}
rawValue = value
}
}
public typealias EncodingConversionOptions = NSString.EncodingConversionOptions
public typealias EnumerationOptions = NSString.EnumerationOptions
public typealias CompareOptions = NSString.CompareOptions
}
extension String.Encoding : Hashable {
// ==, hash(into:) supplied by RawRepresentable
}
extension String.Encoding : CustomStringConvertible {
public var description: String {
return String.localizedName(of: self)
}
}
@available(*, unavailable, renamed: "String.Encoding")
public typealias NSStringEncoding = UInt
@available(*, unavailable, renamed: "String.Encoding.ascii")
public var NSASCIIStringEncoding: String.Encoding {
return .ascii
}
@available(*, unavailable, renamed: "String.Encoding.nextstep")
public var NSNEXTSTEPStringEncoding: String.Encoding {
return .nextstep
}
@available(*, unavailable, renamed: "String.Encoding.japaneseEUC")
public var NSJapaneseEUCStringEncoding: String.Encoding {
return .japaneseEUC
}
@available(*, unavailable, renamed: "String.Encoding.utf8")
public var NSUTF8StringEncoding: String.Encoding {
return .utf8
}
@available(*, unavailable, renamed: "String.Encoding.isoLatin1")
public var NSISOLatin1StringEncoding: String.Encoding {
return .isoLatin1
}
@available(*, unavailable, renamed: "String.Encoding.symbol")
public var NSSymbolStringEncoding: String.Encoding {
return .symbol
}
@available(*, unavailable, renamed: "String.Encoding.nonLossyASCII")
public var NSNonLossyASCIIStringEncoding: String.Encoding {
return .nonLossyASCII
}
@available(*, unavailable, renamed: "String.Encoding.shiftJIS")
public var NSShiftJISStringEncoding: String.Encoding {
return .shiftJIS
}
@available(*, unavailable, renamed: "String.Encoding.isoLatin2")
public var NSISOLatin2StringEncoding: String.Encoding {
return .isoLatin2
}
@available(*, unavailable, renamed: "String.Encoding.unicode")
public var NSUnicodeStringEncoding: String.Encoding {
return .unicode
}
@available(*, unavailable, renamed: "String.Encoding.windowsCP1251")
public var NSWindowsCP1251StringEncoding: String.Encoding {
return .windowsCP1251
}
@available(*, unavailable, renamed: "String.Encoding.windowsCP1252")
public var NSWindowsCP1252StringEncoding: String.Encoding {
return .windowsCP1252
}
@available(*, unavailable, renamed: "String.Encoding.windowsCP1253")
public var NSWindowsCP1253StringEncoding: String.Encoding {
return .windowsCP1253
}
@available(*, unavailable, renamed: "String.Encoding.windowsCP1254")
public var NSWindowsCP1254StringEncoding: String.Encoding {
return .windowsCP1254
}
@available(*, unavailable, renamed: "String.Encoding.windowsCP1250")
public var NSWindowsCP1250StringEncoding: String.Encoding {
return .windowsCP1250
}
@available(*, unavailable, renamed: "String.Encoding.iso2022JP")
public var NSISO2022JPStringEncoding: String.Encoding {
return .iso2022JP
}
@available(*, unavailable, renamed: "String.Encoding.macOSRoman")
public var NSMacOSRomanStringEncoding: String.Encoding {
return .macOSRoman
}
@available(*, unavailable, renamed: "String.Encoding.utf16")
public var NSUTF16StringEncoding: String.Encoding {
return .utf16
}
@available(*, unavailable, renamed: "String.Encoding.utf16BigEndian")
public var NSUTF16BigEndianStringEncoding: String.Encoding {
return .utf16BigEndian
}
@available(*, unavailable, renamed: "String.Encoding.utf16LittleEndian")
public var NSUTF16LittleEndianStringEncoding: String.Encoding {
return .utf16LittleEndian
}
@available(*, unavailable, renamed: "String.Encoding.utf32")
public var NSUTF32StringEncoding: String.Encoding {
return .utf32
}
@available(*, unavailable, renamed: "String.Encoding.utf32BigEndian")
public var NSUTF32BigEndianStringEncoding: String.Encoding {
return .utf32BigEndian
}
@available(*, unavailable, renamed: "String.Encoding.utf32LittleEndian")
public var NSUTF32LittleEndianStringEncoding: String.Encoding {
return .utf32LittleEndian
}