--- /dev/null
+/*
+ slur-grav.cc -- implement Slur_engraver
+
+ (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+*/
+
+#include "proto.hh"
+#include "plist.hh"
+#include "musical-request.hh"
+#include "slur-engraver.hh"
+#include "slur.hh"
+#include "debug.hh"
+#include "note-column.hh"
+
+bool
+Slur_engraver::do_try_request (Request *req_l)
+{
+ Musical_req *mus_l = req_l->access_Musical_req ();
+ if (!mus_l || !mus_l->access_Slur_req ())
+ return false;
+
+ new_slur_req_l_arr_.push (mus_l->access_Slur_req ());
+ return true;
+}
+
+void
+Slur_engraver::acknowledge_element (Score_element_info info)
+{
+ if (info.elem_l_->is_type_b (Note_column::static_name ()))
+ {
+ Note_column *col_l =(Note_column*) info.elem_l_->access_Item() ;// ugh
+ for (int i = 0; i < slur_l_stack_.size(); i++)
+ slur_l_stack_[i]->add_column (col_l);
+ for (int i = 0; i < end_slur_l_arr_.size(); i++)
+ end_slur_l_arr_[i]->add_column (col_l);
+ }
+}
+
+void
+Slur_engraver::do_removal_processing ()
+{
+ for (int i = 0; i < slur_l_stack_.size(); i++)
+ {
+ typeset_element (slur_l_stack_[i]);
+ }
+ slur_l_stack_.clear ();
+ for (int i=0; i < requests_arr_.size(); i++)
+ {
+ requests_arr_[i]->warning (_ ("unterminated slur"));
+ }
+}
+
+/*
+ abracadabra
+ */
+Slur_engraver::Slur_engraver()
+{
+ dir_ =CENTER;
+}
+void
+Slur_engraver::do_process_requests()
+{
+ Array<Slur*> start_slur_l_arr_;
+ for (int i=0; i< new_slur_req_l_arr_.size(); i++)
+ {
+ Slur_req* slur_req_l = new_slur_req_l_arr_[i];
+ // end slur: move the slur to other array
+ if (slur_req_l->spantype == Span_req::STOP)
+ {
+ if (slur_l_stack_.empty())
+
+ slur_req_l->warning (_f ("can't find both ends of %s", _("slur")));
+ else
+ {
+ end_slur_l_arr_.push (slur_l_stack_.pop());
+ requests_arr_.pop();
+ }
+ }
+ else if (slur_req_l->spantype == Span_req::START)
+ {
+ // push a new slur onto stack.
+ //(use temp. array to wait for all slur STOPs)
+ Slur * s_p =new Slur;
+ Scalar prop = get_property ("slurdash");
+ if (prop.isnum_b ())
+ s_p->dash_i_ = prop;
+ requests_arr_.push (slur_req_l);
+ start_slur_l_arr_.push (s_p);
+ announce_element (Score_element_info (s_p, slur_req_l));
+ }
+ }
+ for (int i=0; i < start_slur_l_arr_.size(); i++)
+ slur_l_stack_.push (start_slur_l_arr_[i]);
+}
+
+void
+Slur_engraver::do_pre_move_processing()
+{
+ Scalar dir (get_property ("slurydirection"));
+ Scalar dir2 (get_property ("ydirection"));
+ if (!dir.length_i () && dir2.length_i ())
+ {
+ dir_ = (Direction) int(dir2);
+ }
+ else if (dir.length_i ())
+ dir_ = (Direction) int (dir);
+
+ for (int i = 0; i < end_slur_l_arr_.size(); i++)
+ {
+ if (dir_)
+ end_slur_l_arr_[i]->dir_ = dir_;
+ typeset_element (end_slur_l_arr_[i]);
+ }
+ end_slur_l_arr_.clear();
+}
+
+void
+Slur_engraver::do_post_move_processing()
+{
+ new_slur_req_l_arr_.clear();
+}
+
+IMPLEMENT_IS_TYPE_B1(Slur_engraver,Engraver);
+ADD_THIS_TRANSLATOR(Slur_engraver);
--- /dev/null
+/*
+ tie-reg.cc -- implement Tie_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+
+
+ essentially obsolete.
+*/
+
+#include "tie-engraver.hh"
+#include "tie.hh"
+#include "note-head.hh"
+#include "musical-request.hh"
+#include "music-list.hh"
+
+Tie_engraver::Tie_engraver()
+{
+ end_tie_p_ = 0;
+ tie_p_ = 0;
+ req_l_ =0;
+ end_req_l_ =0;
+ end_mom_ = -1;
+ melodic_req_l_ = 0;
+ end_melodic_req_l_ =0;
+ dir_ = CENTER;
+}
+
+void
+Tie_engraver::do_post_move_processing()
+{
+ if (tie_p_ && now_moment () == end_mom_)
+ {
+ end_tie_p_ = tie_p_;
+ end_req_l_ = req_l_;
+ end_melodic_req_l_ = melodic_req_l_;
+ tie_p_ =0;
+ req_l_ =0;
+ end_mom_ = -1;
+ }
+}
+
+bool
+Tie_engraver::do_try_request (Request*r)
+{
+ if (! (r->access_Musical_req () && r->access_Musical_req ()->access_Tie_req ()))
+ return false;
+
+ if (req_l_)
+ {
+ return false;
+ }
+ req_l_ = r->access_Musical_req ()->access_Tie_req ();
+ end_mom_ = r->parent_music_l_->time_int().length ()
+ + now_moment ();
+ return true;
+}
+
+void
+Tie_engraver::do_process_requests()
+{
+ Scalar dir (get_property ("tieydirection"));
+ Scalar dir2 (get_property ("ydirection"));
+ if (!dir.length_i () && dir2.length_i ())
+ {
+ dir_ = (Direction) int(dir2);
+ }
+ else if (dir.length_i ())
+ dir_ = (Direction) int (dir);
+
+ if (req_l_ && ! tie_p_)
+ {
+ tie_p_ = new Tie;
+ Scalar prop = get_property ("tiedash");
+ if (prop.isnum_b ())
+ tie_p_->dash_i_ = prop;
+ }
+}
+
+void
+Tie_engraver::acknowledge_element (Score_element_info i)
+{
+ if (i.elem_l_->is_type_b (Note_head::static_name ()))
+ {
+ if (tie_p_)
+ {
+ tie_p_->set_head (LEFT, (Note_head*)i.elem_l_->access_Item ());
+ melodic_req_l_ = i.req_l_->access_Musical_req ()->access_Melodic_req ();
+ }
+
+ if (end_tie_p_)
+ {
+ end_tie_p_->set_head (RIGHT, (Note_head*)i.elem_l_->access_Item ());
+ if (!Melodic_req::compare (*end_melodic_req_l_, *melodic_req_l_))
+ end_tie_p_->same_pitch_b_ = true;
+ announce_element (Score_element_info (end_tie_p_,end_req_l_));
+ }
+ }
+}
+
+void
+Tie_engraver::do_pre_move_processing()
+{
+ if (end_tie_p_)
+ {
+ if (dir_)
+ end_tie_p_->dir_ = dir_;
+
+ typeset_element (end_tie_p_);
+ end_tie_p_ =0;
+ end_req_l_ =0;
+ }
+}
+
+void
+Tie_engraver::do_removal_processing ()
+{
+ do_pre_move_processing ();
+ if (tie_p_)
+ {
+ req_l_->warning (_ ("lonely tie"));
+ tie_p_->unlink ();
+ delete tie_p_;
+ tie_p_ =0;
+ }
+}
+
+
+
+IMPLEMENT_IS_TYPE_B1(Tie_engraver,Engraver);
+ADD_THIS_TRANSLATOR(Tie_engraver);