]> git.donarmstrong.com Git - lilypond.git/commitdiff
Issue 4954/1: Change spanner-id to be a key instead of a string
authorNathan Chou <starrynte@gmail.com>
Tue, 26 Jul 2016 00:45:29 +0000 (17:45 -0700)
committerDavid Kastrup <dak@gnu.org>
Sat, 13 Aug 2016 17:07:35 +0000 (19:07 +0200)
Also changes argument \= to be a key.

Backport-by: David Kastrup <dak@gnu.org>
Documentation/notation/expressive.itely
lily/include/slur-engraver.hh
lily/slur-engraver.cc
ly/grace-init.ly
ly/spanners-init.ly
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/define-music-properties.scm
scm/define-music-types.scm

index d3f023524654720ef919e6c5f010542e49c30d7d..3c249389c28c65c8040d2382f83e84606ad286f2 100644 (file)
@@ -685,7 +685,8 @@ occurences of outer slurs actually indicate phrasing, and phrasing
 slurs may overlap a regular slur, see @ref{Phrasing slurs}.  When
 multiple regular slurs are needed in a single @code{Voice},
 matching slur starts and ends need to be labelled by preceding
-them with @code{\=} followed by an identifying number or string.
+them with @code{\=} followed by an identifying key (a symbol or
+non-negative integer).
 
 @lilypond[verbatim,quote]
 \fixed c' {
index 572e7ea02343d2cb2b53538288882ca35e640586..1885625ed91f6d5baca19f3e8f08781f8d35fbf0 100644 (file)
@@ -60,8 +60,8 @@ protected:
   void stop_translation_timestep ();
   void process_music ();
 
-  bool can_create_slur (const string&, vsize, vsize *, Stream_event *);
-  void create_slur (const string &spanner_id, Event_info evi, Grob *g_cause, Direction dir, bool left_broken);
+  bool can_create_slur (SCM, vsize, vsize *, Stream_event *);
+  void create_slur (SCM spanner_id, Event_info evi, Grob *g_cause, Direction dir, bool left_broken);
   bool try_to_end (Event_info evi);
 
   virtual void set_melisma (bool);
index 1a06ca6422cd65a045e61ec9e692cbacde4b15d5..80ceb5f431fdf700dddc2000b95044ac9ff3f023 100644 (file)
@@ -189,14 +189,14 @@ Slur_engraver::finalize ()
 }
 
 void
