1 % scm.ly -- implement Scheme output routines for TeX and PostScript
3 % source file of the GNU LilyPond music typesetter
5 % (c) 1998 Jan Nieuwenhuizen <janneke@gnu.org>
9 ;;; graphical lisp element
10 (define (add-column p) (display \"adding column (in guile): \") (display p) (newline))
16 (map (lambda (n) (string-append (number->string n) \" \")) l)))
18 (define (number->octal-string x)
19 (let* ((n (inexact->exact x))
21 (n8 (quotient (- n (* n64 64)) 8)))
25 (number->string (remainder (- n (+ (* n64 64) (* n8 8))) 8)))))
27 (define (inexact->string x radix)
28 (let ((n (inexact->exact x)))
29 (number->string n radix)))
34 (number->string x) \"pt \"))
39 (string-append (number->string (car c)) \" \")
40 (string-append (number->string (cadr c)) \" \")))
44 (eval-string (string-append s \"-\" o)))
46 ;;; output definitions
49 ((invoke-output o \"char\") n))
54 \"(\\\\\" (inexact->string n 8) \") show\"))
59 \"\\\\char\" (inexact->string n 10)))
62 (dashed-slur o thick dash l)
63 ((invoke-output o \"dashed-slur\") thick dash l))
66 (dashed-slur-ps thick dash l)
68 (apply string-append (map control->string l))
69 (number->string thick)
71 (if (> 1 dash) (number->string (- (* thick dash) thick)) \"0\") \" \"
72 (number->string (* 2 thick))
73 \" ] 0 draw_dashed_slur\"))
76 (dashed-slur-tex thick dash l)
79 (dashed-slur-ps thick dash l)
84 ((invoke-output o \"empty\")))
96 ((invoke-output o \"end-output\")))
104 \"\n\\\\EndLilyPondOutput\")
108 ((invoke-output o \"experimental-on\")))
111 (experimental-on-ps) \"\")
114 (experimental-on-tex) \"\\\\turnOnExperimentalFeatures\")
117 (finishbar o h) (empty o))
123 (make-string 1 (integer->char (+ (char->integer #\\A) i)))
129 ; ((invoke-output o \"font-def\") i s))
134 \"\n/\" (font i) \" {/\"
135 (substring s 0 (- (string-length s) 3))
136 \" findfont 12 scalefont setfont} bind def\n\"))
141 \"\\\\font\" (font-switch-tex i) \"=\" s \"\n\"))
145 ((invoke-output o \"font-switch\") i))
149 (string-append (font i) \" \"))
154 \"\\\\\" (font i) \"\n\"))
157 (generalmeter o num den)
158 ((invoke-output o \"generalmeter\") num den))
161 (generalmeter-ps num den)
162 (string-append num \" \" den \" generalmeter \"))
165 (generalmeter-tex num den)
167 \"\\\\generalmeter{\" num \"}{\" den \"}\"))
170 (header o creator generate)
171 ((invoke-output o \"header\") creator generate))
174 (header-ps creator generate)
177 \"%%Creator: \" creator generate \"\n\"))
180 (header-tex creator generate)
182 \"%created by: \" creator generate \"\n\"))
186 ((invoke-output o \"header-end\")))
189 (header-end-ps) \"\")
192 (header-end-tex) \"\\\\turnOnPostScript\")
196 ((invoke-output o \"lily-def\") key val))
199 (lily-def-ps key val)
201 \"/\" key \" {\" val \"} bind def\n\"))
204 (lily-def-tex key val)
206 \"\\\\def\\\\\" key \"{\" val \"}\n\"))
210 ((invoke-output o \"maatstreep\") h))
215 (number->string h) \" maatstreep \" ))
220 \"\n\\\\maatstreep{\" (number->dim-tex h) \"}\"))
223 (pianobrace o h) (empty o))
227 ((invoke-output o \"placebox\") x y (b o)))
232 (number->string x) \" \" (number->string y) \" {\" s \"} placebox \"))
238 (number->dim-tex y) \"}{\" (number->dim-tex x) \"}{\" s \"}\"))
241 (repeatbar o h) (empty o))
245 ((invoke-output o \"rulesym\") x y))
250 (number->string x) \" \"
251 (number->string y) \" \"
257 \"\\\\rulesym{\" (number->dim-tex x) \"}{\" (number->dim-tex y) \"}\"))
260 (setitalic o s) (empty o))
263 (settext o s) (empty o))
267 ((invoke-output o \"slur\") l))
272 (apply string-append (map control->string l))
283 (stem o kern width height depth)
284 ((invoke-output o \"stem\") kern width height depth))
287 (stem-ps kern width height depth)
288 (string-append (numbers->string (list kern width height depth))
292 (stem-tex kern width height depth)
294 \"\\\\kern\" (number->dim-tex kern)
295 \"\\\\vrule width \" (number->dim-tex width)
296 \"depth \" (number->dim-tex depth)
297 \"height \" (number->dim-tex height) \" \"))
301 ((invoke-output o \"start-line\")))
307 \"\nstart_line {\n\"))
317 ((invoke-output o \"stop-line\")))
325 \"}\\\\interscoreline\")
329 \"/fontA { /feta20 findfont 12 scalefont setfont} bind def fontA\n\")
333 \"\\\\font\\\\fontA=feta20.afm\\\\fontA\n\")
336 (urg-font-switch-ps i)
337 \"\n/feta20 findfont 12 scalefont setfont \n\")