From 77e9dc3ac7b924c50234c640fad7ab317e194123 Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 20:13:09 +0000 Subject: [PATCH] lilypond-1.0.1 --- init/engraver.ly | 88 +++++++++++++++++++---------- lily/dot-column-engraver.cc | 54 ++++++++++++++++++ lily/heads-engraver.cc | 86 ++++++++++++++++++++++++++++ lily/include/dot-column-engraver.hh | 28 +++++++++ lily/include/heads-engraver.hh | 32 +++++++++++ lily/include/rhythmic-head.hh | 8 +-- 6 files changed, 261 insertions(+), 35 deletions(-) create mode 100644 lily/dot-column-engraver.cc create mode 100644 lily/heads-engraver.cc create mode 100644 lily/include/dot-column-engraver.hh create mode 100644 lily/include/heads-engraver.hh diff --git a/init/engraver.ly b/init/engraver.ly index 8e6c1a1a00..d2f6c24d2d 100644 --- a/init/engraver.ly +++ b/init/engraver.ly @@ -3,14 +3,22 @@ % Staff = \translator { - \type "Engraver_group_engraver"; + \type "Line_group_engraver_group"; +%{ + The Hara_kiri_line_group_engraver is a Line_group_engraver + that will not typeset an empty line of staff, i.e., a line + of staff with only rests in it. This is needed for orchestral + scores. Comment-out Line_group_engraver_group, and uncomment + Hara_kiri_line_group_engraver. +%} +% \type "Hara_kiri_line_group_engraver"; defaultclef = violin; \consists "Bar_engraver"; \consists "Clef_engraver"; \consists "Key_engraver"; - \consists "Meter_engraver"; \consists "Local_key_engraver"; + \consists "Time_signature_engraver"; \consists "Staff_sym_engraver"; \consists "Collision_engraver"; \consists "Rest_collision_engraver"; @@ -29,24 +37,39 @@ Staff = \translator { %{ \consists "Bar_column_engraver"; \consists "Bar_number_engraver"; +%} +%{ + The Staff_margin_engraver puts the name of the instrument + (\property Staff.instrument; Staff.instr for subsequent lines) + to the left of a staff. +%} +%{ + \consists "Staff_margin_engraver"; %} \consists "Separating_line_group_engraver"; - \consists "Line_group_engraver"; -% \consists "Hara_kiri_line_group_engraver"; \accepts "Voice"; } +ChoireStaff = \translator { + \type "Line_group_engraver_group"; + \consists "Vertical_align_engraver"; + \consists "Staff_group_bar_engraver"; + \accepts "Staff"; + \accepts "RhythmicStaff"; + \accepts "GrandStaff"; + \accepts "Lyrics"; +} + -Rhythmic_staff = \translator +RhythmicStaff = \translator { - \type "Engraver_group_engraver"; + \type "Line_group_engraver_group"; nolines = "1"; \consists "Pitch_squash_engraver"; \consists "Bar_engraver"; - \consists "Meter_engraver"; + \consists "Time_signature_engraver"; \consists "Staff_sym_engraver"; - \consists "Line_group_engraver"; \accepts "Voice"; } @@ -54,6 +77,7 @@ Voice = \translator { \type "Engraver_group_engraver"; \consists "Dynamic_engraver"; \consists "Rest_engraver"; + \consists "Dot_column_engraver"; \consists "Stem_engraver"; \consists "Plet_engraver"; \consists "Beam_engraver"; @@ -61,58 +85,58 @@ Voice = \translator { \consists "Multi_measure_rest_engraver"; \consists "Script_engraver"; \consists "Rhythmic_column_engraver"; + \consists "Font_size_engraver"; \consists "Slur_engraver"; - \accepts "Thread"; + \consists "Ties_engraver"; + \consists "Note_heads_engraver" ; + \consists "Skip_req_swallow_translator"; + %\accepts "Thread"; } Thread = \translator { \type "Engraver_group_engraver"; - \consists "Skip_req_swallow_translator"; - \consists "Note_head_engraver" ; - \consists "Tie_engraver"; +% \consists "Note_head_engraver" ; +% \consists "Tie_engraver"; } -Grand_staff = \translator { - \type "Engraver_group_engraver"; +GrandStaff = \translator { + \type "Line_group_engraver_group"; \consists "Span_bar_engraver"; \consists "Vertical_align_engraver"; \consists "Piano_bar_engraver"; % This should come last - \consists "Line_group_engraver"; \accepts "Staff"; } -Staff_group = \translator { - \type "Engraver_group_engraver"; +StaffGroup = \translator { + \type "Line_group_engraver_group"; +% \type "Hara_kiri_line_group_engraver"; \consists "Span_bar_engraver"; \consists "Vertical_align_engraver"; \consists "Staff_group_bar_engraver"; - \consists "Line_group_engraver"; -% \consists "Hara_kiri_line_group_engraver"; + \accepts "Staff"; - \accepts "Rhythmic_staff"; - \accepts "Grand_staff"; + \accepts "RhythmicStaff"; + \accepts "GrandStaff"; \accepts "Lyrics"; } -Lyric_voice = +LyricVoice = \translator{ - \type "Engraver_group_engraver"; + \type "Line_group_engraver_group"; \consists "Separating_line_group_engraver"; \consists "Lyric_engraver"; - \consists "Line_group_engraver"; \consists "Beam_req_swallow_translator"; \consists "Plet_swallow_engraver"; } Lyrics = \translator { - \type "Engraver_group_engraver"; + \type "Line_group_engraver_group"; \consists "Vertical_align_engraver"; - \consists "Line_group_engraver"; - \accepts "Lyric_voice"; + \accepts "LyricVoice"; } Score = \translator { @@ -124,20 +148,22 @@ Score = \translator { \consists "Bar_column_engraver"; \consists "Bar_number_engraver"; %} + \consists "Bar_column_engraver"; \consists "Span_score_bar_engraver"; \consists "Score_priority_engraver"; \consists "Priority_horizontal_align_engraver"; \consists "Vertical_align_engraver"; - \accepts "Staff_group"; + \accepts "StaffGroup"; \accepts "Staff"; - \accepts "Rhythmic_staff"; + \accepts "RhythmicStaff"; \accepts "Lyrics"; - \accepts "Grand_staff"; + \accepts "GrandStaff"; + \accepts "ChoireStaff"; } -Stupid_score = \translator { +StupidScore = \translator { \type Score_engraver; \consists "Staff_sym_engraver"; } diff --git a/lily/dot-column-engraver.cc b/lily/dot-column-engraver.cc new file mode 100644 index 0000000000..04ae0bfba4 --- /dev/null +++ b/lily/dot-column-engraver.cc @@ -0,0 +1,54 @@ +/* + dot-column-engraver.cc -- implement Dot_column_engraver + + source file of the GNU LilyPond music typesetter + + (c) 1998 Han-Wen Nienhuys + + */ + +#include "dot-column-engraver.hh" +#include "rhythmic-head.hh" +#include "dot-column.hh" + +Dot_column_engraver::Dot_column_engraver () +{ + dotcol_p_ =0; +} + +void +Dot_column_engraver::do_pre_move_processing () +{ + if (dotcol_p_) + { + typeset_element (dotcol_p_); + dotcol_p_ =0; + } + head_l_arr_.clear (); +} + +void +Dot_column_engraver::acknowledge_element (Score_element_info info) +{ + Item * i=info.elem_l_->access_Item (); + + if (! (i && i->is_type_b (Rhythmic_head::static_name ()))) + return; + + Rhythmic_head * h = (Rhythmic_head*)i; + + if (!h->dots_l_) + return; + + if (!dotcol_p_) + { + dotcol_p_ = new Dot_column; + announce_element (Score_element_info (dotcol_p_, 0)); + } + + dotcol_p_->add_head (h); +} + + +ADD_THIS_TRANSLATOR(Dot_column_engraver); +IMPLEMENT_IS_TYPE_B1(Dot_column_engraver,Engraver); diff --git a/lily/heads-engraver.cc b/lily/heads-engraver.cc new file mode 100644 index 0000000000..63e192ea06 --- /dev/null +++ b/lily/heads-engraver.cc @@ -0,0 +1,86 @@ +/* + head-grav.cc -- part of GNU LilyPond + + (c) 1997--1998 Han-Wen Nienhuys +*/ + +#include "note-head.hh" +#include "heads-engraver.hh" +#include "paper-def.hh" +#include "musical-request.hh" +#include "dots.hh" +#include "dot-column.hh" + +Note_heads_engraver::Note_heads_engraver() +{ +} + +bool +Note_heads_engraver::do_try_request (Request *req_l) +{ + if (!req_l->access_Musical_req ()) + return false; + + Note_req * n =req_l->access_Musical_req ()->access_Note_req (); + if (!n) + return false; + + note_req_l_arr_.push (n); + return true; +} + +void +Note_heads_engraver::do_process_requests() +{ + if (note_p_arr_.size ()) + return ; + + for (int i=0; i < note_req_l_arr_.size (); i++) + { + Note_head *note_p = new Note_head; + Note_req * note_req_l = note_req_l_arr_[i]; + 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_) + { + Dots * d = new Dots; + note_p->dots_l_ = d; + announce_element (Score_element_info (d,0)); + dot_p_arr_.push (d); + } + + note_p->position_i_ = note_req_l->access_Note_req ()->pitch_.steps (); + + + Score_element_info itinf (note_p,note_req_l); + announce_element (itinf); + note_p_arr_.push (note_p); + } +} + +void +Note_heads_engraver::do_pre_move_processing() +{ + for (int i=0; i < note_p_arr_.size (); i++) + { + typeset_element (note_p_arr_[i]); + } + note_p_arr_.clear (); + for (int i=0; i < dot_p_arr_.size (); i++) + { + typeset_element (dot_p_arr_[i]); + } + dot_p_arr_.clear (); + + note_req_l_arr_.clear (); +} + +void +Note_heads_engraver::do_post_move_processing() +{ + +} + + +IMPLEMENT_IS_TYPE_B1(Note_heads_engraver,Engraver); +ADD_THIS_TRANSLATOR(Note_heads_engraver); diff --git a/lily/include/dot-column-engraver.hh b/lily/include/dot-column-engraver.hh new file mode 100644 index 0000000000..0454e41fec --- /dev/null +++ b/lily/include/dot-column-engraver.hh @@ -0,0 +1,28 @@ +/* + dot-column-engraver.hh -- declare Dot_column_engraver + + source file of the GNU LilyPond music typesetter + + (c) 1997--1998 Han-Wen Nienhuys +*/ + + +#ifndef DOT_COLUMN_GRAV_HH +#define DOT_COLUMN_GRAV_HH + +#include "engraver.hh" + +class Dot_column_engraver : public Engraver +{ + Dot_column *dotcol_p_ ; + Link_array head_l_arr_; +public: + TRANSLATOR_CLONE(Dot_column_engraver); + Dot_column_engraver(); + DECLARE_MY_RUNTIME_TYPEINFO; +protected: + virtual void acknowledge_element (Score_element_info); + virtual void do_pre_move_processing (); +}; + +#endif // DOT_COLUMN_GRAV_HH diff --git a/lily/include/heads-engraver.hh b/lily/include/heads-engraver.hh new file mode 100644 index 0000000000..c00d46f330 --- /dev/null +++ b/lily/include/heads-engraver.hh @@ -0,0 +1,32 @@ +/* + head-engraver.hh -- part of GNU LilyPond + + (c) 1997--1998 Han-Wen Nienhuys +*/ + + +#ifndef HEADSGRAV_HH +#define HEADSGRAV_HH +#include "engraver.hh" + +/** + make balls and rests + */ +class Note_heads_engraver : public Engraver { + Link_array note_p_arr_; + Link_array dot_p_arr_; + Link_array note_req_l_arr_; + +public: + TRANSLATOR_CLONE(Note_heads_engraver); + Note_heads_engraver(); + DECLARE_MY_RUNTIME_TYPEINFO; +protected: + virtual bool do_try_request (Request *req_l) ; + virtual void do_process_requests(); + virtual void do_pre_move_processing(); + virtual void do_post_move_processing(); +}; + + +#endif // HEADSGRAV_HH diff --git a/lily/include/rhythmic-head.hh b/lily/include/rhythmic-head.hh index 84a1728b0a..4c11b50fd0 100644 --- a/lily/include/rhythmic-head.hh +++ b/lily/include/rhythmic-head.hh @@ -1,9 +1,9 @@ /* - rhythmic-head.hh -- declare + rhythmic-head.hh -- declare Rhythmic_head source file of the GNU LilyPond music typesetter - (c) 1997--1998 Han-Wen Nienhuys + (c) 1997--1998 Han-Wen Nienhuys */ @@ -21,12 +21,12 @@ public: int dots_i_; Dots * dots_l_; - void add (Dots *); + void add_dots (Dots *); Rhythmic_head (); protected: virtual void do_add_processing (); virtual void do_print () const; - virtual void do_substitute_dependent (Score_elem*,Score_elem*); + virtual void do_substitute_dependent (Score_element*,Score_element*); }; #endif // RHYTHMIC_HEAD_HH -- 2.39.5