lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Second set of volta changes (Issue 2673) (issue 6422061)


From: PhilEHolmes
Subject: Second set of volta changes (Issue 2673) (issue 6422061)
Date: Tue, 24 Jul 2012 14:05:20 +0000

Reviewers: Ian Hulin (gmail), dak, Graham Percival,

Message:
Please review

Description:
The second set of proposed changes to volta syntax, posted on behalf of
Arnold Theresius.  Checked with make and make test.

Please review this at http://codereview.appspot.com/6422061/

Affected files:
  M lily/volta-bracket.cc
  M lily/volta-engraver.cc
  M ly/engraver-init.ly
  M scm/define-context-properties.scm


Index: lily/volta-bracket.cc
diff --git a/lily/volta-bracket.cc b/lily/volta-bracket.cc
index 317b47ee8d54e9e91f1cd31135c96aa1d0ca9816..f34b060fd64763185d504eeca2cd69eba02c50b1 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<Real> edge_height = robust_scm2interval (me->get_property ("edge-height"),
Index: lily/volta-engraver.cc
diff --git a/lily/volta-engraver.cc b/lily/volta-engraver.cc
index f4dc48bf642c699ea01b8ae5ae3f35fafbf528bd..b76a2f40226ae9098f742d88edc3ef66fcbeee83 100644
--- a/lily/volta-engraver.cc
+++ b/lily/volta-engraver.cc
@@ -153,7 +153,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 ());
@@ -200,6 +236,7 @@ ADD_TRANSLATOR (Volta_engraver,
                 "VoltaBracketSpanner ",

                 /* read */
+                "voltaAllowEndLineOnGlyphs "
                 "repeatCommands "
                 "voltaSpannerDuration "
                 "stavesFound ",
Index: ly/engraver-init.ly
diff --git a/ly/engraver-init.ly b/ly/engraver-init.ly
index d8501c4683d0b6aceebac5361465213b417bb082..225b60b740c0bd63907897ee0e7dfaaf06881c19 100644
--- a/ly/engraver-init.ly
+++ b/ly/engraver-init.ly
@@ -617,6 +617,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: scm/define-context-properties.scm
diff --git a/scm/define-context-properties.scm b/scm/define-context-properties.scm index 16a1b21b1ead90d461c8671c8ee9716d47819b71..e4f97f4b2a0dd95e5effed0d66acd43580feddd8 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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]