Update of /project/fomus/cvsroot/fomus In directory common-lisp.net:/tmp/cvs-serv23599
Modified Files: backend_ly.lisp backend_mid.lisp fomus.asd version.lisp Log Message: bug fixes Date: Thu Oct 6 04:27:16 2005 Author: dpsenicka
Index: fomus/backend_ly.lisp diff -u fomus/backend_ly.lisp:1.18 fomus/backend_ly.lisp:1.19 --- fomus/backend_ly.lisp:1.18 Wed Oct 5 16:27:36 2005 +++ fomus/backend_ly.lisp Thu Oct 6 04:27:12 2005 @@ -59,6 +59,20 @@ (er "compiling"))) #-(and (or cmu sbcl openmcl) (or linux darwin unix)) (format t ";; ERROR: Don't know how to compile/view lilypond file~%"))))
+(defparameter *lilypond-version* t) +(defun lilypond-version (options) + (if (truep *lilypond-version*) + (setf *lilypond-version* + (destructuring-bind (&key exe &allow-other-keys) options + (let ((os (make-string-output-stream))) + (ignore-errors (#+cmu extensions:run-program #+sbcl sb-ext:run-program #+openmcl ccl:run-program (or exe +lilypond-exe+) + (list "-v") :wait t :output os)) + (let* ((out (get-output-stream-string os)) + (p (search "LilyPond " out))) + (when p (multiple-value-bind (n1 np) (parse-integer out :start (+ p 9) :junk-allowed t) + (+ (* n1 100) (parse-integer out :start (1+ np) :junk-allowed t)))))))) + *lilypond-version*)) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; LILYPOND BACKEND
@@ -69,13 +83,21 @@ (defparameter +lilypond-defs+ '("octUp = #(set-octavation 1)" "octReset = #(set-octavation 0)" - "octDown = #(set-octavation -1)" - "beamL = #(def-music-function (loc num) (number?) #{\set stemLeftBeamCount = #$num #})" + "octDown = #(set-octavation -1)")) +(defparameter +lilypond-defs-24+ + '("beamL = #(def-music-function (loc num) (number?) #{\set stemLeftBeamCount = #$num #})" "beamR = #(def-music-function (loc num) (number?) #{\set stemRightBeamCount = #$num #})" "beamLR = #(def-music-function (loc numl numr) (number? number?) #{\set stemLeftBeamCount = #$numl \set stemRightBeamCount = #$numr #})" "textSpan = #(def-music-function (loc dir str) (number? string?) #{\override TextSpanner #'direction = #$dir \override TextSpanner #'edge-text = #(cons $str "") #})" "noteHead = #(def-music-function (loc sty) (symbol?) #{\once \override NoteHead #'style = #$sty #})" )) +(defparameter +lilypond-defs-26+ + '("beamL = #(def-music-function (par loc num) (number?) #{\set stemLeftBeamCount = #$num #})" + "beamR = #(def-music-function (par loc num) (number?) #{\set stemRightBeamCount = #$num #})" + "beamLR = #(def-music-function (par loc numl numr) (number? number?) #{\set stemLeftBeamCount = #$numl \set stemRightBeamCount = #$numr #})" + "textSpan = #(def-music-function (par loc dir str) (number? string?) #{\override TextSpanner #'direction = #$dir \override TextSpanner #'edge-text = #(cons $str "") #})" + "noteHead = #(def-music-function (par loc sty) (symbol?) #{\once \override NoteHead #'style = #$sty #})" + ))
(defparameter +lilypond-num-note+ (vector "c" nil "d" nil "e" "f" nil "g" nil "a" nil "b")) (defparameter +lilypond-num-acc+ (vector "eses" "es" "" "is" "isis")) @@ -140,7 +162,8 @@ (format f "~A" header) (loop for e in +lilypond-head+ do (format f "~A~%" e) finally (format f "~%")) ;; stuff at top (when filehead (loop for e in (force-list filehead) do (format f "~A~%" e) finally (format f "~%"))) ;; user header - (loop for e in +lilypond-defs+ do (format f "~A~%" e) finally (format f "~%")) ;; definitions + (loop for e in (append +lilypond-defs+ (if (>= (lilypond-version options) 205) +lilypond-defs-26+ +lilypond-defs-24+)) + do (format f "~A~%" e) finally (format f "~%")) ;; definitions (let ((de 0) (nms nil) (twrn nil)) (flet ((lynote (wnum acc1 acc2 caut) (if *quartertones*
Index: fomus/backend_mid.lisp diff -u fomus/backend_mid.lisp:1.4 fomus/backend_mid.lisp:1.5 --- fomus/backend_mid.lisp:1.4 Wed Oct 5 16:27:36 2005 +++ fomus/backend_mid.lisp Thu Oct 6 04:27:12 2005 @@ -339,7 +339,7 @@ (if di (>= (event-grace e) 0) (< (event-grace e) 0))) collect (if cd (cons (if di (incf co cd) (decf co cd)) cd) (progn - (setf cd (loop for (x . rr) on r + (setf cd (loop for x in r for su from 1 while (and (event-grace x) (= (event-off x) (event-off e))) @@ -373,9 +373,9 @@ (loop with n0 = (if (chordp ev) (event-notes* ev) (list (event-note* ev))) with ln = (length n0) and cch = (or (when pizz (lookup pizzch aps)) - (loop for v in '(stopped open flageolet harmonic) + (loop for v in '(:stopped :open :flageolet :harmonic) and c in (list stoppedch opench flageoletch harmonicch) - for m = (getmark ev c) + for m = (getmark ev v) when m do (return (lookup c aps))) ch) for n in n0 and x from 1
Index: fomus/fomus.asd diff -u fomus/fomus.asd:1.14 fomus/fomus.asd:1.15 --- fomus/fomus.asd:1.14 Wed Oct 5 16:27:36 2005 +++ fomus/fomus.asd Thu Oct 6 04:27:12 2005 @@ -4,7 +4,7 @@ (asdf:defsystem "fomus"
:description "Lisp music notation formatter" - :version "0.1.18" + :version "0.1.19" :author "David Psenicka" :licence "LLGPL"
Index: fomus/version.lisp diff -u fomus/version.lisp:1.13 fomus/version.lisp:1.14 --- fomus/version.lisp:1.13 Wed Oct 5 16:27:36 2005 +++ fomus/version.lisp Thu Oct 6 04:27:12 2005 @@ -12,7 +12,7 @@ (declaim (type string +title+) (type cons +version+ +banner+)) (defparameter +title+ "FOMUS") -(defparameter +version+ '(0 1 18)) +(defparameter +version+ '(0 1 19)) (defparameter +banner+ `("Lisp music notation formatter" "Copyright (c) 2005 David Psenicka, All Rights Reserved"