#!/bin/bash
# -*- scheme -*-
exec guile --debug -e main -s "$0" "$@"
!#

(use-modules (present org-mode)
             (present svg)
             (ice-9 format)
             (sxml simple))

(define (org->pdf in out)
  (let* ((presentation (call-with-input-file in org->presentation))
         (svg (presentation->svg presentation))
         (dirname (let ((tmp (tmpnam)))
                    (mkdir tmp)
                    tmp))
         (pages (map
                 (lambda (slide n)
                   (let ((f (format #f "~a/page-~2,'0D.svg" dirname n)))
                     (with-output-to-file f
                       (lambda ()
                         (sxml->xml
                          `(,(car svg) ,(cadr svg) ,slide))))
                     f))
                 (cddr svg)
                 (iota (length (cddr svg))))))
    (or (eqv?
         (apply system*
                "rsvg-convert" "--format=pdf"
                "-o" out
                pages)
         0)
        (error "rsvg-convert failed"))
    (for-each delete-file pages)
    (rmdir dirname)))

(define (main args)
  (or (= (length args) 3)
      (begin
        (format (current-error-port) "usage: ~A ORG-FILE OUTPUT-PDF-FILE\n"
                (car args))
        (exit 1)))
  (apply org->pdf (cdr args)))
