- (string-append "\\leavevmode\n\\lybox{0}{0}{0}{"
- (ly:number->string (ly:paper-line-height line))
- "}{"))
-
- (ly:outputter-dump-stencil putter (ly:paper-line-stencil line))
- (ly:outputter-dump-string
- putter
- (if last?
- "}\\interscoreline\n"
- "}%\n"))
- )
-
-(define-public (output-framework-tex outputter book scopes fields basename)
- (let*
- ((bookpaper (ly:paper-book-book-paper book))
- (pages (ly:paper-book-pages book))
- )
- (for-each
- (lambda (x)
- (ly:outputter-dump-string outputter x))
- (list
- (header "creator"
- "timestamp"
- bookpaper
- (length pages)
- #f
- )
-
- (define-fonts bookpaper)
- (header-end)))
-
- (for-each
- (lambda (page)
- (dump-page outputter page))
- pages)
- (ly:outputter-dump-string outputter "\\lilypondend\n")
- ))
-
-(define-public (output-classic-framework-tex outputter book scopes fields basename)
- (let*
- ((bookpaper (ly:paper-book-book-paper book))
- (lines (ly:paper-book-lines book))
- (last-line (car (last-pair lines))))
- (for-each
- (lambda (x)
- (ly:outputter-dump-string outputter x))
- (list
- (header "creator"
- "timestamp"
- bookpaper
- (length lines)
- #f)
-
- (output-scopes scopes fields basename)
- (define-fonts bookpaper)
- (header-end)))
-
- (for-each
- (lambda (line)
- (dump-line outputter line (eq? line last-line)))
- lines)
- (ly:outputter-dump-string outputter "\\lilypondend\n")
- ))
-
-
-
+ (format "\\lybox{~a}{~a}{%\n"
+ (ly:number->string
+ (max 0 (interval-end (paper-system-extent line X))))
+ (ly:number->string
+ (interval-length (paper-system-extent line Y)))))
+
+ (ly:outputter-dump-stencil putter (paper-system-stencil line))
+ (ly:outputter-dump-string
+ putter
+ (if last?
+ "}%\n"
+ "}\\interscoreline\n")))
+
+(define-public (output-classic-framework
+ basename book scopes fields)
+ (let* ((filename (format "~a.tex" basename))
+ (outputter (ly:make-paper-outputter
+ (open-file filename "w") "tex"))
+ (paper (ly:paper-book-paper book))
+ (lines (ly:paper-book-systems book))
+ (last-line (car (last-pair 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 (line) (dump-line outputter line (eq? line last-line))) lines)
+ (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)
+