aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Utility
diff options
context:
space:
mode:
authorDustin Mierau <dustin@mierau.me>2024-05-23 13:02:18 -0700
committerDustin Mierau <dustin@mierau.me>2024-05-23 13:02:18 -0700
commitded4e5978ed30175bb4ca9ce5f64f1f5a45f3ab4 (patch)
treebd7073fd16b3bdec1ef8759660720f9393a1a544 /Hotline/Utility
parent23b3f338f0818a53b2499692e999a0528e5d9753 (diff)
Convert line endings to classic Mac line endings as old Hotline servers expect.
Diffstat (limited to 'Hotline/Utility')
-rw-r--r--Hotline/Utility/FoundationExtensions.swift46
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 {