Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 32 additions & 8 deletions Sources/MarkdownText/Models/MarkdownRenderConfig+Builders.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ extension MarkdownRenderConfig {
tableStyle: tableStyle,
inlineStyle: inlineStyle,
textContextMenu: textContextMenu,
citationConfig: citationConfig
citationConfig: citationConfig,
blockSpacing: blockSpacing
)
}

Expand All @@ -32,7 +33,8 @@ extension MarkdownRenderConfig {
tableStyle: tableStyle,
inlineStyle: inlineStyle,
textContextMenu: textContextMenu,
citationConfig: citationConfig
citationConfig: citationConfig,
blockSpacing: blockSpacing
)
}

Expand All @@ -47,7 +49,8 @@ extension MarkdownRenderConfig {
tableStyle: tableStyle,
inlineStyle: inlineStyle,
textContextMenu: textContextMenu,
citationConfig: citationConfig
citationConfig: citationConfig,
blockSpacing: blockSpacing
)
}

Expand All @@ -62,7 +65,8 @@ extension MarkdownRenderConfig {
tableStyle: tableStyle,
inlineStyle: inlineStyle,
textContextMenu: textContextMenu,
citationConfig: citationConfig
citationConfig: citationConfig,
blockSpacing: blockSpacing
)
}

Expand All @@ -77,7 +81,8 @@ extension MarkdownRenderConfig {
tableStyle: tableStyle,
inlineStyle: inlineStyle,
textContextMenu: textContextMenu,
citationConfig: citationConfig
citationConfig: citationConfig,
blockSpacing: blockSpacing
)
}

Expand All @@ -92,7 +97,8 @@ extension MarkdownRenderConfig {
tableStyle: value,
inlineStyle: inlineStyle,
textContextMenu: textContextMenu,
citationConfig: citationConfig
citationConfig: citationConfig,
blockSpacing: blockSpacing
)
}

Expand All @@ -107,7 +113,8 @@ extension MarkdownRenderConfig {
tableStyle: tableStyle,
inlineStyle: value,
textContextMenu: textContextMenu,
citationConfig: citationConfig
citationConfig: citationConfig,
blockSpacing: blockSpacing
)
}

Expand All @@ -123,7 +130,24 @@ extension MarkdownRenderConfig {
tableStyle: tableStyle,
inlineStyle: inlineStyle,
textContextMenu: value,
citationConfig: citationConfig
citationConfig: citationConfig,
blockSpacing: blockSpacing
)
}

/// Returns a copy with `blockSpacing` replaced.
public func withBlockSpacing(value: CGFloat) -> MarkdownRenderConfig {
MarkdownRenderConfig(
shouldAnimateText: shouldAnimateText,
blockQuoteStyle: blockQuoteStyle,
headingStyle: headingStyle,
Comment thread
junyan72 marked this conversation as resolved.
orderedListStyle: orderedListStyle,
paragraphStyle: paragraphStyle,
tableStyle: tableStyle,
inlineStyle: inlineStyle,
textContextMenu: textContextMenu,
citationConfig: citationConfig,
blockSpacing: value
)
}
}
10 changes: 9 additions & 1 deletion Sources/MarkdownText/Models/MarkdownRenderConfig.swift
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ public struct MarkdownRenderConfig: Hashable, Sendable {
public let textContextMenu: TextContextMenu?
/// Configuration that controls inline citation parsing and rendering.
public let citationConfig: CitationConfig
/// Vertical spacing between adjacent blocks (paragraphs, headings,
/// code blocks, lists, etc.). Defaults to 30.
public let blockSpacing: CGFloat

/// Font and color style for a uniformly-styled run of markdown text.
public struct MarkdownTextStyle: Hashable, Sendable {
Expand Down Expand Up @@ -175,6 +178,9 @@ public struct MarkdownRenderConfig: Hashable, Sendable {
)
}

/// Default inter-block spacing.
public static let defaultBlockSpacing: CGFloat = 30

/// Default styling for `blockQuoteStyle`.
public static let defaultBlockQuoteStyle = MarkdownTextStyle(
textFonts: Typography.baseTextFonts,
Expand Down Expand Up @@ -237,7 +243,8 @@ public struct MarkdownRenderConfig: Hashable, Sendable {
tableStyle: MarkdownTableTextStyle = MarkdownRenderConfig.defaultTableStyle,
inlineStyle: MarkdownInlineTextStyle = MarkdownRenderConfig.defaultInlineStyle,
textContextMenu: TextContextMenu? = nil,
citationConfig: CitationConfig = .default
citationConfig: CitationConfig = .default,
blockSpacing: CGFloat = MarkdownRenderConfig.defaultBlockSpacing
) {
self.shouldAnimateText = shouldAnimateText
self.blockQuoteStyle = blockQuoteStyle
Expand All @@ -248,6 +255,7 @@ public struct MarkdownRenderConfig: Hashable, Sendable {
self.inlineStyle = inlineStyle
self.textContextMenu = textContextMenu
self.citationConfig = citationConfig
self.blockSpacing = blockSpacing
}

/// The default render config, equivalent to calling `init()` with no
Expand Down
4 changes: 3 additions & 1 deletion Sources/MarkdownText/UI/BlockView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@ import SwiftUI

struct BlockView: View {

@Environment(\.markdownConfig) var config: MarkdownRenderConfig

let renderables: [MarkdownRenderable]

init(renderables: [MarkdownRenderable]) {
self.renderables = renderables
}

var body: some View {
VStack(alignment: .leading, spacing: 30) {
VStack(alignment: .leading, spacing: config.blockSpacing) {
ForEach(renderables) { renderable in
SingleBlockView(renderable: renderable)
}
Expand Down
17 changes: 17 additions & 0 deletions Tests/MarkdownTextTests/MarkdownTextSnapshotTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -288,4 +288,21 @@ final class MarkdownTextSnapshotTests: SnapshotTestCase {
}
assert(view)
}

func testCustomBlockSpacing() async throws {
let text = """
## Heading

This is a paragraph with some text to render.

Another paragraph right here.
"""
let config = MarkdownRenderConfig.default.withBlockSpacing(value: 10)
let document = await parser.parse(text: text)
let renderables = await RenderableDocument(document: document, config: config)
let view = CanvasView {
DocumentView(renderableDocument: renderables, config: config).padding(.horizontal, 24)
}
assert(view)
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading