]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/voice-devnull-engraver.cc
patch::: 1.3.136.jcn2
[lilypond.git] / lily / voice-devnull-engraver.cc
index 4f82c4f4e8ea679481ae7d08958376085828cbf7..9869784a70b15e9234954a8425ffec1143660722 100644 (file)
@@ -24,11 +24,10 @@ protected:
 ADD_THIS_TRANSLATOR (Voice_devnull_engraver);
 
 static char const *eat_spanners[] = {
-  "beam-interface",
+  "beam",
+  "crescendo",
+  "decrescendo",
   "slur",
-  "tie",
-  "dynamic-interface",
-  "crescendo-interface",
   0
 };
 
@@ -48,34 +47,35 @@ Voice_devnull_engraver::try_music (Music *m)
          && (to_boolean (get_property ("unison"))
              || to_boolean (get_property ("unisilence")))))
     {
-      for (char const **p = eat_spanners; *p; p++)
+      if (Span_req *s = dynamic_cast <Span_req *> (m))
        {
-         if (Span_req *s = dynamic_cast <Span_req *> (m))
+         SCM t = s->get_mus_property ("span-type");
+         
+         for (char const **p = eat_spanners; *p; p++)
            {
-             if (scm_equal_p (s->get_mus_property ("span-type"),
-                              ly_str02scm ( *p)) == SCM_BOOL_T)
-               {
-                 return true;
-               }
+             if (t == ly_str02scm (*p))
+               return true;
            }
        }
+      /* Ugh.  Should eat other requests, script etc. too. */  
+      else if (Tie_req *t = dynamic_cast<Tie_req*> (m))
+       return true;
     }
   return false;
 }
   
 static char const *junk_interfaces[] = {
-#if 1
   "beam-interface",
-#endif
+  "dynamic-interface",
+  "hairpin-interface",
+  "multi-measure-rest-interface",
   "script-interface",
   "slur-interface",
-  "tie-interface",
   "text-interface",
   "text-item-interface",
   "text-script-interface",
-  "dynamic-interface",
-  "hairpin-interface",
   "text-spanner-interface",
+  "tie-interface",
   0
 };
 
@@ -84,7 +84,7 @@ Voice_devnull_engraver::acknowledge_grob (Grob_info i)
 {
   SCM s = get_property ("devNullVoice");
 #if 0
-  /* No need */
+  /* No need, next if will never be true */
   if (s == ly_symbol2scm ("never"))
     return;
 #endif
@@ -97,6 +97,14 @@ Voice_devnull_engraver::acknowledge_grob (Grob_info i)
     for (char const **p = junk_interfaces; *p; p++)
       if (i.elem_l_->has_interface (ly_symbol2scm (*p)))
        {
+#if 0
+         /* Ugh: virtual mmrest::suicide () ? */
+         if (i.elem_l_->has_interface (ly_symbol2scm ("multi-measure-rest-interface")))
+           i.elem_l_->set_grob_property ("skip-timestep", SCM_BOOL_T);
+         else
+           ;
+#endif   
+           /* Ugh, we can suicide them, but they remain living */
          i.elem_l_->suicide ();
          return;
        }