+ (ly:outputter-dump-string outputter "\\lilypondend\n")
+ (ly:outputter-close outputter)
+ (postprocess-output book framework-tex-module filename
+ (output-formats))
+ ))
+
+(define-public (output-preview-framework
+ basename book scopes fields)
+ (let* ((filename (format "~a.tex" basename))
+ (outputter (ly:make-paper-outputter (open-file filename "wb")
+ "tex"))
+ (paper (ly:paper-book-paper book))
+ (lines (ly:paper-book-systems book))
+ (first-notes-index (list-index
+ (lambda (s) (not (ly:paper-system-title? s)))
+ lines)))
+
+ (for-each
+ (lambda (x)
+ (ly:outputter-dump-string outputter x))
+ (list
+
+ ;;FIXME
+ (header paper (length lines) #f)
+ "\\def\\lilypondclassic{1}%\n"
+ (output-scopes scopes fields basename)
+ (define-fonts paper)
+ (header-end)))
+
+ (for-each
+ (lambda (lst)
+ (dump-line outputter lst (not (ly:paper-system-title? lst))))
+ (take lines (1+ first-notes-index)))
+ (ly:outputter-dump-string outputter "\\lilypondend\n")
+ (ly:outputter-close outputter)
+ (postprocess-output book framework-tex-module filename
+ (output-formats))))
+
+(define-public (convert-to-pdf book name)
+ (let* ((defs (ly:paper-book-paper book))
+ (paper-width (ly:output-def-lookup defs 'paper-width))
+ (paper-height (ly:output-def-lookup defs 'paper-height))
+ (output-scale (ly:output-def-lookup defs 'output-scale)))
+ (postscript->pdf (* paper-width output-scale (/ (ly:bp 1)))
+ (* paper-height output-scale (/ (ly:bp 1)))
+ (string-append (basename name ".tex") ".ps"))))
+
+(define-public (convert-to-png book name)
+ (let* ((defs (ly:paper-book-paper book))
+ (resolution (ly:output-def-lookup defs 'pngresolution))
+ (paper-width (ly:output-def-lookup defs 'paper-width))
+ (paper-height (ly:output-def-lookup defs 'paper-height))
+ (output-scale (ly:output-def-lookup defs 'output-scale)))
+ (postscript->png
+ (if (number? resolution)
+ resolution
+ (ly:get-option 'resolution))
+
+ (* paper-width output-scale (/ (ly:bp 1)))
+ (* paper-height output-scale (/ (ly:bp 1)))
+
+ (string-append (basename name ".tex") ".ps"))))
+
+(define-public (convert-to-ps book name)
+ (let* ((paper (ly:paper-book-paper book))
+ (preview? (string-contains name ".preview"))
+ (papersizename (ly:output-def-lookup paper 'papersizename))
+ (landscape? (eq? #t (ly:output-def-lookup paper 'landscape)))
+ (base (basename name ".tex"))
+ (ps-name (format "~a.ps" base ".ps"))
+ (cmd (string-append "dvips"
+ (if preview?
+ " -E"
+ (string-append
+ " -t"
+ ;; careful: papersizename is user-set.
+ (sanitize-command-option papersizename)
+ ""))
+ (if landscape? " -tlandscape" "")
+ (if (ly:kpathsea-find-file "lm.map")
+ " -u+lm.map" "")
+ (if (ly:kpathsea-find-file "ecrm10.pfa")
+ " -u+ec-mftrace.map" "")
+ " -u+lilypond.map -Ppdf" ""
+ " -o" ps-name
+ " " base)))
+ (if (access? ps-name W_OK)
+ (delete-file ps-name))
+ (if (not (ly:get-option 'verbose))
+ (begin
+ (ly:message (_ "Converting to `~a'...") (string-append base ".ps"))
+ (ly:progress "\n")))
+ (ly:system cmd)))
+
+(define-public (convert-to-dvi book name)
+ (let* ((curr-extra-mem
+ (string->number
+ (regexp-substitute/global
+ #f " *%.*\n?"
+ (ly:kpathsea-expand-variable "extra_mem_top")
+ 'pre "" 'post)))
+ (base (basename name ".tex"))
+ (cmd (format
+ #f "latex \\\\nonstopmode \\\\input '~a'" name)))
+
+ ;; FIXME: latex 'foo bar' works, but \input 'foe bar' does not?
+ (if (string-index name (char-set #\space #\ht #\newline #\cr))
+ (ly:error (_"TeX file name must not contain whitespace: `~a'") name))
+
+ (setenv "extra_mem_top" (number->string (max curr-extra-mem 1024000)))
+ (let ((dvi-name (string-append base ".dvi")))
+ (if (access? dvi-name W_OK)
+ (delete-file dvi-name)))
+ (if (not (ly:get-option 'verbose))
+ (begin
+ (ly:message (_ "Converting to `~a'...") (string-append base ".dvi"))
+ (ly:progress "\n")))
+
+ ;; FIXME: set in environment?
+ (if (ly:get-option 'safe)
+ (set! cmd (string-append "openout_any=p " cmd)))
+
+ (ly:system cmd)))
+
+(define-public (convert-to-tex book name)
+ #t)