From: Han-Wen Nienhuys Date: Mon, 19 Jun 2006 10:37:09 +0000 (+0000) Subject: * lily/tab-staff-symbol-engraver.cc: derive from Engraver, not X-Git-Tag: release/2.10.0-2~503 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=a7c271ac71ac5213ccf492909f00e055bf59f836;p=lilypond.git * lily/tab-staff-symbol-engraver.cc: derive from Engraver, not Staff_symbol_engraver * ly/engraver-init.ly (AncientRemoveEmptyStaffContext): don't replace staff_engraver * lily/staff-symbol-engraver.cc (stop_spanner): announce end of spanner. * lily/staff-collecting-engraver.cc (acknowledge_end_staff_symbol): new function * lily/volta-engraver.cc (acknowledge_end_staff_symbol): new function. * lily/staff-collecting-engraver.cc (acknowledge_end_staff_symbol): new function. * lily/main.cc: switch on relocation by default. --- diff --git a/ChangeLog b/ChangeLog index 6322fde1b7..2c5fd123b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,24 @@ +2006-06-19 Han-Wen Nienhuys + + * lily/tab-staff-symbol-engraver.cc: derive from Engraver, not + Staff_symbol_engraver + + * ly/engraver-init.ly (AncientRemoveEmptyStaffContext): don't + replace staff_engraver + + * lily/staff-symbol-engraver.cc (stop_spanner): announce end of + spanner. + + * lily/staff-collecting-engraver.cc + (acknowledge_end_staff_symbol): new function + + * lily/volta-engraver.cc (acknowledge_end_staff_symbol): new function. + + * lily/staff-collecting-engraver.cc + (acknowledge_end_staff_symbol): new function. + + * lily/main.cc: switch on relocation by default. + 2006-06-18 Han-Wen Nienhuys * lily/spacing-spanner.cc (musical_column_spacing): set diff --git a/lily/include/staff-symbol-engraver.hh b/lily/include/staff-symbol-engraver.hh index 08bdc23bd5..e69de29bb2 100644 --- a/lily/include/staff-symbol-engraver.hh +++ b/lily/include/staff-symbol-engraver.hh @@ -1,40 +0,0 @@ -/* - staff-symbol-engraver.hh -- declare Staff_symbol_engraver - - source file of the GNU LilyPond music typesetter - - (c) 2005--2006 Han-Wen Nienhuys -*/ - -#ifndef STAFF_SYMBOL_ENGRAVER_HH -#define STAFF_SYMBOL_ENGRAVER_HH - -#include "engraver.hh" -#include "drul-array.hh" - -class Staff_symbol_engraver : public Engraver -{ -public: - TRANSLATOR_DECLARATIONS (Staff_symbol_engraver); - -private: - -protected: - Drul_array span_events_; - Spanner *span_; - Spanner *finished_span_; - bool first_start_; - -protected: - virtual void start_spanner (); - virtual void stop_spanner (); - - void stop_translation_timestep (); - virtual bool try_music (Music *); - virtual ~Staff_symbol_engraver (); - DECLARE_ACKNOWLEDGER (grob); - virtual void finalize (); - void process_music (); -}; - -#endif /* STAFF_SYMBOL_ENGRAVER_HH */ diff --git a/lily/main.cc b/lily/main.cc index f640801b84..5f9b2a77f6 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -89,7 +89,7 @@ bool make_print = true; bool relocate_binary = -#if ARGV0_RELOCATION +#if 1 true; #else false diff --git a/lily/staff-collecting-engraver.cc b/lily/staff-collecting-engraver.cc index fe522a0497..95e9b1c305 100644 --- a/lily/staff-collecting-engraver.cc +++ b/lily/staff-collecting-engraver.cc @@ -16,6 +16,7 @@ class Staff_collecting_engraver : public Engraver public: TRANSLATOR_DECLARATIONS (Staff_collecting_engraver); DECLARE_ACKNOWLEDGER (staff_symbol); + DECLARE_END_ACKNOWLEDGER (staff_symbol); }; Staff_collecting_engraver::Staff_collecting_engraver () @@ -31,8 +32,18 @@ Staff_collecting_engraver::acknowledge_staff_symbol (Grob_info gi) context ()->set_property ("stavesFound", staffs); } +void +Staff_collecting_engraver::acknowledge_end_staff_symbol (Grob_info gi) +{ + SCM staffs = get_property ("stavesFound"); + staffs = scm_delq (gi.grob ()->self_scm (), staffs); + + context ()->set_property ("stavesFound", staffs); +} + #include "translator.icc" ADD_ACKNOWLEDGER (Staff_collecting_engraver, staff_symbol); +ADD_END_ACKNOWLEDGER (Staff_collecting_engraver, staff_symbol); ADD_TRANSLATOR (Staff_collecting_engraver, /* doc */ "Maintain the stavesFound variable", diff --git a/lily/staff-symbol-engraver.cc b/lily/staff-symbol-engraver.cc index 849b063861..c147d54dff 100644 --- a/lily/staff-symbol-engraver.cc +++ b/lily/staff-symbol-engraver.cc @@ -6,8 +6,31 @@ (c) 1997--2006 Han-Wen Nienhuys */ -#include "staff-symbol-engraver.hh" #include "spanner.hh" +#include "engraver.hh" + +class Staff_symbol_engraver : public Engraver +{ +public: + TRANSLATOR_DECLARATIONS (Staff_symbol_engraver); + +protected: + Drul_array span_events_; + Spanner *span_; + Spanner *finished_span_; + bool first_start_; + +protected: + virtual void start_spanner (); + virtual void stop_spanner (); + + void stop_translation_timestep (); + virtual bool try_music (Music *); + virtual ~Staff_symbol_engraver (); + DECLARE_ACKNOWLEDGER (grob); + virtual void finalize (); + void process_music (); +}; Staff_symbol_engraver::~Staff_symbol_engraver () { @@ -66,8 +89,17 @@ Staff_symbol_engraver::start_spanner () void Staff_symbol_engraver::stop_spanner () { - if (finished_span_ && !finished_span_->get_bound (RIGHT)) + if (!finished_span_) + return; + + if (!finished_span_->get_bound (RIGHT)) finished_span_->set_bound (RIGHT, unsmob_grob (get_property ("currentCommandColumn"))); + + announce_end_grob (finished_span_, + span_events_[STOP] + ? span_events_[STOP]->self_scm () + : SCM_EOL); + finished_span_ = 0; } diff --git a/lily/tab-staff-symbol-engraver.cc b/lily/tab-staff-symbol-engraver.cc index 3483cb86f7..538223bfe8 100644 --- a/lily/tab-staff-symbol-engraver.cc +++ b/lily/tab-staff-symbol-engraver.cc @@ -6,28 +6,23 @@ (c) 2005--2006 Han-Wen Nienhuys */ -#include "staff-symbol-engraver.hh" +#include "engraver.hh" #include "spanner.hh" -class Tab_staff_symbol_engraver : public Staff_symbol_engraver +class Tab_staff_symbol_engraver : public Engraver { public: TRANSLATOR_DECLARATIONS (Tab_staff_symbol_engraver); protected: - virtual void start_spanner (); + DECLARE_ACKNOWLEDGER(staff_symbol); }; void -Tab_staff_symbol_engraver::start_spanner () +Tab_staff_symbol_engraver::acknowledge_staff_symbol (Grob_info gi) { - bool init = !span_; - Staff_symbol_engraver::start_spanner (); - if (init) - { - int k = scm_ilength (get_property ("stringTunings")); - if (k >= 0) - span_->set_property ("line-count", scm_from_int (k)); - } + int k = scm_ilength (get_property ("stringTunings")); + if (k >= 0) + gi.grob ()->set_property ("line-count", scm_from_int (k)); } Tab_staff_symbol_engraver::Tab_staff_symbol_engraver () @@ -36,10 +31,12 @@ Tab_staff_symbol_engraver::Tab_staff_symbol_engraver () #include "translator.icc" -ADD_ACKNOWLEDGER (Tab_staff_symbol_engraver, grob); +ADD_ACKNOWLEDGER (Tab_staff_symbol_engraver, staff_symbol); ADD_TRANSLATOR (Tab_staff_symbol_engraver, - /* doc */ "Create a staff-symbol, but look at stringTunings for the number of lines." - "staff lines.", + /* doc */ + "Create a staff-symbol, but look at " + "stringTunings for the number of lines. " + , /* create */ "StaffSymbol", /* accept */ "staff-span-event", /* read */ "stringTunings", diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index fefc68e7f3..9439d6f6d7 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -30,6 +30,7 @@ public: TRANSLATOR_DECLARATIONS (Volta_engraver); protected: + DECLARE_END_ACKNOWLEDGER (staff_symbol); DECLARE_ACKNOWLEDGER (staff_symbol); DECLARE_ACKNOWLEDGER (note_column); DECLARE_ACKNOWLEDGER (bar_line); @@ -189,6 +190,13 @@ Volta_engraver::acknowledge_bar_line (Grob_info i) Volta_bracket_interface::add_bar (end_volta_span_, i.item ()); } +void +Volta_engraver::acknowledge_end_staff_symbol (Grob_info i) +{ + if (i.grob ()->self_scm () == staff_) + staff_ = SCM_EOL; +} + void Volta_engraver::acknowledge_staff_symbol (Grob_info i) { @@ -202,6 +210,7 @@ Volta_engraver::acknowledge_staff_symbol (Grob_info i) staff_ = i.grob ()->self_scm (); } + void Volta_engraver::finalize () { @@ -244,6 +253,7 @@ Volta_engraver::stop_translation_timestep () TODO: should attach volta to paper-column if no bar is found. */ ADD_ACKNOWLEDGER (Volta_engraver, staff_symbol); +ADD_END_ACKNOWLEDGER (Volta_engraver, staff_symbol); ADD_ACKNOWLEDGER (Volta_engraver, note_column); ADD_ACKNOWLEDGER (Volta_engraver, bar_line); ADD_TRANSLATOR (Volta_engraver, diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index eccde2b154..70466e82cf 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -649,7 +649,6 @@ AncientRemoveEmptyStaffContext = \context { \alias "Staff" \name "TabStaff" \denies "Voice" - \remove "Staff_symbol_engraver" \consists "Tab_staff_symbol_engraver" \description "Context for generating tablature. [DOCME]"