]> git.donarmstrong.com Git - lilypond.git/commitdiff
Implements script-accidental collision avoidance for Scripts created by the New_finge...
authorMike Solomon <mike@apollinemike.com>
Wed, 28 Dec 2011 09:08:04 +0000 (10:08 +0100)
committerMike Solomon <mike@apollinemike.com>
Wed, 28 Dec 2011 09:08:04 +0000 (10:08 +0100)
input/regression/script-accidental-collision.ly
lily/new-fingering-engraver.cc

index 39e204d037abca9877686ffeeb3f03e066b8caf6..7cf3738e8010a13f586219ba7a4c09157f6e5161 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.15.15"
+\version "2.15.24"
 
 \header {
   texidoc = "Scripts use skylines with accurate boxes to avoid accidentals.
@@ -6,16 +6,28 @@
 }
 
 {
-  ees''1^\espressivo
-  e''!1^\espressivo
-  eis''1^\espressivo
-  ees''1^\fermata
-  e''!1^\fermata
-  eis''1^\fermata
-  ees'1_\espressivo
-  e'!1_\espressivo
-  eis'1_\espressivo
-  ees'1_\fermata
-  e'!1_\fermata
-  eis'1_\fermata
+ ees''1^\espressivo
+ e''!1^\espressivo
+ eis''1^\espressivo
+ ees''1^\fermata
+ e''!1^\fermata
+ eis''1^\fermata
+ ees'1_\espressivo
+ e'!1_\espressivo
+ eis'1_\espressivo
+ ees'1_\fermata
+ e'!1_\fermata
+ eis'1_\fermata
+ <ees''^\espressivo>1
+ <e''!^\espressivo>1
+ <eis''^\espressivo>1
+ <ees''^\fermata>1
+ <e''!^\fermata>1
+ <eis''^\fermata>1
+ <ees'_\espressivo>1
+ <e'!_\espressivo>1
+ <eis'_\espressivo>1
+ <ees'_\fermata>1
+ <e'!_\fermata>1
+ <eis'_\fermata>1
 }
index 76ec02d69d37b4b83cc5fb2911fd0bf49439028f..777aaec0afda48534a21d585e13385b80f0c3835 100644 (file)
@@ -63,6 +63,7 @@ class New_fingering_engraver : public Engraver
   vector<Finger_tuple> string_numbers_;
 
   vector<Grob *> heads_;
+  vector<Grob *> accidentals_;
   Grob *stem_;
 
   void position_all ();
@@ -71,6 +72,7 @@ public:
 protected:
   void stop_translation_timestep ();
   DECLARE_ACKNOWLEDGER (rhythmic_head);
+  DECLARE_ACKNOWLEDGER (inline_accidental);
   DECLARE_ACKNOWLEDGER (stem);
   void add_fingering (Grob *, SCM,
                       vector<Finger_tuple> *,
@@ -80,6 +82,12 @@ protected:
   void position_scripts (SCM orientations, vector<Finger_tuple> *);
 };
 
+void
+New_fingering_engraver::acknowledge_inline_accidental (Grob_info inf)
+{
+  accidentals_.push_back(inf.grob ());
+}
+
 void
 New_fingering_engraver::acknowledge_rhythmic_head (Grob_info inf)
 {
@@ -342,6 +350,10 @@ New_fingering_engraver::position_all ()
     {
       Grob *script = articulations_[i].script_;
 
+      for (vsize j = 0; j < accidentals_.size (); j++)
+        Side_position_interface::add_support (script, accidentals_[j]);
+
+      accidentals_.resize (0);
       for (vsize j = heads_.size (); j--;)
         Side_position_interface::add_support (script, heads_[j]);
 
@@ -360,6 +372,7 @@ New_fingering_engraver::New_fingering_engraver ()
 }
 
 ADD_ACKNOWLEDGER (New_fingering_engraver, rhythmic_head);
+ADD_ACKNOWLEDGER (New_fingering_engraver, inline_accidental);
 ADD_ACKNOWLEDGER (New_fingering_engraver, stem);
 
 ADD_TRANSLATOR (New_fingering_engraver,