diff options
| author | Dustin Mierau <dustin@mierau.me> | 2024-05-23 13:02:18 -0700 |
|---|---|---|
| committer | Dustin Mierau <dustin@mierau.me> | 2024-05-23 13:02:18 -0700 |
| commit | ded4e5978ed30175bb4ca9ce5f64f1f5a45f3ab4 (patch) | |
| tree | bd7073fd16b3bdec1ef8759660720f9393a1a544 /Hotline/Utility/FoundationExtensions.swift | |
| parent | 23b3f338f0818a53b2499692e999a0528e5d9753 (diff) | |
Convert line endings to classic Mac line endings as old Hotline servers expect.
Diffstat (limited to 'Hotline/Utility/FoundationExtensions.swift')
| -rw-r--r-- | Hotline/Utility/FoundationExtensions.swift | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/Hotline/Utility/FoundationExtensions.swift b/Hotline/Utility/FoundationExtensions.swift index 0c8966a..9cf2992 100644 --- a/Hotline/Utility/FoundationExtensions.swift +++ b/Hotline/Utility/FoundationExtensions.swift @@ -6,28 +6,32 @@ enum Endianness { case little } +enum LineEnding { + case lf // Unix-style (\n) + case crlf // Windows-style (\r\n) + case cr // Classic Mac-style (\r) +} + extension String { -// func convertToPlainText() -> String { -// var newString = self -// -// let map: [Character: Character] = [ -// "“": ", -// "”": ", -// "‘": "'", -// "’": "'", -// "\n": "\r" -// ] -// -// newString = newString.replacingOccurrences(of: "\u{0060}", with: "'") -// newString = newString.replacingOccurrences(of: "\u{00b4}", with: "'") -// newString = newString.replacingOccurrences(of: "\u{2018}", with: "'") -// newString = newString.replacingOccurrences(of: "\u{2019}", with: "'") -// newString = newString.replacingOccurrences(of: "\u{201c}", with: "'") -// newString = newString.replacingOccurrences(of: "\u{201d}", with: "'") -// newString = newString.replacingOccurrences(of: "\"", with: "\"") -// -// return newString -// } + + func convertingLineEndings(to targetEnding: LineEnding) -> String { + let lf = "\n" + let crlf = "\r\n" + let cr = "\r" + + // Normalize all line endings to LF (\n) + let normalizedString = self.replacingOccurrences(of: cr, with: lf).replacingOccurrences(of: crlf, with: lf) + + // Replace normalized LF (\n) line endings with the target line ending + switch targetEnding { + case .lf: + return normalizedString + case .crlf: + return normalizedString.replacingOccurrences(of: lf, with: crlf) + case .cr: + return normalizedString.replacingOccurrences(of: lf, with: cr) + } + } func replyToString() -> String { if self.range(of: "^Re:", options: [.regularExpression, .caseInsensitive]) != nil { |