2004-01-21 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * lily/new-part-combine-iterator.cc (construct_children): create
+ Devnull from Voice context
+
+ * scm/music-functions.scm (determine-split-list): bugfixes.
+
+ * lily/lily-guile.cc (robust_scm2int): new function
+
+ * lily/staff-symbol-referencer.cc (line_thickness): new
+ function. Use throughout.
+
+ * lily/font-size-engraver.cc (acknowledge_grob): only process grob
+ in its own context. Add to preset font-size.
+
* lily/stem.cc (thickness): new function.
* lily/staff-symbol.cc (get_ledger_line_thickness): new function:
--- /dev/null
+
+\header {
+ texidoc ="The new part combiner.
+Apart for:
+@itemize @bullet
+@item different durations (start points)
+@item different articulations (only slur/beam/tie work)
+@item wide pitch ranges
+@end itemize
+"
+ }
+
+theMusic = \context Staff \notes { c4 d8-. }
+
+
+
+vone = \notes \relative a' { g2 g g g4 g f' c c( c) }
+vtwo = \notes \relative a' { f2 f4 f f2 g4 g c, f f f }
+
+\score {
+ \newpartcombine \vone \vtwo
+}
+
#include "group-interface.hh"
#include "directional-element-interface.hh"
#include "paper-def.hh"
+#include "staff-symbol-referencer.hh"
struct Horizontal_bracket
{
Real dx = dz[X_AXIS];
Real dy = dz[Y_AXIS];
- Real thick = Staff_symbol_referencer::thickness (me);
+ Real thick = Staff_symbol_referencer::line_thickness (me);
thick *= robust_scm2double (me->get_grob_property ("thickness"), 1.0); // todo: staff sym referencer?
Real staff_space = Staff_symbol_referencer::staff_space (me);
/*
-measure-grouping-spanner.cc -- implement Measure_grouping
+ measure-grouping-spanner.cc -- implement Measure_grouping
-source file of the GNU LilyPond music typesetter
+ source file of the GNU LilyPond music typesetter
-(c) 2002--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 2002--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
+
#include "paper-def.hh"
#include "spanner.hh"
#include "measure-grouping-spanner.hh"
#include "lookup.hh"
#include "item.hh"
+#include "staff-symbol-referencer.hh"
MAKE_SCHEME_CALLBACK (Measure_grouping, brew_molecule, 1);
SCM
TODO: robustify.
*/
SCM which = me->get_grob_property ("style");
- SCM height = me->get_grob_property ("height");
+ Real height = robust_scm2double (me->get_grob_property ("height"), 1);
- Real t = Staff_symbol_referencer::thickness (me) * robust_scm2double (me->get_grob_property ("thickness"));
+ Real t = Staff_symbol_referencer::line_thickness (me) * robust_scm2double (me->get_grob_property ("thickness"), 1);
Grob *common = me->get_bound(LEFT)->common_refpoint (me->get_bound (RIGHT),
X_AXIS);
*/
if (which == ly_symbol2scm ("bracket"))
{
- m = Lookup::bracket (X_AXIS, iv, t,-gh_scm2double (height), t);
+ m = Lookup::bracket (X_AXIS, iv, t, -height, t);
}
else if (which == ly_symbol2scm ("triangle"))
{
- m = Lookup::triangle (iv, t, gh_scm2double (height));
+ m = Lookup::triangle (iv, t, height);
}
m.align_to (Y_AXIS, DOWN);
void
New_pc_iterator::derived_substitute (Translator_group*f,
- Translator_group*t)
+ Translator_group*t)
{
if (first_iter_)
first_iter_->substitute_outlet (f,t);
= report_to ()->find_create_translator (ly_symbol2scm ("Voice"),
"shared",props);
- Translator_group *null
- = report_to ()->find_create_translator (ly_symbol2scm ("Devnull"),
- "", SCM_EOL);
- null_.set_translator (null);
tr->execute_pushpop_property (ly_symbol2scm ("NoteHead"),
ly_symbol2scm ("font-size"), gh_int2scm (3));
shared_ .set_translator (tr);
set_translator (tr);
+ Translator_group *null
+ = report_to ()->find_create_translator (ly_symbol2scm ("Devnull"),
+ "", SCM_EOL);
+ null_.set_translator (null);
Translator_group *one = tr->find_create_translator (ly_symbol2scm ("Voice"),
"one", props);
}
Real thick
- = Staff_symbol_referencer::thickness (me)
+ = Staff_symbol_referencer::line_thickness (me)
* robust_scm2double (me->get_grob_property ("thickness"), 1);
Bezier b;
active1
active2)
- (define (analyse-span-event active ev)
- (let*
- ((name (ly:get-mus-property ev 'name))
- (key (cond
- ((equal? name 'SlurEvent) 'slur)
- ((equal? name 'TieEvent) 'tie)
- ((equal? name 'Beam) 'beam)
- (else #f)))
- (sp (ly:get-mus-property ev 'span-direction)))
-
- (if (and (symbol? key) (ly:dir? sp))
- ((if (= sp STOP) delete! cons) key active))
- ))
+ (define (analyse-span-events active evs)
+ (define (analyse-span-event active ev)
+ (let*
+ ((name (ly:get-mus-property ev 'name))
+ (key (cond
+ ((equal? name 'SlurEvent) 'slur)
+ ((equal? name 'TieEvent) 'tie)
+ ((equal? name 'Beam) 'beam)
+ (else #f)))
+ (sp (ly:get-mus-property ev 'span-direction)))
+
+ (if (and (symbol? key) (ly:dir? sp))
+ ((if (= sp STOP) delete! cons) key active)
+ active))
+ )
+
+ (if (pair? evs)
+ (analyse-span-events
+ (analyse-span-event active (car evs))
+ (cdr evs))
+ active
+ ))
(define (get-note-evs v i)
(define (f? x)
(equal? (ly:get-mus-property x 'name) 'NoteEvent))
(filter f? (map car (what v i))))
- (define (put x)
- (set-cdr! (vector-ref result ri) x) )
+ (define (put x . index)
+ (set-cdr! (vector-ref result (if (pair? index)
+ (car index) ri)) x) )
+ (display (list ri i1 i2 active1 active2 "\n"))
(cond
((= ri (vector-length result)) '())
((= i1 (vector-length ev1)) (put 'apart))
(else
(let*
((m1 (when ev1 i1))
- (m2 (when ev2 i2)))
-
+ (m2 (when ev2 i2))
+ (new-active1
+ (sort
+ (analyse-span-events active1 (map car (what ev1 i1)))
+ symbol<?))
+ (new-active2
+ (sort (analyse-span-events active2 (map car (what ev2 i1)))
+ symbol<?)))
+
(if (not (or (equal? m1 (when result ri))
(equal? m2 (when result ri))))
(begin
(list "<? M1,M2 != result :"
m1 m2 (when result ri)))
(scm-error "boem")))
-
- (set! active1
- (sort
- (map (lambda (x) (analyse-span-event active1 (car x)))
- (what ev1 i1)) symbol<?))
- (set! active2
- (sort (map (lambda (x) (analyse-span-event active2 (car x)))
- (what ev2 i2)) symbol<?))
(cond
((ly:moment<? m1 m2)
(put 'apart)
- (analyse-events (1+ i1) i2 (1+ ri) active1 active2))
+ (if (> ri 0) (put 'apart (1- ri)))
+ (analyse-events (1+ i1) i2 (1+ ri) new-active1 new-active2))
((ly:moment<? m2 m1)
(put 'apart)
- (analyse-events i1 (1+ i2) (1+ ri) active1 active2))
+ (if (> ri 0) (put 'apart (1- ri)))
+ (analyse-events i1 (1+ i2) (1+ ri) new-active1 new-active2))
(else
- (if (not (equal? active1 active2))
+ (if (or (not (equal? active1 active2)) (not (equal? new-active2 new-active1)))
(put 'apart)
(let*
((> (length notes1) 1) (put 'apart))
((> (length notes2) 1) (put 'apart))
(else
- (let* ((diff (ly:pitch-diff (car pitches1) (car pitches1))))
+ (let* ((diff (ly:pitch-diff (car pitches1) (car pitches2))))
(if (< (ly:pitch-steps diff) chord-threshold)
(put 'chords)
(put 'apart))
))))
)
- (analyse-events (1+ i1) (1+ i2) (1+ ri) active1 active2))
+ (analyse-events (1+ i1) (1+ i2) (1+ ri) new-active1 new-active2))
)))))
(analyse-events 0 0 0 '() '())
- (display result)
(vector->list result))