aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Utility
diff options
context:
space:
mode:
authorDustin Mierau <dustin@mierau.me>2025-10-25 15:26:05 -0700
committerDustin Mierau <dustin@mierau.me>2025-10-25 15:26:05 -0700
commit53686e30592fee566585e391738adee8b2ef2137 (patch)
tree7ee768ca3c84ac7dad7ea674fb637480e4b7184c /Hotline/Utility
parent65521893ac5f10ec035cd735747034c263e46d77 (diff)
Fixed some warnings. Add basic markdown formatting support to chat messages. Add some metadata support for chat log (though we're not using this yet).
Diffstat (limited to 'Hotline/Utility')
-rw-r--r--Hotline/Utility/FoundationExtensions.swift34
-rw-r--r--Hotline/Utility/SwiftUIExtensions.swift26
2 files changed, 52 insertions, 8 deletions
diff --git a/Hotline/Utility/FoundationExtensions.swift b/Hotline/Utility/FoundationExtensions.swift
index 9fc9ae7..90a3032 100644
--- a/Hotline/Utility/FoundationExtensions.swift
+++ b/Hotline/Utility/FoundationExtensions.swift
@@ -8,6 +8,13 @@ enum Endianness {
extension String {
+ func markdownToAttributedString() -> AttributedString {
+ let markdownText = self.convertingLinksToMarkdown()
+ let attr = (try? AttributedString(markdown: markdownText, options: .init(interpretedSyntax: .inlineOnlyPreservingWhitespace))) ?? AttributedString(self)
+
+ return attr
+ }
+
func convertToAttributedStringWithLinks() -> AttributedString {
let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: self)
let matches = self.ranges(of: RegularExpressions.relaxedLink)
@@ -54,17 +61,28 @@ extension String {
}
func convertingLinksToMarkdown() -> String {
- var cp = String(self)
- cp.replace(RegularExpressions.relaxedLink) { match -> String in
+// var cp = String(self)
+
+ self.replacing(RegularExpressions.relaxedLink) { match in
let linkText = self[match.range]
- var injectedScheme = "https://"
- if let _ = try? RegularExpressions.supportedLinkScheme.prefixMatch(in: linkText) {
- injectedScheme = ""
- }
- return "[\(linkText)](\(injectedScheme)\(linkText))"
+ // Only add https:// if the link doesn't already have a scheme
+ let hasScheme = (try? RegularExpressions.supportedLinkScheme.prefixMatch(in: linkText)) != nil
+ let url = hasScheme ? String(linkText) : "https://\(linkText)"
+
+ return "[\(linkText)](\(url))"
}
- return cp
+
+// cp.replace(RegularExpressions.relaxedLink) { match -> String in
+// let linkText = self[match.range]
+// var injectedScheme = "https://"
+// if let _ = try? RegularExpressions.supportedLinkScheme.prefixMatch(in: linkText) {
+// injectedScheme = ""
+// }
+//
+// return "[\(linkText)](\(injectedScheme)\(linkText))"
+// }
+// return cp
}
}
diff --git a/Hotline/Utility/SwiftUIExtensions.swift b/Hotline/Utility/SwiftUIExtensions.swift
index 3b850e0..12217b2 100644
--- a/Hotline/Utility/SwiftUIExtensions.swift
+++ b/Hotline/Utility/SwiftUIExtensions.swift
@@ -1,7 +1,33 @@
import SwiftUI
+import Foundation
extension Color {
init(hex: Int, opacity: Double = 1.0) {
self.init(red: Double((hex >> 16) & 0xFF) / 255.0, green: Double((hex >> 8) & 0xFF) / 255.0, blue: Double(hex & 0xFF) / 255.0, opacity: opacity)
}
}
+
+extension AttributedString {
+ func setHangingIndent(firstLineHeadIndent: CGFloat = 0, otherLinesHeadIndent: CGFloat) -> AttributedString {
+// var blah = self
+
+// guard var paragraph = self.paragraphStyle else {
+// return
+// }
+
+ var p = self.paragraphStyle?.mutableCopy() as? NSMutableParagraphStyle
+ p?.headIndent = otherLinesHeadIndent
+ p?.firstLineHeadIndent = firstLineHeadIndent
+
+// paragraph.headIndent = otherLinesHeadIndent // indent for lines 2+
+// paragraph.firstLineHeadIndent = firstLineHeadIndent // usually 0
+
+ var blah = self
+
+
+ blah.paragraphStyle = p
+
+ return blah
+ }
+}
+