Update of /project/gsharp/cvsroot/gsharp In directory common-lisp.net:/tmp/cvs-serv7169
Modified Files: buffer.lisp drawing.lisp gui.lisp modes.lisp packages.lisp Log Message: Gsharp definitely has lyrics.
When a lyrics layer is selected, the ordinary alphabetic keys append characters to the preceding lyrics element. use C-Space to insert a new lyrics element. Use C-h to erase the last character of a lyrics element. It's a bit clunky, but it works. I seriously doubt the full power of Goatee is needed to edit lyrics.
I noticed that (probably unintentionally) McCLIM can handle Unicode texts in the form of vectors of integers to draw-text. It probably just passes them on to the port-specific functions, and it happens to work with clx. It probably won't work on all backends, but it would be nice if it did. The default font on my machine can probably only do character codes up to 255, but with a good font, it should be able to do up to 65535. But right now, I can get the German national characters, which are needed for Bach.
Check out the new file Scores/bach181-lyrics.gsh.
In it, you will also notice that there is one place in which words overlap. To fix that (which is not just a lyrics problem, but also happens with clusters with many accidentals) Gsharp must learn to compute how much extra room an element might need, and adjust spacing accordingly,
Unfortunately McCLIM does not handle input from a US-international keyboard, so I actually had to put in the ΓΌ's manually, but it should work for others.
With lyrics, MIDI file generation is most likely broken, but I haven't checked that yet. It should just skip lyrics layers.
Date: Sat Jul 24 13:09:55 2004 Author: rstrandh
Index: gsharp/buffer.lisp diff -u gsharp/buffer.lisp:1.5 gsharp/buffer.lisp:1.6 --- gsharp/buffer.lisp:1.5 Fri Jul 23 09:51:16 2004 +++ gsharp/buffer.lisp Sat Jul 24 13:09:55 2004 @@ -408,6 +408,14 @@ :initform (make-array 5 :adjustable t :element-type 'fixnum :fill-pointer 0) :reader text)))
+(defmethod initialize-instance :after ((elem lyrics-element) &rest args) + (declare (ignore args)) + (with-slots (text) elem + (unless (adjustable-array-p text) + (let ((length (length text))) + (setf text (make-array length :adjustable t :element-type 'fixnum + :fill-pointer length :initial-contents text)))))) + (defun make-lyrics-element (rbeams lbeams dots notehead staff) (make-instance 'lyrics-element :rbeams rbeams :lbeams lbeams :dots dots @@ -415,7 +423,7 @@
(defmethod print-object ((elem lyrics-element) stream) (with-slots (notehead rbeams lbeams dots xoffset staff text) elem - (format stream "[A :notehead ~W :rbeams ~W :lbeams ~W :dots ~W :xoffset ~W :staff ~W :text ~W ] " text))) + (format stream "[A :notehead ~W :rbeams ~W :lbeams ~W :dots ~W :xoffset ~W :staff ~W :text ~W ] " notehead rbeams lbeams dots xoffset staff text)))
(defun read-lyrics-element-v3 (stream char n) (declare (ignore char n)) @@ -424,6 +432,13 @@ (set-dispatch-macro-character #[ #\A #'read-lyrics-element-v3 *gsharp-readtable-v3*) + +(defmethod append-char ((elem lyrics-element) char) + (vector-push-extend char (text elem))) + +(defmethod erase-char ((elem lyrics-element)) + (unless (zerop (fill-pointer (text elem))) + (decf (fill-pointer (text elem)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;
Index: gsharp/drawing.lisp diff -u gsharp/drawing.lisp:1.7 gsharp/drawing.lisp:1.8 --- gsharp/drawing.lisp:1.7 Fri Jul 23 09:51:16 2004 +++ gsharp/drawing.lisp Sat Jul 24 13:09:55 2004 @@ -642,5 +642,4 @@ (defmethod draw-element (pane (element lyrics-element) x &optional (flags t)) (declare (ignore flags)) (score-pane:with-vertical-score-position (pane (staff-yoffset (staff element))) - (draw-text* pane (map 'string #'unicode-to-char (text element)) - x 0 :align-x :center))) + (draw-text* pane (text element) x 0 :align-x :center)))
Index: gsharp/gui.lisp diff -u gsharp/gui.lisp:1.15 gsharp/gui.lisp:1.16 --- gsharp/gui.lisp:1.15 Fri Jul 23 09:51:16 2004 +++ gsharp/gui.lisp Sat Jul 24 13:09:55 2004 @@ -13,7 +13,7 @@ (defparameter *kbd-macro-funs* '())
(defparameter *accumulated-keys* '()) -(defparameter *modes* (list *global-mode-table*)) +(defparameter *modes* (list *melody-layer-mode-table* *global-mode-table*)) (defparameter *last-character* nil)
(defmethod dispatch-event :around ((pane score-pane:score-pane) (event key-press-event)) @@ -29,7 +29,8 @@ (dico-object x *accumulated-keys*) (declare (ignore value prefix-p)) exists-p)))) - (fboundp (dico-object dico *accumulated-keys*))) + (or (functionp (dico-object dico *accumulated-keys*)) + (fboundp (dico-object dico *accumulated-keys*)))) (let ((command (dico-object dico *accumulated-keys*))) (when *kbd-macro-recording-p* (push command *kbd-macro-funs*)) (handler-case (funcall command) @@ -394,6 +395,11 @@ (declare (ignore string)) (if success layer (error 'no-such-layer))))
+(defmethod select-layer :after (cursor (layer layer)) + (setf *modes* (list (cond ((typep layer 'melody-layer) *melody-layer-mode-table*) + ((typep layer 'lyrics-layer) *lyrics-layer-mode-table*)) + *global-mode-table*))) + (define-gsharp-command (com-select-layer :name t) () (let ((selected-layer (accept 'layer :prompt "Select layer"))) (select-layer (cursor *gsharp-frame*) selected-layer))) @@ -1155,3 +1161,20 @@ (define-gsharp-command com-call-last-kbd-macro () (handler-case (mapc #'funcall *kbd-macro-funs*) (gsharp-condition (condition) (format *error-output* "~a~%" condition)))) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; +;;; Lyrics + +(defun insert-lyrics-element () + (let* ((state (input-state *gsharp-frame*)) + (cursor (cursor *gsharp-frame*)) + (element (make-lyrics-element + (if (eq (notehead state) :filled) (rbeams state) 0) + (if (eq (notehead state) :filled) (lbeams state) 0) + (dots state) + (notehead state) + (car (staves (layer (cursor *gsharp-frame*))))))) + (insert-element element cursor) + (forward-element cursor) + element))
Index: gsharp/modes.lisp diff -u gsharp/modes.lisp:1.1 gsharp/modes.lisp:1.2 --- gsharp/modes.lisp:1.1 Fri Jul 23 09:51:16 2004 +++ gsharp/modes.lisp Sat Jul 24 13:09:55 2004 @@ -11,70 +11,156 @@ ;;; global mode table (defparameter *global-mode-table* (make-sequence-dico :test #'equal))
-(add-keyseq '((#\L :shift)) 'com-lower *global-mode-table*) -(add-keyseq '((#\H :shift)) 'com-higher *global-mode-table*) (add-keyseq '((#\f :control)) 'com-forward-element *global-mode-table*) (add-keyseq '((#\b :control)) 'com-backward-element *global-mode-table*) (add-keyseq '((#\d :control)) 'com-delete-element *global-mode-table*) -(add-keyseq '((#\h :control)) 'com-erase-element *global-mode-table*) -(add-keyseq '((#\c)) 'com-insert-note-c *global-mode-table*) -(add-keyseq '((#\d)) 'com-insert-note-d *global-mode-table*) -(add-keyseq '((#\e)) 'com-insert-note-e *global-mode-table*) -(add-keyseq '((#\f)) 'com-insert-note-f *global-mode-table*) -(add-keyseq '((#\g)) 'com-insert-note-g *global-mode-table*) -(add-keyseq '((#\a)) 'com-insert-note-a *global-mode-table*) -(add-keyseq '((#\b)) 'com-insert-note-b *global-mode-table*) -(add-keyseq '((#,)) 'com-insert-rest *global-mode-table*) -(add-keyseq '((#\Space)) 'com-insert-empty-cluster *global-mode-table*) -(add-keyseq '((#\C :shift)) 'com-add-note-c *global-mode-table*) -(add-keyseq '((#\D :shift)) 'com-add-note-d *global-mode-table*) -(add-keyseq '((#\E :shift)) 'com-add-note-e *global-mode-table*) -(add-keyseq '((#\F :shift)) 'com-add-note-f *global-mode-table*) -(add-keyseq '((#\G :shift)) 'com-add-note-g *global-mode-table*) -(add-keyseq '((#\A :shift)) 'com-add-note-a *global-mode-table*) -(add-keyseq '((#\B :shift)) 'com-add-note-b *global-mode-table*) -(add-keyseq '((#\h :meta)) 'com-rotate-notehead *global-mode-table*) -(add-keyseq '((#\s :meta)) 'com-rotate-stem-direction *global-mode-table*) -(add-keyseq '((#\p)) 'com-current-increment *global-mode-table*) -(add-keyseq '((#\n)) 'com-current-decrement *Global-mode-table*) (add-keyseq '((#| :shift)) 'com-insert-measure-bar *global-mode-table*) (add-keyseq '((#.)) 'com-more-dots *global-mode-table*) (add-keyseq '((#[)) 'com-more-lbeams *global-mode-table*) (add-keyseq '((#])) 'com-more-rbeams *global-mode-table*) -(add-keyseq '((##)) 'com-sharper *global-mode-table*) -(add-keyseq '((## :shift)) 'com-sharper *global-mode-table*) -(add-keyseq '((#@ :shift)) 'com-flatter *global-mode-table*) -(add-keyseq '((## :meta)) 'com-more-sharps *global-mode-table*) -(add-keyseq '((## :meta :shift)) 'com-more-sharps *global-mode-table*) -(add-keyseq '((#@ :meta :shift)) 'com-more-flats *global-mode-table*) -(add-keyseq '((#\u :meta)) 'com-up *global-mode-table*) -(add-keyseq '((#\d :meta)) 'com-down *global-mode-table*) (add-keyseq '((#\l :meta)) 'com-left *global-mode-table*) (add-keyseq '((#\r :meta)) 'com-right *global-mode-table*) -(add-keyseq '((#\p :meta)) 'com-previous-layer *global-mode-table*) -(add-keyseq '((#\n :meta)) 'com-next-layer *global-mode-table*) -(add-keyseq '((#\i) (#.)) 'com-istate-more-dots *global-mode-table*) -(add-keyseq '((#\i) (#[)) 'com-istate-more-lbeams *global-mode-table*) -(add-keyseq '((#\i) (#])) 'com-istate-more-rbeams *global-mode-table*) -(add-keyseq '((#\i) (#\h)) 'com-istate-rotate-notehead *global-mode-table*) -(add-keyseq '((#\i) (#\s)) 'com-istate-rotate-stem-direction *global-mode-table*) -(add-keyseq '((#\i) (#\x) (#.)) 'com-istate-fewer-dots *global-mode-table*) -(add-keyseq '((#\i) (#\x) (#[)) 'com-istate-fewer-lbeams *global-mode-table*) -(add-keyseq '((#\i) (#\x) (#])) 'com-istate-fewer-rbeams *global-mode-table*) -(add-keyseq '((#\x) (#.)) 'com-fewer-dots *global-mode-table*) -(add-keyseq '((#\x) (#[)) 'com-fewer-lbeams *global-mode-table*) -(add-keyseq '((#\x) (#])) 'com-fewer-rbeams *global-mode-table*) (add-keyseq '((#\x :control) (#( :shift)) 'com-start-kbd-macro *global-mode-table*) (add-keyseq '((#\x :control) (#()) 'com-start-kbd-macro *global-mode-table*) (add-keyseq '((#\x :control) (#) :shift)) 'com-end-kbd-macro *global-mode-table*) (add-keyseq '((#\x :control) (#))) 'com-end-kbd-macro *global-mode-table*) (add-keyseq '((#\x :control) (#\e)) 'com-call-last-kbd-macro *global-mode-table*) +(add-keyseq '((#\r :control)) 'com-rotate-notehead *global-mode-table*) + +;;; melody mode table +(defparameter *melody-layer-mode-table* (make-sequence-dico :test #'equal)) + +(add-keyseq '((#\L :shift)) 'com-lower *melody-layer-mode-table*) +(add-keyseq '((#\H :shift)) 'com-higher *melody-layer-mode-table*) +(add-keyseq '((#\c)) 'com-insert-note-c *melody-layer-mode-table*) +(add-keyseq '((#\d)) 'com-insert-note-d *melody-layer-mode-table*) +(add-keyseq '((#\e)) 'com-insert-note-e *melody-layer-mode-table*) +(add-keyseq '((#\f)) 'com-insert-note-f *melody-layer-mode-table*) +(add-keyseq '((#\g)) 'com-insert-note-g *melody-layer-mode-table*) +(add-keyseq '((#\a)) 'com-insert-note-a *melody-layer-mode-table*) +(add-keyseq '((#\b)) 'com-insert-note-b *melody-layer-mode-table*) +(add-keyseq '((#,)) 'com-insert-rest *melody-layer-mode-table*) +(add-keyseq '((#\Space)) 'com-insert-empty-cluster *melody-layer-mode-table*) +(add-keyseq '((#\C :shift)) 'com-add-note-c *melody-layer-mode-table*) +(add-keyseq '((#\D :shift)) 'com-add-note-d *melody-layer-mode-table*) +(add-keyseq '((#\E :shift)) 'com-add-note-e *melody-layer-mode-table*) +(add-keyseq '((#\F :shift)) 'com-add-note-f *melody-layer-mode-table*) +(add-keyseq '((#\G :shift)) 'com-add-note-g *melody-layer-mode-table*) +(add-keyseq '((#\A :shift)) 'com-add-note-a *melody-layer-mode-table*) +(add-keyseq '((#\B :shift)) 'com-add-note-b *melody-layer-mode-table*) +(add-keyseq '((#\p)) 'com-current-increment *melody-layer-mode-table*) +(add-keyseq '((#\n)) 'com-current-decrement *Melody-Layer-mode-table*) +(add-keyseq '((#\i) (#.)) 'com-istate-more-dots *melody-layer-mode-table*) +(add-keyseq '((#\i) (#[)) 'com-istate-more-lbeams *melody-layer-mode-table*) +(add-keyseq '((#\i) (#])) 'com-istate-more-rbeams *melody-layer-mode-table*) +(add-keyseq '((#\i) (#\h)) 'com-istate-rotate-notehead *melody-layer-mode-table*) +(add-keyseq '((#\i) (#\s)) 'com-istate-rotate-stem-direction *melody-layer-mode-table*) +(add-keyseq '((#\i) (#\x) (#.)) 'com-istate-fewer-dots *melody-layer-mode-table*) +(add-keyseq '((#\i) (#\x) (#[)) 'com-istate-fewer-lbeams *melody-layer-mode-table*) +(add-keyseq '((#\i) (#\x) (#])) 'com-istate-fewer-rbeams *melody-layer-mode-table*) +(add-keyseq '((#\x) (#.)) 'com-fewer-dots *melody-layer-mode-table*) +(add-keyseq '((#\x) (#[)) 'com-fewer-lbeams *melody-layer-mode-table*) +(add-keyseq '((#\x) (#])) 'com-fewer-rbeams *melody-layer-mode-table*) +(add-keyseq '((#\h :control)) 'com-erase-element *melody-layer-mode-table*) +(add-keyseq '((#\h :meta)) 'com-rotate-notehead *melody-layer-mode-table*) +(add-keyseq '((#\s :meta)) 'com-rotate-stem-direction *melody-layer-mode-table*) +(add-keyseq '((##)) 'com-sharper *melody-layer-mode-table*) +(add-keyseq '((## :shift)) 'com-sharper *melody-layer-mode-table*) +(add-keyseq '((#@ :shift)) 'com-flatter *melody-layer-mode-table*) +(add-keyseq '((## :meta)) 'com-more-sharps *melody-layer-mode-table*) +(add-keyseq '((## :meta :shift)) 'com-more-sharps *melody-layer-mode-table*) +(add-keyseq '((#@ :meta :shift)) 'com-more-flats *melody-layer-mode-table*) +(add-keyseq '((#\u :meta)) 'com-up *melody-layer-mode-table*) +(add-keyseq '((#\d :meta)) 'com-down *melody-layer-mode-table*)
;;; lyrics mode table
(defparameter *lyrics-layer-mode-table* (make-sequence-dico :test #'equal))
+(add-keyseq '((#\h :control)) (lambda () (erase-char (cur-element))) + *lyrics-layer-mode-table*) +(add-keyseq '((#\h :meta)) 'com-erase-element *lyrics-layer-mode-table*) +(add-keyseq '((#\Space :control)) 'insert-lyrics-element *lyrics-layer-mode-table*)
-;;; melody mode table -(defparameter *melody-layer-mode-table* (make-sequence-dico :test #'equal)) +(defun make-insert-fun (code) + (lambda () (append-char (cur-element) code))) + +(loop for c in '(#\A #\B #\C #\D #\E #\F #\G #\H #\I #\J #\K #\L #\M + #\N #\O #\P #\Q #\R #\S #\T #\U #\V #\W #\X #\Y #\Z) + for i from 65 + do (add-keyseq `((,c :shift)) (make-insert-fun i) *lyrics-layer-mode-table*)) + +(loop for c in '(#\a #\b #\c #\d #\e #\f #\g #\h #\i #\j #\k #\l #\m + #\n #\o #\p #\q #\r #\s #\t #\u #\v #\w #\x #\y #\z) + for i from 97 + do (add-keyseq `((,c)) (make-insert-fun i) *lyrics-layer-mode-table*)) + +;;; try some latin prefix mode for national characters +(add-keyseq '((#`) (#\A :shift)) (make-insert-fun 192) *lyrics-layer-mode-table*) +(add-keyseq '((#') (#\A :shift)) (make-insert-fun 193) *lyrics-layer-mode-table*) +(add-keyseq '((#^) (#\A :shift)) (make-insert-fun 194) *lyrics-layer-mode-table*) +(add-keyseq '((#~) (#\A :shift)) (make-insert-fun 195) *lyrics-layer-mode-table*) +(add-keyseq '((#") (#\A :shift)) (make-insert-fun 196) *lyrics-layer-mode-table*) +(add-keyseq '((#/) (#\A :shift)) (make-insert-fun 197) *lyrics-layer-mode-table*) +(add-keyseq '((#/) (#\E :shift)) (make-insert-fun 198) *lyrics-layer-mode-table*) +(add-keyseq '((#/) (#\C :shift)) (make-insert-fun 199) *lyrics-layer-mode-table*) +(add-keyseq '((#`) (#\E :shift)) (make-insert-fun 200) *lyrics-layer-mode-table*) +(add-keyseq '((#') (#\E :shift)) (make-insert-fun 201) *lyrics-layer-mode-table*) +(add-keyseq '((#^) (#\E :shift)) (make-insert-fun 202) *lyrics-layer-mode-table*) +(add-keyseq '((#") (#\E :shift)) (make-insert-fun 203) *lyrics-layer-mode-table*) +(add-keyseq '((#`) (#\I :shift)) (make-insert-fun 204) *lyrics-layer-mode-table*) +(add-keyseq '((#') (#\I :shift)) (make-insert-fun 205) *lyrics-layer-mode-table*) +(add-keyseq '((#^) (#\I :shift)) (make-insert-fun 206) *lyrics-layer-mode-table*) +(add-keyseq '((#") (#\I :shift)) (make-insert-fun 207) *lyrics-layer-mode-table*) +(add-keyseq '((#/) (#\D :shift)) (make-insert-fun 208) *lyrics-layer-mode-table*) +(add-keyseq '((#~) (#\N :shift)) (make-insert-fun 209) *lyrics-layer-mode-table*) +(add-keyseq '((#`) (#\O :shift)) (make-insert-fun 210) *lyrics-layer-mode-table*) +(add-keyseq '((#') (#\O :shift)) (make-insert-fun 211) *lyrics-layer-mode-table*) +(add-keyseq '((#^) (#\O :shift)) (make-insert-fun 212) *lyrics-layer-mode-table*) +(add-keyseq '((#~) (#\O :shift)) (make-insert-fun 213) *lyrics-layer-mode-table*) +(add-keyseq '((#") (#\O :shift)) (make-insert-fun 214) *lyrics-layer-mode-table*) + +(add-keyseq '((#/) (#\O :shift)) (make-insert-fun 216) *lyrics-layer-mode-table*) +(add-keyseq '((#`) (#\U :shift)) (make-insert-fun 217) *lyrics-layer-mode-table*) +(add-keyseq '((#') (#\U :shift)) (make-insert-fun 218) *lyrics-layer-mode-table*) +(add-keyseq '((#^) (#\U :shift)) (make-insert-fun 219) *lyrics-layer-mode-table*) +(add-keyseq '((#") (#\U :shift)) (make-insert-fun 220) *lyrics-layer-mode-table*) +(add-keyseq '((#') (#\Y :shift)) (make-insert-fun 221) *lyrics-layer-mode-table*) + + +(add-keyseq '((#`) (#\a)) (make-insert-fun 224) *lyrics-layer-mode-table*) +(add-keyseq '((#') (#\a)) (make-insert-fun 225) *lyrics-layer-mode-table*) +(add-keyseq '((#^) (#\a)) (make-insert-fun 226) *lyrics-layer-mode-table*) +(add-keyseq '((#~) (#\a)) (make-insert-fun 227) *lyrics-layer-mode-table*) +(add-keyseq '((#") (#\a)) (make-insert-fun 228) *lyrics-layer-mode-table*) +(add-keyseq '((#/) (#\a)) (make-insert-fun 229) *lyrics-layer-mode-table*) +(add-keyseq '((#/) (#\e)) (make-insert-fun 230) *lyrics-layer-mode-table*) +(add-keyseq '((#~) (#\c)) (make-insert-fun 231) *lyrics-layer-mode-table*) +(add-keyseq '((#`) (#\e)) (make-insert-fun 232) *lyrics-layer-mode-table*) +(add-keyseq '((#') (#\e)) (make-insert-fun 233) *lyrics-layer-mode-table*) +(add-keyseq '((#^) (#\e)) (make-insert-fun 234) *lyrics-layer-mode-table*) +(add-keyseq '((#") (#\e)) (make-insert-fun 235) *lyrics-layer-mode-table*) +(add-keyseq '((#`) (#\i)) (make-insert-fun 236) *lyrics-layer-mode-table*) +(add-keyseq '((#') (#\i)) (make-insert-fun 237) *lyrics-layer-mode-table*) +(add-keyseq '((#^) (#\i)) (make-insert-fun 238) *lyrics-layer-mode-table*) +(add-keyseq '((#") (#\i)) (make-insert-fun 239) *lyrics-layer-mode-table*) + + +(add-keyseq '((#`) (#\o)) (make-insert-fun 242) *lyrics-layer-mode-table*) +(add-keyseq '((#') (#\o)) (make-insert-fun 243) *lyrics-layer-mode-table*) +(add-keyseq '((#^) (#\o)) (make-insert-fun 244) *lyrics-layer-mode-table*) +(add-keyseq '((#~) (#\o)) (make-insert-fun 245) *lyrics-layer-mode-table*) +(add-keyseq `((#") (#\o)) (make-insert-fun 246) *lyrics-layer-mode-table*) + +(add-keyseq '((#/) (#\o)) (make-insert-fun 248) *lyrics-layer-mode-table*) +(add-keyseq '((#`) (#\u)) (make-insert-fun 249) *lyrics-layer-mode-table*) +(add-keyseq '((#') (#\u)) (make-insert-fun 250) *lyrics-layer-mode-table*) +(add-keyseq '((#^) (#\u)) (make-insert-fun 251) *lyrics-layer-mode-table*) +(add-keyseq '((#") (#\u)) (make-insert-fun 252) *lyrics-layer-mode-table*) +(add-keyseq '((#') (#\y)) (make-insert-fun 253) *lyrics-layer-mode-table*) + +(add-keyseq '((#") (#\y)) (make-insert-fun 255) *lyrics-layer-mode-table*) + + + \ No newline at end of file
Index: gsharp/packages.lisp diff -u gsharp/packages.lisp:1.7 gsharp/packages.lisp:1.8 --- gsharp/packages.lisp:1.7 Fri Jul 23 09:51:16 2004 +++ gsharp/packages.lisp Sat Jul 24 13:09:55 2004 @@ -50,12 +50,12 @@ #:notehead #:rbeams #:lbeams #:dots #:element #:melody-element #:notes #:add-note #:find-note #:remove-note #:cluster #:make-cluster - #:rest #:make-rest #:lyrics-element + #:rest #:make-rest #:lyrics-element #:make-lyrics-element #:slice #:elements #:nb-elements #:elementno #:add-element #:remove-element #:bar #:make-bar #:melody-bar #:lyrics-bar - #:layer + #:layer #:lyrics-layer #:melody-layer #:bars #:nb-bars #:barno #:add-bar #:remove-bar #:slice #:segment #:slices #:sliceno @@ -74,7 +74,7 @@ #:stem-direction #:stem-length #:notehead-duration #:element-duration #:clef #:keysig #:staff-pos #:xoffset #:read-everything #:save-buffer-to-stream #:line-width #:min-width #:spacing-style #:right-edge #:left-offset - #:left-margin #:text + #:left-margin #:text #:append-char #:erase-char ))
(defpackage :gsharp-numbering