summaryrefslogtreecommitdiff
path: root/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-03-30 16:44:49 -0500
committerChristian Cleberg <[email protected]>2026-03-30 16:44:49 -0500
commit02fbc13ddb5b66ecf1d0dff3e7173a845984e006 (patch)
treed2263b511a3031a55f31b4f6cbb1198c38001d38 /Hutch/Views/Repositories/MarkdownHTMLRenderer.swift
parentddb310ed15fcd693a5487e5f38b5ba74cdf27843 (diff)
downloadhutch-2.5.0.tar.gz
hutch-2.5.0.tar.bz2
hutch-2.5.0.zip
feat(markdown): finalize migration to apple/swift-markdown rendererv2.5.0
Diffstat (limited to 'Hutch/Views/Repositories/MarkdownHTMLRenderer.swift')
-rw-r--r--Hutch/Views/Repositories/MarkdownHTMLRenderer.swift42
1 files changed, 38 insertions, 4 deletions
diff --git a/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift b/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift
index 67966f1..5c69659 100644
--- a/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift
+++ b/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift
@@ -10,7 +10,9 @@ private struct MarkdownHTMLRenderer: MarkupVisitor {
typealias Result = String
nonisolated(unsafe) let imageURLResolver: ((String) -> String?)?
- private var isRenderingTableHead = false
+ 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?)?) {
self.imageURLResolver = imageURLResolver
@@ -140,7 +142,14 @@ private struct MarkdownHTMLRenderer: MarkupVisitor {
}
nonisolated mutating func visitTable(_ table: Markdown.Table) -> String {
- "<table>\n\(visitChildren(of: table))</table>\n"
+ let previousAlignments = currentTableAlignments
+ let previousColumnIndex = currentTableColumnIndex
+ currentTableAlignments = table.columnAlignments
+ currentTableColumnIndex = 0
+ let content = visitChildren(of: table)
+ currentTableAlignments = previousAlignments
+ currentTableColumnIndex = previousColumnIndex
+ return "<table>\n\(content)</table>\n"
}
nonisolated mutating func visitTableHead(_ tableHead: Markdown.Table.Head) -> String {
@@ -160,12 +169,18 @@ private struct MarkdownHTMLRenderer: MarkupVisitor {
}
nonisolated mutating func visitTableRow(_ tableRow: Markdown.Table.Row) -> String {
- "<tr>\(visitChildren(of: tableRow))</tr>\n"
+ let previousColumnIndex = currentTableColumnIndex
+ currentTableColumnIndex = 0
+ let content = visitChildren(of: tableRow)
+ currentTableColumnIndex = previousColumnIndex
+ return "<tr>\(content)</tr>\n"
}
nonisolated mutating func visitTableCell(_ tableCell: Markdown.Table.Cell) -> String {
let tagName = isRenderingTableHead ? "th" : "td"
- return "<\(tagName)>\(visitChildren(of: tableCell))</\(tagName)>"
+ let styleAttribute = alignmentStyleAttribute(forColumn: currentTableColumnIndex)
+ currentTableColumnIndex += 1
+ return "<\(tagName)\(styleAttribute)>\(visitChildren(of: tableCell))</\(tagName)>"
}
nonisolated private mutating func visitChildren(of markup: Markup) -> String {
@@ -195,6 +210,25 @@ private struct MarkdownHTMLRenderer: MarkupVisitor {
}
}
+ nonisolated private func alignmentStyleAttribute(forColumn column: Int) -> String {
+ guard column < currentTableAlignments.count,
+ let alignment = currentTableAlignments[column] else {
+ return ""
+ }
+
+ let textAlignment: String
+ switch alignment {
+ case .left:
+ textAlignment = "left"
+ case .center:
+ textAlignment = "center"
+ case .right:
+ textAlignment = "right"
+ }
+
+ return " style=\"text-align: \(textAlignment);\""
+ }
+
nonisolated private func checkboxHTML(for checkbox: Checkbox) -> String {
switch checkbox {
case .checked: