On 2010/02/28 16:27:07, nicolas.sceaux wrote:
http://codereview.appspot.com/224082/diff/1/3 File ly/chord-repetition-init.ly (right):
http://codereview.appspot.com/224082/diff/1/3#newcode51 ly/chord-repetition-init.ly:51: #(define-public (tab-repeat-chord
previous-chord
location duration articulations) It would be better to define a generic repetition function, taking
the event
types that should be kept for NoteEvents. default-repeat-chord and tab-repeat-chord would then use this function. I'm writing it on
other post. #(define-public ((make-repeat-chord-function chord-element-types note-articulation-types) previous-chord location duration articulations) "Make a chord repetition function. The returned functions copies the notes from @var{previous-chord} into a new chord. Chord elements, which type is found in @var{chord-element-types}, are copied into the new chord. Note articulations, which type is found in @var {note-articulation-types}, are also copied. All other events are not copied into the new chord. " (define (filter-events events event-types) (filter (lambda (event) (and (memq (ly:music-property event 'name) event-types) event)) events)) ;; If previous-chord has an length property, then it means that it ;; has been processed by a music iterator. In other words, the chord ;; has been memorized from an other music block, which is certainly not ;; what the user has intended, as anywy the result will be buggy. ;; In that case, raise a warning. (if (not (and (ly:music? previous-chord) (null? (ly:music-property previous-chord 'length)))) (ly:input-message location (_ "No memorized chord in music block before chord repetition"))) ;; Instead of copying the previous chord, then removing the ;; undesired elements (like articulations), a new empty chord is built. ;; Then, the pitch found in the previous chord are added to the new ;; chord, without any "decoration" (e.g. cautionary accidentals, ;; fingerings, text scripts, articulations). Only the events of types ;; given in `chord-elements-types' and `note-articulation-types' are ;; copied from the original chord elements and note articulations, ;; respectively. (let ((elements (ly:music-property (ly:music-deep-copy previous-chord) 'elements))) (make-music 'EventChord 'origin location 'elements (append! (map (lambda (note) (let ((new-note (make-music 'NoteEvent 'pitch (ly:music-property note 'pitch) 'duration duration)) (articulations (filter-events (ly:music-property note 'articulations) note-articulation-types))) (if (not (null? articulations)) (set! (ly:music-property new-note 'articulations) articulations)) new-note)) (filter-events elements '(NoteEvent))) (filter-events elements chord-element-types) articulations)))) #(define-public default-repeat-chord (make-repeat-chord-function '() '())) #(define-public tab-repeat-chord (make-repeat-chord-function '(StringNumberEvent) '(StringNumberEvent))) http://codereview.appspot.com/224082/show _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org http://lists.gnu.org/mailman/listinfo/lilypond-devel