diff options
| author | Christian Cleberg <[email protected]> | 2026-03-30 16:44:49 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-03-30 16:44:49 -0500 |
| commit | 02fbc13ddb5b66ecf1d0dff3e7173a845984e006 (patch) | |
| tree | d2263b511a3031a55f31b4f6cbb1198c38001d38 /Hutch/Views/Repositories/MarkdownHTMLRenderer.swift | |
| parent | ddb310ed15fcd693a5487e5f38b5ba74cdf27843 (diff) | |
| download | hutch-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.swift | 42 |
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: |
