Writer takes a generator, coroutines!
This commit is contained in:
23
graphgif.scm
23
graphgif.scm
@@ -241,21 +241,24 @@
|
||||
;; Output ;;
|
||||
;;;;;;;;;;;;
|
||||
|
||||
(define (output-to-file surfaces filename)
|
||||
(define (output-to-file filename surface-gen)
|
||||
(define pngdir (mkdtemp "/tmp/graphgif_XXXXXX"))
|
||||
(vector-for-each
|
||||
(lambda (i surface)
|
||||
(cairo-surface-write-to-png
|
||||
surface
|
||||
(string-append pngdir "/img-" (number->string i) ".png")))
|
||||
surfaces)
|
||||
(let loop ([surface (surface-gen)]
|
||||
[i 1])
|
||||
(when surface
|
||||
(cairo-surface-write-to-png
|
||||
surface
|
||||
(string-append pngdir "/img-" (number->string i) ".png"))
|
||||
(loop (surface-gen) (1+ i))))
|
||||
(system* "ffmpeg" "-y"
|
||||
"-i" (string-append pngdir "/img-%d.png")
|
||||
"-loop" "0" filename))
|
||||
|
||||
(define-public (write-graphs-to-file graphs filename)
|
||||
(output-to-file (vector-map (lambda (_ graph) (draw-abstract-graph graph)) graphs)
|
||||
filename))
|
||||
(define-public (write-graphs-to-file filename graph-gen)
|
||||
(define (surface-gen)
|
||||
(let ([graph (graph-gen)])
|
||||
(and graph (draw-abstract-graph graph))))
|
||||
(output-to-file filename surface-gen))
|
||||
|
||||
;; Local Variables:
|
||||
;; geiser-scheme-implementation: guile
|
||||
|
||||
Reference in New Issue
Block a user