]> git.donarmstrong.com Git - lilypond.git/commitdiff
Second set of volta changes (Issue 2673)
authorArnold Theresius <Arnold.Wendl@siemens.com>
Tue, 24 Jul 2012 13:49:50 +0000 (14:49 +0100)
committerPhil Holmes <mail@philholmes.net>
Wed, 1 Aug 2012 09:58:48 +0000 (10:58 +0100)
lily/volta-bracket.cc
lily/volta-engraver.cc
ly/engraver-init.ly
scm/define-context-properties.scm

index 317b47ee8d54e9e91f1cd31135c96aa1d0ca9816..f34b060fd64763185d504eeca2cd69eba02c50b1 100644 (file)
@@ -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<Real> edge_height = robust_scm2interval (me->get_property ("edge-height"),
index 882359621ab63ea6ffa4276dc16648ca5e626a7b..b43254fc609ed967cd4abca3faeee716940b058c 100644 (file)
@@ -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<Real> 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 ",
index ab99abba7e3d67603920f9ee8bad3a93630c57ea..0468bd5871cfe1b74043e0a8478648924249c8df 100644 (file)
@@ -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
 
index 16a1b21b1ead90d461c8671c8ee9716d47819b71..e4f97f4b2a0dd95e5effed0d66acd43580feddd8 100644 (file)
@@ -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