From 657aa83a5ca24dc35572c040df64a0abb85e8612 Mon Sep 17 00:00:00 2001 From: Ruben Beltran del Rio Date: Mon, 15 Jun 2026 14:35:36 +0200 Subject: Initial extraction from Norganize --- Sources/NorgUI/Helpers/NorgLinkURL.swift | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Sources/NorgUI/Helpers/NorgLinkURL.swift (limited to 'Sources/NorgUI/Helpers/NorgLinkURL.swift') diff --git a/Sources/NorgUI/Helpers/NorgLinkURL.swift b/Sources/NorgUI/Helpers/NorgLinkURL.swift new file mode 100644 index 0000000..9b73fe3 --- /dev/null +++ b/Sources/NorgUI/Helpers/NorgLinkURL.swift @@ -0,0 +1,25 @@ +import Foundation +import NorgKit + +public enum NorgLinkURL { + public static let scheme = "norgui-link" + + public static func encode(_ link: InlineLink) -> URL? { + var components = URLComponents() + components.scheme = scheme + components.host = link.kind == .anchor ? "anchor" : "link" + if let target = link.target { + components.queryItems = [URLQueryItem(name: "target", value: target)] + } + return components.url + } + + public static func decode(_ url: URL) -> InlineLink? { + guard url.scheme == scheme else { return nil } + let kind: InlineLink.Kind = url.host == "anchor" ? .anchor : .link + let target = + URLComponents(url: url, resolvingAgainstBaseURL: false)? + .queryItems?.first { $0.name == "target" }?.value + return InlineLink(kind: kind, target: target) + } +} -- cgit