Skip to content

Commit 766be13

Browse files
authored
Merge pull request #33 from colinc86/develop
Develop
2 parents 1e5181a + 72aea7c commit 766be13

File tree

6 files changed

+79
-84
lines changed

6 files changed

+79
-84
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ It won't
4848
Add the dependency to your package manifest file.
4949

5050
```swift
51-
.package(url: "https://github.com/colinc86/LaTeXSwiftUI", from: "1.3.1")
51+
.package(url: "https://github.com/colinc86/LaTeXSwiftUI", from: "1.3.2")
5252
```
5353

5454
## ⌨️ Usage

Sources/LaTeXSwiftUI/LaTeX.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,9 @@ public struct LaTeX: View {
190190
switch renderingStyle {
191191
case .empty, .original, .progress:
192192
// Render the components asynchronously
193-
loadingView().task(renderAsync)
193+
loadingView().task {
194+
await renderAsync()
195+
}
194196
case .wait:
195197
// Render the components synchronously
196198
bodyWithBlocks(renderSync())
@@ -248,7 +250,7 @@ extension LaTeX {
248250
}
249251

250252
/// Renders the view's components.
251-
@Sendable private func renderAsync() async {
253+
private func renderAsync() async {
252254
await renderer.render(
253255
latex: latex,
254256
unencodeHTML: unencodeHTML,

Sources/LaTeXSwiftUI/Models/Component.swift

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,36 @@ internal struct ComponentBlock: Hashable, Identifiable {
4444
components.count == 1 && !components[0].type.inline
4545
}
4646

47+
/// Converts a component block to a `Text` view.
48+
///
49+
/// - Parameters:
50+
/// - renderer: The renderer to use.
51+
/// - font: The font to use.
52+
/// - displayScale: The display scale.
53+
/// - renderingMode: The rendering mode.
54+
/// - errorMode: The error mode.
55+
/// - blockRenderingMode: The block rendering mode.
56+
/// - Returns: A `Text` view.
57+
@MainActor func toText(
58+
using renderer: Renderer,
59+
font: Font?,
60+
displayScale: CGFloat,
61+
renderingMode: Image.TemplateRenderingMode,
62+
errorMode: LaTeX.ErrorMode,
63+
blockRenderingMode: LaTeX.BlockMode
64+
) -> Text {
65+
components.enumerated().map { i, component in
66+
return renderer.convertToText(
67+
component: component,
68+
font: font ?? .body,
69+
displayScale: displayScale,
70+
renderingMode: renderingMode,
71+
errorMode: errorMode,
72+
blockRenderingMode: blockRenderingMode,
73+
isInEquationBlock: isEquationBlock)
74+
}.reduce(Text(""), +)
75+
}
76+
4777
}
4878

4979
/// A LaTeX component.

Sources/LaTeXSwiftUI/Views/ComponentBlockText.swift

Lines changed: 0 additions & 77 deletions
This file was deleted.

Sources/LaTeXSwiftUI/Views/ComponentBlocksText.swift

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,53 @@ internal struct ComponentBlocksText: View {
3939
/// The view's renderer.
4040
@EnvironmentObject private var renderer: Renderer
4141

42+
/// The rendering mode to use with the rendered MathJax images.
43+
@Environment(\.imageRenderingMode) private var imageRenderingMode
44+
45+
/// What to do in the case of an error.
46+
@Environment(\.errorMode) private var errorMode
47+
48+
/// The view's font.
49+
@Environment(\.font) private var font
50+
51+
/// The view's current display scale.
52+
@Environment(\.displayScale) private var displayScale
53+
54+
/// The view's block rendering mode.
55+
@Environment(\.blockMode) private var blockMode
56+
4257
// MARK: View body
4358

4459
var body: some View {
4560
blocks.map { block in
46-
let text = ComponentBlockText(block: block, renderer: renderer).body
4761
return block.isEquationBlock && !forceInline ?
48-
Text("\n") + text + Text("\n") :
49-
text
62+
Text("\n") + text(for: block) + Text("\n") :
63+
text(for: block)
5064
}.reduce(Text(""), +)
5165
}
5266

5367
}
5468

69+
// MARK: Private methods
70+
71+
extension ComponentBlocksText {
72+
73+
/// Gets the `Text` view for the given component block.
74+
///
75+
/// - Parameter block: The component block.
76+
/// - Returns: A `Text` view.
77+
private func text(for block: ComponentBlock) -> Text {
78+
block.toText(
79+
using: renderer,
80+
font: font,
81+
displayScale: displayScale,
82+
renderingMode: imageRenderingMode,
83+
errorMode: errorMode,
84+
blockRenderingMode: blockMode)
85+
}
86+
87+
}
88+
5589
struct ComponentBlocksTextPreviews: PreviewProvider {
5690
static var previews: some View {
5791
ComponentBlocksText(blocks: [ComponentBlock(components: [

Sources/LaTeXSwiftUI/Views/ComponentBlocksViews.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,13 @@ internal struct ComponentBlocksViews: View {
8484
}
8585
}
8686
else {
87-
ComponentBlockText(block: block, renderer: renderer)
87+
block.toText(
88+
using: renderer,
89+
font: font,
90+
displayScale: displayScale,
91+
renderingMode: imageRenderingMode,
92+
errorMode: errorMode,
93+
blockRenderingMode: blockMode)
8894
}
8995
}
9096
}

0 commit comments

Comments
 (0)