diff options
| author | Christian Cleberg <[email protected]> | 2026-08-07 02:52:03 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-08-07 02:52:03 -0500 |
| commit | 044c33f7f43db1f38d6c44dd8f483298d9efcc06 (patch) | |
| tree | 649488b2e5d3d901db8c792c0dc215c835fa9d38 /Hutch/Views/Repositories/MarkdownHTMLRenderer.swift | |
| parent | 0a3e55c15cfb9ce1bd3df0c7b352760bc2ee33c3 (diff) | |
| parent | b410fd16b76146f4116538c5b82330818dd47da9 (diff) | |
| download | hutch-044c33f7f43db1f38d6c44dd8f483298d9efcc06.tar.gz hutch-044c33f7f43db1f38d6c44dd8f483298d9efcc06.tar.bz2 hutch-044c33f7f43db1f38d6c44dd8f483298d9efcc06.zip | |
Merge pull request #30 from krazywarez/syntax-highlighting
Add multi-language syntax highlighting (#16)
Diffstat (limited to 'Hutch/Views/Repositories/MarkdownHTMLRenderer.swift')
| -rw-r--r-- | Hutch/Views/Repositories/MarkdownHTMLRenderer.swift | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift b/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift index bc63f9d..91166ac 100644 --- a/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift +++ b/Hutch/Views/Repositories/MarkdownHTMLRenderer.swift @@ -2,11 +2,16 @@ import Markdown nonisolated func markdownToHTML( _ text: String, + codeTheme: SyntaxHighlightTheme = .light, imageURLResolver: ((String) -> String?)? = nil, linkURLResolver: ((String) -> String?)? = nil ) -> String { let document = Document(parsing: text) - var renderer = MarkdownHTMLRenderer(imageURLResolver: imageURLResolver, linkURLResolver: linkURLResolver) + var renderer = MarkdownHTMLRenderer( + imageURLResolver: imageURLResolver, + linkURLResolver: linkURLResolver, + highlighter: SyntaxHighlighter(theme: codeTheme) + ) return renderer.visit(document) } @@ -15,13 +20,19 @@ private struct MarkdownHTMLRenderer: MarkupVisitor { nonisolated(unsafe) let imageURLResolver: ((String) -> String?)? nonisolated(unsafe) let linkURLResolver: ((String) -> String?)? + nonisolated(unsafe) private let highlighter: SyntaxHighlighter 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?)?, linkURLResolver: ((String) -> String?)? = nil) { + nonisolated init( + imageURLResolver: ((String) -> String?)?, + linkURLResolver: ((String) -> String?)? = nil, + highlighter: SyntaxHighlighter + ) { self.imageURLResolver = imageURLResolver self.linkURLResolver = linkURLResolver + self.highlighter = highlighter } nonisolated mutating func visit(_ markup: Markup) -> String { @@ -78,7 +89,9 @@ private struct MarkdownHTMLRenderer: MarkupVisitor { } else { classAttribute = "" } - return "<pre><code\(classAttribute)>\(escapeHTML(codeBlock.code))</code></pre>\n" + let inner = highlighter.highlightedHTML(for: codeBlock.code, language: codeBlock.language) + ?? escapeHTML(codeBlock.code) + return "<pre><code\(classAttribute)>\(inner)</code></pre>\n" } nonisolated mutating func visitInlineCode(_ inlineCode: InlineCode) -> String { |
