From 101e420a124ab74772aa836479733bd5175b01e1 Mon Sep 17 00:00:00 2001 From: Arnold Theresius Date: Tue, 24 Jul 2012 14:49:50 +0100 Subject: [PATCH] Second set of volta changes (Issue 2673) --- lily/volta-bracket.cc | 19 --------------- lily/volta-engraver.cc | 39 ++++++++++++++++++++++++++++++- ly/engraver-init.ly | 4 ++++ scm/define-context-properties.scm | 2 ++ 4 files changed, 44 insertions(+), 20 deletions(-) diff --git a/lily/volta-bracket.cc b/lily/volta-bracket.cc index 317b47ee8d..f34b060fd6 100644 --- a/lily/volta-bracket.cc +++ b/lily/volta-bracket.cc @@ -128,25 +128,6 @@ Volta_bracket_interface::modify_edge_height (Spanner *me) bool no_vertical_start = orig_span && !broken_first_bracket; bool no_vertical_end = orig_span && !broken_last_bracket; - extract_grob_set (me, "bars", bars); - Grob *endbar = bars.size () ? bars.back () : 0; - SCM glyph = endbar ? endbar->get_property ("glyph-name") : SCM_EOL; - - string str; - if (scm_is_string (glyph)) - str = ly_scm2string (glyph); - else - str = "|"; - - no_vertical_end - |= (str != ":|" - && str != "|:" - && str != "|." - && str != ":|:" - && str != ":|.|:" - && str != ":|.:" - && str != ".|"); - if (no_vertical_end || no_vertical_start) { Drul_array edge_height = robust_scm2interval (me->get_property ("edge-height"), diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc index 882359621a..b43254fc60 100644 --- a/lily/volta-engraver.cc +++ b/lily/volta-engraver.cc @@ -152,7 +152,43 @@ Volta_engraver::acknowledge_bar_line (Grob_info i) if (volta_bracket_) Volta_bracket_interface::add_bar (volta_bracket_, i.item ()); if (end_volta_bracket_) - Volta_bracket_interface::add_bar (end_volta_bracket_, i.item ()); + { + Volta_bracket_interface::add_bar (end_volta_bracket_, i.item ()); + Grob *endbar = i.grob(); + SCM glyph = endbar ? endbar->get_property ("glyph-name") : SCM_EOL; + + string str; + bool no_vertical_end = false; + if (scm_is_string (glyph)) + str = ly_scm2string (glyph); + else + str = "|"; + + SCM vertical_end_allow_list = get_property ("voltaAllowEndLineOnGlyphs"); + if (ly_cheap_is_list (vertical_end_allow_list)) + { // checks based on user settable property + bool match_not_found = true; + while (scm_is_pair (vertical_end_allow_list) && match_not_found) + { + if (str == robust_scm2string (scm_car (vertical_end_allow_list), "* invalid *")) + match_not_found = false; + vertical_end_allow_list = scm_cdr (vertical_end_allow_list); + } + no_vertical_end |= match_not_found; + } + + if (no_vertical_end) + { + Drul_array edge_height = robust_scm2interval (end_volta_bracket_->get_property ("edge-height"), + Interval (1.0, 1.0)); + + if (no_vertical_end) + edge_height[RIGHT] = 0.0; + + end_volta_bracket_->set_property ("edge-height", ly_interval2scm (edge_height)); + + } + } if (volta_spanner_) Side_position_interface::add_support (volta_spanner_, i.grob ()); @@ -199,6 +235,7 @@ ADD_TRANSLATOR (Volta_engraver, "VoltaBracketSpanner ", /* read */ + "voltaAllowEndLineOnGlyphs " "repeatCommands " "voltaSpannerDuration " "stavesFound ", diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly index ab99abba7e..0468bd5871 100644 --- a/ly/engraver-init.ly +++ b/ly/engraver-init.ly @@ -618,6 +618,10 @@ automatically when an output definition (a @code{\score} or repeatCountVisibility = #all-repeat-counts-visible + voltaAllowEndLineOnGlyphs = #'( + ":|" "|:" "||:" "|." ":|:" ":|.|:" ":|.:" ".|" + "S|:" ":|S" ":|S." ".S|:" ":|S|:" ":|S.|:" ) + timeSignatureSettings = #default-time-signature-settings timeSignatureFraction = 4/4 diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index 16a1b21b1e..e4f97f4b2a 100644 --- a/scm/define-context-properties.scm +++ b/scm/define-context-properties.scm @@ -564,6 +564,8 @@ setting this property, you can make brackets last shorter. for repeated bass figures.") (vocalName ,markup? "Name of a vocal line.") + (voltaAllowEndLineOnGlyphs ,list? "A list of glyphs where the +volta end hook will be drawn.") (voltaSpannerDuration ,ly:moment? "This specifies the maximum duration to use for the brackets printed for @code{\\alternative}. This can be used to shrink the length of brackets in the situation -- 2.39.2