@@ -28,7 +28,7 @@ import MathJaxSwift
2828import SwiftDraw
2929import SwiftUI
3030
31- #if os(iOS)
31+ #if os(iOS) || os(visionOS)
3232import UIKit
3333#else
3434import Cocoa
@@ -58,11 +58,14 @@ internal class Renderer: ObservableObject {
5858 /// Whether or not the view's blocks have been rendered.
5959 @MainActor @Published var rendered : Bool = false
6060
61+ /// Whether or not the view's blocks have been rendered synchronously.
62+ @MainActor var syncRendered : Bool = false
63+
6164 /// Whether or not the receiver is currently rendering.
62- @MainActor @ Published var isRendering : Bool = false
65+ @MainActor var isRendering : Bool = false
6366
6467 /// The rendered blocks.
65- @MainActor @ Published var blocks : [ ComponentBlock ] = [ ]
68+ @MainActor var blocks : [ ComponentBlock ] = [ ]
6669
6770 // MARK: Private properties
6871
@@ -145,22 +148,21 @@ extension Renderer {
145148 guard !isRendering else {
146149 return [ ]
147150 }
148- guard !rendered else {
151+ guard !rendered && !syncRendered else {
149152 return blocks
150153 }
151154 isRendering = true
152155
153156 let texOptions = TeXInputProcessorOptions ( processEscapes: processEscapes, errorMode: errorMode)
154- let renderedBlocks = render (
157+ blocks = render (
155158 blocks: parseBlocks ( latex: latex, unencodeHTML: unencodeHTML, parsingMode: parsingMode) ,
156159 font: font,
157160 displayScale: displayScale,
158161 renderingMode: renderingMode,
159162 texOptions: texOptions)
160163
161- blocks = renderedBlocks
162164 isRendering = false
163- rendered = true
165+ syncRendered = true
164166 return blocks
165167 }
166168
@@ -187,7 +189,8 @@ extension Renderer {
187189 ) async {
188190 let isRen = await isRendering
189191 let ren = await rendered
190- guard !isRen && !ren else {
192+ let renSync = await syncRendered
193+ guard !isRen && !ren && !renSync else {
191194 return
192195 }
193196 await MainActor . run {
@@ -413,9 +416,15 @@ extension Renderer {
413416
414417 // Continue with getting the image
415418 let imageSize = svg. size ( for: xHeight)
419+ #if os(iOS) || os(visionOS)
420+ guard let image = SwiftDraw . SVG ( data: svg. data) ? . rasterize ( size: imageSize, scale: displayScale) else {
421+ return nil
422+ }
423+ #else
416424 guard let image = SwiftDraw . SVG ( data: svg. data) ? . rasterize ( with: imageSize, scale: displayScale) else {
417425 return nil
418426 }
427+ #endif
419428
420429 // Set the image in the cache
421430 Cache . shared. setImageCacheValue ( image, for: cacheKey)
0 commit comments