From: fred Date: Sun, 24 Mar 2002 20:12:43 +0000 (+0000) Subject: lilypond-1.0.1 X-Git-Tag: release/1.5.59~3043 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=181bb146b06608b9e7646f8fa98d52499487eb4a;p=lilypond.git lilypond-1.0.1 --- diff --git a/lily/bar-engraver.cc b/lily/bar-engraver.cc new file mode 100644 index 0000000000..7ed4bad871 --- /dev/null +++ b/lily/bar-engraver.cc @@ -0,0 +1,113 @@ +/* + bar-reg.cc -- implement Bar_engraver + + source file of the GNU LilyPond music typesetter + + (c) 1997--1998 Han-Wen Nienhuys +*/ + +#include "bar-engraver.hh" +#include "bar.hh" +#include "musical-request.hh" +#include "multi-measure-rest.hh" +#include "command-request.hh" +#include "time-description.hh" +#include "engraver-group.hh" + +Bar_engraver::Bar_engraver() +{ + bar_p_ =0; + do_post_move_processing(); +} + +bool +Bar_engraver::do_try_request (Request*r_l) +{ + Command_req* c_l = r_l->access_Command_req (); + if (!c_l|| !c_l->access_Bar_req ()) + return false; + Bar_req * b= c_l->access_Bar_req (); + if (bar_req_l_ && bar_req_l_->equal_b (b)) + return false; + + bar_req_l_ = b; + + return true; +} + +void +Bar_engraver::create_bar () +{ + if (!bar_p_) + { + bar_p_ = new Bar; + bar_p_->break_priority_i_ = 0; + announce_element (Score_element_info (bar_p_, bar_req_l_)); + } +} + + +void +Bar_engraver::do_creation_processing () +{ + create_bar (); + bar_p_->type_str_ = ""; +} + +void +Bar_engraver::do_removal_processing () +{ + if (bar_p_) + { + typeset_element (bar_p_); + bar_p_ =0; + } +} + +void +Bar_engraver::do_process_requests() +{ + if (bar_req_l_) + { + if (!bar_p_) + create_bar (); + + bar_p_->type_str_ = bar_req_l_->type_str_; + } + else + { + Time_description const *time = get_staff_info().time_C_; + if (time && !time->whole_in_measure_) + create_bar (); + } + + if (!bar_p_) + { + Break_req r; + r.penalty_i_ = Break_req::DISALLOW; + daddy_grav_l ()->try_request (&r); + } +} + + +void +Bar_engraver::do_pre_move_processing() +{ + if (bar_p_) + { + typeset_element (bar_p_); + bar_p_ =0; + } +} + +void +Bar_engraver::do_post_move_processing() +{ + bar_req_l_ = 0; +} + + +IMPLEMENT_IS_TYPE_B1(Bar_engraver,Engraver); +ADD_THIS_TRANSLATOR(Bar_engraver); + + diff --git a/lily/beam-engraver.cc b/lily/beam-engraver.cc new file mode 100644 index 0000000000..6ef0ba09fc --- /dev/null +++ b/lily/beam-engraver.cc @@ -0,0 +1,139 @@ +/* + beam-grav.cc -- implement Beam_engraver + + source file of the GNU LilyPond music typesetter + + (c) 1997--1998 Han-Wen Nienhuys +*/ +#include "duration-convert.hh" +#include "time-description.hh" +#include "beam-engraver.hh" +#include "stem.hh" +#include "beam.hh" +#include "musical-request.hh" +#include "grouping.hh" +#include "p-col.hh" +#include "warn.hh" + +Beam_engraver::Beam_engraver() +{ + span_reqs_drul_[LEFT] = span_reqs_drul_[RIGHT] =0; + beam_p_ =0; + current_grouping_p_ =0; +} + +bool +Beam_engraver::do_try_request(Request*r) +{ + Musical_req* mus_l = r->access_Musical_req (); + if (!mus_l) + return false; + + Beam_req* b = mus_l->access_Beam_req (); + if (!b) + return false; + + if (bool (beam_p_) == bool (b->spantype == Span_req::START)) + return false; + + Direction d = (!beam_p_) ? LEFT : RIGHT; + if (span_reqs_drul_[d] && !span_reqs_drul_[d]->equal_b (mus_l)) + return false; + + span_reqs_drul_[d] = b; + return true; +} + +void +Beam_engraver::do_process_requests() +{ + if (beam_p_ || !span_reqs_drul_[LEFT]) + return; + + current_grouping_p_ = new Rhythmic_grouping; + beam_p_ = new Beam; + + Scalar prop = get_property ("beamslopedamping"); + if (prop.isnum_b ()) + beam_p_->damping_i_ = prop; + + prop = get_property ("beamquantisation"); + if (prop.isnum_b ()) + beam_p_->quantisation_ = (Beam::Quantisation)(int)prop; + + announce_element (Score_element_info (beam_p_, span_reqs_drul_[LEFT])); +} + +void +Beam_engraver::do_pre_move_processing() +{ + if (!beam_p_ || !span_reqs_drul_[RIGHT]) + return; + + Rhythmic_grouping const * rg_C = get_staff_info().rhythmic_C_; + rg_C->extend (current_grouping_p_->interval()); + beam_p_->set_grouping (*rg_C, *current_grouping_p_); + typeset_element (beam_p_); + beam_p_ = 0; + + delete current_grouping_p_; + current_grouping_p_ = 0; + + span_reqs_drul_[RIGHT] = span_reqs_drul_[LEFT] = 0; +} + +void +Beam_engraver::do_removal_processing() +{ + if (beam_p_) + { + span_reqs_drul_[LEFT]->warning (_("unterminated beam")); + typeset_element (beam_p_); + beam_p_ =0; + } +} + + +void +Beam_engraver::acknowledge_element (Score_element_info i) +{ + if (!beam_p_ || !i.elem_l_->is_type_b (Stem::static_name ())) + return; + + Stem* s = (Stem*)i.elem_l_->access_Item (); + if (!i.req_l_ || !i.req_l_->access_Musical_req () || !i.req_l_->access_Musical_req ()->access_Rhythmic_req ()) + { + ::warning ( _("Stem must have Rhythmic structure.")); + return; + } + + Rhythmic_req *rhythmic_req = i.req_l_->access_Musical_req ()->access_Rhythmic_req (); + if (rhythmic_req->duration_.durlog_i_<= 2) + { + rhythmic_req->warning (_ ("stem doesn't fit in beam")); + return; + } + + /* + TODO: do something sensible if it doesn't fit in the beam. + */ + Moment start = get_staff_info().time_C_->whole_in_measure_; + + if (!current_grouping_p_->child_fit_b (start)) + { + String s (_("please fix me") + ": " + + _f ("stem at %s doesn't fit in beam", now_moment ().str ())); + if (i.req_l_) + i.req_l_->warning(s); + else + warning (s); + } + else + { + current_grouping_p_->add_child (start, rhythmic_req->duration ()); + s->flag_i_ = rhythmic_req->duration_.durlog_i_; + beam_p_->add_stem (s); + } +} +IMPLEMENT_IS_TYPE_B1(Beam_engraver, Engraver); +ADD_THIS_TRANSLATOR(Beam_engraver); diff --git a/lily/collision-engraver.cc b/lily/collision-engraver.cc new file mode 100644 index 0000000000..be5ab22866 --- /dev/null +++ b/lily/collision-engraver.cc @@ -0,0 +1,59 @@ +/* + collision-reg.cc -- implement Collision_engraver + + source file of the GNU LilyPond music typesetter + + (c) 1997--1998 Han-Wen Nienhuys +*/ + +#include "note-column.hh" +#include "collision-engraver.hh" +#include "collision.hh" + +void +Collision_engraver::process_acknowledged () +{ + + if (col_p_ || note_column_l_arr_.size () < 2) + return ; + if (!col_p_) + { + col_p_ = new Collision; + announce_element (Score_element_info (col_p_,0)); + } + for (int i=0; i< note_column_l_arr_.size (); i++) + col_p_->add_column (note_column_l_arr_[i]); +} + +void +Collision_engraver::acknowledge_element (Score_element_info i) +{ + if (i.elem_l_->is_type_b (Note_column::static_name ())) + { + Note_column * c = (Note_column*) i.elem_l_->access_Item (); + if (c->rest_b ()) + return ; + + note_column_l_arr_.push (c); + } +} + +void +Collision_engraver::do_pre_move_processing() +{ + if (col_p_) + { + typeset_element (col_p_); + col_p_ =0; + } + note_column_l_arr_.clear (); +} + +Collision_engraver::Collision_engraver() +{ + col_p_ =0; +} + + +IMPLEMENT_IS_TYPE_B1(Collision_engraver,Engraver); +ADD_THIS_TRANSLATOR(Collision_engraver); diff --git a/lily/head-engraver.cc b/lily/head-engraver.cc new file mode 100644 index 0000000000..c8c5e79248 --- /dev/null +++ b/lily/head-engraver.cc @@ -0,0 +1,79 @@ +/* + head-grav.cc -- part of GNU LilyPond + + (c) 1997--1998 Han-Wen Nienhuys +*/ + +#include "note-head.hh" +#include "head-engraver.hh" +#include "paper-def.hh" +#include "musical-request.hh" +#include "dots.hh" + +Note_head_engraver::Note_head_engraver() +{ + dot_p_=0; + note_p_ = 0; + note_req_l_ =0; +} + +bool +Note_head_engraver::do_try_request (Request *req_l) +{ + if (note_req_l_) + return false; + + if (!(req_l->access_Musical_req () && req_l->access_Musical_req ()->access_Note_req ())) + + return false; + + note_req_l_=req_l->access_Musical_req ()->access_Rhythmic_req (); + return true; +} + +void +Note_head_engraver::do_process_requests() +{ + if (!note_req_l_ || note_p_) + return; + + note_p_ = new Note_head; + note_p_->balltype_i_ = note_req_l_->duration_.durlog_i_; + note_p_->dots_i_ = note_req_l_->duration_.dots_i_; + if (note_p_->dots_i_) + { + dot_p_ = new Dots; + note_p_->dots_l_ = dot_p_; + announce_element (Score_element_info (dot_p_,0)); + } + + note_p_->position_i_ = note_req_l_->access_Note_req ()->pitch_.steps (); + + + Score_element_info itinf (note_p_,note_req_l_); + announce_element (itinf); +} + +void +Note_head_engraver::do_pre_move_processing() +{ + if (note_p_) + { + typeset_element (note_p_); + note_p_ = 0; + } + if (dot_p_) + { + typeset_element (dot_p_); + dot_p_ =0; + } +} +void +Note_head_engraver::do_post_move_processing() +{ + note_req_l_ = 0; +} + + +IMPLEMENT_IS_TYPE_B1(Note_head_engraver,Engraver); +ADD_THIS_TRANSLATOR(Note_head_engraver); diff --git a/lily/include/bar-align-engraver.hh b/lily/include/bar-align-engraver.hh new file mode 100644 index 0000000000..a0ff903543 --- /dev/null +++ b/lily/include/bar-align-engraver.hh @@ -0,0 +1,13 @@ +/* + bar-align-engraver.hh -- declare + + source file of the GNU LilyPond music typesetter + + (c) 1997--1998 Han-Wen Nienhuys +*/ + + +#ifndef BAR_ALIGN_GRAV_HH +#define BAR_ALIGN_GRAV_HH + +#endif // BAR_ALIGN_GRAV_HH diff --git a/lily/include/bar-column-engraver.hh b/lily/include/bar-column-engraver.hh new file mode 100644 index 0000000000..1c186b6385 --- /dev/null +++ b/lily/include/bar-column-engraver.hh @@ -0,0 +1,37 @@ +/* + bar-column-engraver.hh -- declare Bar_column_engraver + + source file of the GNU LilyPond music typesetter + + (c) 1997--1998 Han-Wen Nienhuys +*/ + + +#ifndef BAR_COLUMN_GRAV_HH +#define BAR_COLUMN_GRAV_HH + +#include "engraver.hh" +#include "parray.hh" + +/// couple bars and appropriate scripts +class Bar_column_engraver :public Engraver { + Bar_column *barcol_p_; + Link_array