import SwiftUI #if os(macOS) @MainActor func renderDiagram(html: Bool) -> Int32 { FontSize.stored = false let source = String(decoding: FileHandle.standardInput.readDataToEndOfFile(), as: UTF8.self) let diagram: DiagramLayout switch cachedBoxLayout(source) { case .success(let d): diagram = d case .failure(let error): FileHandle.standardError.write(Data(error.reason.utf8)) return 1 } if html { FileHandle.standardOutput.write(Data(diagramHTML(diagram).utf8)) return 0 } let content = VStack(alignment: .leading, spacing: 24) { ForEach(diagram.order, id: \.self) { level in VStack(alignment: .leading, spacing: 8) { if diagram.order.count > 1 { Text(diagram.trail(level).map(diagram.title).joined(separator: " › ")) .font(Font(titleFont)) .foregroundStyle(Palette.text) } let layout = diagram.levels[level]! BoxCanvas(layout: layout) .frame(width: layout.size.width, height: layout.size.height) } } } guard let png = diagramCGImage(content).flatMap({ NSBitmapImageRep(cgImage: $0).representation(using: .png, properties: [:]) }) else { FileHandle.standardError.write(Data("diagram didn't render".utf8)) return 1 } FileHandle.standardOutput.write(png) return 0 } #endif @MainActor func diagramCGImage(_ layout: BoxLayout) -> CGImage? { diagramCGImage(BoxCanvas(layout: layout).frame(width: layout.size.width, height: layout.size.height)) } @MainActor func diagramCGImage(_ view: some View) -> CGImage? { let content = view .padding(16) .background(Palette.bg) .environment(\.colorScheme, .light) let renderer = ImageRenderer(content: content) renderer.scale = 2 var image: CGImage? #if os(macOS) NSAppearance(named: .aqua)!.performAsCurrentDrawingAppearance { image = renderer.cgImage } #else UITraitCollection(userInterfaceStyle: .light).performAsCurrent { image = renderer.cgImage } #endif return image }