X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fthread-devnull-engraver.cc;h=19f4621f43e63eaa5849d663d348f64c02ceeded;hb=f296c9b7aa080acf9edccdb984d058f9a7a92ae1;hp=8a99b90bdb874c09d158d9a895725beaf973bc2f;hpb=13233115f073866390b6222eda6ae1c64bbe3c87;p=lilypond.git diff --git a/lily/thread-devnull-engraver.cc b/lily/thread-devnull-engraver.cc index 8a99b90bdb..19f4621f43 100644 --- a/lily/thread-devnull-engraver.cc +++ b/lily/thread-devnull-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 2000 Jan Nieuwenhuizen + (c) 2000--2002 Jan Nieuwenhuizen */ #include "engraver.hh" @@ -14,29 +14,50 @@ class Thread_devnull_engraver : public Engraver { public: - VIRTUAL_COPY_CONS (Translator); + TRANSLATOR_DECLARATIONS(Thread_devnull_engraver); protected: virtual void acknowledge_grob (Grob_info); }; -ADD_THIS_TRANSLATOR (Thread_devnull_engraver); + void Thread_devnull_engraver::acknowledge_grob (Grob_info i) { SCM s = get_property ("devNullThread"); + #if 0 - /* No need */ - if (gh_equal_p (s, ly_symbol2scm ("never"))) + /* No need, next if will never be true */ + if (s == ly_symbol2scm ("never")) return; #endif - if (gh_equal_p (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")))) - i.elem_l_->suicide (); + && 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"))))) + { + i.grob_->suicide (); + } } +Thread_devnull_engraver::Thread_devnull_engraver(){} + +ENTER_DESCRIPTION(Thread_devnull_engraver, +/* descr */ "Kill elements whenever we are Voice called `two' and either +unison, unisilence or soloADue is set.@footnote{On unix systems, the +file @file{/dev/null} is special device: anything written to it is +discarded.}. This engraver works closely together with the part +combiner. When the part combiner notices that two threads are +identical, it tells the @code{Thread_devnull_engraver} to discard +everything in the second thread. +", +/* creats*/ "", +/* acks */ "grob-interface", +/* reads */ "", +/* write */ "");