]> git.donarmstrong.com Git - lilypond.git/blob - scm/framework-eps.scm
* stepmake/stepmake/texinfo-rules.make: strip DVI support.
[lilypond.git] / scm / framework-eps.scm
1 ;;;; framework-ps.scm --
2 ;;;;
3 ;;;;  source file of the GNU LilyPond music typesetter
4 ;;;;
5 ;;;; (c) 2004--2006 Han-Wen Nienhuys <hanwen@cs.uu.nl>
6
7 (define-module (scm framework-eps))
8
9 ;;; this is still too big a mess.
10
11 (use-modules (ice-9 regex)
12              (ice-9 string-fun)
13              (ice-9 format)
14              (guile)
15              (scm framework-ps)
16              (scm paper-system)
17              (scm page)
18              (scm output-ps)
19              (srfi srfi-1)
20              (srfi srfi-13)
21              (lily))
22
23 (define framework-eps-module (current-module))
24
25
26 (define (widen-left-stencil-edges stencils)
27   "Change STENCILS to use the union for the left extents in every
28 stencil, so LaTeX includegraphics doesn't fuck up the alignment."
29
30   (define left
31     (apply min
32            (map (lambda (stc)
33                   (interval-start (ly:stencil-extent stc X)))
34                 stencils)))
35
36   (map (lambda (stil)
37          
38          (ly:make-stencil
39           (ly:stencil-expr stil)
40           (cons
41            left
42            (cdr (ly:stencil-extent stil X)))
43           (ly:stencil-extent stil Y)
44           ))
45        stencils))
46
47   
48 (define (dump-stencils-as-EPSes stencils book basename)
49   (define do-pdf (member  "pdf" (ly:output-formats)))
50   (define paper (ly:paper-book-paper book))
51   (define (dump-infinite-stack-EPS stencils)
52     (let* ((dump-me (stack-stencils Y DOWN 2.0 stencils)))
53       (dump-stencil-as-EPS paper dump-me basename #t)))
54
55   (define (dump-stencils-as-separate-EPS stencils count )
56     (if (pair? stencils)
57         (let* ((line (car stencils))
58                (rest (cdr stencils))
59                (system-base-name (format "~a-~a" basename count))
60                )
61
62           (dump-stencil-as-EPS
63            paper line system-base-name
64            (ly:get-option 'eps-font-include))
65
66           (if do-pdf
67               (postscript->pdf  0 0  (string-append system-base-name ".eps")))
68           (dump-stencils-as-separate-EPS rest (1+ count)))))
69
70
71   ;; main body 
72   (let* ((tex-system-name (format "~a-systems.tex" basename))
73          (pdftex-system-name (format "~a-systems.pdftex" basename))
74          (texi-system-name (format "~a-systems.texi" basename))
75          (tex-system-port (open-output-file tex-system-name))
76          (texi-system-port (open-output-file texi-system-name))
77          (pdftex-system-port (open-output-file pdftex-system-name)))
78     
79     (ly:message (_ "Writing ~a...") tex-system-name)
80     (ly:message (_ "Writing ~a...") texi-system-name)
81     (ly:message (_ "Writing ~a...") pdftex-system-name)
82
83     (set! stencils (widen-left-stencil-edges stencils))
84     
85     (dump-stencils-as-separate-EPS stencils 1)
86     (for-each (lambda (c)
87                 (if (< 0 c)
88                     (display (format "\\ifx\\betweenLilyPondSystem \\undefined
89   \\linebreak
90 \\else
91   \\betweenLilyPondSystem{~a}
92 \\fi
93 " c) tex-system-port))
94                 (display (format "\\includegraphics{~a-~a.eps}\n"
95                                  basename (1+ c)) tex-system-port)
96                 (display (format "\\includegraphics{~a-~a.pdf}\n"
97                                  basename (1+ c)) pdftex-system-port)
98                 (display (format "@image{~a-~a}\n"
99                                  basename (1+ c)) texi-system-port))
100               (iota (length stencils)))
101     
102     (display "@c eof - 'eof' is a Makefile marker; do not remove. " texi-system-port)
103     (display "% eof - 'eof' is Makefile marker; do not remove. " tex-system-port)
104     
105     (dump-infinite-stack-EPS stencils)
106     (postprocess-output book framework-eps-module
107                         (format "~a.eps" basename) (ly:output-formats))))
108
109
110
111 (define-public (output-classic-framework basename book scopes fields)
112   (output-scopes scopes fields basename)
113
114   (if (ly:get-option 'dump-signatures)
115       (write-system-signatures basename (ly:paper-book-systems book) 1))
116   
117   (dump-stencils-as-EPSes
118    (map paper-system-stencil (ly:paper-book-systems book))
119    book
120    basename))
121
122 (define-public (output-framework basename book scopes fields)
123   (output-scopes scopes fields basename)
124   (dump-stencils-as-EPSes
125    (map page-stencil (ly:paper-book-pages book)) book basename))
126   
127
128 ; redefine to imports from framework-ps
129 (define convert-to-pdf convert-to-pdf)
130 (define convert-to-ps convert-to-ps)
131 (define convert-to-png convert-to-png)
132 (define convert-to-tex convert-to-tex)
133 (define convert-to-dvi convert-to-dvi)
134
135