From: Joe Neeman Date: Thu, 5 Jul 2007 11:44:37 +0000 (+1000) Subject: fix 366 (put Volta_engraver in score) X-Git-Tag: release/2.11.28-1~21^2~9 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=624419506b254fc1a3fad0c2eb8a01a1d9bc90bb;p=lilypond.git fix 366 (put Volta_engraver in score) --- diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index e9f845503c..1860cbcf51 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -10,6 +10,7 @@ #include "bar-line.hh" #include "context.hh" +#include "grob-array.hh" #include "international.hh" #include "note-column.hh" #include "item.hh" @@ -31,11 +32,8 @@ public: TRANSLATOR_DECLARATIONS (Volta_engraver); protected: - DECLARE_END_ACKNOWLEDGER (staff_symbol); - DECLARE_ACKNOWLEDGER (staff_symbol); DECLARE_ACKNOWLEDGER (bar_line); - virtual void finalize (); virtual void derived_mark () const; void stop_translation_timestep (); void process_music (); @@ -43,71 +41,27 @@ protected: Moment started_mom_; Spanner *volta_span_; Spanner *end_volta_span_; - SCM staff_; SCM start_string_; - - bool staff_eligible (); }; void Volta_engraver::derived_mark () const { - scm_gc_mark (staff_); scm_gc_mark (start_string_); } Volta_engraver::Volta_engraver () { - staff_ = SCM_EOL; start_string_ = SCM_EOL; volta_span_ = 0; end_volta_span_ = 0; } -/* - TODO: this logic should be rewritten, it is buggy. - - One of the problems is that we can't determine wether or not to - print the volta bracket during the first step, since that requires - acknowledging the staff. -*/ -bool -Volta_engraver::staff_eligible () -{ - SCM doit = get_property ("voltaOnThisStaff"); - if (scm_is_bool (doit)) - return to_boolean (doit); - - if (!unsmob_grob (staff_)) - return false; - - /* - TODO: this does weird things when you open a piece with a - volta spanner. - */ - SCM staffs = get_property ("stavesFound"); - - /* Only put a volta on the top staff. - Maybe this is a bit convoluted, and we should have a single - volta engraver in score context or somesuch. */ - if (!scm_is_pair (staffs)) - { - programming_error ("volta engraver can't find staves"); - return false; - } - else if (scm_car (scm_last_pair (staffs)) != staff_) - return false; - return true; -} - void Volta_engraver::process_music () { SCM cs = get_property ("repeatCommands"); - if (!staff_eligible ()) - return; - bool end = false; start_string_ = SCM_EOL; while (scm_is_pair (cs)) @@ -183,48 +137,9 @@ 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) -{ - /* - We only want to know about a single staff: then we add to the - support. */ - if (staff_ != SCM_EOL) - staff_ = SCM_UNDEFINED; - - if (staff_ != SCM_UNDEFINED) - staff_ = i.grob ()->self_scm (); -} - - -void -Volta_engraver::finalize () -{ -} - void Volta_engraver::stop_translation_timestep () { - if (volta_span_ && !staff_eligible ()) - { - /* - THIS IS A KLUDGE. - - we need to do this here, because STAFF_ is not initialized yet - in the 1st call of process_music () - */ - - volta_span_->suicide (); - volta_span_ = 0; - } - if (end_volta_span_ && !end_volta_span_->get_bound (RIGHT)) { Grob *cc = unsmob_grob (get_property ("currentCommandColumn")); @@ -232,6 +147,10 @@ Volta_engraver::stop_translation_timestep () end_volta_span_->set_bound (RIGHT, ci); } + if (end_volta_span_) + for (SCM s = get_property ("stavesFound"); scm_is_pair (s); s = scm_cdr (s)) + Side_position_interface::add_support (end_volta_span_, unsmob_grob (scm_car (s))); + end_volta_span_ = 0; if (volta_span_ && !volta_span_->get_bound (LEFT)) @@ -245,8 +164,6 @@ 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, bar_line); ADD_TRANSLATOR (Volta_engraver, /* doc */ "Make volta brackets.", diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index b564ad1445..e99697a4d4 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -34,7 +34,6 @@ %% with empty ones. \consists "Font_size_engraver" - \consists "Volta_engraver" \consists "Separating_line_group_engraver" \consists "Dot_column_engraver" \consists "Staff_collecting_engraver" @@ -152,7 +151,6 @@ contained staves are not connected vertically." \consists "Output_property_engraver" \consists "Font_size_engraver" - \consists "Volta_engraver" \consists "Separating_line_group_engraver" \consists "Dot_column_engraver" \consists "Bar_engraver" @@ -404,8 +402,6 @@ printing of a single line of lyrics." \type "Engraver_group" \name ChordNames \description "Typesets chord names." - - \consists "Volta_engraver" \consists "Rest_swallow_translator" \consists "Output_property_engraver" @@ -414,7 +410,6 @@ printing of a single line of lyrics." \consists "Skip_event_swallow_translator" \consists "Hara_kiri_engraver" % \consists "Note_spacing_engraver" - voltaOnThisStaff = ##f \override VerticalAxisGroup #'minimum-Y-extent = #'(0 . 2) \override VerticalAxisGroup #'remove-first = ##t \override VerticalAxisGroup #'remove-empty = ##t @@ -464,7 +459,8 @@ automatically when an output definition (a @code{\score} or \consists "Default_bar_line_engraver" \consists "Output_property_engraver" \consists "System_start_delimiter_engraver" - \consists "Mark_engraver" + \consists "Mark_engraver" + \consists "Volta_engraver" \consists "Metronome_mark_engraver" \consists "Break_align_engraver" \consists "Spacing_engraver" diff --git a/scm/define-grobs.scm b/scm/define-grobs.scm index 7371cbbf10..bbae0e8955 100644 --- a/scm/define-grobs.scm +++ b/scm/define-grobs.scm @@ -2108,7 +2108,6 @@ (side-axis . ,Y) (thickness . 1.6) ;; line-thickness (edge-height . (2.0 . 2.0)) ;; staff-space; - (minimum-space . 5) (font-size . -4) (outside-staff-priority . 100) (meta . ((class . Spanner)