From b27ef38abea7d398b74fa0ae1bef939b7bd78fd0 Mon Sep 17 00:00:00 2001 From: fred Date: Fri, 24 Jul 1998 12:20:53 +0000 Subject: [PATCH] lilypond-1.0.1 --- lily/slur-engraver.cc | 124 +++++++++++++++++++++++++++++++++++++++ lily/tie-engraver.cc | 132 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 256 insertions(+) create mode 100644 lily/slur-engraver.cc create mode 100644 lily/tie-engraver.cc diff --git a/lily/slur-engraver.cc b/lily/slur-engraver.cc new file mode 100644 index 0000000000..5ccf0386f6 --- /dev/null +++ b/lily/slur-engraver.cc @@ -0,0 +1,124 @@ +/* + slur-grav.cc -- implement Slur_engraver + + (c) 1997--1998 Han-Wen Nienhuys +*/ + +#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 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); diff --git a/lily/tie-engraver.cc b/lily/tie-engraver.cc new file mode 100644 index 0000000000..d6313a2856 --- /dev/null +++ b/lily/tie-engraver.cc @@ -0,0 +1,132 @@ +/* + tie-reg.cc -- implement Tie_engraver + + source file of the GNU LilyPond music typesetter + + (c) 1997--1998 Han-Wen Nienhuys + + + 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); -- 2.39.5