]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/phrasing-slur-engraver.cc
* lily/dots.cc (print): replace -
[lilypond.git] / lily / phrasing-slur-engraver.cc
index 749dc7232b262660d7ffe99cc8e9e5042bac742d..8b6bcd353f8ba59b5e648d1a49b1d0233d0ec36e 100644 (file)
@@ -7,7 +7,6 @@
 #include "context.hh"
 #include "directional-element-interface.hh"
 #include "engraver.hh"
-#include "event.hh"
 #include "slur.hh"
 #include "note-column.hh"
 #include "spanner.hh"
@@ -39,7 +38,7 @@ public:
 
 Phrasing_slur_engraver::Phrasing_slur_engraver ()
 {
-  events_[START] =events_[STOP] = 0;
+  events_[START] = events_[STOP] = 0;
 }
 
 bool
@@ -72,7 +71,7 @@ Phrasing_slur_engraver::try_music (Music *m)
 void
 Phrasing_slur_engraver::acknowledge_grob (Grob_info info)
 {
-  Grob *e =info.grob_;
+  Grob *e = info.grob_;
   if (Note_column::has_interface (info.grob_))
     {
       for (int i = slurs_.size (); i--; )
@@ -83,12 +82,30 @@ Phrasing_slur_engraver::acknowledge_grob (Grob_info info)
   else
     {
       /*
-       TODO: maybe take more objects?  
-       */
-      for (int i = slurs_.size (); i--; )
-       Slur::add_extra_encompass (slurs_[i], e);
-      for (int i = end_slurs_.size (); i--; )
-       Slur::add_extra_encompass (end_slurs_[i], e);
+       ugh. cut & paste from slur-engraver.cc
+      */
+      SCM inside = e->get_property ("inside-slur");
+      if (Tie::has_interface (e)
+         || Slur::has_interface (e)
+         || to_boolean (inside))
+       {
+         for (int i = slurs_.size (); i--; )
+           Slur::add_extra_encompass (slurs_[i], e);
+         for (int i = end_slurs_.size (); i--; )
+           Slur::add_extra_encompass (end_slurs_[i], e);
+       }
+      else if (inside == SCM_BOOL_F)
+       {
+         Grob *slur = slurs_.size()?slurs_[0] : 0;
+         slur =  (end_slurs_.size () && !slur)
+           ? end_slurs_[0] : slur;
+
+         if (slur)
+           {
+             e->add_offset_callback (Slur::outside_slur_callback_proc, Y_AXIS);
+             e->set_property ("slur", slur->self_scm());
+           }
+       }
     }
 }
 
@@ -96,7 +113,7 @@ void
 Phrasing_slur_engraver::finalize ()
 {
   if (slurs_.size ())
-    slurs_[0]->warning (_("unterminated slur"));
+    slurs_[0]->warning (_ ("unterminated phrasing slur"));
 }
 
 void
@@ -112,7 +129,7 @@ Phrasing_slur_engraver::process_music ()
     {
       Music *ev = events_[START];
 
-      Grob * slur = make_spanner ("Slur", events_[START]->self_scm ());
+      Grob * slur = make_spanner ("PhrasingSlur", events_[START]->self_scm ());
       Direction updown = to_dir (ev->get_property ("direction"));
       if (updown)
        set_grob_direction (slur, updown);
@@ -129,10 +146,10 @@ Phrasing_slur_engraver::stop_translation_timestep ()
 }
 
 
-ENTER_DESCRIPTION (Phrasing_slur_engraver,
+ADD_TRANSLATOR (Phrasing_slur_engraver,
 /* descr */       "Print phrasing slurs. Similar to @ref{Slur_engraver}",
 /* creats*/       "PhrasingSlur",
 /* accepts */     "phrasing-slur-event",
-/* acks  */       "note-column-interface slur-interface",
+/* acks  */       "note-column-interface tie-interface fingering-interface script-interface slur-interface",
 /* reads */       "",
 /* write */       "");