source file of the GNU LilyPond music typesetter
- (c) 1999--2003 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 1999--2004 Jan Nieuwenhuizen <janneke@gnu.org>
*/
-
+#include "translator-group.hh"
#include "audio-item.hh"
#include "event.hh"
#include "pqueue.hh"
public:
TRANSLATOR_DECLARATIONS(Tie_performer);
private:
- bool done_;
-
+
+ bool ties_created_;
Array<CNote_melodic_tuple> now_notes_;
Array<CNote_melodic_tuple> tied_notes_;
Link_array<Audio_tie> ties_;
protected:
- virtual void initialize ();
+ virtual void process_music ();
virtual void start_translation_timestep ();
virtual void stop_translation_timestep ();
virtual void acknowledge_audio_element (Audio_element_info);
virtual void create_audio_elements ();
};
+void
+Tie_performer::process_music ()
+{
+ if (event_)
+ daddy_trans_->set_property ("tieMelismaBusy", SCM_BOOL_T);
+}
+
Tie_performer::Tie_performer ()
{
event_ = 0;
- done_ = false;
+ ties_created_ = false;
+ prev_event_ = 0;
}
ENTER_DESCRIPTION (Tie_performer, "", "",
"", "", "");
-void
-Tie_performer::initialize ()
-{
- event_ = 0;
-}
-
bool
Tie_performer::try_music (Music *m)
p->set_note (RIGHT, now_notes_[j].note_);
ties_.push (p);
announce_element (Audio_element_info (p, event_));
+ ties_created_ = true;
tied_notes_.del (i);
break ;
void
Tie_performer::stop_translation_timestep ()
{
- if (prev_event_ && tied_notes_.size () && !ties_.size ())
+ if (prev_event_ && tied_notes_.size () && !ties_.size ()
+ && now_notes_.size ())
{
prev_event_->origin ()->warning (_ ("No ties were performed."));
}
- else
- prev_event_ = 0;
+
+ if (ties_created_)
+ {
+ prev_event_ = 0;
+ tied_notes_.clear();
+ }
if (event_)
{
tied_notes_ = now_notes_ ;
prev_event_ = event_;
}
- else
- {
- tied_notes_.clear ();
- }
event_ = 0;
now_notes_ .clear ();
Tie_performer::start_translation_timestep ()
{
event_ =0;
- done_ = false;
+ ties_created_ = false;
Moment now = now_mom ();
for (int i= tied_notes_.size (); i-- ;)
{