35 lines
1.1 KiB
Swift
35 lines
1.1 KiB
Swift
#if os(macOS)
|
|
import SwiftUI
|
|
|
|
@MainActor
|
|
func renderDiagram() -> Int32 {
|
|
FontSize.stored = false
|
|
let source = String(decoding: FileHandle.standardInput.readDataToEndOfFile(), as: UTF8.self)
|
|
let layout: BoxLayout
|
|
switch cachedBoxLayout(source) {
|
|
case .success(let l):
|
|
layout = l
|
|
case .failure(let error):
|
|
FileHandle.standardError.write(Data(error.reason.utf8))
|
|
return 1
|
|
}
|
|
let content = BoxCanvas(layout: layout)
|
|
.frame(width: layout.size.width, height: layout.size.height)
|
|
.padding(16)
|
|
.background(Palette.bg)
|
|
.environment(\.colorScheme, .light)
|
|
let renderer = ImageRenderer(content: content)
|
|
renderer.scale = 2
|
|
var png: Data?
|
|
NSAppearance(named: .aqua)!.performAsCurrentDrawingAppearance {
|
|
png = renderer.cgImage.flatMap { NSBitmapImageRep(cgImage: $0).representation(using: .png, properties: [:]) }
|
|
}
|
|
guard let png else {
|
|
FileHandle.standardError.write(Data("diagram didn't render".utf8))
|
|
return 1
|
|
}
|
|
FileHandle.standardOutput.write(png)
|
|
return 0
|
|
}
|
|
#endif
|