summaryrefslogtreecommitdiff
path: root/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-15 16:07:09 -0500
committerChristian Cleberg <[email protected]>2026-04-15 16:07:09 -0500
commit7d5ca0607c091f76aa29cd6fa8c76cfeb1e02ac8 (patch)
treeeef9213c86b32d3b1b295bf503577fa362d6f1fc /Hutch/Views/Repositories/MarkdownHTMLRenderer.swift
parent06c36c4352f47655cb39a5042a7e5fd475c118e1 (diff)
downloadhutch-7d5ca0607c091f76aa29cd6fa8c76cfeb1e02ac8.tar.gz
hutch-7d5ca0607c091f76aa29cd6fa8c76cfeb1e02ac8.tar.bz2
hutch-7d5ca0607c091f76aa29cd6fa8c76cfeb1e02ac8.zip
fix: fixes dead relative links in md/org with a new single-file viewer when tapped
Fixes: https://todo.sr.ht/~ccleberg/hutch/63
Diffstat (limited to 'Hutch/Views/Repositories/MarkdownHTMLRenderer.swift')
-rw-r--r--Hutch/Views/Repositories/MarkdownHTMLRenderer.swift19
1 files changed, 14 insertions, 5 deletions
diff --git a/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift b/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift
index 5c69659..bc63f9d 100644
--- a/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift
+++ b/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift
@@ -1,8 +1,12 @@
import Markdown
-nonisolated func markdownToHTML(_ text: String, imageURLResolver: ((String) -> String?)? = nil) -> String {
+nonisolated func markdownToHTML(
+ _ text: String,
+ imageURLResolver: ((String) -> String?)? = nil,
+ linkURLResolver: ((String) -> String?)? = nil
+) -> String {
let document = Document(parsing: text)
- var renderer = MarkdownHTMLRenderer(imageURLResolver: imageURLResolver)
+ var renderer = MarkdownHTMLRenderer(imageURLResolver: imageURLResolver, linkURLResolver: linkURLResolver)
return renderer.visit(document)
}
@@ -10,12 +14,14 @@ private struct MarkdownHTMLRenderer: MarkupVisitor {
typealias Result = String
nonisolated(unsafe) let imageURLResolver: ((String) -> String?)?
+ nonisolated(unsafe) let linkURLResolver: ((String) -> String?)?
nonisolated(unsafe) private var isRenderingTableHead = false
nonisolated(unsafe) private var currentTableAlignments: [Markdown.Table.ColumnAlignment?] = []
nonisolated(unsafe) private var currentTableColumnIndex = 0
- nonisolated init(imageURLResolver: ((String) -> String?)?) {
+ nonisolated init(imageURLResolver: ((String) -> String?)?, linkURLResolver: ((String) -> String?)? = nil) {
self.imageURLResolver = imageURLResolver
+ self.linkURLResolver = linkURLResolver
}
nonisolated mutating func visit(_ markup: Markup) -> String {
@@ -94,8 +100,11 @@ private struct MarkdownHTMLRenderer: MarkupVisitor {
nonisolated mutating func visitLink(_ link: Markdown.Link) -> String {
let content = visitChildren(of: link)
- guard let destination = link.destination,
- let sanitizedDestination = sanitizedReadmeLinkURLString(destination) else {
+ guard let destination = link.destination else {
+ return content
+ }
+ let resolvedDestination = linkURLResolver?(destination) ?? destination
+ guard let sanitizedDestination = sanitizedReadmeLinkURLString(resolvedDestination) else {
return content
}
let href = escapeHTMLAttribute(decodeHTMLEntities(sanitizedDestination))