source file of the GNU LilyPond music typesetter
- (c) 2000--2001 Jan Nieuwenhuizen <janneke@gnu.org>
+ (c) 2000--2003 Jan Nieuwenhuizen <janneke@gnu.org>
*/
#include "engraver.hh"
#include "item.hh"
-#include "musical-request.hh"
+#include "event.hh"
#include "translator-group.hh"
class Voice_devnull_engraver : public Engraver
};
+/*
+
+ARGH .
+
+
+This really sucks.
+ */
static char const *eat_spanners[] = {
"beam",
"crescendo",
"decrescendo",
+ "rest",
"slur",
0
};
Voice_devnull_engraver::try_music (Music *m)
{
SCM s = get_property ("devNullVoice");
-#if 0
- /* No need */
- if (gh_equal_p (s, ly_symbol2scm ("never")))
- return;
-#endif
- if (gh_equal_p (s, ly_symbol2scm ("allways"))
+ if (gh_equal_p (s, ly_symbol2scm ("always"))
|| (s == SCM_EOL
- && daddy_trans_l_->id_str_.left_str (3) == "two"
+ && daddy_trans_->id_string_.left_string (3) == "two"
&& (to_boolean (get_property ("unison"))
|| to_boolean (get_property ("unisilence")))))
{
- if (Span_req *s = dynamic_cast <Span_req *> (m))
+ if (m->is_mus_type ("span-event"))
{
- SCM t = s->get_mus_property ("span-type");
+ SCM t = m->get_mus_property ("span-type");
for (char const **p = eat_spanners; *p; p++)
{
- if (t == ly_str02scm (*p))
+ if (t == scm_makfrom0str (*p))
return true;
}
}
- /* Ugh. Should eat other requests, script etc. too. */
- else if (dynamic_cast<Tie_req*> (m))
+ /* Ugh. Should eat other events, script etc. too. */
+ else if (m->is_mus_type ("tie-event"))
return true;
}
return false;
Voice_devnull_engraver::acknowledge_grob (Grob_info i)
{
SCM s = get_property ("devNullVoice");
-#if 0
- /* No need, next if will never be true */
- if (s == ly_symbol2scm ("never"))
- return;
-#endif
- if (s == ly_symbol2scm ("allways")
+ if (s == ly_symbol2scm ("always")
|| (s == SCM_EOL
- && daddy_trans_l_->id_str_.left_str (3) == "two"
- && (to_boolean (get_property ("unison"))
- || to_boolean (get_property ("unisilence")))))
+ && to_boolean (get_property ("soloADue"))
+ && ((daddy_trans_->id_string_.left_string (3) == "two"
+ && (to_boolean (get_property ("unison"))
+ || to_boolean (get_property ("unisilence"))))
+
+ /* Maybe this should be optional? */
+ || to_boolean (get_property ("othersolo")))))
+
for (char const **p = junk_interfaces; *p; p++)
- if (i.grob_l_->has_interface (ly_symbol2scm (*p)))
+ if (i.grob_->internal_has_interface (ly_symbol2scm (*p)))
{
-#if 0
- /* Ugh: virtual mmrest::suicide () ? */
- if (i.grob_l_->has_interface (ly_symbol2scm ("multi-measure-rest-interface")))
- i.grob_l_->set_grob_property ("skip-timestep", SCM_BOOL_T);
- else
- ;
-#endif
- /* Ugh, we can suicide them, but they remain living */
- i.grob_l_->suicide ();
+ i.grob_->suicide ();
return;
}
}
ENTER_DESCRIPTION(Voice_devnull_engraver,
/* descr */ "Kill off certain items and spanners if we're Voice `two' and unison or unisilence is set.",
/* creats*/ "",
-/* acks */ "grob-interface",
+/* accepts */ "general-music", /*UGH.*/
+/* acks */ "grob-interface",
/* reads */ "",
/* write */ "");