2004-02-03 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * input/regression/new-part-combine-solo.ly: more cases.
+
+ * lily/slur.cc (height): robustness fix.
+
+ * lily/new-part-combine-iterator.cc (process): add apart-spanner.
+
+ * input/mutopia/F.Schubert/morgenlied.ly (melody): revert
+ stemUp/stemDown.
+
* scm/music-functions.scm (determine-split-list): further analysis.
* lily/script-engraver.cc (try_music): discard duplicate
A Solo indication is only printed once; (shared) rests do not require
reprinting a solo indication.
+Solo 1/2 can not be used when a spanner is active, so there is no solo
+ over any of the tied notes.
+
"
}
-vone = \notes \relative a' { g4 r8 g8 g8 r8 g8 r8 }
-vtwo = \notes \relative g' { e4. e8 r2 }
+vone = \notes \relative a' { g4 r8 g8 g8 r8 g8 r8 g2 ~ g2 ~ g4 }
+vtwo = \notes \relative g' { e4. e8 r2 e4 r4 r2 e4 }
\score {
<< \property Score.skipBars = ##t
if (tag == ly_symbol2scm ("chords"))
chords_together ();
else if (tag == ly_symbol2scm ("apart")
- || tag == ly_symbol2scm ("apart-silence"))
+ || tag == ly_symbol2scm ("apart-silence")
+ || tag == ly_symbol2scm ("apart-spanner"))
apart (tag == ly_symbol2scm ("apart-silence"));
else if (tag == ly_symbol2scm ("unisono"))
unisono (false);
;;
(define-public (determine-split-list evl1 evl2)
"EVL1 and EVL2 should be ascending"
- (define pc-debug #f)
+ (define pc-debug #t)
(define ev1 (list->vector evl1))
(define ev2 (list->vector evl2))
(define (when v i)
(define (f? x)
(equal? (ly:get-mus-property x 'name) 'NoteEvent))
(filter f? (map car (what v i))))
+ (define moments (uniq-list
+ (merge (map car evl1) (map car evl2) ly:moment<?)))
+ (define result '())
- (define result
- (list->vector
- (map (lambda (x)
- (cons x '()))
- (uniq-list
- (merge (map car evl1) (map car evl2) ly:moment<?)))))
-
(define (analyse-time-step i1 i2 ri
active1
active2)
((= i2 (vector-length ev2)) (put 'apart))
(else
(let*
- (
+ ((now (when result ri))
; (x (display (list "\nelse" (= i1 (vector-length ev1)) i2 (vector-length ev2) (= i2 (vector-length ev2)))))
(m1 (when ev1 i1))
(m2 (when ev2 i2))
(vector-length ev1) (vector-length ev2) (vector-length result) "\n")))
- (if (not (or (equal? m1 (when result ri))
- (equal? m2 (when result ri))))
+ (if (not (or (equal? m1 now)
+ (equal? m2 now)))
(begin
(display
(list "<? M1,M2 != result :"
(if (> ri 0) (put 'apart (1- ri)))
(analyse-time-step i1 (1+ i2) (1+ ri) active1 new-active2))
(else
+
(if (and (equal? active1 active2) (equal? new-active2 new-active1))
(let*
((notes1 (get-note-evs ev1 i1))
))))
- ;; active states different:
- (put 'apart))
+ ;; active states different:
+ ;; must mark differently so
+ ;; it doesn't transform into solo
+ (put 'apart-spanner))
(analyse-time-step (1+ i1) (1+ i2) (1+ ri) new-active1 new-active2)))
))))
(else
(analyse-solo12 (1+ i1) (1+ i2) (1+ ri)))
)))))
-
+ (set! result (list->vector
+ (map (lambda (x)
+ (cons x '())) moments)))
+
(analyse-time-step 0 0 0 '() '())
+ (if pc-debug (display result))
(analyse-solo12 0 0 0)
(if pc-debug (display result))