? lily/On
? lily/busy-playing-listener.cc
? lily/event-iterator.cc
? lily/foo.pdf
? lily/foo.ps
? lily/lilypond
? lily/lilypond.gdt
? lily/lilypond.gpr
? lily/out
? lily/out-scons
? lily/out-www
? lily/include/.sconsign
? lily/include/busy-playing-listener.hh
? lily/include/event-iterator.hh
? lily/include/out
? lily/include/out-www
? ly/out
? ly/out-www
? scm/out
? scm/out-www
Index: lily/chord-tremolo-engraver.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/chord-tremolo-engraver.cc,v
retrieving revision 1.99
diff -u -r1.99 chord-tremolo-engraver.cc
--- lily/chord-tremolo-engraver.cc 7 May 2006 19:51:11 -0000 1.99
+++ lily/chord-tremolo-engraver.cc 23 May 2006 06:36:58 -0000
@@ -4,12 +4,12 @@
source file of the GNU LilyPond music typesetter
(c) 2000--2006 Han-Wen Nienhuys
+ Erik Sandberg
*/
#include "math.h" // ceil
#include "beam.hh"
-#include "chord-tremolo-iterator.hh"
#include "engraver-group.hh"
#include "international.hh"
#include "item.hh"
@@ -39,92 +39,72 @@
*/
class Chord_tremolo_engraver : public Engraver
{
- void typeset_beam ();
TRANSLATOR_DECLARATIONS (Chord_tremolo_engraver);
protected:
Music *repeat_;
- /// moment (global time) where beam started.
- Moment start_mom_;
- Moment stop_mom_;
int flags_;
- int total_duration_flags_;
+ // number of beams for short tremolos
+ int expected_beam_count_;
+ // current direction of beam (first RIGHT, then LEFT)
+ Direction beam_dir_;
- /// location within measure where beam started.
- Moment beam_start_location_;
-
- bool body_is_sequential_;
Spanner *beam_;
- Spanner *finished_beam_;
- Item *stem_tremolo_;
protected:
virtual void finalize ();
virtual bool try_music (Music *);
- void stop_translation_timestep ();
- void start_translation_timestep ();
void process_music ();
DECLARE_ACKNOWLEDGER (stem);
};
Chord_tremolo_engraver::Chord_tremolo_engraver ()
{
- beam_ = finished_beam_ = 0;
+ beam_ = 0;
repeat_ = 0;
flags_ = 0;
- stem_tremolo_ = 0;
- body_is_sequential_ = false;
+ expected_beam_count_ = 0;
+ beam_dir_ = CENTER;
}
bool
Chord_tremolo_engraver::try_music (Music *m)
{
- if (m->is_mus_type ("repeated-music")
- && m->get_property ("iterator-ctor") == Chord_tremolo_iterator::constructor_proc
- && !repeat_)
+ if (m->is_mus_type ("tremolo-span-event"))
{
- Moment l = m->get_length ();
- repeat_ = m;
- start_mom_ = now_mom ();
- stop_mom_ = start_mom_ + l;
-
- Music *body = Repeated_music::body (m);
- body_is_sequential_ = body->is_mus_type ("sequential-music");
-
- int elt_count = body_is_sequential_ ? scm_ilength (body->get_property ("elements")) : 1;
-
- if (body_is_sequential_ && elt_count != 2)
- m->origin ()->warning (_f ("expect 2 elements for chord tremolo, found %d", elt_count));
-
- if (elt_count <= 0)
- elt_count = 1;
-
- Rational total_dur = l.main_part_;
- Rational note_dur = total_dur / Rational (elt_count * Repeated_music::repeat_count (repeat_));
-
- total_duration_flags_ = max (0, (intlog2 (total_dur.den ()) - 2));
-
- flags_ = intlog2 (note_dur.den ()) -2;
-
+ Direction span_dir = to_dir (m->get_property ("span-direction"));
+ if (span_dir == START)
+ {
+ repeat_ = m;
+ int type = scm_to_int (m->get_property ("tremolo-type"));
+ /* e.g. 1 for type 8, 2 for type 16 */
+ flags_ = intlog2 (type) - 2;
+ expected_beam_count_ = scm_to_int (m->get_property ("expected-beam-count"));
+ beam_dir_ = RIGHT;
+ }
+ if (span_dir == STOP)
+ {
+ repeat_ = 0;
+ beam_ = 0;
+ expected_beam_count_ = 0;
+ beam_dir_ = CENTER;
+ }
return true;
}
-
return false;
}
void
Chord_tremolo_engraver::process_music ()
{
- if (repeat_ && body_is_sequential_ && !beam_)
+ if (repeat_ && !beam_)
{
beam_ = make_spanner ("Beam", repeat_->self_scm ());
- beam_start_location_ = robust_scm2moment (get_property ("measurePosition"), Moment (0));
}
}
void
Chord_tremolo_engraver::finalize ()
{
- typeset_beam ();
if (beam_)
{
repeat_->origin ()->warning (_ ("unterminated chord tremolo"));
@@ -133,25 +113,19 @@
}
void
-Chord_tremolo_engraver::typeset_beam ()
-{
- finished_beam_ = 0;
-}
-
-void
Chord_tremolo_engraver::acknowledge_stem (Grob_info info)
{
if (beam_)
{
Grob *s = info.grob ();
- if (start_mom_ == now_mom ())
- Stem::set_beaming (s, flags_, RIGHT);
- else
- Stem::set_beaming (s, flags_, LEFT);
+ Stem::set_beaming (s, flags_, beam_dir_);
if (Stem::duration_log (s) != 1)
- beam_->set_property ("gap-count", scm_from_int (flags_ - total_duration_flags_));
+ beam_->set_property ("gap-count", scm_from_int (flags_ - expected_beam_count_));
+
+ if (beam_dir_ == RIGHT)
+ beam_dir_ = LEFT;
if (info.ultimate_music_cause ()->is_mus_type ("rhythmic-event"))
Beam::add_stem (beam_, s);
@@ -164,49 +138,12 @@
::warning (s);
}
}
- else if (repeat_
- && flags_
- && !body_is_sequential_)
- {
- stem_tremolo_ = make_item ("StemTremolo", repeat_->self_scm ());
- stem_tremolo_->set_property ("flag-count",
- scm_from_int (flags_));
- stem_tremolo_->set_object ("stem",
- info.grob ()->self_scm ());
- stem_tremolo_->set_parent (info.grob (), X_AXIS);
- info.grob ()->set_object ("tremolo-flag", stem_tremolo_->self_scm ());
- }
-}
-
-void
-Chord_tremolo_engraver::start_translation_timestep ()
-{
- if (beam_ && stop_mom_ == now_mom ())
- {
- finished_beam_ = beam_;
- repeat_ = 0;
- beam_ = 0;
- }
-}
-
-void
-Chord_tremolo_engraver::stop_translation_timestep ()
-{
- if (stem_tremolo_)
- {
- repeat_ = 0;
- if (beam_)
- programming_error ("beam and stem tremolo?");
- stem_tremolo_ = 0;
- }
-
- typeset_beam ();
}
ADD_ACKNOWLEDGER (Chord_tremolo_engraver, stem);
ADD_TRANSLATOR (Chord_tremolo_engraver,
- /* doc */ "Generates beams for tremolo repeats.",
+ /* doc */ "Generates beams for tremolo repeats.",
/* create */ "Beam",
- /* accept */ "repeated-music",
+ /* accept */ "tremolo-span-event",
/* read */ "",
/* write */ "");
Index: lily/chord-tremolo-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/chord-tremolo-iterator.cc,v
retrieving revision 1.35
diff -u -r1.35 chord-tremolo-iterator.cc
--- lily/chord-tremolo-iterator.cc 26 Jan 2006 11:17:08 -0000 1.35
+++ lily/chord-tremolo-iterator.cc 23 May 2006 06:36:58 -0000
@@ -4,82 +4,66 @@
source file of the GNU LilyPond music typesetter
(c) 2000--2006 Han-Wen Nienhuys
+ Erik Sandberg
*/
#include "chord-tremolo-iterator.hh"
#include "input.hh"
#include "international.hh"
+#include "misc.hh"
#include "repeated-music.hh"
-void
-Chord_tremolo_iterator::construct_children ()
-{
- Music *m = get_music ();
-
- factor_ = Moment (Rational (1, 1));
- child_iter_ = unsmob_iterator (get_iterator (Repeated_music::body (m)));
-}
-
Chord_tremolo_iterator::Chord_tremolo_iterator ()
{
- factor_ = 1;
- child_iter_ = 0;
}
-void
-Chord_tremolo_iterator::do_quit ()
+SCM
+Chord_tremolo_iterator::get_music_list () const
{
- if (child_iter_)
- child_iter_->quit ();
-}
+ Music *mus = get_music ();
+ Input *origin = mus->origin ();
+ Moment l = mus->get_length ();
+ Music *body = Repeated_music::body (mus);
+ bool body_is_sequential = body->is_mus_type ("sequential-music");
+
+ int elt_count = body_is_sequential ? scm_ilength (body->get_property ("elements")) : 1;
+
+ if (body_is_sequential && elt_count != 2)
+ mus->origin ()->warning (_f ("expect 2 elements for chord tremolo, found %d", elt_count));
+
+ if (elt_count <= 0)
+ elt_count = 1;
+
+ Rational total_dur = l.main_part_;
+ Rational note_dur = total_dur / Rational (elt_count * Repeated_music::repeat_count (mus));
-void
-Chord_tremolo_iterator::derived_mark () const
-{
- if (child_iter_)
- scm_gc_mark (child_iter_->self_scm ());
-}
+ SCM tremolo_type = scm_int2num (note_dur.den ());
+ int expected_beaming_ = max (0, (intlog2 (total_dur.den ()) - 2));
-void
-Chord_tremolo_iterator::derived_substitute (Context *f, Context *t)
-{
- if (child_iter_)
- child_iter_->substitute_outlet (f, t);
-}
-
-void
-Chord_tremolo_iterator::process (Moment m)
-{
- if (!m.to_bool ())
+ if (elt_count == 1)
{
- Music_iterator *yeah = try_music (get_music ());
- if (yeah)
- set_context (yeah->get_outlet ());
- else
- get_music ()->origin ()->warning (_ ("no one to print a tremolos"));
+ Music *ev = make_music_by_name (ly_symbol2scm ("TremoloEvent"));
+ ev->set_spot (*origin);
+ ev->set_property ("tremolo-type", tremolo_type);
+ return scm_list_2 (ev->unprotect (), body->self_scm ());
}
+ else
+ {
+ SCM tremolo_symbol = ly_symbol2scm ("TremoloSpanEvent");
+ SCM start_event_scm = scm_call_2 (ly_lily_module_constant ("make-span-event"), tremolo_symbol, scm_from_int (START));
+ unsmob_music (start_event_scm)->set_spot (*origin);
+ SCM stop_event_scm = scm_call_2 (ly_lily_module_constant ("make-span-event"), tremolo_symbol, scm_from_int (STOP));
+
+ Music *start_event = unsmob_music (start_event_scm);
+ Music *stop_event = unsmob_music (stop_event_scm);
+ start_event->set_spot (*origin);
+ stop_event->set_spot (*origin);
+ start_event->set_property ("tremolo-type", tremolo_type);
+ start_event->set_property ("expected-beam-count", scm_int2num (expected_beaming_));
- child_iter_->process (factor_ * m);
-}
-
-Moment
-Chord_tremolo_iterator::pending_moment () const
-{
- return child_iter_->pending_moment () / factor_;
-}
-
-bool
-Chord_tremolo_iterator::ok () const
-{
- return child_iter_ && child_iter_->ok ();
-}
-
-Music_iterator *
-Chord_tremolo_iterator::try_music_in_children (Music *m) const
-{
- return child_iter_->try_music (m);
+ return scm_list_3 (start_event_scm, body->self_scm (), stop_event_scm);
+ }
}
IMPLEMENT_CTOR_CALLBACK (Chord_tremolo_iterator);
-
Index: lily/context-def.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/context-def.cc,v
retrieving revision 1.61
diff -u -r1.61 context-def.cc
--- lily/context-def.cc 16 May 2006 11:30:54 -0000 1.61
+++ lily/context-def.cc 23 May 2006 06:36:58 -0000
@@ -344,9 +344,8 @@
else if (dynamic_cast (g))
g->simple_trans_list_ = filter_engravers (g->simple_trans_list_);
- g->context_ = context;
context->aliases_ = context_aliases_;
-
+ g->connect_to_context (context);
g->unprotect ();
context->accepts_list_ = get_accepted (ops);
Index: lily/context.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/context.cc,v
retrieving revision 1.82
diff -u -r1.82 context.cc
--- lily/context.cc 16 May 2006 16:13:52 -0000 1.82
+++ lily/context.cc 23 May 2006 06:36:58 -0000
@@ -660,3 +660,16 @@
set_context_property_on_children (trg, sym, ly_deep_copy (val));
}
}
+
+bool
+melisma_busy (Context *tr)
+{
+ SCM melisma_properties = tr->get_property ("melismaBusyProperties");
+ bool busy = false;
+
+ for (; scm_is_pair (melisma_properties);
+ melisma_properties = scm_cdr (melisma_properties))
+ busy = busy || to_boolean (tr->internal_get_property (scm_car (melisma_properties)));
+
+ return busy;
+}
Index: lily/event-chord-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/event-chord-iterator.cc,v
retrieving revision 1.26
diff -u -r1.26 event-chord-iterator.cc
--- lily/event-chord-iterator.cc 26 Jan 2006 11:17:01 -0000 1.26
+++ lily/event-chord-iterator.cc 23 May 2006 06:36:58 -0000
@@ -20,22 +20,11 @@
{
}
-Context *
-Event_chord_iterator::get_bottom_context ()
-{
- assert (get_outlet ());
- if (get_outlet ()->is_bottom_context ())
- return get_outlet ();
-
- set_context (get_outlet ()->get_default_interpreter ());
- return get_outlet ();
-}
-
void
Event_chord_iterator::construct_children ()
{
Simple_music_iterator::construct_children ();
- get_bottom_context ();
+ descend_to_bottom_context ();
}
void
@@ -47,10 +36,7 @@
scm_is_pair (s); s = scm_cdr (s))
{
Music *mus = unsmob_music (scm_car (s));
-
- bool gotcha = try_music (mus);
- if (!gotcha)
- mus->origin ()->warning (_f ("junking event: `%s'", mus->name ()));
+ report_music (mus);
}
}
Simple_music_iterator::process (m);
Index: lily/folded-repeat-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/folded-repeat-iterator.cc,v
retrieving revision 1.43
diff -u -r1.43 folded-repeat-iterator.cc
--- lily/folded-repeat-iterator.cc 16 May 2006 11:19:50 -0000 1.43
+++ lily/folded-repeat-iterator.cc 23 May 2006 06:36:58 -0000
@@ -107,15 +107,6 @@
}
}
-Music_iterator *
-Folded_repeat_iterator::try_music_in_children (Music *m) const
-{
- if (main_iter_)
- return main_iter_->try_music (m);
- if (alternative_iter_)
- return alternative_iter_->try_music (m);
- return 0;
-}
void
Folded_repeat_iterator::derived_mark () const
{
Index: lily/lyric-combine-music-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/lyric-combine-music-iterator.cc,v
retrieving revision 1.53
diff -u -r1.53 lyric-combine-music-iterator.cc
--- lily/lyric-combine-music-iterator.cc 2 Mar 2006 00:39:54 -0000 1.53
+++ lily/lyric-combine-music-iterator.cc 23 May 2006 06:36:58 -0000
@@ -7,9 +7,12 @@
*/
#include "context.hh"
+#include "dispatcher.hh"
+#include "global-context.hh"
#include "grob.hh"
#include "input.hh"
#include "international.hh"
+#include "listener.hh"
#include "music-iterator.hh"
#include "music.hh"
@@ -24,14 +27,18 @@
virtual Moment pending_moment () const;
virtual void do_quit ();
virtual void process (Moment);
- virtual Music_iterator *try_music_in_children (Music *) const;
virtual bool run_always ()const;
virtual bool ok () const;
virtual void derived_mark () const;
virtual void derived_substitute (Context *, Context *);
+ void set_music_context (Context *to);
private:
bool start_new_syllable ();
- void find_voice ();
+ Context *find_voice ();
+ DECLARE_LISTENER (set_busy);
+ DECLARE_LISTENER (check_new_context);
+ /* true when check_new_context is listening */
+ bool listening_;
bool pending_grace_lyric_;
bool music_found_;
@@ -40,16 +47,10 @@
Context *music_context_;
SCM lyricsto_voice_name_;
+ bool busy_;
Music_iterator *lyric_iter_;
};
-/*
- Ugh; this is a hack, let's not export this hack, so static.
-*/
-static Music *busy_ev;
-static Music *start_ev;
-static Music *melisma_playing_ev;
-
Lyric_combine_music_iterator::Lyric_combine_music_iterator ()
{
music_found_ = false;
@@ -58,35 +59,52 @@
lyric_iter_ = 0;
music_context_ = 0;
lyrics_context_ = 0;
+ listening_ = false;
+}
- /*
- Ugh. out of place here.
- */
- if (!busy_ev)
+IMPLEMENT_LISTENER (Lyric_combine_music_iterator, set_busy)
+void
+Lyric_combine_music_iterator::set_busy (SCM se)
+{
+ Stream_event *e = unsmob_stream_event (se);
+ SCM mus = e->get_property ("music");
+ Music *m = unsmob_music (mus);
+ assert (m);
+
+ if (m->is_mus_type ("note-event") || m->is_mus_type ("cluster-note-event"))
+ busy_ = true;
+}
+
+void
+Lyric_combine_music_iterator::set_music_context (Context *to)
+{
+ if (music_context_)
+ {
+ music_context_->event_source()->remove_listener (GET_LISTENER (set_busy), ly_symbol2scm ("MusicEvent"));
+ lyrics_context_->unset_property (ly_symbol2scm ("associatedVoiceContext"));
+ }
+ music_context_ = to;
+ if (to)
{
- busy_ev
- = make_music_by_name (ly_symbol2scm ("BusyPlayingEvent"));
- start_ev
- = make_music_by_name (ly_symbol2scm ("StartPlayingEvent"));
- melisma_playing_ev
- = make_music_by_name (ly_symbol2scm ("MelismaPlayingEvent"));
+ to->event_source()->add_listener (GET_LISTENER (set_busy), ly_symbol2scm ("MusicEvent"));
+ lyrics_context_->set_property ("associatedVoiceContext", to->self_scm ());
}
}
bool
Lyric_combine_music_iterator::start_new_syllable ()
{
- bool b = music_context_->try_music (busy_ev);
-
- if (!b)
+ if (!busy_)
return false;
+ busy_ = false;
+
if (!lyrics_context_)
return false;
if (!to_boolean (lyrics_context_->get_property ("ignoreMelismata")))
{
- bool m = music_context_->try_music (melisma_playing_ev);
+ bool m = melisma_busy (music_context_);
if (m)
return false;
}
@@ -135,7 +153,7 @@
if (lyrics_context_ && lyrics_context_ == f)
lyrics_context_ = t;
if (music_context_ && music_context_ == f)
- music_context_ = t;
+ set_music_context (t);
}
void
@@ -143,14 +161,25 @@
{
Music *m = unsmob_music (get_music ()->get_property ("element"));
lyric_iter_ = unsmob_iterator (get_iterator (m));
+ if (!lyric_iter_)
+ return;
+ lyrics_context_ = find_context_below (lyric_iter_->get_outlet (),
+ ly_symbol2scm ("Lyrics"), "");
lyricsto_voice_name_ = get_music ()->get_property ("associated-context");
- find_voice ();
-
- if (lyric_iter_)
- lyrics_context_ = find_context_below (lyric_iter_->get_outlet (),
- ly_symbol2scm ("Lyrics"), "");
+ Context *voice = find_voice ();
+ if (voice)
+ set_music_context (voice);
+ else
+ {
+ /*
+ Wait for a Create_context event. If this isn't done, lyrics can be
+ delayed when voices are created implicitly.
+ */
+ Global_context *g = lyrics_context_->get_global_context ();
+ g->events_below ()->add_listener (GET_LISTENER (check_new_context), ly_symbol2scm ("CreateContext"));
+ }
/*
We do not create a Lyrics context, because the user might
@@ -159,7 +188,27 @@
*/
}
+IMPLEMENT_LISTENER (Lyric_combine_music_iterator, check_new_context)
void
+Lyric_combine_music_iterator::check_new_context (SCM sev)
+{
+ // TODO: Check first if type=Voice and if id matches
+ (void)sev;
+
+ Context *voice = find_voice ();
+ if (voice)
+ {
+ set_music_context (voice);
+
+ Global_context *g = voice->get_global_context ();
+ g->events_below ()->remove_listener (GET_LISTENER (check_new_context), ly_symbol2scm ("CreateContext"));
+ }
+}
+
+/*
+Look for a suitable voice to align lyrics to.
+*/
+Context *
Lyric_combine_music_iterator::find_voice ()
{
SCM voice_name = lyricsto_voice_name_;
@@ -173,40 +222,20 @@
if (scm_is_string (voice_name)
&& (!music_context_ || ly_scm2string (voice_name) != music_context_->id_string ()))
{
- /*
- (spaghettini).
-
- Need to set associatedVoiceContext again
- */
- if (music_context_)
- made_association_ = false;
-
Context *t = get_outlet ();
while (t && t->get_parent_context ())
t = t->get_parent_context ();
string name = ly_scm2string (voice_name);
- Context *voice = find_context_below (t, ly_symbol2scm ("Voice"), name);
-
- if (voice)
- music_context_ = voice;
+ return find_context_below (t, ly_symbol2scm ("Voice"), name);
}
- if (lyrics_context_ && music_context_)
- {
- if (!made_association_)
- {
- made_association_ = true;
- lyrics_context_->set_property ("associatedVoiceContext",
- music_context_->self_scm ());
- }
- }
+ return 0;
}
void
-Lyric_combine_music_iterator::process (Moment mom)
+Lyric_combine_music_iterator::process (Moment)
{
- (void) mom;
find_voice ();
if (!music_context_)
return;
@@ -220,7 +249,7 @@
if (lyrics_context_)
lyrics_context_->unset_property (ly_symbol2scm ("associatedVoiceContext"));
lyric_iter_ = 0;
- music_context_ = 0;
+ set_music_context (0);
}
if (music_context_
@@ -261,10 +290,4 @@
lyric_iter_->quit ();
}
-Music_iterator *
-Lyric_combine_music_iterator::try_music_in_children (Music *m) const
-{
- return lyric_iter_->try_music (m);
-}
-
IMPLEMENT_CTOR_CALLBACK (Lyric_combine_music_iterator);
Index: lily/music-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/music-iterator.cc,v
retrieving revision 1.108
diff -u -r1.108 music-iterator.cc
--- lily/music-iterator.cc 16 May 2006 11:30:54 -0000 1.108
+++ lily/music-iterator.cc 23 May 2006 06:36:58 -0000
@@ -14,6 +14,9 @@
#include "warn.hh"
#include "context.hh"
+#include "event-iterator.hh"
+#include "input.hh"
+#include "international.hh"
#include "music-wrapper.hh"
#include "music-wrapper-iterator.hh"
#include "simple-music-iterator.hh"
@@ -85,6 +88,8 @@
{
if (dynamic_cast (m))
p = new Music_wrapper_iterator;
+ else if (m->is_mus_type ("event"))
+ p = new Event_iterator;
else
p = new Simple_music_iterator;
@@ -146,30 +151,24 @@
return ip;
}
-/*
- TODO: rename to prevent confusion between Context::try_music and
- Iterator::try_music
-*/
-Music_iterator *
-Music_iterator::try_music (Music *m) const
+/* Descend to a bottom context; implicitly create a new one if necessary */
+void
+Music_iterator::descend_to_bottom_context ()
{
- bool b = get_outlet ()->try_music ((Music *)m); // ugh
- Music_iterator *it = b ? (Music_iterator *) this : 0; // ugh
- if (!it)
- it = try_music_in_children (m);
- else
- /* TODO: try_music should only do the following:
- - descend iterator to bottom context
- - send music to a bottom context.
- The function should also be renamed, and it should not return a value. */
- m->send_to_context (get_outlet ());
- return it;
+ assert (get_outlet ());
+ if (!get_outlet ()->is_bottom_context ())
+ set_context (get_outlet ()->get_default_interpreter ());
}
-Music_iterator *
-Music_iterator::try_music_in_children (Music *) const
+void
+Music_iterator::report_music (Music *m)
{
- return 0;
+ descend_to_bottom_context ();
+
+ if (!m->is_mus_type ("event"))
+ m->origin ()->warning (_f ("Sending non-event to context"));
+
+ m->send_to_context (get_outlet ());
}
IMPLEMENT_CTOR_CALLBACK (Music_iterator);
Index: lily/music-wrapper-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/music-wrapper-iterator.cc,v
retrieving revision 1.43
diff -u -r1.43 music-wrapper-iterator.cc
--- lily/music-wrapper-iterator.cc 6 Jan 2006 09:13:26 -0000 1.43
+++ lily/music-wrapper-iterator.cc 23 May 2006 06:36:58 -0000
@@ -60,12 +60,6 @@
return child_iter_->pending_moment ();
}
-Music_iterator *
-Music_wrapper_iterator::try_music_in_children (Music *m) const
-{
- return child_iter_->try_music (m);
-}
-
IMPLEMENT_CTOR_CALLBACK (Music_wrapper_iterator);
bool
Index: lily/output-property-engraver.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/output-property-engraver.cc,v
retrieving revision 1.53
diff -u -r1.53 output-property-engraver.cc
--- lily/output-property-engraver.cc 11 Feb 2006 11:35:17 -0000 1.53
+++ lily/output-property-engraver.cc 23 May 2006 06:36:58 -0000
@@ -31,8 +31,13 @@
{
if (m->is_mus_type ("layout-instruction"))
{
- props_.push_back (m);
- return true;
+ // UGH. Only swallow the output property event in the context
+ // it was intended for. This is inelegant but not inefficient.
+ if (context ()->is_alias (m->get_property ("context-type")))
+ {
+ props_.push_back (m);
+ return true;
+ }
}
return false;
}
Index: lily/part-combine-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/part-combine-iterator.cc,v
retrieving revision 1.30
diff -u -r1.30 part-combine-iterator.cc
--- lily/part-combine-iterator.cc 11 Feb 2006 11:35:17 -0000 1.30
+++ lily/part-combine-iterator.cc 23 May 2006 06:36:58 -0000
@@ -7,11 +7,13 @@
*/
#include "context.hh"
+#include "dispatcher.hh"
+#include "lily-guile.hh"
+#include "listener.hh"
#include "music.hh"
+#include "music-iterator.hh"
#include "music-sequence.hh"
-#include "lily-guile.hh"
#include "warn.hh"
-#include "music-iterator.hh"
class Part_combine_iterator : public Music_iterator
{
@@ -29,11 +31,16 @@
virtual void do_quit ();
virtual void process (Moment);
- virtual Music_iterator *try_music_in_children (Music *) const;
-
virtual bool ok () const;
private:
+ /* used by try_process */
+ DECLARE_LISTENER (set_busy);
+ bool busy_;
+ bool notice_busy_;
+
+ bool try_process (Music_iterator *i, Moment m);
+
Music_iterator *first_iter_;
Music_iterator *second_iter_;
Moment start_moment_;
@@ -77,8 +84,6 @@
void unisono (bool silent);
};
-static Music *busy_playing_event;
-
void
Part_combine_iterator::do_quit ()
{
@@ -101,12 +106,6 @@
split_list_ = SCM_EOL;
state_ = APART;
playing_state_ = APART;
-
- if (!busy_playing_event)
- {
- busy_playing_event
- = make_music_by_name (ly_symbol2scm ("BusyPlayingEvent"));
- }
}
void
@@ -169,7 +168,7 @@
mmrest->set_property ("duration", SCM_EOL);
}
- tg->try_music (mmrest);
+ mmrest->send_to_context (tg);
}
void
@@ -192,7 +191,7 @@
if (!event)
event = make_music_by_name (ly_symbol2scm ("SoloOneEvent"));
- first_iter_->try_music_in_children (event);
+ event->send_to_context (first_iter_->get_outlet ());
}
playing_state_ = SOLO1;
}
@@ -255,8 +254,9 @@
if (!event)
event = make_music_by_name (ly_symbol2scm ("UnisonoEvent"));
- (last_playing_ == SOLO2 ? second_iter_ : first_iter_)
- ->try_music_in_children (event);
+ Context *out = (last_playing_ == SOLO2 ? second_iter_ : first_iter_)
+ ->get_outlet ();
+ event->send_to_context (out);
playing_state_ = UNISONO;
}
state_ = newstate;
@@ -280,7 +280,7 @@
if (!event)
event = make_music_by_name (ly_symbol2scm ("SoloTwoEvent"));
- second_iter_->try_music_in_children (event);
+ event->send_to_context (second_iter_->get_outlet ());
playing_state_ = SOLO2;
}
}
@@ -369,6 +369,13 @@
0
};
+ // Add listeners to all contexts except Devnull.
+ Context *contexts[] = {one, two, solo_tr, tr, 0};
+ for (int i = 0; contexts[i]; i++)
+ {
+ contexts[i]->event_source ()->add_listener (GET_LISTENER (set_busy), ly_symbol2scm ("MusicEvent"));
+ }
+
for (char const **p = syms; *p; p++)
{
SCM sym = ly_symbol2scm (*p);
@@ -380,12 +387,46 @@
}
}
+IMPLEMENT_LISTENER (Part_combine_iterator, set_busy);
+void
+Part_combine_iterator::set_busy (SCM se)
+{
+ if (!notice_busy_)
+ return;
+
+ Stream_event *e = unsmob_stream_event (se);
+ SCM mus = e->get_property ("music");
+ Music *m = unsmob_music (mus);
+ assert (m);
+
+ if (m->is_mus_type ("note-event") || m->is_mus_type ("cluster-note-event"))
+ busy_ = true;
+}
+
+/*
+* Processes a moment in an iterator, and returns whether any new music was reported.
+*/
+bool
+Part_combine_iterator::try_process (Music_iterator *i, Moment m)
+{
+ busy_ = false;
+ notice_busy_ = true;
+
+ i->process (m);
+
+ notice_busy_ = false;
+ return busy_;
+}
+
void
Part_combine_iterator::process (Moment m)
{
Moment now = get_outlet ()->now_mom ();
Moment *splitm = 0;
+ if (start_moment_.main_part_.is_infinity () && start_moment_ < 0)
+ start_moment_ = now;
+
for (; scm_is_pair (split_list_); split_list_ = scm_cdr (split_list_))
{
splitm = unsmob_moment (scm_caar (split_list_));
@@ -418,27 +459,15 @@
if (first_iter_->ok ())
{
- first_iter_->process (m);
- if (first_iter_->try_music_in_children (busy_playing_event))
- last_playing_ = SOLO1;
+ if (try_process (first_iter_, m))
+ last_playing_ = SOLO1;
}
if (second_iter_->ok ())
{
- second_iter_->process (m);
- if (second_iter_->try_music_in_children (busy_playing_event))
+ if (try_process (second_iter_, m))
last_playing_ = SOLO2;
}
}
-Music_iterator *
-Part_combine_iterator::try_music_in_children (Music *m) const
-{
- Music_iterator *i = first_iter_->try_music (m);
- if (i)
- return i;
- else
- return second_iter_->try_music (m);
-}
-
IMPLEMENT_CTOR_CALLBACK (Part_combine_iterator);
Index: lily/percent-repeat-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/percent-repeat-iterator.cc,v
retrieving revision 1.27
diff -u -r1.27 percent-repeat-iterator.cc
--- lily/percent-repeat-iterator.cc 16 May 2006 11:19:50 -0000 1.27
+++ lily/percent-repeat-iterator.cc 23 May 2006 06:36:58 -0000
@@ -3,13 +3,12 @@
source file of the GNU LilyPond music typesetter
- (c) 2001--2006 Han-Wen Nienhuys , Erik Sandberg
+ (c) 2001--2006 Han-Wen Nienhuys
+ Erik Sandberg
*/
#include "percent-repeat-iterator.hh"
-
#include "input.hh"
-#include "international.hh"
#include "music.hh"
#include "repeated-music.hh"
@@ -17,17 +16,16 @@
Percent_repeat_iterator::Percent_repeat_iterator ()
{
- child_list_ = SCM_EOL;
}
-void
-Percent_repeat_iterator::construct_children ()
+SCM
+Percent_repeat_iterator::get_music_list () const
{
- /* TODO: Distinction between percent and slash */
+ /* TODO: Distinction between percent, double-percent and slash */
Music *mus = get_music ();
Music *child = Repeated_music::body (mus);
SCM length = child->get_length ().smobbed_copy ();
- child_list_ = SCM_EOL;
+ SCM child_list = SCM_EOL;
int repeats = scm_to_int (mus->get_property ("repeat-count"));
for (int i = repeats; i > 1; i--)
@@ -37,27 +35,9 @@
percent->set_property ("length", length);
if (repeats > 1)
percent->set_property ("repeat-count", scm_int2num (i - 1));
- Music *percent_chord = make_music_by_name (ly_symbol2scm ("EventChord"));
- percent_chord->set_spot (*mus->origin ());
- percent_chord->set_property ("elements", scm_list_1 (percent->self_scm ()));
- child_list_ = scm_cons (percent_chord->self_scm (), child_list_);
- percent->unprotect ();
- percent_chord->unprotect ();
+ child_list = scm_cons (percent->unprotect (), child_list);
}
- child_list_ = scm_cons (child->self_scm (), child_list_);
-
- Sequential_iterator::construct_children ();
-}
-
-SCM
-Percent_repeat_iterator::get_music_list () const
-{
- return child_list_;
-}
+ child_list = scm_cons (child->self_scm (), child_list);
-void
-Percent_repeat_iterator::derived_mark () const
-{
- scm_gc_mark (child_list_);
- Sequential_iterator::derived_mark ();
+ return child_list;
}
Index: lily/quote-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/quote-iterator.cc,v
retrieving revision 1.44
diff -u -r1.44 quote-iterator.cc
--- lily/quote-iterator.cc 17 May 2006 15:21:49 -0000 1.44
+++ lily/quote-iterator.cc 23 May 2006 06:36:58 -0000
@@ -252,10 +252,7 @@
mus->transpose (diff);
}
- bool b = quote_outlet_.get_outlet ()->try_music (mus);
- if (!b)
- mus->origin ()->warning (_f ("in quotation: junking event %s",
- mus->name ()));
+ quote_outlet_.get_outlet ()->try_music (mus);
}
}
Index: lily/sequential-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/sequential-iterator.cc,v
retrieving revision 1.40
diff -u -r1.40 sequential-iterator.cc
--- lily/sequential-iterator.cc 6 Jan 2006 09:13:25 -0000 1.40
+++ lily/sequential-iterator.cc 23 May 2006 06:36:58 -0000
@@ -244,12 +244,6 @@
return iter_;
}
-Music_iterator *
-Sequential_iterator::try_music_in_children (Music *m) const
-{
- return iter_ ? iter_->try_music (m) : 0;
-}
-
IMPLEMENT_CTOR_CALLBACK (Sequential_iterator);
bool
Index: lily/simple-music-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/simple-music-iterator.cc,v
retrieving revision 1.23
diff -u -r1.23 simple-music-iterator.cc
--- lily/simple-music-iterator.cc 6 Jan 2006 09:13:25 -0000 1.23
+++ lily/simple-music-iterator.cc 23 May 2006 06:36:58 -0000
@@ -43,7 +43,7 @@
Simple_music_iterator::process (Moment m)
{
/*
- don't do try_music (), since it would make the function useless for
+ don't do report_music (), since it would make the function useless for
base classes
*/
Index: lily/simultaneous-music-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/simultaneous-music-iterator.cc,v
retrieving revision 1.69
diff -u -r1.69 simultaneous-music-iterator.cc
--- lily/simultaneous-music-iterator.cc 24 Jan 2006 01:42:14 -0000 1.69
+++ lily/simultaneous-music-iterator.cc 23 May 2006 06:36:58 -0000
@@ -133,15 +133,6 @@
return false;
}
-Music_iterator *
-Simultaneous_music_iterator::try_music_in_children (Music *m) const
-{
- Music_iterator *b = 0;
- for (SCM s = children_list_; !b && scm_is_pair (s); s = scm_cdr (s))
- b = unsmob_iterator (scm_car (s))->try_music (m);
- return b;
-}
-
void
Simultaneous_music_iterator::do_quit ()
{
Index: lily/time-scaled-music-iterator.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/time-scaled-music-iterator.cc,v
retrieving revision 1.29
diff -u -r1.29 time-scaled-music-iterator.cc
--- lily/time-scaled-music-iterator.cc 16 May 2006 11:19:50 -0000 1.29
+++ lily/time-scaled-music-iterator.cc 23 May 2006 06:36:58 -0000
@@ -16,11 +16,10 @@
Time_scaled_music_iterator::Time_scaled_music_iterator ()
{
- child_list_ = SCM_EOL;
}
-void
-Time_scaled_music_iterator::construct_children ()
+SCM
+Time_scaled_music_iterator::get_music_list () const
{
Music *mus = get_music ();
Input *origin = mus->origin ();
@@ -41,22 +40,7 @@
stop_event = scm_call_1 (ly_lily_module_constant ("make-event-chord"), scm_list_1 (stop_event));
unsmob_music (stop_event)->set_spot (*origin);
- child_list_ = scm_list_3 (start_event, child->self_scm (), stop_event);
-
- Sequential_iterator::construct_children ();
-}
-
-SCM
-Time_scaled_music_iterator::get_music_list () const
-{
- return child_list_;
-}
-
-void
-Time_scaled_music_iterator::derived_mark () const
-{
- scm_gc_mark (child_list_);
- Sequential_iterator::derived_mark ();
+ return scm_list_3 (start_event, child->self_scm (), stop_event);
}
IMPLEMENT_CTOR_CALLBACK (Time_scaled_music_iterator);
Index: lily/translator-group.cc
===================================================================
RCS file: /sources/lilypond/lilypond/lily/translator-group.cc,v
retrieving revision 1.152
diff -u -r1.152 translator-group.cc
--- lily/translator-group.cc 11 Feb 2006 11:35:17 -0000 1.152
+++ lily/translator-group.cc 23 May 2006 06:36:58 -0000
@@ -3,18 +3,21 @@
source file of the GNU LilyPond music typesetter
- (c) 1997--2006 Han-Wen Nienhuys
+ (c) 1997--2006 Han-Wen Nienhuys ,
+ Erik Sandberg
*/
#include "translator-group.hh"
-#include "output-def.hh"
-#include "warn.hh"
-#include "scm-hash.hh"
#include "context-def.hh"
#include "context.hh"
+#include "dispatcher.hh"
#include "main.hh"
#include "music.hh"
+#include "output-def.hh"
+#include "scm-hash.hh"
+#include "stream-event.hh"
+#include "warn.hh"
Translator_group *
Translator_group::get_daddy_translator () const
@@ -36,6 +39,15 @@
}
void
+Translator_group::connect_to_context (Context *c)
+{
+ if (context_)
+ programming_error ("already connected to a context");
+ context_ = c;
+ c->event_source ()->add_listener (GET_LISTENER (eat_event), ly_symbol2scm ("MusicEvent"));
+}
+
+void
Translator_group::finalize ()
{
}
@@ -67,6 +79,16 @@
return l;
}
+IMPLEMENT_LISTENER (Translator_group, eat_event);
+void
+Translator_group::eat_event (SCM sev)
+{
+ Stream_event *ev = unsmob_stream_event (sev);
+ SCM sm = ev->get_property ("music");
+ Music *m = unsmob_music (sm);
+ try_music (m);
+}
+
bool
Translator_group::try_music (Music *m)
{
@@ -235,4 +257,3 @@
scm_gc_mark (me->accept_hash_table_);
return me->simple_trans_list_;
}
-
Index: lily/include/chord-tremolo-iterator.hh
===================================================================
RCS file: /sources/lilypond/lilypond/lily/include/chord-tremolo-iterator.hh,v
retrieving revision 1.20
diff -u -r1.20 chord-tremolo-iterator.hh
--- lily/include/chord-tremolo-iterator.hh 6 Jan 2006 09:13:24 -0000 1.20
+++ lily/include/chord-tremolo-iterator.hh 23 May 2006 06:36:58 -0000
@@ -9,28 +9,18 @@
#ifndef CHORD_TREMOLO_ITERATOR_HH
#define CHORD_TREMOLO_ITERATOR_HH
-#include "music-iterator.hh"
+#include "sequential-iterator.hh"
-class Chord_tremolo_iterator : public Music_iterator
+class Chord_tremolo_iterator : public Sequential_iterator
{
public:
- DECLARE_CLASSNAME(Chord_tremolo_iterator);
DECLARE_SCHEME_CALLBACK (constructor, ());
+ /* construction */
+ DECLARE_CLASSNAME(Chord_tremolo_iterator);
Chord_tremolo_iterator ();
- Chord_tremolo_iterator (Chord_tremolo_iterator const &);
protected:
- virtual void derived_substitute (Context *f, Context *t);
-
- virtual void derived_mark () const;
- virtual Moment pending_moment () const;
- virtual void do_quit ();
- virtual void construct_children ();
- virtual bool ok () const;
- virtual void process (Moment);
- virtual Music_iterator *try_music_in_children (Music *) const;
+ virtual SCM get_music_list () const;
private:
- Moment factor_;
- Music_iterator *child_iter_;
};
#endif /* CHORD_TREMOLO_ITERATOR_HH */
Index: lily/include/event-chord-iterator.hh
===================================================================
RCS file: /sources/lilypond/lilypond/lily/include/event-chord-iterator.hh,v
retrieving revision 1.13
diff -u -r1.13 event-chord-iterator.hh
--- lily/include/event-chord-iterator.hh 6 Jan 2006 09:13:24 -0000 1.13
+++ lily/include/event-chord-iterator.hh 23 May 2006 06:36:58 -0000
@@ -1,13 +1,13 @@
/*
- event-iter.hh -- declare Event_chord_iterator
+ event-chord-iterator.hh -- declare Event_chord_iterator
source file of the GNU LilyPond music typesetter
(c) 1997--2006 Han-Wen Nienhuys
*/
-#ifndef EVENT_ITER_HH
-#define EVENT_ITER_HH
+#ifndef EVENT_CHORD_ITERATOR_HH
+#define EVENT_CHORD_ITERATOR_HH
#include "simple-music-iterator.hh"
@@ -19,16 +19,8 @@
/**
Find a bottom notation context to deliver events to.
*/
- virtual Context *get_bottom_context ();
DECLARE_CLASSNAME(Event_chord_iterator);
- /*
- Since Event_chord_iterator has no list-cursor internally, we
- must use a status variable to adminstrate where we are */
-
- enum { NONE_DONE, START_DONE, END_DONE }
- status_;
-
public:
DECLARE_SCHEME_CALLBACK (constructor, ());
Event_chord_iterator ();
@@ -39,4 +31,4 @@
virtual void construct_children ();
};
-#endif // EVENT_ITER_HH
+#endif // EVENT_CHORD_ITERATOR_HH
Index: lily/include/folded-repeat-iterator.hh
===================================================================
RCS file: /sources/lilypond/lilypond/lily/include/folded-repeat-iterator.hh,v
retrieving revision 1.21
diff -u -r1.21 folded-repeat-iterator.hh
--- lily/include/folded-repeat-iterator.hh 6 Jan 2006 09:13:24 -0000 1.21
+++ lily/include/folded-repeat-iterator.hh 23 May 2006 06:36:58 -0000
@@ -36,7 +36,6 @@
void leave_body ();
virtual void process (Moment);
- virtual Music_iterator *try_music_in_children (Music *) const;
private:
Music_iterator *main_iter_;
Index: lily/include/lily-proto.hh
===================================================================
RCS file: /sources/lilypond/lilypond/lily/include/lily-proto.hh,v
retrieving revision 1.147
diff -u -r1.147 lily-proto.hh
--- lily/include/lily-proto.hh 22 May 2006 17:45:40 -0000 1.147
+++ lily/include/lily-proto.hh 23 May 2006 06:36:58 -0000
@@ -51,6 +51,7 @@
class Event;
class Event_chord;
class Event_chord_iterator;
+class Event_iterator;
class Folded_repeat_iterator;
class Font_metric;
class Font_size_engraver;
Index: lily/include/music-iterator.hh
===================================================================
RCS file: /sources/lilypond/lilypond/lily/include/music-iterator.hh,v
retrieving revision 1.74
diff -u -r1.74 music-iterator.hh
--- lily/include/music-iterator.hh 11 Feb 2006 11:35:16 -0000 1.74
+++ lily/include/music-iterator.hh 23 May 2006 06:36:58 -0000
@@ -61,13 +61,14 @@
Moment music_get_length () const;
Moment music_start_mom () const;
Music_iterator ();
- Music_iterator *try_music (Music *) const;
+ void report_music (Music *);
Context *get_outlet () const;
void set_context (Context *);
static SCM get_static_get_iterator (Music *mus);
void init_translator (Music *, Context *);
void quit ();
void substitute_outlet (Context *from, Context *to);
+ void descend_to_bottom_context ();
virtual void derived_substitute (Context *, Context *);
virtual Moment pending_moment () const;
virtual bool ok () const;
@@ -78,8 +79,6 @@
DECLARE_SCHEME_CALLBACK (constructor, ());
SCM get_iterator (Music *) const;
- virtual Music_iterator *try_music_in_children (Music *) const;
-
Music *get_music () const;
protected:
virtual void do_quit ();
Index: lily/include/music-wrapper-iterator.hh
===================================================================
RCS file: /sources/lilypond/lilypond/lily/include/music-wrapper-iterator.hh,v
retrieving revision 1.34
diff -u -r1.34 music-wrapper-iterator.hh
--- lily/include/music-wrapper-iterator.hh 6 Jan 2006 09:13:24 -0000 1.34
+++ lily/include/music-wrapper-iterator.hh 23 May 2006 06:36:58 -0000
@@ -33,7 +33,6 @@
virtual bool run_always () const;
protected:
virtual void process (Moment);
- virtual Music_iterator *try_music_in_children (Music *) const;
Music_iterator *child_iter_;
};
Index: lily/include/percent-repeat-iterator.hh
===================================================================
RCS file: /sources/lilypond/lilypond/lily/include/percent-repeat-iterator.hh,v
retrieving revision 1.14
diff -u -r1.14 percent-repeat-iterator.hh
--- lily/include/percent-repeat-iterator.hh 16 May 2006 11:19:50 -0000 1.14
+++ lily/include/percent-repeat-iterator.hh 23 May 2006 06:36:58 -0000
@@ -19,10 +19,7 @@
Percent_repeat_iterator ();
protected:
virtual SCM get_music_list () const;
- virtual void derived_mark () const;
- virtual void construct_children ();
private:
- SCM child_list_;
};
#endif /* PERCENT_REPEAT_ITERATOR_HH */
Index: lily/include/sequential-iterator.hh
===================================================================
RCS file: /sources/lilypond/lilypond/lily/include/sequential-iterator.hh,v
retrieving revision 1.21
diff -u -r1.21 sequential-iterator.hh
--- lily/include/sequential-iterator.hh 6 Jan 2006 09:13:24 -0000 1.21
+++ lily/include/sequential-iterator.hh 23 May 2006 06:36:58 -0000
@@ -33,7 +33,6 @@
protected:
virtual void process (Moment);
- virtual Music_iterator *try_music_in_children (Music *) const;
virtual bool run_always () const;
protected:
Index: lily/include/simultaneous-music-iterator.hh
===================================================================
RCS file: /sources/lilypond/lilypond/lily/include/simultaneous-music-iterator.hh,v
retrieving revision 1.29
diff -u -r1.29 simultaneous-music-iterator.hh
--- lily/include/simultaneous-music-iterator.hh 6 Jan 2006 09:13:24 -0000 1.29
+++ lily/include/simultaneous-music-iterator.hh 23 May 2006 06:36:58 -0000
@@ -32,7 +32,6 @@
protected:
virtual void process (Moment);
- virtual Music_iterator *try_music_in_children (Music *) const;
private:
SCM children_list_;
Index: lily/include/time-scaled-music-iterator.hh
===================================================================
RCS file: /sources/lilypond/lilypond/lily/include/time-scaled-music-iterator.hh,v
retrieving revision 1.16
diff -u -r1.16 time-scaled-music-iterator.hh
--- lily/include/time-scaled-music-iterator.hh 16 May 2006 11:19:50 -0000 1.16
+++ lily/include/time-scaled-music-iterator.hh 23 May 2006 06:36:58 -0000
@@ -21,10 +21,7 @@
Time_scaled_music_iterator ();
protected:
virtual SCM get_music_list () const;
- virtual void derived_mark () const;
- virtual void construct_children ();
private:
- SCM child_list_;
};
#endif /* TIME_SCALED_MUSIC_ITERATOR_HH */
Index: lily/include/translator-group.hh
===================================================================
RCS file: /sources/lilypond/lilypond/lily/include/translator-group.hh,v
retrieving revision 1.81
diff -u -r1.81 translator-group.hh
--- lily/include/translator-group.hh 11 Feb 2006 11:35:16 -0000 1.81
+++ lily/include/translator-group.hh 23 May 2006 06:36:58 -0000
@@ -9,6 +9,7 @@
#ifndef TRANSLATOR_GROUP_HH
#define TRANSLATOR_GROUP_HH
+#include "listener.hh"
#include "translator.hh"
#include "std-vector.hh"
@@ -46,11 +47,14 @@
Translator_group_void_method
precomputed_self_method_bindings_[TRANSLATOR_METHOD_PRECOMPUTE_COUNT];
+ DECLARE_LISTENER (eat_event);
+
public:
VIRTUAL_COPY_CONSTRUCTOR (Translator_group, Translator_group);
DECLARE_SMOBS (Translator_group, dummy);
public:
+ void connect_to_context (Context *c);
virtual Translator_group *get_daddy_translator ()const;
virtual SCM get_simple_trans_list ();
virtual bool try_music (Music *req);
Index: ly/music-functions-init.ly
===================================================================
RCS file: /sources/lilypond/lilypond/ly/music-functions-init.ly,v
retrieving revision 1.58
diff -u -r1.58 music-functions-init.ly
--- ly/music-functions-init.ly 17 May 2006 15:21:49 -0000 1.58
+++ ly/music-functions-init.ly 23 May 2006 06:36:58 -0000
@@ -107,10 +107,11 @@
music)
applyOutput =
-#(define-music-function (parser location proc) (procedure?)
- (make-music 'ApplyOutputEvent
+#(define-music-function (parser location ctx proc) (symbol? procedure?)
+ (make-music 'ApplyOutputEvent
'origin location
- 'procedure proc))
+ 'procedure proc
+ 'context-type ctx))
overrideProperty =
#(define-music-function (parser location name property value)
@@ -140,8 +141,7 @@
(if (equal?
(cdr (assoc 'name (ly:grob-property grob 'meta)))
grob-name)
- (set! (ly:grob-property grob property) value)
- )))
+ (set! (ly:grob-property grob property) value))))
context-name)))
Index: scm/define-music-properties.scm
===================================================================
RCS file: /sources/lilypond/lilypond/scm/define-music-properties.scm,v
retrieving revision 1.52
diff -u -r1.52 define-music-properties.scm
--- scm/define-music-properties.scm 17 May 2006 15:21:49 -0000 1.52
+++ scm/define-music-properties.scm 23 May 2006 06:36:58 -0000
@@ -50,6 +50,7 @@
(error-found ,boolean? "If true, a parsing error was found in this expression")
(element ,ly:music? "The single child of a Music_wrapper music object, or the body of a repeat.")
(elements ,ly:music-list? "A list of elements for sequential of simultaneous music, or the alternatives of repeated music. ")
+ (expected-beam-count ,integer? "Expected number of non-tremolo beams in a tremolo repeat")
(force-accidental ,boolean? "If set, a cautionary accidental should always be printed on this note")
(grob-property ,symbol? "The symbol of the grob property to set. ")
(grob-property-path ,list? "A list of symbols, locating a nested grob property, e.g. (beamed-lengths details). ")
@@ -100,7 +101,7 @@
(text ,markup? "markup expression to be printed")
(tempo-unit ,ly:duration? "The unit for the metronome count.")
(tonic ,ly:pitch? "Base of the scale")
- (tremolo-type ,integer? "")
+ (tremolo-type ,integer? "speed of tremolo, e.g. 16 for c4:16")
(trill-pitch ,ly:pitch? "Pitch of other note of the trill.")
(type ,symbol? "The type of this music object. Determines iteration in some cases.")
(types ,list? "The types of this music object; determines by what
Index: scm/define-music-types.scm
===================================================================
RCS file: /sources/lilypond/lilypond/scm/define-music-types.scm,v
retrieving revision 1.79
diff -u -r1.79 define-music-types.scm
--- scm/define-music-types.scm 16 May 2006 11:19:50 -0000 1.79
+++ scm/define-music-types.scm 23 May 2006 06:36:59 -0000
@@ -30,14 +30,13 @@
Syntax
-\\applyoutput FUNC
+\\applyoutput #'Context FUNC
arguments to func are 1. the grob, 2. the originating context,
3. context where FUNC is called.
")
- (iterator-ctor . ,ly:output-property-music-iterator::constructor)
- (types . (general-music layout-instruction))
+ (types . (general-music event layout-instruction))
))
(ArpeggioEvent
. (
@@ -238,17 +237,6 @@
(description . "Allow, forbid or force a line break.")
(types . (general-music break-event event))
))
- (OldLyricCombineMusic
- . (
- (description . "Align lyrics to the start of notes.
-
-Syntax @var{\\oldaddlyrics address@hidden @var{lyrics}.")
-
- (types . (general-music lyric-combine-music))
- (length-callback . ,ly:lyric-combine-music::length-callback)
- (start-callback . ,ly:music-sequence::first-start-callback)
- (iterator-ctor . ,ly:old-lyric-combine-music-iterator::constructor)
- ))
(LyricCombineMusic
. (
@@ -331,18 +319,6 @@
(types . (general-music event note-event rhythmic-event melodic-event))
))
- (OutputPropertySetMusic
- . (
- (description . "Set grob properties in objects
-individually.
-
-Syntax @code{\\outputproperty @var{predicate} @var{prop}
-= @var{val}}.")
-
- (iterator-ctor . ,ly:output-property-music-iterator::constructor)
- (types . (general-music layout-instruction))
- ))
-
(OverrideProperty
. (
(description . "Extend the definition of a graphical object.
@@ -674,6 +650,12 @@
(types . (general-music event tremolo-event))
))
+ (TremoloSpanEvent
+ . (
+ (description . "Tremolo over two stems")
+ (types . (general-music event span-event tremolo-span-event))
+ ))
+
(VoiceSeparator
. (
(description . "Separate polyphonic voices in simultaneous music.