]> git.donarmstrong.com Git - lilypond.git/blobdiff - scm/framework-eps.scm
Fix some bugs in the dynamic engraver and PostScript backend
[lilypond.git] / scm / framework-eps.scm
index 6917cf216e915f55f401a98f1f7cc4892b5c074c..930ac51bf1141577bc80a23285adea40203e45d0 100644 (file)
@@ -2,7 +2,7 @@
 ;;;;
 ;;;;  source file of the GNU LilyPond music typesetter
 ;;;;
-;;;; (c)  2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 
 (define-module (scm framework-eps))
 
@@ -13,6 +13,8 @@
             (ice-9 format)
             (guile)
             (scm framework-ps)
+            (scm paper-system)
+            (scm page)
             (scm output-ps)
             (srfi srfi-1)
             (srfi srfi-13)
 
 (define framework-eps-module (current-module))
 
+
+(define (widen-left-stencil-edges stencils)
+  "Change STENCILS to use the union for the left extents in every
+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)))
+
+  (map (lambda (stil)
+        
+        (ly:make-stencil
+         (ly:stencil-expr stil)
+         (cons
+          left
+          (cdr (ly:stencil-extent stil X)))
+         (ly:stencil-extent stil Y)
+         ))
+       stencils))
+
 (define (dump-stencils-as-EPSes stencils book basename)
   (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)
-      ))
+    (let* ((dump-me (stack-stencils Y DOWN 2.0 stencils)))
+      (dump-stencil-as-EPS paper dump-me basename #t)))
 
   (define (dump-stencils-as-separate-EPS stencils count)
     (if (pair? stencils)
-       (let*
-           ((line (car stencils))
-            (rest (cdr stencils)))
+       (let* ((line (car stencils))
+              (rest (cdr stencils)))
+
          (dump-stencil-as-EPS
-          paper
-          line (format "~a-~a" basename count)
-          (ly:output-def-lookup paper 'force-eps-font-include))
+          paper line (format "~a-~a" basename count)
+          (ly:get-option 'eps-font-include))
+         
+         (dump-stencils-as-separate-EPS rest (1+ count)))))
 
-         (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)))
     
-    (display (format "Writing ~a\n" tex-system-name))
-    (display (format "Writing ~a\n" texi-system-name))
+    (ly:message (_ "Writing ~a...") tex-system-name)
+    (ly:message (_ "Writing ~a...") texi-system-name)
+
+    (set! stencils (widen-left-stencil-edges stencils))
+    
     (dump-stencils-as-separate-EPS stencils 1)
     (for-each (lambda (c)
-               (display (format "\\includegraphics{~a-~a.eps}%\n"
+               (if (< 0 c)
+                   (display (format "\\ifx\\betweenLilyPondSystem \\undefined
+  \\linebreak
+\\else
+  \\betweenLilyPondSystem{~a}
+\\fi
+" c) tex-system-port))
+               (display (format "\\includegraphics{~a-~a.eps}\n"
                                 basename (1+ c)) tex-system-port)
-               (display (format "@image{~a-~a}@c\n"
+               (display (format "@image{~a-~a}\n"
                                 basename (1+ c)) texi-system-port))
              (iota (length stencils)))
-
-    (display "@c eof - 'eof' is a Makefile marker; don't remove. " texi-system-port)
-    (display "% eof - 'eof' is Makefile marker; don't remove. " tex-system-port)
+    
+    (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))
     (postprocess-output book framework-eps-module
                        (format "~a.eps" basename) (ly:output-formats)))
 
-(define-public (output-classic-framework
-               basename book scopes fields)
 
+
+(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))
+  
   (dump-stencils-as-EPSes
-   (map ly:paper-system-stencil (ly:paper-book-systems book))
+   (map paper-system-stencil (ly:paper-book-systems book))
    book
    basename))
 
 (define-public (output-framework basename book scopes fields)
-  (dump-stencils-as-EPSes (ly:paper-book-pages book)
-                         book
-                         basename))
+  (output-scopes scopes fields basename)
+  (dump-stencils-as-EPSes
+   (map page-stencil (ly:paper-book-pages book)) book basename))
   
 
 ; redefine to imports from framework-ps