-Slur_engraver::create_slur (const string &spanner_id, Event_info evi, Grob *g_cause, Direction dir, bool left_broken)
+Slur_engraver::create_slur (SCM spanner_id, Event_info evi, Grob *g_cause, Direction dir, bool left_broken)
 {
   Grob *ccc = left_broken
     ? unsmob<Grob> (get_property ("currentCommandColumn"))
     : 0; // efficiency
   SCM cause = evi.slur_ ? evi.slur_->self_scm () : g_cause->self_scm ();
   Spanner *slur = make_spanner (grob_symbol (), cause);
-  slur->set_property ("spanner-id", ly_string2scm (spanner_id));
+  slur->set_property ("spanner-id", spanner_id);
   if (dir)
     set_grob_direction (slur, dir);
   if (left_broken)
@@ -209,7 +209,7 @@ Slur_engraver::create_slur (const string &spanner_id, Event_info evi, Grob *g_ca
   {
     set_grob_direction (slur, DOWN);
     slur = make_spanner (grob_symbol (), cause);
-    slur->set_property ("spanner-id", ly_string2scm (spanner_id));
+    slur->set_property ("spanner-id", spanner_id);
     set_grob_direction (slur, UP);
     if (left_broken)
       slur->set_bound (LEFT, ccc);
@@ -221,7 +221,7 @@ Slur_engraver::create_slur (const string &spanner_id, Event_info evi, Grob *g_ca
 }
 
 bool
-Slur_engraver::can_create_slur (const string &id, vsize old_slurs, vsize *event_idx, Stream_event *ev)
+Slur_engraver::can_create_slur (SCM id, vsize old_slurs, vsize *event_idx, Stream_event *ev)
 {
   for (vsize j = slurs_.size (); j--;)
     {
@@ -229,7 +229,7 @@ Slur_engraver::can_create_slur (const string &id, vsize old_slurs, vsize *event_
       Direction updown = to_dir (ev->get_property ("direction"));
 
       // Check if we already have a slur with the same spanner-id.
-      if (id == robust_scm2string (slur->get_property ("spanner-id"), ""))
+      if (ly_is_equal (id, slur->get_property ("spanner-id")))
         {
           if (j < old_slurs)
             {
@@ -280,13 +280,13 @@ Slur_engraver::can_create_slur (const string &id, vsize old_slurs, vsize *event_
 bool
 Slur_engraver::try_to_end (Event_info evi)
 {
-  string id = robust_scm2string (evi.slur_->get_property ("spanner-id"), "");
+  SCM id = evi.slur_->get_property ("spanner-id");
 
   // Find the slurs that are ended with this event (by checking the spanner-id)
   bool ended = false;
   for (vsize j = slurs_.size (); j--;)
     {
-      if (id == robust_scm2string (slurs_[j]->get_property ("spanner-id"), ""))
+      if (ly_is_equal (id, slurs_[j]->get_property ("spanner-id")))
         {
           ended = true;
           end_slurs_.push_back (slurs_[j]);
@@ -305,16 +305,14 @@ Slur_engraver::process_music ()
 {
   for (vsize i = 0; i < stop_events_.size (); i++)
     {
-      string id = robust_scm2string
-        (stop_events_[i].slur_->get_property ("spanner-id"), "");
+      SCM id = stop_events_[i].slur_->get_property ("spanner-id");
       bool ended = try_to_end (stop_events_[i]);
       if (ended)
         {
           // Ignore redundant stop events for this id
           for (vsize j = stop_events_.size (); --j > i;)
             {
-              if (id == robust_scm2string
-                  (stop_events_[j].slur_->get_property ("spanner-id"), ""))
+              if (ly_is_equal (id, stop_events_[j].slur_->get_property ("spanner-id")))
                 stop_events_.erase (stop_events_.begin () + j);
             }
         }
@@ -326,7 +324,7 @@ Slur_engraver::process_music ()
   for (vsize i = start_events_.size (); i--;)
     {
       Stream_event *ev = start_events_[i].slur_;
-      string id = robust_scm2string (ev->get_property ("spanner-id"), "");
+      SCM id = ev->get_property ("spanner-id");
       Direction updown = to_dir (ev->get_property ("direction"));
 
       if (can_create_slur (id, old_slurs, &i, ev))
index 6fe32f49fbaf513055c94b2fa103d6cf368a23e5..a46111e4d91a2a62d36c6595b7a9e88da3047738 100644 (file)
@@ -1,7 +1,7 @@
 \version "2.17.6"
 
-startGraceSlur = #(make-music 'SlurEvent 'span-direction START 'spanner-id "grace")
-stopGraceSlur = #(make-music 'SlurEvent 'span-direction STOP 'spanner-id "grace")
+startGraceSlur = #(make-music 'SlurEvent 'span-direction START 'spanner-id 'grace)
+stopGraceSlur = #(make-music 'SlurEvent 'span-direction STOP 'spanner-id 'grace)
 
 
 startGraceMusic =  {
index 756a55579e377935ab3b7242db358a54eb499576..8d8a69444f8815af37d8080a75fdcf6a9a34688c 100644 (file)
@@ -1,18 +1,15 @@
 \version "2.19.29"
 
 "\\=" =
-#(define-event-function (id event) (number-or-string? ly:event?)
+#(define-event-function (id event) (key? ly:event?)
   (_i "This sets the @code{spanner-id} property of the following
-@var{event} to the given @var{id} (numbers will be converted to a
-string).  This can be used to tell LilyPond how to connect overlapping
+@var{event} to the given @var{id} (non-negative integer or symbol).
+This can be used to tell LilyPond how to connect overlapping
 or parallel slurs or phrasing slurs within a single @code{Voice}.
 @lilypond[quote,verbatim]
 \\fixed c' { c\\=1( d\\=2( e\\=1) f\\=2) }
 @end lilypond\n")
-  (set! (ly:music-property event 'spanner-id)
-       (if (number? id)
-           (number->string id)
-           id))
+  (set! (ly:music-property event 'spanner-id) id)
   event)
 
 startGroup = #(make-span-event 'NoteGroupingEvent START)
index cb9103a6fcda899fe88d459af846f724e5e01e92..7ca44b6f3d3fd8bdb494b6a0f23dff71b95eb65f 100644 (file)
@@ -992,7 +992,7 @@ override:
 \\override MultiMeasureRest
   #'spacing-pair = #'(staff-bar . staff-bar)
 @end example")
-     (spanner-id ,string? "An identifier to distinguish concurrent spanners.")
+     (spanner-id ,key? "An identifier to distinguish concurrent spanners.")
      (springs-and-rods ,boolean? "Dummy variable for triggering
 spacing routines.")
      (stacking-dir ,ly:dir? "Stack objects in which direction?")
index f525edd69a4040cb5acbec48b052ac006e96da34..6ca25b586e69ce735effaf5bd61a2f941270a794 100644 (file)
         (height-limit . 2.0)
         (minimum-length . 1.5)
         (ratio . 0.333)
-        (spanner-id . "")
         (springs-and-rods . ,ly:spanner::set-spacing-rods)
         (stencil . ,ly:slur::print)
         (thickness . 1.1)
         (line-thickness . 0.8)
         (minimum-length . 1.5)
         (ratio . 0.25)
-        (spanner-id . "")
         (springs-and-rods . ,ly:spanner::set-spacing-rods)
         (stencil . ,ly:slur::print)
         (thickness . 1.2)
index 4df3f933405fd4a1be7ea953eae62912a295bcb5..f8c567d1fa09d50958744e22e18166b8c1ec67d5 100644 (file)
@@ -183,7 +183,7 @@ If zero, signals a beat containing varying durations.")
 Options are @code{'text} and @code{'hairpin}.")
      (span-text ,markup? "The displayed text for dynamic text
 spanners (e.g., cresc.)")
-     (spanner-id ,string? "Identifier to distinguish concurrent spanners.")
+     (spanner-id ,key? "Identifier to distinguish concurrent spanners.")
      (start-callback ,procedure? "Function to compute the negative length
 of starting grace notes.  This property can only be defined as initializer
 in @file{scm/@/define-music-types.scm}.")
index e0190eda5516c419eb6763affa58e968b082ae20..348bcd0e87228669e281cf379f5fc10332ac6396 100644 (file)
@@ -438,7 +438,6 @@ goes down).")
      . ((description . "Start or end phrasing slur.
 
 Syntax: @var{note}@code{\\(} and @var{note}@code{\\)}")
-        (spanner-id . "")
         (types . (post-event span-event event phrasing-slur-event))
         ))
 
@@ -570,7 +569,6 @@ Syntax: @code{\\skip} @var{duration}")
      . ((description . "Start or end slur.
 
 Syntax: @var{note}@code{(} and @var{note}@code{)}")
-        (spanner-id . "")
         (types . (post-event span-event event slur-event))
         ))