diff --git a/GeminiFormat/GeminiParser.swift b/GeminiFormat/GeminiParser.swift index df169ed..029af47 100644 --- a/GeminiFormat/GeminiParser.swift +++ b/GeminiFormat/GeminiParser.swift @@ -44,8 +44,6 @@ public struct GeminiParser { // URL(string:relativeTo:) does not handle // meaning the same protocol as the base URL urlString = baseURL.scheme! + ":" + urlString } - // todo: if the URL initializer fails, should there be a .link line with a nil URL? - let url = URL(string: urlString, relativeTo: baseURL)!.absoluteURL let text: String? if textStart < line.endIndex { @@ -54,7 +52,18 @@ public struct GeminiParser { text = nil } - doc.lines.append(.link(url, text: text)) + if let url = URL(string: urlString, relativeTo: baseURL)?.absoluteURL { + doc.lines.append(.link(url, text: text)) + } else { + let str: String + if let text = text { + // todo: localize me? + str = "\(text): \(urlString)" + } else { + str = urlString + } + doc.lines.append(.text(str)) + } } else if line.starts(with: "#") { let level: Document.HeadingLevel if line.starts(with: "###") {