Index: lily/sequential-iterator.cc =================================================================== RCS file: /sources/lilypond/lilypond/lily/sequential-iterator.cc,v retrieving revision 1.42 diff -u -r1.42 sequential-iterator.cc --- lily/sequential-iterator.cc 18 Jun 2006 12:57:37 -0000 1.42 +++ lily/sequential-iterator.cc 27 Jun 2006 06:11:15 -0000 @@ -42,7 +42,12 @@ SCM Sequential_iterator::get_music_list () const { - return SCM_EOL; + Music *m = get_music (); + SCM proc = m->get_property ("elements-callback"); + if (scm_procedure_p (proc)) + return scm_call_1 (proc, m->self_scm ()); + else + return SCM_EOL; } void Index: scm/define-music-types.scm =================================================================== RCS file: /sources/lilypond/lilypond/scm/define-music-types.scm,v retrieving revision 1.81 diff -u -r1.81 define-music-types.scm --- scm/define-music-types.scm 5 Jun 2006 13:57:05 -0000 1.81 +++ scm/define-music-types.scm 27 Jun 2006 06:11:15 -0000 @@ -7,6 +7,20 @@ ;; TODO: should link back into user manual. +(define (mm-rest-child-list music) + "Check if we have R1*4-\\markup { .. }, and if applicable convert to +a property set for MultiMeasureRestNumber." + (let ((location (ly:music-property music 'origin)) + (duration (ly:music-property music 'duration))) + (list (make-music 'BarCheck + 'origin location) + (make-event-chord (cons (make-music 'MultiMeasureRestEvent + 'origin location + 'duration duration) + (ly:music-property music 'articulations))) + (make-music 'BarCheck + 'origin location)))) + (define-public music-descriptions `( (AbsoluteDynamicEvent @@ -281,7 +295,16 @@ Syntax: @code{c4\\melisma d\\melismaEnd}.") (types . (general-music melisma-span-event event)) )) - + (MultiMeasureRestNew + . ( + (description . "Rests that may be compressed into Multi rests. + +Syntax address@hidden for 4 measures in 3/4 time.") + (iterator-ctor . ,ly:sequential-iterator::constructor) + (elements-callback . ,mm-rest-child-list) + (types . (general-music sequential-music)) + )) (MultiMeasureRestEvent . ( (description . "Rests that may be compressed into Multi rests. @@ -445,7 +468,8 @@ (length-callback . ,ly:music-sequence::cumulative-length-callback) (start-callback . ,ly:music-sequence::first-start-callback) - (iterator-ctor . ,ly:sequential-music-iterator::constructor) + (elements-callback . ,(lambda (m) (ly:music-property m 'elements))) + (iterator-ctor . ,ly:sequential-iterator::constructor) (types . (general-music sequential-music)) )) Index: scm/ly-syntax-constructors.scm =================================================================== RCS file: /sources/lilypond/lilypond/scm/ly-syntax-constructors.scm,v retrieving revision 1.2 diff -u -r1.2 ly-syntax-constructors.scm --- scm/ly-syntax-constructors.scm 13 Jun 2006 22:01:19 -0000 1.2 +++ scm/ly-syntax-constructors.scm 27 Jun 2006 06:11:15 -0000 @@ -85,9 +85,27 @@ (define-ly-syntax-simple (repeat type num body alts) (make-repeat type num body alts)) +(define (script-to-mmrest-text music) + "Extract 'direction and 'text from SCRIPT-MUSIC, and transform MultiMeasureTextEvent" + (if (memq 'script-event (ly:music-property music 'types)) + + (let ((dir (ly:music-property music 'direction)) + (p (make-music 'MultiMeasureTextEvent + 'text (ly:music-property music 'text)))) + (if (ly:dir? dir) + (set! (ly:music-property p 'direction) dir)) + p) + music)) + +(define-ly-syntax (multi-measure-rest parser location duration articulations) + (make-music 'MultiMeasureRestNew + 'articulations (map script-to-mmrest-text articulations) + 'duration duration + 'origin location)) + ;; UGH. TODO: represent mm rests in a decent way as music expressions. ;; Also eliminate glue-mm-rests while we are at it. -(define-ly-syntax (multi-measure-rest parser location duration articulations) +(define-ly-syntax (multi-measure-rest-old parser location duration articulations) (let* ((mus (make-multi-measure-rest duration location)) (elts (ly:music-property mus 'elements))) (set! (ly:music-property mus 'elements)