Fix rare markdown crash

This commit is contained in:
William Casarin
2023-02-19 09:20:09 -08:00
parent 603a5a1814
commit d5c45dc8ba

View File

@@ -8,7 +8,7 @@
import Foundation import Foundation
public struct Markdown { public struct Markdown {
private let detector = try! NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue) private var detector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue)
/// Ensure the specified URL has a scheme by prepending "https://" if it's absent. /// Ensure the specified URL has a scheme by prepending "https://" if it's absent.
static func withScheme(_ url: any StringProtocol) -> any StringProtocol { static func withScheme(_ url: any StringProtocol) -> any StringProtocol {
@@ -31,6 +31,9 @@ public struct Markdown {
/// Process the input text and add markdown for any embedded URLs. /// Process the input text and add markdown for any embedded URLs.
public func process(_ input: String) -> AttributedString { public func process(_ input: String) -> AttributedString {
guard let detector else {
return AttributedString(stringLiteral: input)
}
let matches = detector.matches(in: input, options: [], range: NSRange(location: 0, length: input.utf16.count)) let matches = detector.matches(in: input, options: [], range: NSRange(location: 0, length: input.utf16.count))
var output = input var output = input
// Start with the last match, because replacing the first would invalidate all subsequent indices // Start with the last match, because replacing the first would invalidate all subsequent indices