X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fframework-eps.scm;h=4983874048c50485fdfc199859dff280f49be967;hb=3863f416bea79ef29dded3b1b8a3f61419098f7a;hp=13874d2af770bc6d4606c46a8de8fb535e556594;hpb=db911e179d4a1b2fed38771e851fcedc71b45921;p=lilypond.git diff --git a/scm/framework-eps.scm b/scm/framework-eps.scm index 13874d2af7..4983874048 100644 --- a/scm/framework-eps.scm +++ b/scm/framework-eps.scm @@ -2,7 +2,7 @@ ;;;; ;;;; source file of the GNU LilyPond music typesetter ;;;; -;;;; (c) 2004--2006 Han-Wen Nienhuys +;;;; (c) 2004--2008 Han-Wen Nienhuys (define-module (scm framework-eps)) @@ -10,7 +10,6 @@ (use-modules (ice-9 regex) (ice-9 string-fun) - (ice-9 format) (guile) (scm framework-ps) (scm paper-system) @@ -20,6 +19,8 @@ (srfi srfi-13) (lily)) +(define format ergonomic-simple-format) + (define framework-eps-module (current-module)) @@ -28,11 +29,14 @@ stencil, so LaTeX includegraphics doesn't fuck up the alignment." (define left - (apply min - (map (lambda (stc) - (interval-start (ly:stencil-extent stc X))) - stencils))) + (if (pair? stencils) + (apply min + (map (lambda (stc) + (interval-start (ly:stencil-extent stc X))) + stencils)) + 0.0)) + (map (lambda (stil) (ly:make-stencil @@ -45,35 +49,65 @@ stencil, so LaTeX includegraphics doesn't fuck up the alignment." stencils)) (define (dump-stencils-as-EPSes stencils book basename) + (define do-pdf (member "pdf" (ly:output-formats))) (define paper (ly:paper-book-paper book)) (define (dump-infinite-stack-EPS stencils) (let* ((dump-me (stack-stencils Y DOWN 2.0 stencils))) (dump-stencil-as-EPS paper dump-me basename #t))) + (define (dump-counted-stencil stencil-count-pair) + "Return EPS filename" + (let* + ((stencil (car stencil-count-pair)) + (number (cdr stencil-count-pair)) + (name (format "~a-~a" basename number))) + + (dump-stencil-as-EPS + paper stencil name + (ly:get-option 'include-eps-fonts)) + + (string-append name ".eps"))) + (define (dump-stencils-as-separate-EPS stencils count) (if (pair? stencils) (let* ((line (car stencils)) - (rest (cdr stencils))) + (rest (cdr stencils)) + (system-base-name (format "~a-~a" basename count)) + ) (dump-stencil-as-EPS - paper line (format "~a-~a" basename count) - (ly:get-option 'eps-font-include)) - - (dump-stencils-as-separate-EPS rest (1+ count))))) + paper line system-base-name) + (if do-pdf + (postscript->pdf 0 0 (string-append system-base-name ".eps"))) + (dump-stencils-as-separate-EPS rest (1+ count))))) ;; main body - (let* ((tex-system-name (format "~a-systems.tex" basename)) - (texi-system-name (format "~a-systems.texi" basename)) - (tex-system-port (open-output-file tex-system-name)) - (texi-system-port (open-output-file texi-system-name))) + (let* ((write-file (lambda (str-port ext) + (let* + ((name (format "~a-systems.~a" basename ext)) + (port (open-output-file name))) + (ly:message (_ "Writing ~a...") name) + (display (get-output-string str-port) port) + (close-output-port port) + ))) + + (tex-system-port (open-output-string)) + (texi-system-port (open-output-string)) + (count-system-port (open-output-string)) + (widened-stencils (widen-left-stencil-edges stencils)) + (counted-systems (count-list widened-stencils)) + (eps-files (map dump-counted-stencil counted-systems)) + ) - (ly:message (_ "Writing ~a...") tex-system-name) - (ly:message (_ "Writing ~a...") texi-system-name) + (if do-pdf + + ;; par-for-each: a bit faster ... + (for-each + (lambda (y) + (postscript->pdf 0 0 y)) + eps-files)) - (set! stencils (widen-left-stencil-edges stencils)) - - (dump-stencils-as-separate-EPS stencils 1) (for-each (lambda (c) (if (< 0 c) (display (format "\\ifx\\betweenLilyPondSystem \\undefined @@ -82,36 +116,34 @@ stencil, so LaTeX includegraphics doesn't fuck up the alignment." \\betweenLilyPondSystem{~a} \\fi " c) tex-system-port)) - (display (format "\\includegraphics{~a-~a.eps}\n" + (display (format "\\includegraphics{~a-~a}\n" basename (1+ c)) tex-system-port) (display (format "@image{~a-~a}\n" basename (1+ c)) texi-system-port)) (iota (length stencils))) - (display "@c eof - 'eof' is a Makefile marker; do not remove. " texi-system-port) - (display "% eof - 'eof' is Makefile marker; do not remove. " tex-system-port) - - (dump-infinite-stack-EPS stencils)) + (display "@c eof." texi-system-port) + (display "% eof. " tex-system-port) + (display (format "~a" (length stencils)) count-system-port) + (dump-infinite-stack-EPS stencils) (postprocess-output book framework-eps-module - (format "~a.eps" basename) (ly:output-formats))) + (format "~a.eps" basename) (ly:output-formats)) + (write-file texi-system-port "texi") + (write-file tex-system-port "tex") + + ;; do this as the last action so we know the rest is complete if + ;; this file is present. + (write-file count-system-port "count") + )) -(define (write-system-signatures basename paper-systems count) - (if (pair? paper-systems) - (begin - (let* - ((outname (format "~a-~a.signature" basename count)) ) - - (ly:message "writing ~a" outname) - (write-system-signature outname (car paper-systems)) - (write-system-signatures basename (cdr paper-systems) (1+ count)))))) (define-public (output-classic-framework basename book scopes fields) (output-scopes scopes fields basename) (if (ly:get-option 'dump-signatures) - (write-system-signatures basename (ly:paper-book-systems book) 0)) + (write-system-signatures basename (ly:paper-book-systems book) 1)) (dump-stencils-as-EPSes (map paper-system-stencil (ly:paper-book-systems book)) @@ -120,6 +152,9 @@ stencil, so LaTeX includegraphics doesn't fuck up the alignment." (define-public (output-framework basename book scopes fields) (output-scopes scopes fields basename) + (if (ly:get-option 'clip-systems) + (clip-system-EPSes basename book)) + (dump-stencils-as-EPSes (map page-stencil (ly:paper-book-pages book)) book basename)) @@ -128,6 +163,3 @@ stencil, so LaTeX includegraphics doesn't fuck up the alignment." (define convert-to-pdf convert-to-pdf) (define convert-to-ps convert-to-ps) (define convert-to-png convert-to-png) -(define convert-to-tex convert-to-tex) -(define convert-to-dvi convert-to-dvi) -